@etherisc/gif-next 0.0.2-e46206a-486 → 0.0.2-e510b92-393

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 (320) hide show
  1. package/README.md +67 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +152 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +220 -33
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +114 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -25
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +24 -57
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -50
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +291 -68
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +299 -58
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  33. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  37. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  39. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  40. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  41. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
  42. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
  43. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
  44. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1132 -0
  45. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  46. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +775 -0
  47. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  48. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  49. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  50. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  51. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  52. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +778 -1020
  53. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  54. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +485 -0
  55. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  56. package/artifacts/contracts/instance/Instance.sol/Instance.json +2286 -1032
  57. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  58. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
  59. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  60. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  61. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  62. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +970 -0
  63. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  64. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +512 -0
  65. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  66. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +272 -0
  67. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  68. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +59 -0
  69. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  70. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  72. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  73. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -253
  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/module/IAccess.sol/IAccess.dbg.json +4 -0
  78. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  79. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  80. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  81. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  82. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  83. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  84. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  85. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  86. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  87. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  88. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  89. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  90. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  91. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +32 -48
  93. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +111 -41
  95. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  96. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
  97. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  98. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +167 -0
  101. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +40 -31
  103. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +322 -42
  105. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  106. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +464 -0
  107. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  108. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +176 -105
  109. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  110. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +488 -0
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +201 -0
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -19
  116. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  117. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  118. package/artifacts/contracts/registry/Registry.sol/Registry.json +172 -49
  119. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  120. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +61 -29
  121. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +47 -34
  123. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  124. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  125. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  126. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  127. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  128. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  129. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  130. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  131. package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +1 -1
  132. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  135. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  136. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  137. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +4 -4
  139. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  140. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +2 -104
  141. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  142. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +2 -2
  143. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  144. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  145. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  146. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  147. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +4 -4
  151. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  153. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestService.sol/TestService.json +11 -11
  155. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  158. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  159. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
  160. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  161. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  162. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  167. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  169. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  170. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  176. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  178. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  183. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  185. package/contracts/components/BaseComponent.sol +64 -11
  186. package/contracts/components/Distribution.sol +22 -14
  187. package/contracts/components/IBaseComponent.sol +14 -2
  188. package/contracts/components/IDistributionComponent.sol +1 -3
  189. package/contracts/components/IPoolComponent.sol +5 -3
  190. package/contracts/components/IProductComponent.sol +1 -3
  191. package/contracts/components/Pool.sol +50 -29
  192. package/contracts/components/Product.sol +50 -60
  193. package/contracts/instance/AccessManagedSimple.sol +115 -0
  194. package/contracts/instance/AccessManagerSimple.sol +692 -0
  195. package/contracts/instance/BundleManager.sol +129 -0
  196. package/contracts/instance/Cloneable.sol +46 -0
  197. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  198. package/contracts/instance/IInstance.sol +48 -44
  199. package/contracts/instance/IInstanceService.sol +32 -0
  200. package/contracts/instance/Instance.sol +434 -63
  201. package/contracts/instance/InstanceAccessManager.sol +288 -0
  202. package/contracts/instance/InstanceReader.sol +315 -0
  203. package/contracts/instance/InstanceService.sol +232 -0
  204. package/contracts/instance/InstanceServiceManager.sol +57 -0
  205. package/contracts/instance/ObjectManager.sol +95 -0
  206. package/contracts/instance/base/ComponentServiceBase.sol +93 -8
  207. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  208. package/contracts/instance/base/ILifecycle.sol +3 -3
  209. package/contracts/instance/base/KeyValueStore.sol +49 -39
  210. package/contracts/instance/base/Lifecycle.sol +1 -1
  211. package/contracts/instance/module/IAccess.sol +38 -0
  212. package/contracts/instance/module/IBundle.sol +20 -0
  213. package/contracts/instance/module/IDistribution.sol +39 -0
  214. package/contracts/instance/module/IPolicy.sol +45 -0
  215. package/contracts/instance/module/IRisk.sol +11 -0
  216. package/contracts/instance/module/ISetup.sol +46 -0
  217. package/contracts/instance/module/ITreasury.sol +23 -0
  218. package/contracts/instance/service/ComponentOwnerService.sol +62 -60
  219. package/contracts/instance/service/DistributionService.sol +49 -15
  220. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  221. package/contracts/instance/service/IComponentOwnerService.sol +1 -1
  222. package/contracts/instance/service/IDistributionService.sol +1 -1
  223. package/contracts/instance/service/IPoolService.sol +17 -3
  224. package/contracts/instance/service/IProductService.sol +8 -5
  225. package/contracts/instance/service/PoolService.sol +183 -45
  226. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  227. package/contracts/instance/service/ProductService.sol +175 -115
  228. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  229. package/contracts/registry/IRegistry.sol +26 -2
  230. package/contracts/registry/IRegistryService.sol +34 -19
  231. package/contracts/registry/Registry.sol +61 -36
  232. package/contracts/registry/RegistryService.sol +42 -125
  233. package/contracts/registry/RegistryServiceManager.sol +21 -5
  234. package/contracts/registry/TokenRegistry.sol +111 -0
  235. package/contracts/shared/ERC165.sol +6 -2
  236. package/contracts/{instance/base → shared}/IService.sol +3 -3
  237. package/contracts/shared/NftOwnable.sol +2 -4
  238. package/contracts/shared/Registerable.sol +1 -0
  239. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  240. package/contracts/shared/Service.sol +55 -0
  241. package/contracts/shared/TokenHandler.sol +27 -0
  242. package/contracts/test/TestService.sol +3 -5
  243. package/contracts/types/NftIdSet.sol +26 -24
  244. package/contracts/types/RoleId.sol +8 -0
  245. package/contracts/types/StateId.sol +4 -0
  246. package/contracts/types/Version.sol +4 -1
  247. package/package.json +1 -1
  248. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  249. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  250. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  251. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  252. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  253. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  254. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  255. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  256. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  257. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  258. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  259. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  260. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -117
  261. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  262. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  263. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  264. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -117
  265. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  266. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  267. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  268. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  269. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  270. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  271. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  272. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -271
  273. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  274. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -271
  275. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  276. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  277. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  278. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -164
  279. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  280. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
  281. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  282. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  283. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  284. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  285. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  286. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  287. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  288. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -638
  289. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  290. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  291. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  292. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -638
  293. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  294. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -557
  295. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  296. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -716
  297. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  298. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -744
  299. package/contracts/instance/IInstanceLinked.sol +0 -8
  300. package/contracts/instance/base/InstanceBase.sol +0 -89
  301. package/contracts/instance/base/ModuleBase.sol +0 -57
  302. package/contracts/instance/base/ServiceBase.sol +0 -44
  303. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  304. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  305. package/contracts/instance/module/component/ComponentModule.sol +0 -71
  306. package/contracts/instance/module/component/IComponent.sol +0 -28
  307. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  308. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  309. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  310. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  311. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  312. package/contracts/instance/module/pool/PoolModule.sol +0 -95
  313. package/contracts/instance/module/risk/IRisk.sol +0 -26
  314. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  315. package/contracts/instance/module/treasury/ITreasury.sol +0 -84
  316. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  317. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
  318. package/contracts/test/TestDistribution.sol +0 -22
  319. package/contracts/test/TestPool.sol +0 -27
  320. package/contracts/test/TestProduct.sol +0 -74
@@ -0,0 +1,232 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
5
+
6
+ import {AccessManagerSimple} from "./AccessManagerSimple.sol";
7
+ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
8
+ import {Instance} from "./Instance.sol";
9
+ import {IInstanceService} from "./IInstanceService.sol";
10
+ import {InstanceReader} from "./InstanceReader.sol";
11
+ import {BundleManager} from "./BundleManager.sol";
12
+ import {IRegistry} from "../registry/IRegistry.sol";
13
+ import {Registry} from "../registry/Registry.sol";
14
+ import {RegistryService} from "../registry/RegistryService.sol";
15
+ import {Service} from "../../contracts/shared/Service.sol";
16
+ import {IService} from "../shared/IService.sol";
17
+ import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
18
+ import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
19
+ import {RoleId} from "../types/RoleId.sol";
20
+ import {VersionLib} from "../types/Version.sol";
21
+ import {ADMIN_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE} from "../types/RoleId.sol";
22
+
23
+ contract InstanceService is Service, IInstanceService {
24
+
25
+ address internal _registryAddress;
26
+ address internal _accessManagerMaster;
27
+ address internal _instanceMaster;
28
+ address internal _instanceReaderMaster;
29
+ address internal _instanceBundleManagerMaster;
30
+
31
+ // TODO update to real hash when instance is stable
32
+ bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
33
+ string public constant NAME = "InstanceService";
34
+
35
+ function createInstanceClone()
36
+ external
37
+ returns (
38
+ AccessManagerSimple clonedAccessManager,
39
+ Instance clonedInstance,
40
+ NftId clonedInstanceNftId,
41
+ InstanceReader clonedInstanceReader,
42
+ BundleManager clonedBundleManager
43
+ )
44
+ {
45
+ address instanceOwner = msg.sender;
46
+ Registry registry = Registry(_registryAddress);
47
+ NftId registryNftId = registry.getNftId(_registryAddress);
48
+ address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
49
+ RegistryService registryService = RegistryService(registryServiceAddress);
50
+
51
+ // initially set the authority of the access managar to this (being the instance service).
52
+ // This will allow the instance service to bootstrap the authorizations of the instance
53
+ // and then transfer the ownership of the access manager to the instance owner once everything is setup
54
+ clonedAccessManager = AccessManagerSimple(Clones.clone(_accessManagerMaster));
55
+ clonedAccessManager.initialize(address(this));
56
+
57
+ clonedInstance = Instance(Clones.clone(_instanceMaster));
58
+ clonedInstance.initialize(address(clonedAccessManager), _registryAddress, registryNftId, msg.sender);
59
+ ( IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(clonedInstance);
60
+ clonedInstanceNftId = info.nftId;
61
+
62
+ clonedInstanceReader = InstanceReader(Clones.clone(address(_instanceReaderMaster)));
63
+ clonedInstanceReader.initialize(_registryAddress, clonedInstanceNftId);
64
+ clonedInstance.setInstanceReader(clonedInstanceReader);
65
+
66
+ clonedBundleManager = BundleManager(Clones.clone(_instanceBundleManagerMaster));
67
+ clonedBundleManager.initialize(address(clonedAccessManager), _registryAddress, clonedInstanceNftId);
68
+ clonedInstance.setBundleManager(clonedBundleManager);
69
+
70
+ // TODO amend setters with instance specific , policy manager ...
71
+
72
+ _grantInitialAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
73
+
74
+ // to complete setup switch instance ownership to the instance owner
75
+ // TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
76
+ clonedAccessManager.grantRole(ADMIN_ROLE().toInt(), instanceOwner, 0);
77
+ clonedAccessManager.revokeRole(ADMIN_ROLE().toInt(), address(this));
78
+
79
+ emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
80
+ }
81
+
82
+ function _grantInitialAuthorizations(AccessManagerSimple clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
83
+ // configure authorization for distribution service on instance
84
+ address distributionServiceAddress = _registry.getServiceAddress("DistributionService", VersionLib.toVersion(3, 0, 0).toMajorPart());
85
+ clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE().toInt(), distributionServiceAddress, 0);
86
+ bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
87
+ instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
88
+ instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
89
+ clonedAccessManager.setTargetFunctionRole(
90
+ address(clonedInstance),
91
+ instanceDistributionServiceSelectors,
92
+ DISTRIBUTION_SERVICE_ROLE().toInt());
93
+
94
+ // configure authorization for pool service on instance
95
+ address poolServiceAddress = _registry.getServiceAddress("PoolService", VersionLib.toVersion(3, 0, 0).toMajorPart());
96
+ clonedAccessManager.grantRole(POOL_SERVICE_ROLE().toInt(), address(poolServiceAddress), 0);
97
+ bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
98
+ instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
99
+ instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
100
+ instancePoolServiceSelectors[2] = clonedInstance.createBundle.selector;
101
+ instancePoolServiceSelectors[3] = clonedInstance.updateBundle.selector;
102
+ clonedAccessManager.setTargetFunctionRole(
103
+ address(clonedInstance),
104
+ instancePoolServiceSelectors,
105
+ POOL_SERVICE_ROLE().toInt());
106
+
107
+ // configure authorization for pool service on bundle manager
108
+ bytes4[] memory bundleManagerPoolServiceSelectors = new bytes4[](5);
109
+ bundleManagerPoolServiceSelectors[0] = clonedBundleManager.linkPolicy.selector;
110
+ bundleManagerPoolServiceSelectors[1] = clonedBundleManager.unlinkPolicy.selector;
111
+ bundleManagerPoolServiceSelectors[2] = clonedBundleManager.add.selector;
112
+ bundleManagerPoolServiceSelectors[3] = clonedBundleManager.lock.selector;
113
+ bundleManagerPoolServiceSelectors[4] = clonedBundleManager.unlock.selector;
114
+ clonedAccessManager.setTargetFunctionRole(
115
+ address(clonedBundleManager),
116
+ bundleManagerPoolServiceSelectors,
117
+ POOL_SERVICE_ROLE().toInt());
118
+
119
+ // configure authorization for product service on instance
120
+ address productServiceAddress = _registry.getServiceAddress("ProductService", VersionLib.toVersion(3, 0, 0).toMajorPart());
121
+ clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE().toInt(), address(productServiceAddress), 0);
122
+ bytes4[] memory instanceProductServiceSelectors = new bytes4[](9);
123
+ instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
124
+ instanceProductServiceSelectors[1] = clonedInstance.updateProductSetup.selector;
125
+ instanceProductServiceSelectors[2] = clonedInstance.createRisk.selector;
126
+ instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
127
+ instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
128
+ instanceProductServiceSelectors[5] = clonedInstance.createPolicy.selector;
129
+ instanceProductServiceSelectors[6] = clonedInstance.updatePolicy.selector;
130
+ instanceProductServiceSelectors[7] = clonedInstance.updatePolicyState.selector;
131
+ clonedAccessManager.setTargetFunctionRole(
132
+ address(clonedInstance),
133
+ instanceProductServiceSelectors,
134
+ PRODUCT_SERVICE_ROLE().toInt());
135
+ }
136
+
137
+ function setAccessManagerMaster(address accessManagerMaster) external {
138
+ require(
139
+ _accessManagerMaster == address(0),
140
+ "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
141
+ _accessManagerMaster = accessManagerMaster;
142
+ }
143
+
144
+ function setInstanceMaster(address instanceMaster) external {
145
+ require(
146
+ _instanceMaster == address(0),
147
+ "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
148
+ _instanceMaster = instanceMaster;
149
+ }
150
+
151
+ function setInstanceReaderMaster(address instanceReaderMaster) external {
152
+ require(
153
+ _instanceReaderMaster == address(0),
154
+ "ERROR:CRD-003:INSTANCE_READER_MASTER_ALREADY_SET");
155
+ _instanceReaderMaster = instanceReaderMaster;
156
+ }
157
+
158
+ function setBundleManagerMaster(address bundleManagerMaster) external {
159
+ require(
160
+ _instanceBundleManagerMaster == address(0),
161
+ "ERROR:CRD-004:BUNDLE_MANAGER_MASTER_ALREADY_SET");
162
+ _instanceBundleManagerMaster = bundleManagerMaster;
163
+ }
164
+
165
+ function getInstanceReaderMaster() external view returns (address) {
166
+ return _instanceReaderMaster;
167
+ }
168
+
169
+ function getInstanceMaster() external view returns (address) {
170
+ return _instanceMaster;
171
+ }
172
+
173
+ function getAccessManagerMaster() external view returns (address) {
174
+ return _accessManagerMaster;
175
+ }
176
+
177
+ function getBundleManagerMaster() external view returns (address) {
178
+ return _instanceBundleManagerMaster;
179
+ }
180
+
181
+ // From IService
182
+ function getName() public pure override(IService, Service) returns(string memory) {
183
+ return NAME;
184
+ }
185
+
186
+ /// @dev top level initializer
187
+ // 1) registry is non upgradeable -> don't need a proxy and uses constructor !
188
+ // 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
189
+ // 3) deploy registry -> pass registry service address as constructor argument
190
+ // registry is getting instantiated and locked to registry service address forever
191
+ function _initialize(
192
+ address owner,
193
+ bytes memory data
194
+ )
195
+ internal
196
+ initializer
197
+ virtual override
198
+ {
199
+ // bytes memory encodedConstructorArguments = abi.encode(
200
+ // _registryAddress);
201
+
202
+ // bytes memory instanceCreationCode = ContractDeployerLib.getCreationCode(
203
+ // instanceByteCodeWithInitCode,
204
+ // encodedConstructorArguments);
205
+
206
+ // address instanceAddress = ContractDeployerLib.deploy(
207
+ // instanceCreationCode,
208
+ // INSTANCE_CREATION_CODE_HASH);
209
+
210
+ address initialOwner = address(0);
211
+ (_registryAddress, initialOwner) = abi.decode(data, (address, address));
212
+ // TODO while InstanceService is not deployed in InstanceServiceManager constructor
213
+ // owner is InstanceServiceManager deployer
214
+ _initializeService(_registryAddress, owner);
215
+
216
+ _registerInterface(type(IService).interfaceId);
217
+ _registerInterface(type(IInstanceService).interfaceId);
218
+ }
219
+
220
+ function hasRole(address account, RoleId role, NftId instanceNftId) external view returns (bool) {
221
+ IRegistry.ObjectInfo memory instanceObjectInfo = getRegistry().getObjectInfo(instanceNftId);
222
+ address instanceAddress = instanceObjectInfo.objectAddress;
223
+ Instance instance = Instance(instanceAddress);
224
+ AccessManagerSimple accessManager = AccessManagerSimple(instance.authority());
225
+ (bool isMember, uint32 executionDelay) = accessManager.hasRole(role.toInt(), account);
226
+ if (executionDelay > 0) {
227
+ return false;
228
+ }
229
+ return isMember;
230
+ }
231
+ }
232
+
@@ -0,0 +1,57 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Instance} from "./Instance.sol";
5
+ import {IVersionable} from "../shared/IVersionable.sol";
6
+ import {ProxyManager} from "../shared/ProxyManager.sol";
7
+ import {InstanceService} from "./InstanceService.sol";
8
+ import {Registry} from "../registry/Registry.sol";
9
+ import {RegistryService} from "../registry/RegistryService.sol";
10
+ import {VersionLib} from "../types/Version.sol";
11
+
12
+ contract InstanceServiceManager is ProxyManager {
13
+
14
+ InstanceService private _instanceService;
15
+
16
+ /// @dev initializes proxy manager with instance service implementation and deploys instance
17
+ constructor(
18
+ address registryAddress
19
+ )
20
+ ProxyManager()
21
+ {
22
+ InstanceService instSrv = new InstanceService();
23
+ // bytes memory initCode = type(InstanceService).creationCode;
24
+ bytes memory data = abi.encode(registryAddress, address(this));
25
+ IVersionable versionable = deploy(
26
+ address(instSrv),
27
+ data);
28
+
29
+ _instanceService = InstanceService(address(versionable));
30
+
31
+ Registry registry = Registry(registryAddress);
32
+ address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
33
+ RegistryService registryService = RegistryService(registryServiceAddress);
34
+ // TODO this must have a role or own nft to register service
35
+ //registryService.registerService(_instanceService);
36
+ // RegistryService registryService = _instanceService.getRegistryService();
37
+
38
+ // TODO no nft to link yet
39
+ // link ownership of instance service manager ot nft owner of instance service
40
+ //_linkToNftOwnable(
41
+ // address(registryAddress),
42
+ // address(_instanceService));
43
+
44
+ // implies that after this constructor call only upgrade functionality is available
45
+ _isDeployed = true;
46
+ }
47
+
48
+ //--- view functions ----------------------------------------------------//
49
+ function getInstanceService()
50
+ external
51
+ view
52
+ returns (InstanceService instanceService)
53
+ {
54
+ return _instanceService;
55
+ }
56
+
57
+ }
@@ -0,0 +1,95 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Cloneable} from "./Cloneable.sol";
5
+
6
+ import {IInstance} from "./IInstance.sol";
7
+ import {INSTANCE} from "../types/ObjectType.sol";
8
+ import {InstanceReader} from "./InstanceReader.sol";
9
+ import {IRegistry} from "../registry/IRegistry.sol";
10
+ import {LibNftIdSet} from "../types/NftIdSet.sol";
11
+ import {NftId} from "../types/NftId.sol";
12
+
13
+ contract ObjectManager is
14
+ Cloneable
15
+ {
16
+
17
+ event LogObjectManagerInitialized(NftId instanceNftId, address instanceReader);
18
+
19
+ error ErrorObjectManagerNftIdInvalid(NftId instanceNftId);
20
+ error ErrorObjectManagerAlreadyAdded(NftId componentNftId, NftId objectNftId);
21
+
22
+ mapping(NftId compnentNftId => LibNftIdSet.Set objects) internal _activeObjects;
23
+ mapping(NftId compnentNftId => LibNftIdSet.Set objects) internal _allObjects;
24
+ InstanceReader internal _instanceReader;
25
+
26
+ constructor() Cloneable() {
27
+ _instanceReader = InstanceReader(address(0));
28
+ }
29
+
30
+ /// @dev call to initialize MUST be made in the same transaction as cloning of the contract
31
+ function initialize(
32
+ address authority,
33
+ address registry,
34
+ NftId instanceNftId
35
+ )
36
+ external
37
+ {
38
+ initialize(authority, registry);
39
+
40
+ // check/handle instance nft id/instance reader
41
+ IRegistry.ObjectInfo memory instanceInfo = _registry.getObjectInfo(instanceNftId);
42
+ if (instanceInfo.objectType != INSTANCE()) {
43
+ revert ErrorObjectManagerNftIdInvalid(instanceNftId);
44
+ }
45
+
46
+ IInstance instance = IInstance(instanceInfo.objectAddress);
47
+ _instanceReader = instance.getInstanceReader();
48
+
49
+ emit LogObjectManagerInitialized(instanceNftId, address(_instanceReader));
50
+ }
51
+
52
+ function getInstanceReader() external view returns (InstanceReader) {
53
+ return _instanceReader;
54
+ }
55
+
56
+ function _add(NftId componentNftId, NftId objectNftId) internal {
57
+ LibNftIdSet.Set storage allSet = _allObjects[componentNftId];
58
+ LibNftIdSet.Set storage activeSet = _activeObjects[componentNftId];
59
+
60
+ LibNftIdSet.add(allSet, objectNftId);
61
+ LibNftIdSet.add(activeSet, objectNftId);
62
+ }
63
+
64
+ function _activate(NftId componentNftId, NftId objectNftId) internal {
65
+ LibNftIdSet.add(_activeObjects[componentNftId], objectNftId);
66
+ }
67
+
68
+ function _deactivate(NftId componentNftId, NftId objectNftId) internal {
69
+ LibNftIdSet.remove(_activeObjects[componentNftId], objectNftId);
70
+ }
71
+
72
+ function _objects(NftId componentNftId) internal view returns (uint256) {
73
+ return LibNftIdSet.size(_allObjects[componentNftId]);
74
+ }
75
+
76
+ function _contains(NftId componentNftId, NftId objectNftId) internal view returns (bool) {
77
+ return LibNftIdSet.contains(_allObjects[componentNftId], objectNftId);
78
+ }
79
+
80
+ function _getObject(NftId componentNftId, uint256 idx) internal view returns (NftId) {
81
+ return LibNftIdSet.getElementAt(_allObjects[componentNftId], idx);
82
+ }
83
+
84
+ function _activeObjs(NftId componentNftId) internal view returns (uint256) {
85
+ return LibNftIdSet.size(_activeObjects[componentNftId]);
86
+ }
87
+
88
+ function _isActive(NftId componentNftId, NftId objectNftId) internal view returns (bool) {
89
+ return LibNftIdSet.contains(_activeObjects[componentNftId], objectNftId);
90
+ }
91
+
92
+ function _getActiveObject(NftId componentNftId, uint256 idx) internal view returns (NftId) {
93
+ return LibNftIdSet.getElementAt(_activeObjects[componentNftId], idx);
94
+ }
95
+ }
@@ -4,23 +4,108 @@ pragma solidity ^0.8.19;
4
4
  import {IRegistry} from "../../registry/IRegistry.sol";
5
5
  import {IRegistryService} from "../../registry/IRegistryService.sol";
6
6
  import {IInstance} from "../../instance/IInstance.sol";
7
- import {ObjectType, INSTANCE, PRODUCT, POOL} from "../../types/ObjectType.sol";
7
+ import {ObjectType, INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE} from "../../types/ObjectType.sol";
8
8
  import {NftId, NftIdLib} from "../../types/NftId.sol";
9
+ import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
9
10
 
10
- import {ServiceBase} from "./ServiceBase.sol";
11
+ import {BaseComponent} from "../../components/BaseComponent.sol";
12
+ import {Product} from "../../components/Product.sol";
13
+ import {INftOwnable} from "../../shared/INftOwnable.sol";
14
+ import {Service} from "../../shared/Service.sol";
15
+ import {InstanceService} from "../InstanceService.sol";
11
16
  import {Version, VersionPart, VersionLib} from "../../types/Version.sol";
12
17
 
13
- abstract contract ComponentServiceBase is ServiceBase {
18
+ abstract contract ComponentServiceBase is Service {
14
19
 
15
- constructor(
16
- address registry,
17
- NftId registryNftId,
20
+ error ExpectedRoleMissing(RoleId expected, address caller);
21
+ error ComponentTypeInvalid(ObjectType componentType);
22
+
23
+ mapping (ObjectType => RoleId) internal _objectTypeToExpectedRole;
24
+
25
+ /// @dev modifier to check if caller has a role on the instance the component is registered in
26
+ modifier onlyComponentOwnerRole(address componentAddress) {
27
+ BaseComponent component = BaseComponent(componentAddress);
28
+ ObjectType objectType = _getObjectType(component);
29
+ RoleId expectedRole = _objectTypeToExpectedRole[objectType];
30
+
31
+ address componentOwner = msg.sender;
32
+ INftOwnable nftOwnable = INftOwnable(address(component.getInstance()));
33
+ if(! getInstanceService().hasRole(componentOwner, expectedRole, nftOwnable.getNftId())) {
34
+ revert ExpectedRoleMissing(expectedRole, componentOwner);
35
+ }
36
+ _;
37
+ }
38
+
39
+ /// @dev modifier to check if caller is a registered service
40
+ modifier onlyService() {
41
+ address caller = msg.sender;
42
+ require(getRegistry().isRegisteredService(caller), "ERROR_NOT_SERVICE");
43
+ _;
44
+ }
45
+
46
+ function _initializeService(
47
+ address registry,
18
48
  address initialOwner
19
49
  )
50
+ internal
51
+ override
20
52
  {
21
- _initializeServiceBase(registry, registryNftId, initialOwner);
53
+ super._initializeService(registry, initialOwner);
54
+ _objectTypeToExpectedRole[PRODUCT()] = PRODUCT_OWNER_ROLE();
55
+ _objectTypeToExpectedRole[POOL()] = POOL_OWNER_ROLE();
56
+ _objectTypeToExpectedRole[DISTRIBUTION()] = DISTRIBUTION_OWNER_ROLE();
57
+ _objectTypeToExpectedRole[ORACLE()] = ORACLE_OWNER_ROLE();
58
+ }
59
+
60
+ function getInstanceService() public view returns (InstanceService) {
61
+ return InstanceService(getRegistry().getServiceAddress("InstanceService", getMajorVersion()));
22
62
  }
23
63
 
64
+ function register(address componentAddress)
65
+ external
66
+ onlyComponentOwnerRole(componentAddress)
67
+ returns (NftId componentNftId)
68
+ {
69
+ address componentOwner = msg.sender;
70
+ BaseComponent component = BaseComponent(componentAddress);
71
+ ObjectType objectType = _getObjectType(component);
72
+ IRegistryService registryService = getRegistryService();
73
+
74
+ IRegistry.ObjectInfo memory objInfo;
75
+ bytes memory initialObjData;
76
+
77
+ if (objectType == DISTRIBUTION()) {
78
+ (objInfo, initialObjData) = registryService.registerDistribution(component, componentOwner);
79
+ } else if (objectType == PRODUCT()) {
80
+ (objInfo, initialObjData) = registryService.registerProduct(component, componentOwner);
81
+ } else if (objectType == POOL()) {
82
+ (objInfo, initialObjData) = registryService.registerPool(component, componentOwner);
83
+ // TODO: implement this for oracle - currently missing in registry
84
+ // } else if (objectType == ORACLE()) {
85
+ // (objInfo, initialObjData) = registryService.registerOracle(component, componentOwner);
86
+ } else {
87
+ revert ComponentTypeInvalid(objectType);
88
+ }
89
+
90
+ componentNftId = objInfo.nftId;
91
+ {
92
+ IInstance instance = _getInstance(objInfo);
93
+ _finalizeComponentRegistration(componentNftId, initialObjData, instance);
94
+ }
95
+ }
96
+
97
+ function _finalizeComponentRegistration(NftId componentNftId, bytes memory initialObjData, IInstance instance) internal virtual;
98
+
99
+ function _getObjectType(BaseComponent component) internal view returns (ObjectType) {
100
+ (IRegistry.ObjectInfo memory compInitialInfo, ) = component.getInitialInfo();
101
+ return compInitialInfo.objectType;
102
+ }
103
+
104
+ function _getInstance(IRegistry.ObjectInfo memory compObjInfo) internal view returns (IInstance) {
105
+ IRegistry registry = getRegistry();
106
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(compObjInfo.parentNftId);
107
+ return IInstance(instanceInfo.objectAddress);
108
+ }
24
109
 
25
110
  function _getAndVerifyComponentInfoAndInstance(
26
111
  ObjectType objectType
@@ -32,7 +117,7 @@ abstract contract ComponentServiceBase is ServiceBase {
32
117
  IInstance instance
33
118
  )
34
119
  {
35
- NftId componentNftId = getRegistry().getNftId(msg.sender);
120
+ NftId componentNftId = _registry.getNftId(msg.sender);
36
121
  require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
37
122
 
38
123
  info = getRegistry().getObjectInfo(componentNftId);
@@ -1,5 +1,5 @@
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 {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blocknumber.sol";
5
5
  import {Key32, KeyId} from "../../types/Key32.sol";
@@ -9,13 +9,9 @@ import {StateId} from "../../types/StateId.sol";
9
9
 
10
10
  import {ILifecycle} from "./ILifecycle.sol";
11
11
 
12
+ // TODO remove - internal only?
12
13
  interface IKeyValueStore is ILifecycle {
13
14
 
14
- struct Key {
15
- ObjectType objectType;
16
- KeyId id;
17
- }
18
-
19
15
  struct Value {
20
16
  Metadata metadata;
21
17
  bytes data;
@@ -24,20 +20,24 @@ interface IKeyValueStore is ILifecycle {
24
20
  struct Metadata {
25
21
  ObjectType objectType;
26
22
  StateId state;
23
+ // TODO updatedBy needs concept that says what value should go here
24
+ // eg account outside gif objects that initiated the tx
25
+ // implies the caller needs to be propagated through all calls up to key values store itself
26
+ // to always have the instance address there doesn't seem to make sense
27
27
  address updatedBy;
28
28
  Blocknumber updatedIn;
29
29
  Blocknumber createdIn;
30
30
  }
31
31
 
32
- event LogInfoCreated(Key key, StateId state, address createdBy, address txOrigin);
33
- event LogInfoUpdated(Key key, StateId state, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
34
- event LogStateUpdated(Key key, StateId stateOld, StateId stateNew, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
32
+ event LogInfoCreated(ObjectType objectType, KeyId keyId, StateId state, address createdBy, address txOrigin);
33
+ event LogInfoUpdated(ObjectType objectType, KeyId keyId, StateId state, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
34
+ event LogStateUpdated(ObjectType objectType, KeyId keyId, StateId stateOld, StateId stateNew, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
35
35
 
36
36
  // generic state changing functions
37
- function create(Key32 key, ObjectType objectType, bytes memory data) external;
38
- function update(Key32 key, StateId state, bytes memory data) external;
39
- function updateData(Key32 key, bytes memory data) external;
40
- function updateState(Key32 key, StateId state) external;
37
+ // function create(Key32 key, bytes memory data) external;
38
+ // function update(Key32 key, bytes memory data, StateId state) external;
39
+ // function updateData(Key32 key, bytes memory data) external;
40
+ // function updateState(Key32 key, StateId state) external;
41
41
 
42
42
  function exists(Key32 key) external view returns (bool);
43
43
  function get(Key32 key) external view returns (Value memory value);
@@ -46,5 +46,4 @@ interface IKeyValueStore is ILifecycle {
46
46
  function getState(Key32 key) external view returns (StateId state);
47
47
 
48
48
  function toKey32(ObjectType objectType, KeyId id) external pure returns(Key32);
49
- function toKey(Key32 key32) external pure returns(Key memory key);
50
49
  }
@@ -1,9 +1,9 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {ObjectType} from "../../types/ObjectType.sol";
5
- import {StateId, toStateId, zeroStateId} from "../../types/StateId.sol";
6
4
  import {NftId} from "../../types/NftId.sol";
5
+ import {ObjectType} from "../../types/ObjectType.sol";
6
+ import {StateId} from "../../types/StateId.sol";
7
7
 
8
8
  interface ILifecycle {
9
9