@etherisc/gif-next 0.0.2-efef0ea-320 → 0.0.2-f02157b-803

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 (368) hide show
  1. package/README.md +144 -26
  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 +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +259 -54
  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 +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -188
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -238
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -213
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +292 -96
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +388 -78
  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 +116 -1813
  52. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{base/InstanceBase.sol/InstanceBase.json → IInstanceService.sol/IInstanceService.json} +127 -169
  54. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  55. package/artifacts/contracts/instance/Instance.sol/Instance.json +2238 -1251
  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 +1 -1
  65. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +144 -50
  66. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +1 -1
  68. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  70. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/IService.sol/IService.json +120 -40
  73. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
  75. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  76. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  77. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +1 -1
  78. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +140 -59
  79. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  80. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  81. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  82. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  83. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  84. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  85. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  86. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  87. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  88. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  89. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  90. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  91. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  92. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  93. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +295 -86
  95. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +123 -62
  97. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  98. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +120 -40
  99. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +120 -40
  101. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +120 -40
  103. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  104. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  105. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  106. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +190 -51
  107. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  108. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +872 -0
  109. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  110. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  111. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  112. package/artifacts/contracts/registry/Registry.sol/Registry.json +380 -139
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  114. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1261 -0
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  116. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +504 -0
  117. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  118. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  119. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  120. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  121. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  122. package/artifacts/contracts/{instance/module/component/ComponentModule.sol/ComponentModule.json → shared/INftOwnable.sol/INftOwnable.json} +67 -57
  123. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  125. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  126. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -2
  127. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  128. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  129. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  130. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  131. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  133. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  134. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  135. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  136. package/artifacts/contracts/shared/{Proxy.sol/ProxyWithProxyAdminGetter.json → UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json} +4 -4
  137. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +4 -27
  139. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  140. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  141. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  142. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  143. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  144. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  145. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestService.sol/TestService.json +203 -69
  147. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  149. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  151. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +29 -36
  153. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  154. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  155. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  156. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  157. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  159. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  160. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
  162. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  163. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  164. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  166. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  167. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  168. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  169. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  170. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  172. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  173. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  174. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  176. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  178. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  180. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  182. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  184. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  186. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  188. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  190. package/contracts/components/BaseComponent.sol +20 -28
  191. package/contracts/components/Distribution.sol +54 -20
  192. package/contracts/components/IBaseComponent.sol +8 -3
  193. package/contracts/components/IDistributionComponent.sol +2 -6
  194. package/contracts/components/IPoolComponent.sol +2 -11
  195. package/contracts/components/IProductComponent.sol +4 -7
  196. package/contracts/components/Pool.sol +100 -76
  197. package/contracts/components/Product.sol +111 -41
  198. package/contracts/experiment/cloning/Cloner.sol +47 -0
  199. package/contracts/instance/AccessManagedSimple.sol +114 -0
  200. package/contracts/instance/AccessManagerSimple.sol +682 -0
  201. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  202. package/contracts/instance/IInstance.sol +17 -42
  203. package/contracts/instance/IInstanceService.sol +17 -0
  204. package/contracts/instance/Instance.sol +421 -59
  205. package/contracts/instance/InstanceAccessManager.sol +288 -0
  206. package/contracts/instance/InstanceReader.sol +280 -0
  207. package/contracts/instance/InstanceService.sol +102 -0
  208. package/contracts/instance/InstanceServiceManager.sol +56 -0
  209. package/contracts/instance/base/ComponentServiceBase.sol +13 -6
  210. package/contracts/instance/base/IInstanceBase.sol +3 -2
  211. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  212. package/contracts/instance/base/ILifecycle.sol +3 -3
  213. package/contracts/instance/base/KeyValueStore.sol +49 -38
  214. package/contracts/instance/base/Lifecycle.sol +1 -1
  215. package/contracts/instance/base/ServiceBase.sol +20 -13
  216. package/contracts/instance/module/IAccess.sol +38 -0
  217. package/contracts/instance/module/IBundle.sol +19 -0
  218. package/contracts/instance/module/IDistribution.sol +39 -0
  219. package/contracts/instance/module/IPolicy.sol +45 -0
  220. package/contracts/instance/module/IRisk.sol +11 -0
  221. package/contracts/instance/module/ISetup.sol +43 -0
  222. package/contracts/instance/module/ITreasury.sol +23 -0
  223. package/contracts/instance/service/ComponentOwnerService.sol +231 -71
  224. package/contracts/instance/service/IComponentOwnerService.sol +0 -2
  225. package/contracts/instance/service/IProductService.sol +2 -2
  226. package/contracts/registry/ChainNft.sol +80 -37
  227. package/contracts/registry/IRegistry.sol +28 -28
  228. package/contracts/registry/IRegistryService.sol +35 -0
  229. package/contracts/registry/ITransferInterceptor.sol +6 -0
  230. package/contracts/registry/Registry.sol +313 -271
  231. package/contracts/registry/RegistryService.sol +439 -0
  232. package/contracts/registry/RegistryServiceManager.sol +64 -0
  233. package/contracts/shared/ContractDeployerLib.sol +72 -0
  234. package/contracts/shared/INftOwnable.sol +22 -0
  235. package/contracts/shared/IRegisterable.sol +8 -15
  236. package/contracts/shared/IVersionable.sol +46 -15
  237. package/contracts/shared/NftOwnable.sol +136 -0
  238. package/contracts/shared/ProxyManager.sol +94 -0
  239. package/contracts/shared/Registerable.sol +62 -59
  240. package/contracts/shared/TokenHandler.sol +27 -0
  241. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  242. package/contracts/shared/Versionable.sol +110 -62
  243. package/contracts/test/TestFee.sol +2 -2
  244. package/contracts/test/TestRegisterable.sol +5 -6
  245. package/contracts/test/TestRoleId.sol +1 -1
  246. package/contracts/test/TestService.sol +5 -11
  247. package/contracts/types/DistributorType.sol +55 -0
  248. package/contracts/types/Fee.sol +3 -3
  249. package/contracts/types/Key32.sol +8 -3
  250. package/contracts/types/NumberId.sol +52 -0
  251. package/contracts/types/ObjectType.sol +35 -14
  252. package/contracts/types/Referral.sol +85 -0
  253. package/contracts/types/RoleId.sol +53 -9
  254. package/contracts/types/StateId.sol +1 -1
  255. package/contracts/types/Timestamp.sol +7 -3
  256. package/contracts/types/UFixed.sol +128 -12
  257. package/contracts/types/Version.sol +1 -0
  258. package/package.json +4 -3
  259. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  260. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  261. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  262. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  263. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  264. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  265. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  266. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +0 -10
  267. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  268. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  269. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  270. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  271. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  272. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  273. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  274. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  275. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  276. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  277. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  278. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -117
  279. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  280. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  281. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  282. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  283. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  284. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  285. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  286. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -284
  287. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  288. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
  289. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  290. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  291. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  292. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -144
  293. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  294. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -144
  295. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  296. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  297. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  298. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  299. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  300. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  301. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  302. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -511
  303. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  304. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  305. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  306. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -511
  307. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  308. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -507
  309. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  310. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -630
  311. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  312. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -945
  313. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  314. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  315. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  316. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  317. package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.dbg.json +0 -4
  318. package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.json +0 -724
  319. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  320. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  321. package/artifacts/contracts/shared/Proxy.sol/ProxyDeployer.dbg.json +0 -4
  322. package/artifacts/contracts/shared/Proxy.sol/ProxyDeployer.json +0 -248
  323. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +0 -4
  324. package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.dbg.json +0 -4
  325. package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.json +0 -228
  326. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  327. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -405
  328. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  329. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -578
  330. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  331. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -575
  332. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  333. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  334. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  335. package/contracts/experiment/statemachine/README.md +0 -112
  336. package/contracts/instance/IInstanceLinked.sol +0 -8
  337. package/contracts/instance/base/InstanceBase.sol +0 -91
  338. package/contracts/instance/base/ModuleBase.sol +0 -57
  339. package/contracts/instance/module/access/Access.sol +0 -149
  340. package/contracts/instance/module/access/IAccess.sol +0 -53
  341. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  342. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  343. package/contracts/instance/module/component/ComponentModule.sol +0 -70
  344. package/contracts/instance/module/component/IComponent.sol +0 -28
  345. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  346. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  347. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  348. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  349. package/contracts/instance/module/pool/IPoolModule.sol +0 -40
  350. package/contracts/instance/module/pool/PoolModule.sol +0 -90
  351. package/contracts/instance/module/risk/IRisk.sol +0 -26
  352. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  353. package/contracts/instance/module/treasury/ITreasury.sol +0 -82
  354. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  355. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -138
  356. package/contracts/instance/service/DistributionService.sol +0 -59
  357. package/contracts/instance/service/PoolService.sol +0 -149
  358. package/contracts/instance/service/ProductService.sol +0 -509
  359. package/contracts/registry/IChainNft.sol +0 -21
  360. package/contracts/registry/IRegistryLinked.sol +0 -8
  361. package/contracts/registry/RegistryUpgradeable.sol +0 -488
  362. package/contracts/shared/IOwnable.sol +0 -6
  363. package/contracts/shared/Proxy.sol +0 -94
  364. package/contracts/shared/VersionableUpgradeable.sol +0 -136
  365. package/contracts/test/TestDistribution.sol +0 -21
  366. package/contracts/test/TestPool.sol +0 -25
  367. package/contracts/test/TestProduct.sol +0 -72
  368. package/contracts/types/ReferralId.sol +0 -48
@@ -1,14 +1,14 @@
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 {ITreasuryModule} from "../module/treasury/ITreasury.sol";
10
- import {TreasuryModule} from "../module/treasury/TreasuryModule.sol";
11
- 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";
12
12
  import {IBaseComponent} from "../../components/IBaseComponent.sol";
13
13
  import {IPoolComponent} from "../../components/IPoolComponent.sol";
14
14
  import {IKeyValueStore} from "../../instance/base/IKeyValueStore.sol";
@@ -16,18 +16,23 @@ import {IVersionable} from "../../shared/IVersionable.sol";
16
16
  import {Versionable} from "../../shared/Versionable.sol";
17
17
 
18
18
  import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
19
- import {ObjectType, COMPONENT, PRODUCT, ORACLE, POOL, DISTRIBUTION} from "../../types/ObjectType.sol";
19
+ import {ObjectType, TOKEN, COMPONENT, PRODUCT, ORACLE, POOL, DISTRIBUTION} from "../../types/ObjectType.sol";
20
20
  import {StateId, ACTIVE, PAUSED} from "../../types/StateId.sol";
21
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
 
26
27
  import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
27
28
  import {IPoolComponent} from "../../components/IPoolComponent.sol";
28
29
  import {IProductComponent} from "../../components/IProductComponent.sol";
29
- import {ServiceBase} from "../base/ServiceBase.sol";
30
+ import {IService} from "../base/IService.sol";
30
31
  import {IComponentOwnerService} from "./IComponentOwnerService.sol";
32
+ import {ServiceBase} from "../base/ServiceBase.sol";
33
+ // import {IPool, IPoolModule} from "../module/IPoolModule.sol";
34
+
35
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
31
36
 
32
37
  contract ComponentOwnerService is
33
38
  ServiceBase,
@@ -35,32 +40,35 @@ contract ComponentOwnerService is
35
40
  {
36
41
  using NftIdLib for NftId;
37
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
+
38
53
  string public constant NAME = "ComponentOwnerService";
39
54
 
40
55
  modifier onlyRegisteredComponent(IBaseComponent component) {
41
- NftId nftId = _registry.getNftId(address(component));
56
+ NftId nftId = getRegistry().getNftId(address(component));
42
57
  require(nftId.gtz(), "ERROR:COS-001:COMPONENT_UNKNOWN");
43
58
  _;
44
59
  }
45
60
 
46
61
  constructor(
47
62
  address registry,
48
- NftId registryNftId
49
- ) ServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
63
+ NftId registryNftId,
64
+ address initialOwner
65
+ )
50
66
  {
51
-
67
+ _initializeServiceBase(registry, registryNftId, initialOwner);
68
+ _registerInterface(type(IComponentOwnerService).interfaceId);
52
69
  }
53
70
 
54
- function getVersion()
55
- public
56
- pure
57
- virtual override (IVersionable, Versionable)
58
- returns(Version)
59
- {
60
- return VersionLib.toVersion(3,0,0);
61
- }
62
-
63
- function getName() external pure override returns(string memory name) {
71
+ function getName() public pure override(IService, ServiceBase) returns(string memory name) {
64
72
  return NAME;
65
73
  }
66
74
 
@@ -81,58 +89,92 @@ contract ComponentOwnerService is
81
89
  }
82
90
  }
83
91
 
84
- function register(
85
- IBaseComponent component
86
- ) external override returns (NftId nftId) {
87
- address initialOwner = component.getOwner();
88
- require(
89
- msg.sender == address(component),
90
- "ERROR:COS-003:NOT_COMPONENT"
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
91
124
  );
125
+ }
92
126
 
93
- IInstance instance = component.getInstance();
94
- ObjectType objectType = component.getType();
95
- RoleId typeRole = getRoleForType(objectType);
96
- require(
97
- instance.hasRole(typeRole, initialOwner),
98
- "ERROR:CMP-004:TYPE_ROLE_MISSING"
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
99
154
  );
155
+ }
100
156
 
101
- nftId = _registry.register(address(component));
102
- IERC20Metadata token = component.getToken();
103
-
104
- instance.registerComponent(
105
- nftId,
106
- token,
107
- component.getWallet());
108
-
109
- // component type specific registration actions
110
- if (component.getType() == PRODUCT()) {
111
- IProductComponent product = IProductComponent(address(component));
112
-
113
- NftId poolNftId = product.getPoolNftId();
114
- require(poolNftId.gtz(), "ERROR:CMP-005:POOL_UNKNOWN");
115
- IPoolComponent pool = IPoolComponent(_registry.getObjectInfo(poolNftId).objectAddress);
116
-
117
- NftId distributionNftId = product.getDistributionNftId();
118
- IDistributionComponent distribution = IDistributionComponent(_registry.getObjectInfo(distributionNftId).objectAddress);
119
-
120
- // register with tresury
121
- instance.registerProductSetup(
122
- product,
123
- pool,
124
- distribution
125
- );
126
- } else if (component.getType() == POOL()) {
127
- IPoolComponent pool = IPoolComponent(address(component));
128
-
129
- // register with pool
130
- instance.registerPool(
131
- nftId,
132
- pool.isVerifying(),
133
- pool.getCollateralizationLevel());
134
- }
135
- // TODO add compensation
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
+ // }
136
178
  }
137
179
 
138
180
  function lock(
@@ -142,7 +184,7 @@ contract ComponentOwnerService is
142
184
  IInstance instance = component.getInstance();
143
185
  NftId nftId = component.getNftId();
144
186
  Key32 key = nftId.toKey32(COMPONENT());
145
- instance.updateState(key, PAUSED());
187
+ // instance.updateState(key, PAUSED());
146
188
  }
147
189
 
148
190
  function unlock(
@@ -152,6 +194,124 @@ contract ComponentOwnerService is
152
194
  IInstance instance = component.getInstance();
153
195
  NftId nftId = component.getNftId();
154
196
  Key32 key = nftId.toKey32(COMPONENT());
155
- instance.updateState(key, ACTIVE());
197
+ // instance.updateState(key, ACTIVE());
198
+ }
199
+
200
+ // Internals
201
+
202
+ function _registerProduct(
203
+ NftId nftId,
204
+ NftId instanceNftId,
205
+ IInstance instance,
206
+ bytes memory data
207
+ )
208
+ internal
209
+ {
210
+ // TODO change treasury info to product setup info
211
+ (ISetup.ProductSetupInfo memory info) = abi.decode(data, (ISetup.ProductSetupInfo));
212
+ // (
213
+ // ITreasury.TreasuryInfo memory info,
214
+ // address wallet
215
+ // ) = abi.decode(data, (ITreasury.TreasuryInfo, address));
216
+
217
+ // IRegistry _registry = getRegistry();
218
+
219
+ // if(wallet == address(0)) {
220
+ // revert WalletIsZero();
221
+ // }
222
+
223
+ // IRegistry.ObjectInfo memory tokenInfo = _registry.getObjectInfo(address(info.token));
224
+
225
+ // if(tokenInfo.objectType != TOKEN()) {
226
+ // revert InvalidToken();
227
+ // }
228
+
229
+ // IRegistry.ObjectInfo memory poolInfo = _registry.getObjectInfo(info.poolNftId);
230
+
231
+ // if(poolInfo.objectType != POOL()) {
232
+ // revert InvalidPool();
233
+ // }
234
+
235
+ // if(poolInfo.parentNftId != instanceNftId) {
236
+ // revert InvalidPoolsInstance();
237
+ // }
238
+ // // TODO pool have the same token
239
+ // //ITreasury.PoolSetup memory poolSetup = instance.getPoolSetup(info.poolNftId);
240
+ // //require(tokenInfo.objectAddress == address(poolSetup.token), "ERROR:COS-018:PRODUCT_POOL_TOKEN_MISMATCH");
241
+ // // TODO pool is not linked
242
+
243
+ // IRegistry.ObjectInfo memory distributionInfo = _registry.getObjectInfo(info.distributionNftId);
244
+
245
+ // if(distributionInfo.objectType != DISTRIBUTION()) {
246
+ // revert InvalidDistribution();
247
+ // }
248
+
249
+ // if(distributionInfo.parentNftId != instanceNftId) {
250
+ // revert InvalidDistributionsInstance();
251
+ // }
252
+ // // TODO distribution have the same token
253
+ // // TODO distribution is not linked
254
+
255
+ // // component module
256
+ // instance.registerComponent(
257
+ // nftId,
258
+ // info.token,
259
+ // wallet // TODO move wallet into TreasuryInfo?
260
+ // );
261
+
262
+ // treasury module
263
+ instance.createProductSetup(
264
+ nftId,
265
+ info
266
+ );
267
+ }
268
+
269
+ function _registerPool(
270
+ NftId nftId,
271
+ NftId instanceNftId,
272
+ IInstance instance,
273
+ bytes memory data
274
+ )
275
+ internal
276
+ {
277
+ (
278
+ ISetup.PoolSetupInfo memory info,
279
+ address wallet,
280
+ IERC20Metadata token,
281
+ /*poolFee*/,
282
+ /*stakingFee*/,
283
+ /*performanceFee*/
284
+ ) = abi.decode(data, (ISetup.PoolSetupInfo, address, IERC20Metadata, Fee, Fee, Fee));
285
+
286
+ IRegistry _registry = getRegistry();
287
+
288
+ if(wallet == address(0)) {
289
+ revert WalletIsZero();
290
+ }
291
+
292
+ ObjectType tokenType = _registry.getObjectInfo(address(token)).objectType;
293
+
294
+ if(tokenType != TOKEN()) {
295
+ revert InvalidToken();
296
+ }
297
+
298
+ if(UFixedLib.eqz(info.collateralizationLevel)) {
299
+ revert CollateralizationLevelIsZero();
300
+ }
301
+
302
+ // TODO add more validations
303
+
304
+ // // component module
305
+ // instance.registerComponent(
306
+ // nftId,
307
+ // token,
308
+ // wallet
309
+ // );
310
+
311
+ // pool module
312
+ instance.createPoolSetup(
313
+ nftId,
314
+ info
315
+ );
156
316
  }
157
- }
317
+ }
@@ -10,8 +10,6 @@ import {IService} from "../base/IService.sol";
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
 
@@ -1,11 +1,11 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {IRisk} from "../module/risk/IRisk.sol";
4
+ import {IRisk} from "../module/IRisk.sol";
5
5
  import {IService} from "../base/IService.sol";
6
6
 
7
7
  import {NftId} from "../../types/NftId.sol";
8
- import {ReferralId} from "../../types/ReferralId.sol";
8
+ import {ReferralId} from "../../types/Referral.sol";
9
9
  import {RiskId} from "../../types/RiskId.sol";
10
10
  import {StateId} from "../../types/StateId.sol";
11
11
  import {Timestamp} from "../../types/Timestamp.sol";
@@ -1,16 +1,31 @@
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 {ERC721, ERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
5
- import {IChainNft} from "./IChainNft.sol";
5
+ import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
6
6
 
7
- contract ChainNft is ERC721Enumerable, IChainNft {
8
- string public constant NAME = "Dezentralized Insurance Protocol Registry";
9
- string public constant SYMBOL = "DIPR";
7
+ import {ITransferInterceptor} from "./ITransferInterceptor.sol";
8
+
9
+ contract ChainNft is ERC721Enumerable {
10
+
11
+ // constants
12
+ string public constant NAME = "Dezentralized Insurance Protocol NFT";
13
+ string public constant SYMBOL = "DIPNFT";
10
14
 
11
15
  uint256 public constant PROTOCOL_NFT_ID = 1101;
12
16
  uint256 public constant GLOBAL_REGISTRY_ID = 2101;
13
17
 
18
+ // custom errors
19
+ error CallerNotRegistry(address caller);
20
+ error RegistryAddressZero();
21
+ error NftUriEmpty();
22
+ error NftUriAlreadySet();
23
+
24
+ // contract state
25
+
26
+ // remember interceptors
27
+ mapping(uint256 tokenId => address interceptor) private _interceptor;
28
+
14
29
  // remember token uri
15
30
  mapping(uint256 tokenId => string uri) private _uri;
16
31
 
@@ -25,50 +40,79 @@ contract ChainNft is ERC721Enumerable, IChainNft {
25
40
  uint256 internal _totalMinted;
26
41
 
27
42
  modifier onlyRegistry() {
28
- require(msg.sender == _registry, "ERROR:NFT-001:CALLER_NOT_REGISTRY");
43
+ if (msg.sender != _registry) { revert CallerNotRegistry(msg.sender); }
29
44
  _;
30
45
  }
31
46
 
32
47
  constructor(address registry) ERC721(NAME, SYMBOL) {
33
- require(registry != address(0), "ERROR:NFT-010:REGISTRY_ZERO");
48
+ if (registry == address(0)) { revert RegistryAddressZero(); }
34
49
 
35
50
  _registry = registry;
36
-
37
51
  _chainIdInt = block.chainid;
38
- _chainIdDigits = _countDigits(_chainIdInt);
52
+ _chainIdDigits = 0;
53
+
54
+ // count digis
55
+ uint256 num = _chainIdInt;
56
+ while (num != 0) {
57
+ _chainIdDigits++;
58
+ num /= 10;
59
+ }
60
+
39
61
  _chainIdMultiplier = 10 ** _chainIdDigits;
40
- _idNext = 3;
62
+ _idNext = 4;
41
63
  }
42
64
 
65
+ /**
66
+ * @dev mints a token for a specified token id
67
+ * not part of the IRegistry interface only needed for
68
+ * initial registry setup (protocol and global registry objects)
69
+ */
70
+ function mint(address to, uint256 tokenId) external onlyRegistry {
71
+ _totalMinted++;
72
+ _safeMint(to, tokenId);
73
+ }
74
+
75
+
43
76
  /**
44
77
  * @dev mints the next token to register new objects
78
+ * non-zero transferInterceptors are recorded and called during nft token transfers.
79
+ * the contract receiving such a notification may decides to revert or record the transfer
45
80
  */
46
81
  function mint(
47
82
  address to,
83
+ address interceptor,
48
84
  string memory uri
49
- ) external override onlyRegistry returns (uint256 tokenId) {
85
+ ) public onlyRegistry returns (uint256 tokenId) {
50
86
  tokenId = _getNextTokenId();
51
87
 
88
+ if (interceptor != address(0)) {
89
+ _interceptor[tokenId] = interceptor;
90
+ }
91
+
52
92
  if (bytes(uri).length > 0) {
53
93
  _uri[tokenId] = uri;
54
94
  }
55
95
 
56
- _safeMint(to, tokenId);
57
96
  _totalMinted++;
97
+ _safeMint(to, tokenId);
58
98
  }
59
99
 
100
+
60
101
  /**
61
- * @dev mints a token for a specified token id
62
- * not part of the IRegistry interface only needed for
63
- * initial registry setup (protocol and global registry objects)
64
- */
65
- function mint(address to, uint256 tokenId) external onlyRegistry {
66
- _totalMinted++;
67
- _safeMint(to, tokenId);
102
+ * @dev amend the open zeppelin transferFrom function by an interceptor call if such an interceptor is defined for the nft token id
103
+ * this allows distribution, product and pool components to be notified when distributors, policies and bundles are transferred.
104
+ */
105
+ function transferFrom(address from, address to, uint256 tokenId) public override (ERC721, IERC721) {
106
+ super.transferFrom(from, to, tokenId);
107
+
108
+ if (_interceptor[tokenId] != address(0)) {
109
+ ITransferInterceptor(_interceptor[tokenId]).nftTransferFrom(from, to, tokenId);
110
+ }
68
111
  }
69
112
 
70
- function burn(uint256 tokenId) external override onlyRegistry {
71
- _requireMinted(tokenId);
113
+
114
+ function burn(uint256 tokenId) external onlyRegistry {
115
+ _requireOwned(tokenId);
72
116
  _burn(tokenId);
73
117
  delete _uri[tokenId];
74
118
  }
@@ -76,29 +120,36 @@ contract ChainNft is ERC721Enumerable, IChainNft {
76
120
  function setURI(
77
121
  uint256 tokenId,
78
122
  string memory uri
79
- ) external override onlyRegistry {
80
- require(bytes(uri).length > 0, "ERROR:CRG-011:URI_EMPTY");
123
+ ) external onlyRegistry {
124
+ if (bytes(uri).length == 0) { revert NftUriEmpty(); }
125
+ if (bytes(_uri[tokenId]).length > 0) { revert NftUriAlreadySet(); }
81
126
 
82
- _requireMinted(tokenId);
127
+ _requireOwned(tokenId);
83
128
  _uri[tokenId] = uri;
84
129
  }
85
130
 
86
- function exists(uint256 tokenId) external view override returns (bool) {
87
- return _exists(tokenId);
131
+ function exists(uint256 tokenId) external view returns (bool) {
132
+ return _ownerOf(tokenId) != address(0);
88
133
  }
89
134
 
90
135
  function tokenURI(
91
136
  uint256 tokenId
92
137
  ) public view override returns (string memory) {
93
- _requireMinted(tokenId);
138
+ // gif generally does not revert for view functions
139
+ // this is an exception to keep the openzeppelin nft semantics
140
+ _requireOwned(tokenId);
94
141
  return _uri[tokenId];
95
142
  }
96
143
 
97
- function getRegistryAddress() external view override returns (address) {
144
+ function getInterceptor(uint256 tokenId) external view returns (address) {
145
+ return _interceptor[tokenId];
146
+ }
147
+
148
+ function getRegistryAddress() external view returns (address) {
98
149
  return _registry;
99
150
  }
100
151
 
101
- function totalMinted() external view override returns (uint256) {
152
+ function totalMinted() external view returns (uint256) {
102
153
  return _totalMinted;
103
154
  }
104
155
 
@@ -148,12 +199,4 @@ contract ChainNft is ERC721Enumerable, IChainNft {
148
199
  id = calculateTokenId(_idNext);
149
200
  _idNext++;
150
201
  }
151
-
152
- function _countDigits(uint256 num) private pure returns (uint256 count) {
153
- count = 0;
154
- while (num != 0) {
155
- count++;
156
- num /= 10;
157
- }
158
- }
159
202
  }
@@ -1,57 +1,57 @@
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 {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
5
 
6
+ import {ChainNft} from "./ChainNft.sol";
6
7
  import {NftId} from "../types/NftId.sol";
7
8
  import {ObjectType} from "../types/ObjectType.sol";
8
9
  import {VersionPart} from "../types/Version.sol";
9
- import {IChainNft} from "./IChainNft.sol";
10
10
 
11
11
  interface IRegistry is IERC165 {
12
+
13
+ event LogRegistration(ObjectInfo info);
14
+
15
+ event LogServiceNameRegistration(string serviceName, VersionPart majorVersion);
16
+
17
+
12
18
  struct ObjectInfo {
13
19
  NftId nftId;
14
20
  NftId parentNftId;
15
21
  ObjectType objectType;
22
+ bool isInterceptor;
16
23
  address objectAddress;
17
24
  address initialOwner;
18
25
  bytes data;
19
- }
26
+ }// TODO delete nftId and initialOwner(if not used) from struct
20
27
 
21
- function register(address objectAddress) external returns (NftId nftId);
28
+ function register(ObjectInfo memory info) external returns (NftId nftId);
29
+
22
30
 
23
- function registerObjectForInstance(
24
- NftId parentNftid,
25
- ObjectType objectType,
26
- address initialOwner,
27
- bytes memory data
28
- ) external returns (NftId nftId);
31
+ function getObjectCount() external view returns (uint256);
29
32
 
30
- function getServiceAddress(string memory serviceName, VersionPart majorVersion) external view returns (address serviceAddress);
33
+ function getNftId(address objectAddress) external view returns (NftId nftId);
31
34
 
32
- function getObjectCount() external view returns (uint256);
35
+ function ownerOf(NftId nftId) external view returns (address);
33
36
 
34
- function getNftId() external view returns (NftId nftId);
37
+ function ownerOf(address contractAddress) external view returns (address);
35
38
 
36
- function getNftId(
37
- address objectAddress
38
- ) external view returns (NftId nftId);
39
+ function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory info);
39
40
 
40
- function getObjectInfo(
41
- NftId nftId
42
- ) external view returns (ObjectInfo memory info);
41
+ function getObjectInfo(address object) external view returns (ObjectInfo memory info);
43
42
 
44
- function getName(
45
- NftId nftId
46
- ) external view returns (string memory name);
43
+ function isRegistered(NftId nftId) external view returns (bool);
47
44
 
48
- function getProtocolOwner() external view returns (address);
45
+ function isRegistered(address contractAddress) external view returns (bool);
49
46
 
50
- function getOwner(NftId nftId) external view returns (address ownerAddress);
47
+ function getServiceName(NftId nftId) external view returns (string memory name);
51
48
 
52
- function isRegistered(NftId nftId) external view returns (bool);
49
+ function getServiceAddress(
50
+ string memory serviceName,
51
+ VersionPart majorVersion
52
+ ) external view returns (address serviceAddress);
53
53
 
54
- function isRegistered(address objectAddress) external view returns (bool);
54
+ function getChainNft() external view returns (ChainNft);
55
55
 
56
- function getChainNft() external view returns (IChainNft);
57
- }
56
+ function getOwner() external view returns (address);
57
+ }