@etherisc/gif-next 0.0.2-b4fc06b-491 → 0.0.2-b81ff84-640

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 (134) hide show
  1. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  2. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  3. package/artifacts/contracts/components/Distribution.sol/Distribution.json +6 -6
  4. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  5. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  6. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  8. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  9. package/artifacts/contracts/components/Pool.sol/Pool.json +5 -5
  10. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  11. package/artifacts/contracts/components/Product.sol/Product.json +10 -10
  12. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  13. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  14. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  15. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  16. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  32. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +1 -1
  33. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +1 -1
  34. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +1 -1
  35. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  36. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  37. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  38. package/artifacts/contracts/instance/Instance.sol/Instance.json +64 -64
  39. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  40. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  41. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2 -2
  42. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +11 -11
  44. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +11 -11
  46. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  48. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  50. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  51. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  59. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  60. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +18 -18
  61. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  62. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  64. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  65. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  66. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  67. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +26 -0
  68. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  69. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -19
  70. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  71. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  72. package/artifacts/contracts/registry/Registry.sol/Registry.json +60 -24
  73. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  74. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +20 -44
  75. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  76. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +46 -29
  77. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  78. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
  79. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  80. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  81. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  82. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  83. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  84. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  85. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  86. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  87. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  88. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  89. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  90. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  91. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +4 -4
  92. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
  93. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  94. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  95. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  96. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  97. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  98. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  99. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +4 -4
  100. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  101. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  102. package/artifacts/contracts/test/TestService.sol/TestService.json +11 -11
  103. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  104. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  105. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  106. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  107. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  108. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  109. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  110. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  111. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  112. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  113. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  114. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  115. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  116. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  117. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  118. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  119. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  120. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  121. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  122. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  123. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  124. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  125. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  126. package/contracts/registry/IRegistry.sol +4 -0
  127. package/contracts/registry/IRegistryService.sol +0 -2
  128. package/contracts/registry/Registry.sol +23 -2
  129. package/contracts/registry/RegistryService.sol +2 -47
  130. package/contracts/registry/RegistryServiceManager.sol +21 -5
  131. package/contracts/registry/TokenRegistry.sol +111 -0
  132. package/contracts/shared/ERC165.sol +6 -2
  133. package/contracts/shared/Registerable.sol +1 -0
  134. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/978366686a0fbaf0b24250ce70a8b08d.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/978366686a0fbaf0b24250ce70a8b08d.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/978366686a0fbaf0b24250ce70a8b08d.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/978366686a0fbaf0b24250ce70a8b08d.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/978366686a0fbaf0b24250ce70a8b08d.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/978366686a0fbaf0b24250ce70a8b08d.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/978366686a0fbaf0b24250ce70a8b08d.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/978366686a0fbaf0b24250ce70a8b08d.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/978366686a0fbaf0b24250ce70a8b08d.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/978366686a0fbaf0b24250ce70a8b08d.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/978366686a0fbaf0b24250ce70a8b08d.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/978366686a0fbaf0b24250ce70a8b08d.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/83c3469f150315686e6d0eff19ca029b.json"
3
+ "buildInfo": "../../../build-info/978366686a0fbaf0b24250ce70a8b08d.json"
4
4
  }
@@ -55,6 +55,10 @@ interface IRegistry is IERC165 {
55
55
 
56
56
  function setTokenActive(address token, VersionPart majorVersion, bool active) external;
57
57
 
58
+ function getMajorVersionMin() external view returns (VersionPart);
59
+
60
+ function getMajorVersionMax() external view returns (VersionPart);
61
+
58
62
  function getMajorVersion() external view returns (VersionPart);
59
63
 
60
64
  function getObjectCount() external view returns (uint256);
@@ -12,8 +12,6 @@ import {IBaseComponent} from "../components/IBaseComponent.sol";
12
12
 
13
13
  interface IRegistryService is IService {
14
14
 
15
- function registerToken(address tokenAddress) external returns(NftId nftId);
16
-
17
15
  function registerService(IService service) external returns(IRegistry.ObjectInfo memory info, bytes memory data);
18
16
 
19
17
  function registerInstance(IRegisterable instance)
@@ -28,7 +28,7 @@ contract Registry is
28
28
  ERC165,
29
29
  IRegistry
30
30
  {
31
- uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3; // at registry deploymnet time
31
+ uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
32
32
  address public constant NFT_LOCK_ADDRESS = address(0x1);
33
33
  uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
34
34
  string public constant EMPTY_URI = "";
@@ -98,6 +98,7 @@ contract Registry is
98
98
 
99
99
  // from IRegistry
100
100
 
101
+ /// @dev latest GIF release version
101
102
  function setMajorVersion(VersionPart newMajorVersion)
102
103
  external
103
104
  onlyOwner
@@ -181,6 +182,9 @@ contract Registry is
181
182
  emit LogRegistration(info);
182
183
  }
183
184
 
185
+ /// @dev token state is informative, registry have no clue about used tokens
186
+ // component owner is responsible for token selection and operations
187
+ // service MUST deny registration of component with inactive token
184
188
  function setTokenActive(address token, VersionPart majorVersion, bool active)
185
189
  external
186
190
  onlyOwner
@@ -209,10 +213,27 @@ contract Registry is
209
213
  emit LogTokenStateSet(token, majorVersion, active);
210
214
  }
211
215
 
212
- /// @dev latest GIF release version
216
+ /// @dev earliest GIF major version
217
+ function getMajorVersionMin() external view returns (VersionPart) {
218
+ return VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
219
+ }
220
+
221
+ // TODO make distinction between active an not yet active version
222
+ // need to be thought trough, not yet clear if necessary
223
+ // need to answer question: what is the latest version during the upgrade process?
224
+ // likely setting up a new gif version does not fit into a single tx
225
+ // in this case we might want to have a period where the latest version is
226
+ // in the process of being set up while the latest active version is 1 major release smaller
227
+ /// @dev latest GIF major version (might not yet be active)
228
+ function getMajorVersionMax() external view returns (VersionPart) {
229
+ return _majorVersion;
230
+ }
231
+
232
+ /// @dev latest active GIF release version
213
233
  function getMajorVersion() external view returns (VersionPart) {
214
234
  return _majorVersion;
215
235
  }
236
+
216
237
 
217
238
  function getObjectCount() external view override returns (uint256) {
218
239
  return _chainNft.totalSupply();
@@ -1,9 +1,7 @@
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";
@@ -22,7 +20,7 @@ import {Versionable} from "../../contracts/shared/Versionable.sol";
22
20
  import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
23
21
 
24
22
  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";
23
+ import {ObjectType, REGISTRY, SERVICE, PRODUCT, ORACLE, POOL, INSTANCE, DISTRIBUTION, POLICY, BUNDLE} from "../../contracts/types/ObjectType.sol";
26
24
  import {StateId, ACTIVE, PAUSED} from "../../contracts/types/StateId.sol";
27
25
  import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
28
26
  import {Fee, FeeLib} from "../../contracts/types/Fee.sol";
@@ -41,10 +39,10 @@ contract RegistryService is
41
39
  {
42
40
  using NftIdLib for NftId;
43
41
 
42
+ // TODO move errors to interface contract
44
43
  error SelfRegistration();
45
44
  error NotRegistryOwner();
46
45
 
47
- error NotToken();
48
46
  error NotService();
49
47
  error NotInstance();
50
48
  error NotProduct();
@@ -58,7 +56,6 @@ contract RegistryService is
58
56
  error InvalidInitialOwner(address initialOwner);
59
57
  error InvalidAddress(address registerableAddress);
60
58
 
61
-
62
59
  // Initial value for constant variable has to be compile-time constant
63
60
  // TODO define types as constants?
64
61
  //ObjectType public constant SERVICE_TYPE = REGISTRY();
@@ -69,48 +66,6 @@ contract RegistryService is
69
66
 
70
67
  address public constant NFT_LOCK_ADDRESS = address(0x1);
71
68
 
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
69
  /// @dev
115
70
  // msg.sender - ONLY registry owner
116
71
  // CAN NOT register itself
@@ -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
  }
@@ -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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etherisc/gif-next",
3
- "version": "0.0.2-b4fc06b-491",
3
+ "version": "0.0.2-b81ff84-640",
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": {