@etherisc/gif-next 0.0.2-6f2f76e-746 → 0.0.2-7143611-252

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 (372) hide show
  1. package/README.md +180 -11
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +168 -28
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +610 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +121 -28
  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 +74 -181
  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 +447 -60
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +519 -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/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
  46. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
  47. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1119 -0
  48. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  49. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  50. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +224 -1890
  52. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{service/ServiceBase.sol/ServiceBase.json → IInstanceService.sol/IInstanceService.json} +182 -61
  54. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  55. package/artifacts/contracts/instance/Instance.sol/Instance.json +2332 -1146
  56. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
  58. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1257 -0
  60. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +703 -0
  62. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +424 -0
  64. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +481 -0
  66. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  67. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  68. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  69. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  70. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  71. package/artifacts/contracts/instance/{module/lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  72. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  74. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  75. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  76. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  77. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  78. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  79. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  80. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  81. package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IDistribution.sol/IDistribution.json} +2 -2
  82. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  84. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  86. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/{pool/IPoolModule.sol/IPool.json → ISetup.sol/ISetup.json} +2 -2
  88. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  89. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  90. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +401 -65
  92. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +177 -75
  94. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/{ComponentServiceBase.sol/ComponentServiceBase.json → IDistributionService.sol/IDistributionService.json} +204 -58
  96. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +235 -50
  98. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +325 -51
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +472 -37
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +872 -0
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  107. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  108. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.json +564 -123
  110. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  111. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1261 -0
  112. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  113. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +508 -0
  114. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  115. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  116. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  117. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  118. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  119. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  120. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  121. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  122. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  123. package/artifacts/contracts/{instance/service → shared}/IService.sol/IService.json +175 -54
  124. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  126. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  127. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  128. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  129. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  130. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  132. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  133. package/artifacts/contracts/{instance/InstanceBase.sol/InstanceBase.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +204 -75
  134. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  135. package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
  136. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  137. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  138. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  139. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  140. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  141. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  142. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  143. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  144. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  145. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  146. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  147. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +44 -10
  148. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestService.sol/TestService.json +283 -62
  150. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  152. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  154. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
  156. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  157. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  158. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  159. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  162. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  163. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/Fee.sol/FeeLib.json +52 -13
  165. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  166. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  167. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  169. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  170. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  171. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  172. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  173. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  175. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  176. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  177. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  178. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  179. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  180. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  181. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  183. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  185. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  186. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  187. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  188. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  189. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  191. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  193. package/contracts/components/BaseComponent.sol +20 -23
  194. package/contracts/components/Distribution.sol +166 -0
  195. package/contracts/components/IBaseComponent.sol +8 -3
  196. package/contracts/components/IDistributionComponent.sol +43 -0
  197. package/contracts/components/IPoolComponent.sol +14 -9
  198. package/contracts/components/IProductComponent.sol +25 -9
  199. package/contracts/components/Pool.sol +115 -30
  200. package/contracts/components/Product.sol +212 -32
  201. package/contracts/experiment/cloning/Cloner.sol +47 -0
  202. package/contracts/instance/AccessManagedSimple.sol +114 -0
  203. package/contracts/instance/AccessManagerSimple.sol +682 -0
  204. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  205. package/contracts/instance/IInstance.sol +17 -42
  206. package/contracts/instance/IInstanceService.sol +17 -0
  207. package/contracts/instance/Instance.sol +420 -50
  208. package/contracts/instance/InstanceAccessManager.sol +288 -0
  209. package/contracts/instance/InstanceReader.sol +280 -0
  210. package/contracts/instance/InstanceService.sol +102 -0
  211. package/contracts/instance/InstanceServiceManager.sol +56 -0
  212. package/contracts/instance/base/ComponentServiceBase.sol +49 -0
  213. package/contracts/instance/base/IInstanceBase.sol +23 -0
  214. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  215. package/contracts/instance/base/ILifecycle.sol +30 -0
  216. package/contracts/instance/base/KeyValueStore.sol +172 -0
  217. package/contracts/instance/{module/lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +51 -40
  218. package/contracts/instance/module/IAccess.sol +38 -0
  219. package/contracts/instance/module/IBundle.sol +19 -0
  220. package/contracts/instance/module/IDistribution.sol +39 -0
  221. package/contracts/instance/module/IPolicy.sol +45 -0
  222. package/contracts/instance/module/IRisk.sol +11 -0
  223. package/contracts/instance/module/ISetup.sol +43 -0
  224. package/contracts/instance/module/ITreasury.sol +23 -0
  225. package/contracts/instance/service/ComponentOwnerService.sol +244 -98
  226. package/contracts/instance/service/IComponentOwnerService.sol +1 -3
  227. package/contracts/instance/service/IDistributionService.sol +12 -0
  228. package/contracts/instance/service/IPoolService.sol +8 -1
  229. package/contracts/instance/service/IProductService.sol +56 -7
  230. package/contracts/registry/ChainNft.sol +80 -37
  231. package/contracts/registry/IRegistry.sol +60 -25
  232. package/contracts/registry/IRegistryService.sol +35 -0
  233. package/contracts/registry/ITransferInterceptor.sol +6 -0
  234. package/contracts/registry/Registry.sol +360 -267
  235. package/contracts/registry/RegistryService.sol +439 -0
  236. package/contracts/registry/RegistryServiceManager.sol +64 -0
  237. package/contracts/shared/ContractDeployerLib.sol +72 -0
  238. package/contracts/shared/INftOwnable.sol +22 -0
  239. package/contracts/shared/IRegisterable.sol +8 -15
  240. package/contracts/{instance/service → shared}/IService.sol +3 -3
  241. package/contracts/shared/IVersionable.sol +55 -11
  242. package/contracts/shared/NftOwnable.sol +136 -0
  243. package/contracts/shared/ProxyManager.sol +94 -0
  244. package/contracts/shared/Registerable.sol +62 -59
  245. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  246. package/contracts/shared/Service.sol +54 -0
  247. package/contracts/shared/TokenHandler.sol +27 -0
  248. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  249. package/contracts/shared/Versionable.sol +113 -55
  250. package/contracts/test/TestFee.sol +2 -2
  251. package/contracts/test/TestRegisterable.sol +5 -6
  252. package/contracts/test/TestRoleId.sol +2 -2
  253. package/contracts/test/TestService.sol +5 -13
  254. package/contracts/test/Usdc.sol +26 -0
  255. package/contracts/types/DistributorType.sol +55 -0
  256. package/contracts/types/Fee.sol +10 -5
  257. package/contracts/types/Key32.sol +50 -0
  258. package/contracts/types/NftId.sol +16 -1
  259. package/contracts/types/NumberId.sol +52 -0
  260. package/contracts/types/ObjectType.sol +51 -14
  261. package/contracts/types/Referral.sol +85 -0
  262. package/contracts/types/RiskId.sol +43 -0
  263. package/contracts/types/RoleId.sol +57 -11
  264. package/contracts/types/StateId.sol +8 -2
  265. package/contracts/types/Timestamp.sol +7 -3
  266. package/contracts/types/UFixed.sol +144 -25
  267. package/contracts/types/Version.sol +13 -1
  268. package/package.json +4 -3
  269. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  270. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  271. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +0 -4
  272. package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +0 -50
  273. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  274. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  275. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  276. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  277. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  278. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  279. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  280. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -276
  281. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  282. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  283. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -276
  284. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  285. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  286. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  287. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
  288. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  289. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
  290. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  291. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  292. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  293. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  294. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  295. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  296. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  297. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  298. package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  299. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  300. package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  301. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  302. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  303. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
  304. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  305. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
  306. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  307. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  308. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
  309. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  310. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
  311. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  312. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  313. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -10
  314. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  315. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
  316. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  317. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  318. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -533
  319. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  320. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  321. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  322. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -533
  323. package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  324. package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +0 -4
  325. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  326. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -471
  327. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  328. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -673
  329. package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  330. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  331. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  332. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  333. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  334. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  335. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  336. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  337. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  338. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  339. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  340. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  341. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -453
  342. package/contracts/experiment/statemachine/README.md +0 -112
  343. package/contracts/instance/IInstanceLinked.sol +0 -8
  344. package/contracts/instance/IServiceLinked.sol +0 -12
  345. package/contracts/instance/InstanceBase.sol +0 -71
  346. package/contracts/instance/module/access/Access.sol +0 -149
  347. package/contracts/instance/module/access/IAccess.sol +0 -53
  348. package/contracts/instance/module/bundle/BundleModule.sol +0 -228
  349. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  350. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  351. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  352. package/contracts/instance/module/component/ComponentModule.sol +0 -103
  353. package/contracts/instance/module/component/IComponent.sol +0 -53
  354. package/contracts/instance/module/lifecycle/ILifecycle.sol +0 -47
  355. package/contracts/instance/module/policy/IPolicy.sol +0 -60
  356. package/contracts/instance/module/policy/PolicyModule.sol +0 -84
  357. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  358. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  359. package/contracts/instance/module/risk/IRisk.sol +0 -10
  360. package/contracts/instance/module/risk/RiskModule.sol +0 -8
  361. package/contracts/instance/module/treasury/ITreasury.sol +0 -103
  362. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  363. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
  364. package/contracts/instance/service/ComponentServiceBase.sol +0 -41
  365. package/contracts/instance/service/PoolService.sol +0 -123
  366. package/contracts/instance/service/ProductService.sol +0 -355
  367. package/contracts/instance/service/ServiceBase.sol +0 -39
  368. package/contracts/registry/IChainNft.sol +0 -21
  369. package/contracts/registry/IRegistryLinked.sol +0 -8
  370. package/contracts/shared/IOwnable.sol +0 -6
  371. package/contracts/test/TestPool.sol +0 -22
  372. package/contracts/test/TestProduct.sol +0 -44
@@ -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
+ }
@@ -1,64 +1,74 @@
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, 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
23
  import {Fee} from "../../types/Fee.sol";
24
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
 
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
+
36
53
  string public constant NAME = "ComponentOwnerService";
37
54
 
38
55
  modifier onlyRegisteredComponent(IBaseComponent component) {
39
- NftId nftId = _registry.getNftId(address(component));
56
+ NftId nftId = getRegistry().getNftId(address(component));
40
57
  require(nftId.gtz(), "ERROR:COS-001:COMPONENT_UNKNOWN");
41
58
  _;
42
59
  }
43
60
 
44
61
  constructor(
45
62
  address registry,
46
- NftId registryNftId
47
- ) ServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
63
+ NftId registryNftId,
64
+ address initialOwner
65
+ )
48
66
  {
49
-
67
+ _initializeService(registry, initialOwner);
68
+ _registerInterface(type(IComponentOwnerService).interfaceId);
50
69
  }
51
70
 
52
- function getVersion()
53
- public
54
- pure
55
- virtual override (IVersionable, Versionable)
56
- returns(Version)
57
- {
58
- return VersionLib.toVersion(3,0,0);
59
- }
60
-
61
- function getName() external pure override returns(string memory name) {
71
+ function getName() public pure override(IService, Service) returns(string memory name) {
62
72
  return NAME;
63
73
  }
64
74
 
@@ -71,101 +81,237 @@ contract ComponentOwnerService is
71
81
  if (cType == POOL()) {
72
82
  return POOL_OWNER_ROLE();
73
83
  }
84
+ if (cType == DISTRIBUTION()) {
85
+ return DISTRIBUTION_OWNER_ROLE();
86
+ }
74
87
  if (cType == ORACLE()) {
75
88
  return ORACLE_OWNER_ROLE();
76
89
  }
77
90
  }
78
91
 
79
- function register(
80
- IBaseComponent component
81
- ) external override returns (NftId nftId) {
82
- address initialOwner = component.getOwner();
83
- require(
84
- msg.sender == address(component),
85
- "ERROR:COS-003:NOT_COMPONENT"
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
86
124
  );
125
+ }
87
126
 
88
- IInstance instance = component.getInstance();
89
- ObjectType objectType = component.getType();
90
- RoleId typeRole = getRoleForType(objectType);
91
- require(
92
- instance.hasRole(typeRole, initialOwner),
93
- "ERROR:CMP-004:TYPE_ROLE_MISSING"
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
94
154
  );
155
+ }
95
156
 
96
- nftId = _registry.register(address(component));
97
- IERC20Metadata token = component.getToken();
98
-
99
- instance.registerComponent(
100
- nftId,
101
- objectType,
102
- token);
103
-
104
- address wallet = component.getWallet();
105
-
106
- // component type specific registration actions
107
- if (component.getType() == PRODUCT()) {
108
- IProductComponent product = IProductComponent(address(component));
109
- NftId poolNftId = product.getPoolNftId();
110
- require(poolNftId.gtz(), "ERROR:CMP-005:POOL_UNKNOWN");
111
- // validate pool token and product token are same
112
-
113
- // register with tresury
114
- // implement and add validation
115
- NftId distributorNftId = zeroNftId();
116
- instance.registerProduct(
117
- nftId,
118
- distributorNftId,
119
- poolNftId,
120
- token,
121
- wallet,
122
- product.getPolicyFee(),
123
- product.getProcessingFee()
124
- );
125
- } else if (component.getType() == POOL()) {
126
- IPoolComponent pool = IPoolComponent(address(component));
127
-
128
- // register with pool
129
- instance.registerPool(
130
- nftId,
131
- pool.isVerifying(),
132
- pool.getCollateralizationLevel());
133
-
134
- // register with tresury
135
- instance.registerPool(
136
- nftId,
137
- wallet,
138
- pool.getStakingFee(),
139
- pool.getPerformanceFee());
140
- }
141
- // TODO add distribution
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
+ // }
142
178
  }
143
179
 
144
180
  function lock(
145
181
  IBaseComponent component
146
182
  ) external override onlyRegisteredComponent(component) {
183
+ // TODO use msg.sender to get component and get instance via registered parent nft id
147
184
  IInstance instance = component.getInstance();
148
- IComponent.ComponentInfo memory info = instance.getComponentInfo(
149
- component.getNftId()
150
- );
151
- require(info.nftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
152
-
153
- info.state = PAUSED();
154
- // setComponentInfo checks for valid state changes
155
- instance.setComponentInfo(info);
185
+ NftId nftId = component.getNftId();
186
+ Key32 key = nftId.toKey32(COMPONENT());
187
+ // instance.updateState(key, PAUSED());
156
188
  }
157
189
 
158
190
  function unlock(
159
191
  IBaseComponent component
160
192
  ) external override onlyRegisteredComponent(component) {
193
+ // TODO use msg.sender to get component and get instance via registered parent nft id
161
194
  IInstance instance = component.getInstance();
162
- IComponent.ComponentInfo memory info = instance.getComponentInfo(
163
- component.getNftId()
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
164
266
  );
165
- require(info.nftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
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
+ }
166
291
 
167
- info.state = ACTIVE();
168
- // setComponentInfo checks for valid state changes
169
- instance.setComponentInfo(info);
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
+ );
170
316
  }
171
- }
317
+ }
@@ -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
+ }
@@ -3,21 +3,28 @@ pragma solidity ^0.8.19;
3
3
 
4
4
  import {NftId} from "../../types/NftId.sol";
5
5
  import {Fee} from "../../types/Fee.sol";
6
- import {IService} from "./IService.sol";
6
+ import {IService} from "../../shared/IService.sol";
7
7
 
8
8
  interface IPoolService is IService {
9
9
  function setFees(
10
+ Fee memory poolFee,
10
11
  Fee memory stakingFee,
11
12
  Fee memory performanceFee
12
13
  ) external;
13
14
 
14
15
  function createBundle(
15
16
  address owner,
17
+ Fee memory fee,
16
18
  uint256 amount,
17
19
  uint256 lifetime,
18
20
  bytes calldata filter
19
21
  ) external returns(NftId bundleNftId);
20
22
 
23
+ function setBundleFee(
24
+ NftId bundleNftId,
25
+ Fee memory fee
26
+ ) external;
27
+
21
28
  // function fundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
22
29
 
23
30
  // function defundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
@@ -1,27 +1,76 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {IRisk} from "../module/IRisk.sol";
5
+ import {IService} from "../../shared/IService.sol";
6
+
4
7
  import {NftId} from "../../types/NftId.sol";
8
+ import {ReferralId} from "../../types/Referral.sol";
9
+ import {RiskId} from "../../types/RiskId.sol";
10
+ import {StateId} from "../../types/StateId.sol";
5
11
  import {Timestamp} from "../../types/Timestamp.sol";
6
12
  import {UFixed} from "../../types/UFixed.sol";
7
13
  import {Fee} from "../../types/Fee.sol";
8
- import {IService} from "./IService.sol";
9
14
 
10
15
  interface IProductService is IService {
11
16
  function setFees(
12
- Fee memory policyFee,
17
+ Fee memory productFee,
13
18
  Fee memory processingFee
14
19
  ) external;
15
20
 
21
+ function createRisk(
22
+ RiskId riskId,
23
+ bytes memory data
24
+ ) external;
25
+
26
+
27
+ function setRiskInfo(
28
+ RiskId riskId,
29
+ IRisk.RiskInfo memory data
30
+ ) external;
31
+
32
+
33
+ function updateRiskState(
34
+ RiskId riskId,
35
+ StateId state
36
+ ) external;
37
+
38
+
39
+ function calculatePremium(
40
+ RiskId riskId,
41
+ uint256 sumInsuredAmount,
42
+ uint256 lifetime,
43
+ bytes memory applicationData,
44
+ NftId bundleNftId,
45
+ ReferralId referralId
46
+ )
47
+ external
48
+ view
49
+ returns (
50
+ uint256 premiumAmount,
51
+ uint256 productFeeAmount,
52
+ uint256 poolFeeAmount,
53
+ uint256 bundleFeeAmount,
54
+ uint256 distributionFeeAmount
55
+ );
56
+
57
+
16
58
  function createApplication(
17
59
  address applicationOwner,
60
+ RiskId riskId,
18
61
  uint256 sumInsuredAmount,
19
- uint256 premiumAmount,
20
62
  uint256 lifetime,
21
- NftId bundleNftId
63
+ bytes memory applicationData,
64
+ NftId bundleNftId,
65
+ ReferralId referralId
22
66
  ) external returns (NftId nftId);
23
67
 
24
- // function revoke(unit256 nftId) external;
68
+ /**
69
+ * @dev revokes the application represented by {policyNftId}.
70
+ * an application can only be revoked in applied state.
71
+ * only the application holder may revoke an application.
72
+ */
73
+ function revoke(NftId policyNftId) external;
25
74
 
26
75
  /**
27
76
  * @dev underwrites the policy represented by {policyNftId}.
@@ -38,9 +87,9 @@ interface IProductService is IService {
38
87
  // function decline(uint256 nftId) external;
39
88
  // function expire(uint256 nftId) external;
40
89
 
41
- function collectPremium(NftId nftId, Timestamp activateAt) external;
90
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external;
42
91
 
43
- function activate(NftId nftId, Timestamp activateAt) external;
92
+ function activate(NftId policyNftId, Timestamp activateAt) external;
44
93
 
45
94
 
46
95
  function close(NftId nftId) external;