@etherisc/gif-next 0.0.2-c96f882-016 → 0.0.2-ca9d515-311

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 (234) hide show
  1. package/README.md +63 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +139 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +149 -15
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +101 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +28 -2
  11. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  12. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  13. package/artifacts/contracts/components/Pool.sol/Pool.json +181 -16
  14. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  15. package/artifacts/contracts/components/Product.sol/Product.json +157 -56
  16. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  35. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  37. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  39. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  40. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  41. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  42. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  43. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  44. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +74 -3
  45. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +1 -1
  46. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1395 -22
  48. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  49. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  50. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +6 -1
  52. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/Instance.sol/Instance.json +208 -155
  54. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +57 -47
  56. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  58. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  59. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +177 -38
  60. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +341 -57
  62. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +135 -15
  64. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  66. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +40 -0
  68. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  70. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
  73. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  75. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  76. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  77. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  78. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  79. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  80. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  82. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +923 -0
  84. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +440 -0
  86. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +18 -18
  88. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +684 -0
  90. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +428 -0
  92. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  94. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  98. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +9 -71
  100. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +17 -232
  102. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +984 -0
  104. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  106. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +718 -0
  108. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +428 -0
  110. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +768 -0
  112. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  114. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  115. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  116. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +23 -105
  117. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  118. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -19
  119. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  120. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  121. package/artifacts/contracts/registry/Registry.sol/Registry.json +70 -145
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +61 -29
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +44 -35
  126. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  127. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  128. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  129. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  131. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  137. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  138. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  139. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  140. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +4 -4
  141. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  143. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  144. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  145. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  147. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +4 -4
  149. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  151. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestService.sol/TestService.json +11 -11
  153. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  156. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  157. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  158. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  163. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  165. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  166. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  172. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  174. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  179. package/contracts/components/BaseComponent.sol +57 -11
  180. package/contracts/components/Distribution.sol +15 -18
  181. package/contracts/components/IBaseComponent.sol +7 -0
  182. package/contracts/components/IDistributionComponent.sol +1 -0
  183. package/contracts/components/IPoolComponent.sol +5 -1
  184. package/contracts/components/Pool.sol +43 -31
  185. package/contracts/components/Product.sol +42 -47
  186. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  187. package/contracts/instance/BundleManager.sol +129 -0
  188. package/contracts/instance/Cloneable.sol +46 -0
  189. package/contracts/instance/IInstance.sol +39 -7
  190. package/contracts/instance/IInstanceBase.sol +26 -0
  191. package/contracts/instance/IInstanceService.sol +5 -3
  192. package/contracts/instance/Instance.sol +55 -32
  193. package/contracts/instance/InstanceAccessManager.sol +6 -6
  194. package/contracts/instance/InstanceBase.sol +41 -0
  195. package/contracts/instance/InstanceReader.sol +26 -1
  196. package/contracts/instance/InstanceService.sol +156 -33
  197. package/contracts/instance/InstanceServiceManager.sol +6 -5
  198. package/contracts/instance/ObjectManager.sol +101 -0
  199. package/contracts/instance/base/ComponentServiceBase.sol +42 -19
  200. package/contracts/instance/module/IBundle.sol +1 -0
  201. package/contracts/instance/module/ISetup.sol +3 -0
  202. package/contracts/instance/service/BundleService.sol +260 -0
  203. package/contracts/instance/service/BundleServiceManager.sol +54 -0
  204. package/contracts/instance/service/DistributionService.sol +118 -0
  205. package/contracts/instance/service/DistributionServiceManager.sol +54 -0
  206. package/contracts/instance/service/IBundleService.sol +45 -0
  207. package/contracts/instance/service/IPolicyService.sol +87 -0
  208. package/contracts/instance/service/IPoolService.sol +6 -23
  209. package/contracts/instance/service/IProductService.sol +6 -73
  210. package/contracts/instance/service/PolicyService.sol +508 -0
  211. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  212. package/contracts/instance/service/PoolService.sol +124 -0
  213. package/contracts/instance/service/PoolServiceManager.sol +54 -0
  214. package/contracts/instance/service/ProductService.sol +173 -0
  215. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  216. package/contracts/registry/IRegistry.sol +8 -17
  217. package/contracts/registry/IRegistryService.sol +27 -12
  218. package/contracts/registry/Registry.sol +18 -42
  219. package/contracts/registry/RegistryService.sol +30 -116
  220. package/contracts/registry/RegistryServiceManager.sol +21 -5
  221. package/contracts/registry/TokenRegistry.sol +111 -0
  222. package/contracts/shared/ERC165.sol +6 -2
  223. package/contracts/shared/NftOwnable.sol +2 -4
  224. package/contracts/shared/Registerable.sol +1 -0
  225. package/contracts/shared/Service.sol +1 -0
  226. package/contracts/types/NftIdSet.sol +26 -24
  227. package/contracts/types/RoleId.sol +10 -0
  228. package/contracts/types/StateId.sol +4 -0
  229. package/package.json +1 -1
  230. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  231. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  232. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  233. package/contracts/instance/AccessManagedSimple.sol +0 -122
  234. package/contracts/instance/AccessManagerSimple.sol +0 -692
@@ -1,17 +1,13 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
4
  import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
6
- import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
7
5
  import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
8
6
 
9
7
  import {IRegistry} from "./IRegistry.sol";
10
8
  import {IInstance} from "../instance/IInstance.sol";
11
9
 
12
10
  import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
13
- // import {IComponent, IComponentModule} from "../../contracts/instance/module/component/IComponent.sol";
14
- // import {IPool} from "../../contracts/instance/module/pool/IPoolModule.sol";
15
11
  import {IBaseComponent} from "../../contracts/components/IBaseComponent.sol";
16
12
  import {IPoolComponent} from "../../contracts/components/IPoolComponent.sol";
17
13
  import {IProductComponent} from "../../contracts/components/IProductComponent.sol";
@@ -22,7 +18,7 @@ import {Versionable} from "../../contracts/shared/Versionable.sol";
22
18
  import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
23
19
 
24
20
  import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../contracts/types/RoleId.sol";
25
- import {ObjectType, REGISTRY, TOKEN, SERVICE, PRODUCT, ORACLE, POOL, TOKEN, INSTANCE, DISTRIBUTION, POLICY, BUNDLE} from "../../contracts/types/ObjectType.sol";
21
+ import {ObjectType, REGISTRY, SERVICE, PRODUCT, ORACLE, POOL, INSTANCE, DISTRIBUTION, POLICY, BUNDLE, STAKE} from "../../contracts/types/ObjectType.sol";
26
22
  import {StateId, ACTIVE, PAUSED} from "../../contracts/types/StateId.sol";
27
23
  import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
28
24
  import {Fee, FeeLib} from "../../contracts/types/Fee.sol";
@@ -32,7 +28,6 @@ import {Service} from "../shared/Service.sol";
32
28
  import {IService} from "../shared/IService.sol";
33
29
  import {IRegistryService} from "./IRegistryService.sol";
34
30
  import {Registry} from "./Registry.sol";
35
- import {ChainNft} from "./ChainNft.sol";
36
31
 
37
32
  contract RegistryService is
38
33
  AccessManagedUpgradeable,
@@ -41,23 +36,6 @@ contract RegistryService is
41
36
  {
42
37
  using NftIdLib for NftId;
43
38
 
44
- error SelfRegistration();
45
- error NotRegistryOwner();
46
-
47
- error NotToken();
48
- error NotService();
49
- error NotInstance();
50
- error NotProduct();
51
- error NotPool();
52
- error NotDistribution();
53
-
54
- error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
55
- error NotRegisterableOwner(address expectedOwner);
56
- error RegisterableOwnerIsZero();
57
- error RegisterableOwnerIsRegistered();
58
- error InvalidInitialOwner(address initialOwner);
59
- error InvalidAddress(address registerableAddress);
60
-
61
39
 
62
40
  // Initial value for constant variable has to be compile-time constant
63
41
  // TODO define types as constants?
@@ -69,48 +47,6 @@ contract RegistryService is
69
47
 
70
48
  address public constant NFT_LOCK_ADDRESS = address(0x1);
71
49
 
72
- /// @dev
73
- // msg.sender - ONLY registry owner
74
- // CAN NOT register itself
75
- // CAN NOT register IRegisterable address
76
- // CAN register ONLY valid object-parent types combinations for TOKEN
77
- // IMPORTANT: MUST NOT call untrusted contract inbetween calls to registry/instance (trusted contracts)
78
- // motivation: registry/instance state may change during external call
79
- // TODO it may be usefull to have transferable token nft in order to delist token, make it invalid for new beginings
80
- // TODO: MUST prohibit registration of precompiles addresses
81
- function registerToken(address tokenAddress)
82
- external
83
- returns(NftId nftId)
84
- {
85
- if(msg.sender == tokenAddress) {
86
- revert SelfRegistration();
87
- }
88
-
89
- // MUST not revert if no ERC165 support
90
- if(tokenAddress.code.length == 0 ||
91
- ERC165Checker.supportsInterface(tokenAddress, type(IRegisterable).interfaceId)) {
92
- revert NotToken();
93
- }
94
-
95
- NftId registryNftId = _registry.getNftId(address(_registry));
96
-
97
- if(msg.sender != _registry.ownerOf(registryNftId)) {
98
- revert NotRegistryOwner();
99
- }
100
-
101
- IRegistry.ObjectInfo memory info = IRegistry.ObjectInfo(
102
- zeroNftId(), // any value
103
- registryNftId, // parent nft id
104
- TOKEN(),
105
- false, // isInterceptor
106
- tokenAddress,
107
- NFT_LOCK_ADDRESS,
108
- "" // any value
109
- );
110
-
111
- nftId = _registry.register(info);
112
- }
113
-
114
50
  /// @dev
115
51
  // msg.sender - ONLY registry owner
116
52
  // CAN NOT register itself
@@ -119,9 +55,7 @@ contract RegistryService is
119
55
  // IMPORTANT: MUST NOT check owner before calling external contract
120
56
  function registerService(IService service)
121
57
  external
122
- // TODO restrict access - registryService.registerService must use accessmanager for checking permissions as
123
- // services are not always owned by registry owner - actually only registry service is owned by registry owner
124
-
58
+ restricted
125
59
  returns(
126
60
  IRegistry.ObjectInfo memory info,
127
61
  bytes memory data
@@ -140,17 +74,9 @@ contract RegistryService is
140
74
 
141
75
  info.nftId = _registry.register(info);
142
76
  service.linkToRegisteredNftId();
143
- return (
144
- info,
145
- data
146
- );
77
+ return (info, data);
147
78
  }
148
79
 
149
- // If msg.sender is approved service:
150
- // 1) add owner arg (service MUST pass it's msg.sender as owner)
151
- // 2) check service allowance
152
- // 3) comment self registrstion check
153
- //function registerInstance(IRegisterable instance, address owner)
154
80
  function registerInstance(IRegisterable instance)
155
81
  external
156
82
  returns(
@@ -170,10 +96,7 @@ contract RegistryService is
170
96
  info.nftId = _registry.register(info);
171
97
  instance.linkToRegisteredNftId(); // asume safe
172
98
 
173
- return (
174
- info,
175
- data
176
- );
99
+ return (info, data);
177
100
  }
178
101
 
179
102
  function registerProduct(IBaseComponent product, address owner)
@@ -194,16 +117,11 @@ contract RegistryService is
194
117
  data
195
118
  ) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
196
119
 
197
- NftId serviceNftId = _registry.getNftId(msg.sender);
198
-
199
120
  info.nftId = _registry.register(info);
200
121
  // TODO unsafe, let component or its owner derive nftId latter, when state assumptions and modifications of GIF contracts are finished
201
122
  product.linkToRegisteredNftId();
202
123
 
203
- return (
204
- info,
205
- data
206
- );
124
+ return (info, data);
207
125
  }
208
126
 
209
127
  function registerPool(IBaseComponent pool, address owner)
@@ -223,15 +141,10 @@ contract RegistryService is
223
141
  data
224
142
  ) = _getAndVerifyContractInfo(pool, POOL(), owner);
225
143
 
226
- NftId serviceNftId = _registry.getNftId(msg.sender);
227
-
228
144
  info.nftId = _registry.register(info);
229
145
  pool.linkToRegisteredNftId();
230
146
 
231
- return (
232
- info,
233
- data
234
- );
147
+ return (info, data);
235
148
  }
236
149
 
237
150
  function registerDistribution(IBaseComponent distribution, address owner)
@@ -251,15 +164,10 @@ contract RegistryService is
251
164
  data
252
165
  ) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
253
166
 
254
- NftId serviceNftId = _registry.getNftId(msg.sender);
255
-
256
167
  info.nftId = _registry.register(info);
257
168
  distribution.linkToRegisteredNftId();
258
169
 
259
- return (
260
- info,
261
- data
262
- );
170
+ return (info, data);
263
171
  }
264
172
 
265
173
  function registerPolicy(IRegistry.ObjectInfo memory info)
@@ -267,8 +175,6 @@ contract RegistryService is
267
175
  restricted
268
176
  returns(NftId nftId)
269
177
  {
270
- NftId senderNftId = _registry.getNftId(msg.sender);
271
-
272
178
  _verifyObjectInfo(info, POLICY());
273
179
 
274
180
  nftId = _registry.register(info);
@@ -279,14 +185,20 @@ contract RegistryService is
279
185
  restricted
280
186
  returns(NftId nftId)
281
187
  {
282
-
283
- NftId senderNftId = _registry.getNftId(msg.sender);
284
-
285
188
  _verifyObjectInfo(info, BUNDLE());
286
189
 
287
190
  nftId = _registry.register(info);
288
191
  }
289
192
 
193
+ function registerStake(IRegistry.ObjectInfo memory info)
194
+ external
195
+ restricted
196
+ returns(NftId nftId)
197
+ {
198
+ _verifyObjectInfo(info, STAKE());
199
+
200
+ nftId = _registry.register(info);
201
+ }
290
202
 
291
203
  // From IService
292
204
  function getName() public pure override(IService, Service) returns(string memory) {
@@ -341,7 +253,6 @@ contract RegistryService is
341
253
  _registerInterface(type(IRegistryService).interfaceId);
342
254
  }
343
255
 
344
- // parent check done in registry because of approve()
345
256
  function _getAndVerifyContractInfo(
346
257
  IRegisterable registerable,
347
258
  ObjectType expectedType, // assume can be valid only
@@ -400,25 +311,28 @@ contract RegistryService is
400
311
  );
401
312
  }
402
313
 
403
- // parent checks done in registry because of approve()
404
314
  function _verifyObjectInfo(
405
315
  IRegistry.ObjectInfo memory info,
406
- ObjectType objectType
316
+ ObjectType expectedType
407
317
  )
408
318
  internal
409
319
  view
410
320
  {
411
- if(info.objectAddress > address(0)) {
412
- revert InvalidAddress(info.objectAddress);
321
+ // enforce instead of check
322
+ info.objectAddress = address(0);
323
+
324
+ if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
325
+ revert UnexpectedRegisterableType(expectedType, info.objectType);
326
+ }
327
+
328
+ address owner = info.initialOwner;
329
+
330
+ if(owner == address(0)) {
331
+ revert RegisterableOwnerIsZero();
413
332
  }
414
333
 
415
- if(
416
- getRegistry().isRegistered(info.initialOwner) ||
417
- info.initialOwner == address(0)) {
418
- // TODO non registered address can register object(e.g. POLICY()) and then transfer associated nft to registered contract
419
- // what are motivations to do so?
420
- // at least registered contract can not register objects by itself, SERVICE,
421
- revert InvalidInitialOwner(info.initialOwner);
334
+ if(getRegistry().isRegistered(owner)) {
335
+ revert RegisterableOwnerIsRegistered();
422
336
  }
423
337
 
424
338
  // can catch all 3 if check that initialOwner is not registered
@@ -9,6 +9,7 @@ import {Registry} from "./Registry.sol";
9
9
  import {IVersionable} from "../shared/IVersionable.sol";
10
10
  import {ProxyManager} from "../shared/ProxyManager.sol";
11
11
  import {RegistryService} from "./RegistryService.sol";
12
+ import {TokenRegistry} from "./TokenRegistry.sol";
12
13
 
13
14
 
14
15
  contract RegistryServiceManager is
@@ -16,9 +17,9 @@ contract RegistryServiceManager is
16
17
  {
17
18
  bytes32 constant public ACCESS_MANAGER_CREATION_CODE_HASH = 0x0;
18
19
 
19
- RegistryService private _registryService;
20
-
21
20
  AccessManager private _accessManager;
21
+ RegistryService private _registryService;
22
+ TokenRegistry private _tokenRegistry;
22
23
 
23
24
  /// @dev initializes proxy manager with registry service implementation and deploys registry
24
25
  constructor(
@@ -41,11 +42,26 @@ contract RegistryServiceManager is
41
42
  address(_registryService.getRegistry()),
42
43
  address(_registryService));
43
44
 
45
+ // deploy token registry
46
+
47
+ // _tokenRegistry = new TokenRegistry(
48
+ // address(_registryService.getRegistry()),
49
+ // address(_registryService));
50
+
44
51
  // implies that after this constructor call only upgrade functionality is available
45
52
  _isDeployed = true;
46
53
  }
47
54
 
48
55
  //--- view functions ----------------------------------------------------//
56
+
57
+ function getAccessManager()
58
+ external
59
+ view
60
+ returns (AccessManager)
61
+ {
62
+ return _accessManager;
63
+ }
64
+
49
65
  function getRegistryService()
50
66
  external
51
67
  view
@@ -54,11 +70,11 @@ contract RegistryServiceManager is
54
70
  return _registryService;
55
71
  }
56
72
 
57
- function getAccessManager()
73
+ function getTokenRegistry()
58
74
  external
59
75
  view
60
- returns (AccessManager)
76
+ returns (TokenRegistry)
61
77
  {
62
- return _accessManager;
78
+ return _tokenRegistry;
63
79
  }
64
80
  }
@@ -0,0 +1,111 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+ import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
6
+
7
+ import {IRegisterable} from "../shared/IRegisterable.sol";
8
+ import {IRegistry} from "./IRegistry.sol";
9
+ import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
10
+ import {NftOwnable} from "../shared/NftOwnable.sol";
11
+
12
+ /// @title contract to register token per GIF major release.
13
+ contract TokenRegistry is
14
+ NftOwnable
15
+ {
16
+
17
+ string public constant REGISTRY_SERVICE_NAME = "RegistryService";
18
+
19
+ event LogRegistered(address token, string symbol, uint256 decimals);
20
+ event LogTokenStateSet(address token, VersionPart majorVersion, bool active);
21
+
22
+ error NotContract(address account);
23
+ error NotToken(address account);
24
+ error TokenDecimalsZero();
25
+ error TokenMajorVersionInvalid(VersionPart majorVersion);
26
+
27
+ address [] internal _token;
28
+ mapping(address token => bool registered) internal _registered;
29
+ mapping(address token => mapping(VersionPart majorVersion => bool isActive)) internal _active;
30
+
31
+ constructor()
32
+ NftOwnable()
33
+ { }
34
+
35
+
36
+ /// @dev link ownership of token registry to nft owner of registry service
37
+ function linkToNftOwnable(address registryAddress)
38
+ external
39
+ onlyOwner
40
+ {
41
+ IRegistry registry = IRegistry(registryAddress);
42
+ address registryServiceAddress = registry.getServiceAddress(REGISTRY_SERVICE_NAME, registry.getMajorVersion());
43
+
44
+ _linkToNftOwnable(registryAddress, registryServiceAddress);
45
+ }
46
+
47
+ /// @dev token state is informative, registry have no clue about used tokens
48
+ // component owner is responsible for token selection and operations
49
+ // service MUST deny registration of component with inactive token
50
+ function setActive(address token, VersionPart majorVersion, bool active)
51
+ external
52
+ onlyOwner
53
+ {
54
+ // verify that token is registered
55
+ if (!_registered[token]) {
56
+ _registerToken(token);
57
+ }
58
+
59
+ // verify valid major version
60
+ // ensure major version increments is one
61
+ uint256 version = majorVersion.toInt();
62
+ if (version < _registry.getMajorVersionMin().toInt() || version > _registry.getMajorVersionMax().toInt()) {
63
+ revert TokenMajorVersionInvalid(majorVersion);
64
+ }
65
+
66
+ _active[token][majorVersion] = active;
67
+
68
+ emit LogTokenStateSet(token, majorVersion, active);
69
+ }
70
+
71
+ function tokens() external view returns (uint256) {
72
+ return _token.length;
73
+ }
74
+
75
+ function getToken(uint256 idx) external view returns (IERC20Metadata token) {
76
+ return IERC20Metadata(_token[idx]);
77
+ }
78
+
79
+ function isRegistered(address token) external view returns (bool) {
80
+ return _registered[token];
81
+ }
82
+
83
+ function isActive(address token, VersionPart majorVersion) external view returns (bool) {
84
+ return _active[token][majorVersion];
85
+ }
86
+
87
+ /// @dev some sanity checks to prevent unintended registration
88
+ function _registerToken(address token) internal {
89
+
90
+ // MUST be contract
91
+ if(token.code.length == 0) {
92
+ revert NotContract(token);
93
+ }
94
+
95
+ // MUST not be GIF registerable
96
+ if(ERC165Checker.supportsInterface(token, type(IRegisterable).interfaceId)) {
97
+ revert NotToken(token);
98
+ }
99
+
100
+ // MUST have decimals > 0
101
+ IERC20Metadata erc20 = IERC20Metadata(token);
102
+ if(erc20.decimals() == 0) {
103
+ revert TokenDecimalsZero();
104
+ }
105
+
106
+ _registered[token] = true;
107
+ _token.push(token);
108
+
109
+ emit LogRegistered(token, erc20.symbol(), erc20.decimals());
110
+ }
111
+ }
@@ -7,14 +7,18 @@ contract ERC165 is IERC165 {
7
7
  mapping(bytes4 => bool) private _isSupported;
8
8
 
9
9
  constructor() {
10
- // register support for ERC165
11
- _registerInterface(type(IERC165).interfaceId);
10
+ _initializeERC165();
12
11
  }
13
12
 
14
13
  function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
15
14
  return _isSupported[interfaceId];
16
15
  }
17
16
 
17
+ // @dev register support for ERC165 itself
18
+ function _initializeERC165() internal {
19
+ _isSupported[type(IERC165).interfaceId] = true;
20
+ }
21
+
18
22
  function _registerInterface(bytes4 interfaceId) internal {
19
23
  _isSupported[interfaceId] = true;
20
24
  }
@@ -13,10 +13,7 @@ contract NftOwnable is INftOwnable {
13
13
 
14
14
  /// @dev enforces msg.sender is owner of nft (or initial owner of nft ownable)
15
15
  modifier onlyOwner() {
16
- address owner = getOwner();
17
-
18
- // owner == address(0) is eg uninitialized upgradable contract
19
- if (owner != address(0) && msg.sender != owner) {
16
+ if (msg.sender != getOwner()) {
20
17
  revert ErrorNotOwner(msg.sender);
21
18
  }
22
19
  _;
@@ -77,6 +74,7 @@ contract NftOwnable is INftOwnable {
77
74
  internal
78
75
  virtual
79
76
  {
77
+ require(initialOwner > address(0), "NftOwnable: initial owner is 0");
80
78
  _initialOwner = initialOwner;
81
79
  _setRegistry(registryAddress);
82
80
  }
@@ -49,6 +49,7 @@ contract Registerable is
49
49
  //onlyInitializing//TODO uncomment when "fully" upgradeable
50
50
  virtual
51
51
  {
52
+ _initializeERC165();
52
53
  _initializeNftOwnable(
53
54
  initialOwner,
54
55
  registryAddress);
@@ -36,6 +36,7 @@ abstract contract Service is
36
36
  address initialOwner
37
37
  )
38
38
  internal
39
+ virtual
39
40
  //onlyInitializing //TODO uncomment when "fully" upgradeable
40
41
  {
41
42
  // service must provide its name and version upon registration
@@ -11,35 +11,37 @@ library LibNftIdSet {
11
11
  mapping(NftId nftid => uint256 index) at;
12
12
  }
13
13
 
14
- function add(Set storage set, NftId nftId) external returns(bool added) {
15
- if (set.at[nftId] == 0) {
16
- set.ids.push(nftId);
17
- set.at[nftId] = set.ids.length;
18
- return true;
19
- } else {
20
- return false;
14
+ error ErrorNftIdSetAlreadyAdded(NftId nftId);
15
+ error ErrorNftIdSetNotInSet(NftId nftId);
16
+
17
+
18
+ function add(Set storage set, NftId nftId) external {
19
+ if (set.at[nftId] > 0) {
20
+ revert ErrorNftIdSetAlreadyAdded(nftId);
21
21
  }
22
+
23
+ set.ids.push(nftId);
24
+ set.at[nftId] = set.ids.length;
22
25
  }
23
26
 
24
- function remove(Set storage set, NftId nftId) external returns(bool removed) {
27
+ function remove(Set storage set, NftId nftId) external {
25
28
  uint256 nftIdIndex = set.at[nftId];
26
29
 
27
- if (nftIdIndex > 0) {
28
- uint256 toDeleteIndex = nftIdIndex - 1;
29
- uint256 lastIndex = set.ids.length - 1;
30
-
31
- if (lastIndex != toDeleteIndex) {
32
- NftId lastId = set.ids[lastIndex];
33
- set.ids[toDeleteIndex] = lastId;
34
- set.at[lastId] = nftIdIndex; // Replace lastValue's index to valueIndex
35
- }
36
-
37
- set.ids.pop();
38
- delete set.at[nftId];
39
- return true;
40
- } else {
41
- return false;
30
+ if (nftIdIndex == 0) {
31
+ revert ErrorNftIdSetNotInSet(nftId);
42
32
  }
33
+
34
+ uint256 toDeleteIndex = nftIdIndex - 1;
35
+ uint256 lastIndex = set.ids.length - 1;
36
+
37
+ if (lastIndex != toDeleteIndex) {
38
+ NftId lastId = set.ids[lastIndex];
39
+ set.ids[toDeleteIndex] = lastId;
40
+ set.at[lastId] = nftIdIndex; // Replace lastValue's index to valueIndex
41
+ }
42
+
43
+ set.ids.pop();
44
+ delete set.at[nftId];
43
45
  }
44
46
 
45
47
  function isEmpty(Set storage set) external view returns(bool empty) {
@@ -50,7 +52,7 @@ library LibNftIdSet {
50
52
  return set.at[nftId] > 0;
51
53
  }
52
54
 
53
- function getLength(Set storage set) external view returns(uint256 length) {
55
+ function size(Set storage set) external view returns(uint256 length) {
54
56
  return set.ids.length;
55
57
  }
56
58
 
@@ -22,6 +22,8 @@ function ORACLE_OWNER_ROLE_NAME() pure returns (string memory) { return "OracleO
22
22
  function POOL_OWNER_ROLE_NAME() pure returns (string memory) { return "PoolOwnerRole"; }
23
23
  function PRODUCT_OWNER_ROLE_NAME() pure returns (string memory) { return "ProductOwnerRole"; }
24
24
 
25
+ function ADMIN_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(0); }
26
+
25
27
  // TODO correct numbers (maybe they are already defined in RegistryService)
26
28
  function DISTRIBUTION_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(100); }
27
29
  function ORACLE_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(200); }
@@ -34,6 +36,14 @@ function BUNDLE_REGISTRAR_ROLE() pure returns (RoleId) { return RoleIdLib.toRole
34
36
  function POOL_REGISTRAR_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1300); }
35
37
  function PRODUCT_REGISTRAR_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1400); }
36
38
 
39
+ function DISTRIBUTION_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(10000); }
40
+ function POOL_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(10100); }
41
+ function PRODUCT_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(10200); }
42
+ function POLICY_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(10300); }
43
+ function BUNDLE_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(10400); }
44
+
45
+ function INSTANCE_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(11000); }
46
+
37
47
  // @dev Returns true iff role ids a and b are identical
38
48
  function eqRoleId(RoleId a, RoleId b) pure returns (bool isSame) {
39
49
  return RoleId.unwrap(a) == RoleId.unwrap(b);
@@ -58,6 +58,10 @@ function PAID() pure returns (StateId) {
58
58
  return toStateId(220);
59
59
  }
60
60
 
61
+ function KEEP_STATE() pure returns (StateId) {
62
+ return toStateId(type(uint8).max);
63
+ }
64
+
61
65
  /// @dev Converts the uint8 to a StateId.
62
66
  function toStateId(uint256 id) pure returns (StateId) {
63
67
  return StateId.wrap(uint8(id));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etherisc/gif-next",
3
- "version": "0.0.2-c96f882-016",
3
+ "version": "0.0.2-ca9d515-311",
4
4
  "description": "This is the repository for the next version of the Generic Insurance Framework (GIF) smart contracts. ",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -1,4 +0,0 @@
1
- {
2
- "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/4417cf7db1cb3460af0011880a26cd5d.json"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/4417cf7db1cb3460af0011880a26cd5d.json"
4
- }