@etherisc/gif-next 0.0.2-a6f9f86-582 → 0.0.2-a6faeb6-912

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 (272) hide show
  1. package/README.md +171 -2
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → components/BaseComponent.sol/BaseComponent.json} +241 -245
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +744 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +127 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +275 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +157 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +4 -0
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +939 -0
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +4 -0
  17. package/artifacts/contracts/components/Product.sol/Product.json +855 -0
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  45. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  46. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  47. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  48. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  49. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
  50. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +4 -0
  52. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1698 -0
  53. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  54. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  55. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +496 -0
  57. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  58. package/artifacts/contracts/instance/Instance.sol/Instance.json +553 -530
  59. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  60. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +57 -34
  61. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  62. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  63. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  65. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +937 -31
  67. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +532 -0
  69. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  70. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  71. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  72. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +540 -0
  73. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  74. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  75. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  76. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +0 -77
  77. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  78. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  79. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +10 -244
  80. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  81. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  82. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  86. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  87. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  88. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  90. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +827 -0
  91. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  92. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +716 -0
  93. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  94. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
  95. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  96. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  97. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  99. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  100. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +728 -0
  101. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +760 -0
  103. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  104. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1049 -0
  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 +4 -0
  108. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +1147 -0
  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/ChainNft.sol/ChainNft.json +47 -2
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  114. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +197 -116
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  116. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +217 -15
  117. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  118. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/Registry.sol/Registry.json +167 -172
  120. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  121. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +324 -44
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +77 -36
  124. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  125. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  126. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  127. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  128. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  129. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  130. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  132. package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +1 -1
  133. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  136. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  137. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  138. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  139. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +6 -6
  140. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  141. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  142. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  143. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +2 -2
  144. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  145. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  146. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  147. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  148. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  151. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +6 -6
  153. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +111 -5
  155. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestService.sol/TestService.json +17 -17
  157. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  159. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  161. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
  163. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  164. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  165. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  166. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
  171. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  172. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  174. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  175. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  181. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  183. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  185. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  186. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  188. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  190. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  192. package/contracts/components/BaseComponent.sol +132 -0
  193. package/contracts/components/Distribution.sol +163 -0
  194. package/contracts/components/IBaseComponent.sol +14 -2
  195. package/contracts/components/IDistributionComponent.sol +44 -0
  196. package/contracts/components/IPoolComponent.sol +66 -0
  197. package/contracts/components/IProductComponent.sol +35 -0
  198. package/contracts/components/Pool.sol +267 -0
  199. package/contracts/components/Product.sol +289 -0
  200. package/contracts/experiment/cloning/Cloner.sol +47 -0
  201. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  202. package/contracts/instance/BundleManager.sol +129 -0
  203. package/contracts/instance/Cloneable.sol +46 -0
  204. package/contracts/instance/IAccessManagerSimple.sol +1 -1
  205. package/contracts/instance/IInstance.sol +56 -0
  206. package/contracts/instance/IInstanceBase.sol +26 -0
  207. package/contracts/instance/IInstanceService.sol +34 -0
  208. package/contracts/instance/Instance.sol +84 -20
  209. package/contracts/instance/InstanceAccessManager.sol +8 -8
  210. package/contracts/instance/InstanceBase.sol +41 -0
  211. package/contracts/instance/InstanceReader.sol +315 -0
  212. package/contracts/instance/InstanceService.sol +230 -22
  213. package/contracts/instance/InstanceServiceManager.sol +57 -0
  214. package/contracts/instance/ObjectManager.sol +101 -0
  215. package/contracts/instance/base/ComponentServiceBase.sol +134 -0
  216. package/contracts/instance/base/IInstanceBase.sol +23 -0
  217. package/contracts/instance/base/IKeyValueStore.sol +5 -4
  218. package/contracts/instance/base/KeyValueStore.sol +4 -20
  219. package/contracts/instance/module/IAccess.sol +2 -2
  220. package/contracts/instance/module/IBundle.sol +1 -0
  221. package/contracts/instance/module/ISetup.sol +6 -1
  222. package/contracts/instance/module/ITreasury.sol +1 -1
  223. package/contracts/instance/service/ComponentOwnerService.sol +317 -0
  224. package/contracts/instance/service/DistributionService.sol +88 -0
  225. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  226. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  227. package/contracts/instance/service/IDistributionService.sol +12 -0
  228. package/contracts/instance/service/IPoolService.sol +51 -0
  229. package/contracts/instance/service/IProductService.sol +110 -0
  230. package/contracts/instance/service/PoolService.sol +287 -0
  231. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  232. package/contracts/instance/service/ProductService.sol +570 -0
  233. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  234. package/contracts/registry/ChainNft.sol +40 -25
  235. package/contracts/registry/IRegistry.sol +30 -22
  236. package/contracts/registry/IRegistryService.sol +36 -15
  237. package/contracts/registry/Registry.sol +133 -176
  238. package/contracts/registry/RegistryService.sol +159 -170
  239. package/contracts/registry/RegistryServiceManager.sol +39 -2
  240. package/contracts/registry/TokenRegistry.sol +111 -0
  241. package/contracts/shared/ERC165.sol +7 -3
  242. package/contracts/shared/IRegisterable.sol +1 -1
  243. package/contracts/{instance/base → shared}/IService.sol +3 -3
  244. package/contracts/shared/NftOwnable.sol +2 -4
  245. package/contracts/shared/ProxyManager.sol +3 -3
  246. package/contracts/shared/Registerable.sol +3 -2
  247. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  248. package/contracts/shared/Service.sol +55 -0
  249. package/contracts/shared/TokenHandler.sol +2 -2
  250. package/contracts/shared/UpgradableProxyWithAdmin.sol +2 -2
  251. package/contracts/shared/Versionable.sol +1 -1
  252. package/contracts/test/TestFee.sol +2 -2
  253. package/contracts/test/TestRoleId.sol +6 -6
  254. package/contracts/test/TestService.sol +3 -5
  255. package/contracts/types/Fee.sol +3 -3
  256. package/contracts/types/NftIdSet.sol +26 -24
  257. package/contracts/types/RoleId.sol +19 -4
  258. package/contracts/types/StateId.sol +4 -0
  259. package/contracts/types/UFixed.sol +128 -12
  260. package/contracts/types/Version.sol +4 -1
  261. package/package.json +4 -3
  262. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  263. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  264. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1119
  265. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  266. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  267. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  268. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  269. package/contracts/instance/AccessManagedSimple.sol +0 -114
  270. package/contracts/instance/AccessManagerSimple.sol +0 -682
  271. package/contracts/instance/base/ServiceBase.sol +0 -44
  272. package/contracts/registry/IChainNft.sol +0 -22
@@ -1,45 +1,253 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Clones} from "@openzeppelin5/contracts/proxy/Clones.sol";
4
+ import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
5
+ import {AccessManagerUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol";
5
6
 
6
- import {AccessManagerSimple} from "./AccessManagerSimple.sol";
7
- import {InstanceAccessManager} from "./InstanceAccessManager.sol";
7
+ import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
8
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 {RegistryService} from "../registry/RegistryService.sol";
14
+ import {Service} from "../../contracts/shared/Service.sol";
15
+ import {IService} from "../shared/IService.sol";
16
+ import {NftId} from "../../contracts/types/NftId.sol";
17
+ import {RoleId} from "../types/RoleId.sol";
18
+ import {VersionLib} from "../types/Version.sol";
19
+ import {ADMIN_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE} from "../types/RoleId.sol";
9
20
 
10
- contract InstanceService {
21
+ contract InstanceService is Service, IInstanceService {
11
22
 
12
- address internal _accessManagerMaster;
13
- address internal _instanceAccessManagerMaster;
14
- address internal _instanceMaster;
23
+ address internal _masterInstanceAccessManager;
24
+ address internal _masterInstance;
25
+ address internal _masterInstanceReader;
26
+ address internal _masterInstanceBundleManager;
27
+
28
+ // TODO update to real hash when instance is stable
29
+ bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
30
+ string public constant NAME = "InstanceService";
15
31
 
16
32
  function createInstanceClone()
17
33
  external
18
34
  returns (
19
- AccessManagerSimple am,
20
- InstanceAccessManager im,
21
- Instance i
35
+ AccessManagerUpgradeableInitializeable clonedAccessManager,
36
+ Instance clonedInstance,
37
+ NftId clonedInstanceNftId,
38
+ InstanceReader clonedInstanceReader,
39
+ BundleManager clonedBundleManager
22
40
  )
23
41
  {
24
- am = AccessManagerSimple(Clones.clone(_accessManagerMaster));
25
- im = InstanceAccessManager(Clones.clone(_instanceAccessManagerMaster));
26
- i = Instance(Clones.clone(_instanceMaster));
42
+ address instanceOwner = msg.sender;
43
+ IRegistry registry = getRegistry();
44
+ address registryAddress = address(registry);
45
+ NftId registryNftId = registry.getNftId(registryAddress);
46
+ address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
47
+ RegistryService registryService = RegistryService(registryServiceAddress);
48
+
49
+ // initially set the authority of the access managar to this (being the instance service).
50
+ // This will allow the instance service to bootstrap the authorizations of the instance
51
+ // and then transfer the ownership of the access manager to the instance owner once everything is setup
52
+ clonedAccessManager = AccessManagerUpgradeableInitializeable(Clones.clone(_masterInstanceAccessManager));
53
+ clonedAccessManager.__AccessManagerUpgradeableInitializeable_init(address(this));
54
+
55
+ clonedInstance = Instance(Clones.clone(_masterInstance));
56
+ clonedInstance.initialize(address(clonedAccessManager), registryAddress, registryNftId, msg.sender);
57
+ ( IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(clonedInstance);
58
+ clonedInstanceNftId = info.nftId;
59
+
60
+ clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
61
+ clonedInstanceReader.initialize(registryAddress, clonedInstanceNftId);
62
+ clonedInstance.setInstanceReader(clonedInstanceReader);
63
+
64
+ clonedBundleManager = BundleManager(Clones.clone(_masterInstanceBundleManager));
65
+ clonedBundleManager.initialize(address(clonedAccessManager), registryAddress, clonedInstanceNftId);
66
+ clonedInstance.setBundleManager(clonedBundleManager);
67
+
68
+ // TODO amend setters with instance specific , policy manager ...
69
+
70
+ _grantInitialAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
71
+
72
+ // to complete setup switch instance ownership to the instance owner
73
+ // TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
74
+ clonedAccessManager.grantRole(ADMIN_ROLE().toInt(), instanceOwner, 0);
75
+ clonedAccessManager.revokeRole(ADMIN_ROLE().toInt(), address(this));
76
+
77
+ emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
27
78
  }
28
79
 
29
- function setAccessManagerMaster(address accessManager) external {
30
- _accessManagerMaster = accessManager;
80
+ function _grantInitialAuthorizations(AccessManagerUpgradeable clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
81
+ // configure authorization for distribution service on instance
82
+ IRegistry registry = getRegistry();
83
+ address distributionServiceAddress = registry.getServiceAddress("DistributionService", VersionLib.toVersion(3, 0, 0).toMajorPart());
84
+ clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE().toInt(), distributionServiceAddress, 0);
85
+ bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
86
+ instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
87
+ instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
88
+ clonedAccessManager.setTargetFunctionRole(
89
+ address(clonedInstance),
90
+ instanceDistributionServiceSelectors,
91
+ DISTRIBUTION_SERVICE_ROLE().toInt());
92
+
93
+ // configure authorization for pool service on instance
94
+ address poolServiceAddress = registry.getServiceAddress("PoolService", VersionLib.toVersion(3, 0, 0).toMajorPart());
95
+ clonedAccessManager.grantRole(POOL_SERVICE_ROLE().toInt(), address(poolServiceAddress), 0);
96
+ bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
97
+ instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
98
+ instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
99
+ instancePoolServiceSelectors[2] = clonedInstance.createBundle.selector;
100
+ instancePoolServiceSelectors[3] = clonedInstance.updateBundle.selector;
101
+ clonedAccessManager.setTargetFunctionRole(
102
+ address(clonedInstance),
103
+ instancePoolServiceSelectors,
104
+ POOL_SERVICE_ROLE().toInt());
105
+
106
+ // configure authorization for pool service on bundle manager
107
+ bytes4[] memory bundleManagerPoolServiceSelectors = new bytes4[](5);
108
+ bundleManagerPoolServiceSelectors[0] = clonedBundleManager.linkPolicy.selector;
109
+ bundleManagerPoolServiceSelectors[1] = clonedBundleManager.unlinkPolicy.selector;
110
+ bundleManagerPoolServiceSelectors[2] = clonedBundleManager.add.selector;
111
+ bundleManagerPoolServiceSelectors[3] = clonedBundleManager.lock.selector;
112
+ bundleManagerPoolServiceSelectors[4] = clonedBundleManager.unlock.selector;
113
+ clonedAccessManager.setTargetFunctionRole(
114
+ address(clonedBundleManager),
115
+ bundleManagerPoolServiceSelectors,
116
+ POOL_SERVICE_ROLE().toInt());
117
+
118
+ // configure authorization for product service on instance
119
+ address productServiceAddress = registry.getServiceAddress("ProductService", VersionLib.toVersion(3, 0, 0).toMajorPart());
120
+ clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE().toInt(), address(productServiceAddress), 0);
121
+ bytes4[] memory instanceProductServiceSelectors = new bytes4[](9);
122
+ instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
123
+ instanceProductServiceSelectors[1] = clonedInstance.updateProductSetup.selector;
124
+ instanceProductServiceSelectors[2] = clonedInstance.createRisk.selector;
125
+ instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
126
+ instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
127
+ instanceProductServiceSelectors[5] = clonedInstance.createPolicy.selector;
128
+ instanceProductServiceSelectors[6] = clonedInstance.updatePolicy.selector;
129
+ instanceProductServiceSelectors[7] = clonedInstance.updatePolicyState.selector;
130
+ clonedAccessManager.setTargetFunctionRole(
131
+ address(clonedInstance),
132
+ instanceProductServiceSelectors,
133
+ PRODUCT_SERVICE_ROLE().toInt());
134
+
135
+ // configure authorization for instance service on instance
136
+ address instanceServiceAddress = registry.getServiceAddress("InstanceService", VersionLib.toVersion(3, 0, 0).toMajorPart());
137
+ clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE().toInt(), instanceServiceAddress, 0);
138
+ bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
139
+ instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
140
+ clonedAccessManager.setTargetFunctionRole(
141
+ address(clonedInstance),
142
+ instanceInstanceServiceSelectors,
143
+ INSTANCE_SERVICE_ROLE().toInt());
31
144
  }
32
145
 
33
- function setInstanceAccessManagerMaster(address instanceAccessManager) external {
34
- _instanceAccessManagerMaster = instanceAccessManager;
146
+ function setMasterInstance(address accessManagerAddress, address instanceAddress, address instanceReaderAddress, address bundleManagerAddress) external onlyOwner {
147
+ require(_masterInstanceAccessManager == address(0), "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
148
+ require(_masterInstance == address(0), "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
149
+ require(_masterInstanceBundleManager == address(0), "ERROR:CRD-004:BUNDLE_MANAGER_MASTER_ALREADY_SET");
150
+
151
+ require (accessManagerAddress != address(0), "ERROR:CRD-005:ACCESS_MANAGER_ZERO");
152
+ require (instanceAddress != address(0), "ERROR:CRD-006:INSTANCE_ZERO");
153
+ require (instanceReaderAddress != address(0), "ERROR:CRD-007:INSTANCE_READER_ZERO");
154
+ require (bundleManagerAddress != address(0), "ERROR:CRD-008:BUNDLE_MANAGER_ZERO");
155
+
156
+ Instance instance = Instance(instanceAddress);
157
+ InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
158
+ BundleManager bundleManager = BundleManager(bundleManagerAddress);
159
+
160
+ require(instance.authority() == accessManagerAddress, "ERROR:CRD-009:INSTANCE_AUTHORITY_MISMATCH");
161
+ require(instanceReader.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-010:INSTANCE_READER_INSTANCE_MISMATCH");
162
+ require(bundleManager.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-011:BUNDLE_MANAGER_INSTANCE_MISMATCH");
163
+
164
+ _masterInstanceAccessManager = accessManagerAddress;
165
+ _masterInstance = instanceAddress;
166
+ _masterInstanceReader = instanceReaderAddress;
167
+ _masterInstanceBundleManager = bundleManagerAddress;
35
168
  }
36
169
 
37
- function setInstanceMaster(address instance) external {
38
- _instanceMaster = instance;
170
+ function setMasterInstanceReader(address instanceReaderAddress) external onlyOwner {
171
+ require(_masterInstanceReader != address(0), "ERROR:CRD-003:INSTANCE_READER_MASTER_NOT_SET");
172
+ require (instanceReaderAddress != address(0), "ERROR:CRD-012:INSTANCE_READER_ZERO");
173
+ require(instanceReaderAddress != _masterInstanceReader, "ERROR:CRD-014:INSTANCE_READER_MASTER_SAME_AS_NEW");
174
+
175
+ InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
176
+ require(instanceReader.getInstanceNftId() == Instance(_masterInstance).getNftId(), "ERROR:CRD-015:INSTANCE_READER_INSTANCE_MISMATCH");
177
+
178
+ _masterInstanceReader = instanceReaderAddress;
39
179
  }
40
180
 
41
- function getAccessManagerMaster() external view returns (address) { return address(_accessManagerMaster); }
42
- function getInstanceAccessManagerMaster() external view returns (address) { return address(_instanceAccessManagerMaster); }
43
- function getInstanceMaster() external view returns (address) { return address(_instanceMaster); }
181
+ function upgradeInstanceReader(NftId instanceNftId) external {
182
+ IRegistry registry = getRegistry();
183
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
184
+ Instance instance = Instance(instanceInfo.objectAddress);
185
+ address owner = instance.getOwner();
186
+
187
+ if (msg.sender != owner) {
188
+ revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
189
+ }
190
+
191
+ InstanceReader upgradedInstanceReaderClone = InstanceReader(Clones.clone(address(_masterInstanceReader)));
192
+ upgradedInstanceReaderClone.initialize(address(registry), instanceNftId);
193
+ instance.setInstanceReader(upgradedInstanceReaderClone);
194
+ }
195
+
196
+ function getMasterInstanceReader() external view returns (address) {
197
+ return _masterInstanceReader;
198
+ }
199
+
200
+ function getMasterInstance() external view returns (address) {
201
+ return _masterInstance;
202
+ }
203
+
204
+ function getMasterInstanceAccessManager() external view returns (address) {
205
+ return _masterInstanceAccessManager;
206
+ }
207
+
208
+ function getMasterInstanceBundleManager() external view returns (address) {
209
+ return _masterInstanceBundleManager;
210
+ }
211
+
212
+ // From IService
213
+ function getName() public pure override(IService, Service) returns(string memory) {
214
+ return NAME;
215
+ }
216
+
217
+ /// @dev top level initializer
218
+ // 1) registry is non upgradeable -> don't need a proxy and uses constructor !
219
+ // 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
220
+ // 3) deploy registry -> pass registry service address as constructor argument
221
+ // registry is getting instantiated and locked to registry service address forever
222
+ function _initialize(
223
+ address owner,
224
+ bytes memory data
225
+ )
226
+ internal
227
+ initializer
228
+ virtual override
229
+ {
230
+ address initialOwner = address(0);
231
+ address registryAddress = address(0);
232
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
233
+ // TODO while InstanceService is not deployed in InstanceServiceManager constructor
234
+ // owner is InstanceServiceManager deployer
235
+ _initializeService(registryAddress, owner);
236
+
237
+ _registerInterface(type(IService).interfaceId);
238
+ _registerInterface(type(IInstanceService).interfaceId);
239
+ }
240
+
241
+ function hasRole(address account, RoleId role, NftId instanceNftId) external view returns (bool) {
242
+ IRegistry.ObjectInfo memory instanceObjectInfo = getRegistry().getObjectInfo(instanceNftId);
243
+ address instanceAddress = instanceObjectInfo.objectAddress;
244
+ Instance instance = Instance(instanceAddress);
245
+ AccessManagerUpgradeable accessManager = AccessManagerUpgradeable(instance.authority());
246
+ (bool isMember, uint32 executionDelay) = accessManager.hasRole(role.toInt(), account);
247
+ if (executionDelay > 0) {
248
+ return false;
249
+ }
250
+ return isMember;
251
+ }
44
252
  }
45
253
 
@@ -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,101 @@
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
+ NftId internal _instanceNftId;
25
+ InstanceReader internal _instanceReader;
26
+
27
+ constructor() Cloneable() {
28
+ _instanceReader = InstanceReader(address(0));
29
+ }
30
+
31
+ /// @dev call to initialize MUST be made in the same transaction as cloning of the contract
32
+ function initialize(
33
+ address authority,
34
+ address registry,
35
+ NftId instanceNftId
36
+ )
37
+ external
38
+ {
39
+ initialize(authority, registry);
40
+
41
+ // check/handle instance nft id/instance reader
42
+ IRegistry.ObjectInfo memory instanceInfo = _registry.getObjectInfo(instanceNftId);
43
+ if (instanceInfo.objectType != INSTANCE()) {
44
+ revert ErrorObjectManagerNftIdInvalid(instanceNftId);
45
+ }
46
+
47
+ IInstance instance = IInstance(instanceInfo.objectAddress);
48
+ _instanceReader = instance.getInstanceReader();
49
+ _instanceNftId = instanceNftId;
50
+
51
+ emit LogObjectManagerInitialized(instanceNftId, address(_instanceReader));
52
+ }
53
+
54
+ function getInstanceReader() external view returns (InstanceReader) {
55
+ return _instanceReader;
56
+ }
57
+
58
+ function getInstanceNftId() external view returns (NftId) {
59
+ return _instanceNftId;
60
+ }
61
+
62
+ function _add(NftId componentNftId, NftId objectNftId) internal {
63
+ LibNftIdSet.Set storage allSet = _allObjects[componentNftId];
64
+ LibNftIdSet.Set storage activeSet = _activeObjects[componentNftId];
65
+
66
+ LibNftIdSet.add(allSet, objectNftId);
67
+ LibNftIdSet.add(activeSet, objectNftId);
68
+ }
69
+
70
+ function _activate(NftId componentNftId, NftId objectNftId) internal {
71
+ LibNftIdSet.add(_activeObjects[componentNftId], objectNftId);
72
+ }
73
+
74
+ function _deactivate(NftId componentNftId, NftId objectNftId) internal {
75
+ LibNftIdSet.remove(_activeObjects[componentNftId], objectNftId);
76
+ }
77
+
78
+ function _objects(NftId componentNftId) internal view returns (uint256) {
79
+ return LibNftIdSet.size(_allObjects[componentNftId]);
80
+ }
81
+
82
+ function _contains(NftId componentNftId, NftId objectNftId) internal view returns (bool) {
83
+ return LibNftIdSet.contains(_allObjects[componentNftId], objectNftId);
84
+ }
85
+
86
+ function _getObject(NftId componentNftId, uint256 idx) internal view returns (NftId) {
87
+ return LibNftIdSet.getElementAt(_allObjects[componentNftId], idx);
88
+ }
89
+
90
+ function _activeObjs(NftId componentNftId) internal view returns (uint256) {
91
+ return LibNftIdSet.size(_activeObjects[componentNftId]);
92
+ }
93
+
94
+ function _isActive(NftId componentNftId, NftId objectNftId) internal view returns (bool) {
95
+ return LibNftIdSet.contains(_activeObjects[componentNftId], objectNftId);
96
+ }
97
+
98
+ function _getActiveObject(NftId componentNftId, uint256 idx) internal view returns (NftId) {
99
+ return LibNftIdSet.getElementAt(_activeObjects[componentNftId], idx);
100
+ }
101
+ }
@@ -0,0 +1,134 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
6
+ import {IInstance} from "../../instance/IInstance.sol";
7
+ import {ObjectType, INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE} from "../../types/ObjectType.sol";
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";
10
+
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";
16
+ import {Version, VersionPart, VersionLib} from "../../types/Version.sol";
17
+
18
+ abstract contract ComponentServiceBase is Service {
19
+
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,
48
+ address initialOwner
49
+ )
50
+ internal
51
+ override
52
+ {
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()));
62
+ }
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
+ }
109
+
110
+ function _getAndVerifyComponentInfoAndInstance(
111
+ ObjectType objectType
112
+ )
113
+ internal
114
+ view
115
+ returns(
116
+ IRegistry.ObjectInfo memory info,
117
+ IInstance instance
118
+ )
119
+ {
120
+ NftId componentNftId = _registry.getNftId(msg.sender);
121
+ require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
122
+
123
+ info = getRegistry().getObjectInfo(componentNftId);
124
+ require(info.objectType == objectType, "OBJECT_TYPE_INVALID");
125
+
126
+ address instanceAddress = getRegistry().getObjectInfo(info.parentNftId).objectAddress;
127
+ instance = IInstance(instanceAddress);
128
+ }
129
+
130
+ function getRegistryService() public view virtual returns (IRegistryService) {
131
+ address service = getRegistry().getServiceAddress("RegistryService", getMajorVersion());
132
+ return IRegistryService(service);
133
+ }
134
+ }
@@ -0,0 +1,23 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Key32} from "../../types/Key32.sol";
5
+ import {StateId} from "../../types/StateId.sol";
6
+
7
+ import {IKeyValueStore} from "./IKeyValueStore.sol";
8
+
9
+ import {IComponentOwnerService} from "../service/IComponentOwnerService.sol";
10
+ import {IDistributionService} from "../service/IDistributionService.sol";
11
+ import {IProductService} from "../service/IProductService.sol";
12
+ import {IPoolService} from "../service/IPoolService.sol";
13
+
14
+ interface IInstanceBase {
15
+ function getKeyValueStore() external view returns (IKeyValueStore keyValueStore);
16
+ function updateState(Key32 key, StateId state) external;
17
+ function getState(Key32 key) external view returns (StateId state);
18
+
19
+ function getComponentOwnerService() external view returns(IComponentOwnerService);
20
+ function getDistributionService() external view returns(IDistributionService);
21
+ function getProductService() external view returns(IProductService service);
22
+ function getPoolService() external view returns(IPoolService service);
23
+ }
@@ -9,6 +9,7 @@ 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
15
  struct Value {
@@ -33,10 +34,10 @@ interface IKeyValueStore is ILifecycle {
33
34
  event LogStateUpdated(ObjectType objectType, KeyId keyId, StateId stateOld, StateId stateNew, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
34
35
 
35
36
  // generic state changing functions
36
- function create(Key32 key, bytes memory data) external;
37
- function update(Key32 key, bytes memory data, StateId state) external;
38
- function updateData(Key32 key, bytes memory data) external;
39
- 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;
40
41
 
41
42
  function exists(Key32 key) external view returns (bool);
42
43
  function get(Key32 key) external view returns (Value memory value);
@@ -14,25 +14,12 @@ import {IKeyValueStore} from "./IKeyValueStore.sol";
14
14
  contract KeyValueStore is Lifecycle, IKeyValueStore {
15
15
 
16
16
  mapping(Key32 key32 => Value value) private _value;
17
- address private _owner;
18
-
19
- modifier onlyOwner() {
20
- require(
21
- msg.sender == _owner,
22
- "ERROR:KVS-001:NOT_OWNER");
23
- _;
24
- }
25
-
26
- constructor() {
27
- _owner = msg.sender;
28
- }
29
17
 
30
18
  function create(
31
19
  Key32 key32,
32
20
  bytes memory data
33
21
  )
34
- public
35
- onlyOwner
22
+ internal
36
23
  {
37
24
  _create(key32, data);
38
25
  }
@@ -72,8 +59,7 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
72
59
  bytes memory data,
73
60
  StateId state
74
61
  )
75
- public
76
- onlyOwner
62
+ internal
77
63
  {
78
64
  _update(key32, data, state);
79
65
  }
@@ -108,8 +94,7 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
108
94
  }
109
95
 
110
96
  function updateData(Key32 key32, bytes memory data)
111
- public
112
- onlyOwner
97
+ internal
113
98
  {
114
99
  _updateData(key32, data);
115
100
  }
@@ -136,8 +121,7 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
136
121
  }
137
122
 
138
123
  function updateState(Key32 key32, StateId state)
139
- public
140
- onlyOwner
124
+ internal
141
125
  {
142
126
  _updateState(key32, state);
143
127
  }