@hyperlane-xyz/sdk 42.0.0 → 43.0.0

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 (206) hide show
  1. package/dist/consts/multisigIsm.d.ts.map +1 -1
  2. package/dist/consts/multisigIsm.js +12 -0
  3. package/dist/consts/multisigIsm.js.map +1 -1
  4. package/dist/core/types.d.ts +47 -1635
  5. package/dist/core/types.d.ts.map +1 -1
  6. package/dist/core/types.js +2 -2
  7. package/dist/core/types.js.map +1 -1
  8. package/dist/deploy/HyperlaneDeployer.js +1 -1
  9. package/dist/deploy/proxy.d.ts +8 -40
  10. package/dist/deploy/proxy.d.ts.map +1 -1
  11. package/dist/deploy/proxy.js +4 -4
  12. package/dist/deploy/proxy.js.map +1 -1
  13. package/dist/deploy/types.d.ts +1 -19
  14. package/dist/deploy/types.d.ts.map +1 -1
  15. package/dist/fee/EvmTokenFeeDeployer.d.ts.map +1 -1
  16. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js +68 -0
  17. package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js.map +1 -1
  18. package/dist/fee/EvmTokenFeeDeployer.js +18 -10
  19. package/dist/fee/EvmTokenFeeDeployer.js.map +1 -1
  20. package/dist/fee/EvmTokenFeeModule.d.ts.map +1 -1
  21. package/dist/fee/EvmTokenFeeModule.hardhat-test.js +18 -8
  22. package/dist/fee/EvmTokenFeeModule.hardhat-test.js.map +1 -1
  23. package/dist/fee/EvmTokenFeeModule.js +8 -1
  24. package/dist/fee/EvmTokenFeeModule.js.map +1 -1
  25. package/dist/fee/EvmTokenFeeReader.d.ts +2 -2
  26. package/dist/fee/EvmTokenFeeReader.d.ts.map +1 -1
  27. package/dist/fee/EvmTokenFeeReader.js.map +1 -1
  28. package/dist/fee/feeConfigMapping.d.ts.map +1 -1
  29. package/dist/fee/feeConfigMapping.js +1 -0
  30. package/dist/fee/feeConfigMapping.js.map +1 -1
  31. package/dist/fee/types.d.ts +147 -646
  32. package/dist/fee/types.d.ts.map +1 -1
  33. package/dist/fee/types.js +26 -17
  34. package/dist/fee/types.js.map +1 -1
  35. package/dist/fork/types.d.ts +125 -1924
  36. package/dist/fork/types.d.ts.map +1 -1
  37. package/dist/fork/types.js +3 -3
  38. package/dist/fork/types.js.map +1 -1
  39. package/dist/gas/oracle/types.d.ts +5 -56
  40. package/dist/gas/oracle/types.d.ts.map +1 -1
  41. package/dist/hook/EvmHookModule.d.ts.map +1 -1
  42. package/dist/hook/EvmHookModule.hardhat-test.js +12 -1
  43. package/dist/hook/EvmHookModule.hardhat-test.js.map +1 -1
  44. package/dist/hook/EvmHookModule.js +3 -0
  45. package/dist/hook/EvmHookModule.js.map +1 -1
  46. package/dist/hook/HyperlaneHookDeployer.d.ts +12 -0
  47. package/dist/hook/HyperlaneHookDeployer.d.ts.map +1 -1
  48. package/dist/hook/HyperlaneHookDeployer.hardhat-test.d.ts +2 -0
  49. package/dist/hook/HyperlaneHookDeployer.hardhat-test.d.ts.map +1 -0
  50. package/dist/hook/HyperlaneHookDeployer.hardhat-test.js +322 -0
  51. package/dist/hook/HyperlaneHookDeployer.hardhat-test.js.map +1 -0
  52. package/dist/hook/HyperlaneHookDeployer.js +262 -5
  53. package/dist/hook/HyperlaneHookDeployer.js.map +1 -1
  54. package/dist/hook/types.d.ts +44 -319
  55. package/dist/hook/types.d.ts.map +1 -1
  56. package/dist/hook/types.js +18 -11
  57. package/dist/hook/types.js.map +1 -1
  58. package/dist/ica/types.d.ts +35 -900
  59. package/dist/ica/types.d.ts.map +1 -1
  60. package/dist/ica/types.js +1 -1
  61. package/dist/ica/types.js.map +1 -1
  62. package/dist/index.d.ts +1 -1
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +1 -1
  65. package/dist/index.js.map +1 -1
  66. package/dist/ism/EvmIsmModule.d.ts +1 -1
  67. package/dist/ism/EvmIsmModule.d.ts.map +1 -1
  68. package/dist/ism/EvmIsmModule.hardhat-test.js +35 -1
  69. package/dist/ism/EvmIsmModule.hardhat-test.js.map +1 -1
  70. package/dist/ism/EvmIsmModule.js +15 -11
  71. package/dist/ism/EvmIsmModule.js.map +1 -1
  72. package/dist/ism/HyperlaneIsmFactory.d.ts +3 -1
  73. package/dist/ism/HyperlaneIsmFactory.d.ts.map +1 -1
  74. package/dist/ism/HyperlaneIsmFactory.hardhat-test.js +61 -3
  75. package/dist/ism/HyperlaneIsmFactory.hardhat-test.js.map +1 -1
  76. package/dist/ism/HyperlaneIsmFactory.js +42 -6
  77. package/dist/ism/HyperlaneIsmFactory.js.map +1 -1
  78. package/dist/ism/types.d.ts +48 -330
  79. package/dist/ism/types.d.ts.map +1 -1
  80. package/dist/ism/types.js +8 -10
  81. package/dist/ism/types.js.map +1 -1
  82. package/dist/metadata/agentConfig.d.ts +537 -10384
  83. package/dist/metadata/agentConfig.d.ts.map +1 -1
  84. package/dist/metadata/agentConfig.js +14 -16
  85. package/dist/metadata/agentConfig.js.map +1 -1
  86. package/dist/metadata/chainMetadataTypes.d.ts +70 -4678
  87. package/dist/metadata/chainMetadataTypes.d.ts.map +1 -1
  88. package/dist/metadata/chainMetadataTypes.js +5 -5
  89. package/dist/metadata/chainMetadataTypes.js.map +1 -1
  90. package/dist/metadata/customZodTypes.d.ts +5 -5
  91. package/dist/metadata/customZodTypes.d.ts.map +1 -1
  92. package/dist/metadata/customZodTypes.js +4 -5
  93. package/dist/metadata/customZodTypes.js.map +1 -1
  94. package/dist/metadata/deploymentArtifacts.d.ts +1 -13
  95. package/dist/metadata/deploymentArtifacts.d.ts.map +1 -1
  96. package/dist/metadata/matchingList.d.ts +12 -40
  97. package/dist/metadata/matchingList.d.ts.map +1 -1
  98. package/dist/metadata/warpRouteConfig.d.ts +8 -114
  99. package/dist/metadata/warpRouteConfig.d.ts.map +1 -1
  100. package/dist/metadata/warpRouteConfig.js +3 -3
  101. package/dist/metadata/warpRouteConfig.js.map +1 -1
  102. package/dist/middleware/account/InterchainAccount.d.ts.map +1 -1
  103. package/dist/middleware/account/InterchainAccount.js +12 -8
  104. package/dist/middleware/account/InterchainAccount.js.map +1 -1
  105. package/dist/middleware/account/InterchainAccount.test.js +22 -3
  106. package/dist/middleware/account/InterchainAccount.test.js.map +1 -1
  107. package/dist/middleware/account/icaCalls.d.ts +13 -145
  108. package/dist/middleware/account/icaCalls.d.ts.map +1 -1
  109. package/dist/middleware/account/types.d.ts +11 -105
  110. package/dist/middleware/account/types.d.ts.map +1 -1
  111. package/dist/predicate/PredicateApiClient.d.ts +1 -11
  112. package/dist/predicate/PredicateApiClient.d.ts.map +1 -1
  113. package/dist/providers/MultiProvider.d.ts.map +1 -1
  114. package/dist/providers/MultiProvider.js +3 -2
  115. package/dist/providers/MultiProvider.js.map +1 -1
  116. package/dist/providers/transactions/submitter/builder/types.d.ts +13 -280
  117. package/dist/providers/transactions/submitter/builder/types.d.ts.map +1 -1
  118. package/dist/providers/transactions/submitter/builder/types.js +2 -4
  119. package/dist/providers/transactions/submitter/builder/types.js.map +1 -1
  120. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.d.ts +2 -0
  121. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.d.ts.map +1 -1
  122. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.js +15 -7
  123. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.js.map +1 -1
  124. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.test.d.ts +2 -0
  125. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.test.d.ts.map +1 -0
  126. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.test.js +145 -0
  127. package/dist/providers/transactions/submitter/ethersV5/EV5GnosisSafeTxSubmitter.test.js.map +1 -0
  128. package/dist/providers/transactions/submitter/ethersV5/types.d.ts +30 -102
  129. package/dist/providers/transactions/submitter/ethersV5/types.d.ts.map +1 -1
  130. package/dist/providers/transactions/submitter/ethersV5/types.js +3 -21
  131. package/dist/providers/transactions/submitter/ethersV5/types.js.map +1 -1
  132. package/dist/providers/transactions/submitter/types.d.ts +5 -51
  133. package/dist/providers/transactions/submitter/types.d.ts.map +1 -1
  134. package/dist/providers/transactions/types.d.ts +1 -9
  135. package/dist/providers/transactions/types.d.ts.map +1 -1
  136. package/dist/router/types.d.ts +33 -819
  137. package/dist/router/types.d.ts.map +1 -1
  138. package/dist/router/types.js +4 -4
  139. package/dist/router/types.js.map +1 -1
  140. package/dist/rpc/evm/EvmEventLogsReader.d.ts +19 -27
  141. package/dist/rpc/evm/EvmEventLogsReader.d.ts.map +1 -1
  142. package/dist/rpc/evm/EvmEventLogsReader.js +23 -0
  143. package/dist/rpc/evm/EvmEventLogsReader.js.map +1 -1
  144. package/dist/rpc/evm/EvmEventLogsReader.test.js +53 -1
  145. package/dist/rpc/evm/EvmEventLogsReader.test.js.map +1 -1
  146. package/dist/signers/turnkeyClient.d.ts +1 -15
  147. package/dist/signers/turnkeyClient.d.ts.map +1 -1
  148. package/dist/timelock/types.d.ts +8 -32
  149. package/dist/timelock/types.d.ts.map +1 -1
  150. package/dist/token/EvmWarpRouteReader.d.ts.map +1 -1
  151. package/dist/token/EvmWarpRouteReader.js +36 -19
  152. package/dist/token/EvmWarpRouteReader.js.map +1 -1
  153. package/dist/token/EvmWarpRouteReader.test.js +219 -2
  154. package/dist/token/EvmWarpRouteReader.test.js.map +1 -1
  155. package/dist/token/EvmXERC20Reader.d.ts +9 -21
  156. package/dist/token/EvmXERC20Reader.d.ts.map +1 -1
  157. package/dist/token/EvmXERC20Reader.js +24 -48
  158. package/dist/token/EvmXERC20Reader.js.map +1 -1
  159. package/dist/token/EvmXERC20Reader.test.js +97 -0
  160. package/dist/token/EvmXERC20Reader.test.js.map +1 -1
  161. package/dist/token/ITokenMetadata.d.ts +12 -130
  162. package/dist/token/ITokenMetadata.d.ts.map +1 -1
  163. package/dist/token/ITokenMetadata.js +2 -2
  164. package/dist/token/ITokenMetadata.js.map +1 -1
  165. package/dist/token/TokenConnection.d.ts +3 -35
  166. package/dist/token/TokenConnection.d.ts.map +1 -1
  167. package/dist/token/configUtils.d.ts.map +1 -1
  168. package/dist/token/configUtils.js +16 -0
  169. package/dist/token/configUtils.js.map +1 -1
  170. package/dist/token/configUtils.test.js +57 -10
  171. package/dist/token/configUtils.test.js.map +1 -1
  172. package/dist/token/deploy.hardhat-test.js +165 -5
  173. package/dist/token/deploy.hardhat-test.js.map +1 -1
  174. package/dist/token/types.d.ts +4012 -22806
  175. package/dist/token/types.d.ts.map +1 -1
  176. package/dist/token/types.js +10 -12
  177. package/dist/token/types.js.map +1 -1
  178. package/dist/token/xerc20-abi.d.ts +31 -0
  179. package/dist/token/xerc20-abi.d.ts.map +1 -1
  180. package/dist/token/xerc20-abi.js +40 -0
  181. package/dist/token/xerc20-abi.js.map +1 -1
  182. package/dist/token/xerc20-limits.d.ts +63 -0
  183. package/dist/token/xerc20-limits.d.ts.map +1 -0
  184. package/dist/token/xerc20-limits.js +80 -0
  185. package/dist/token/xerc20-limits.js.map +1 -0
  186. package/dist/token/xerc20.d.ts +30 -1
  187. package/dist/token/xerc20.d.ts.map +1 -1
  188. package/dist/token/xerc20.js +137 -54
  189. package/dist/token/xerc20.js.map +1 -1
  190. package/dist/token/xerc20.test.js +461 -169
  191. package/dist/token/xerc20.test.js.map +1 -1
  192. package/dist/types.d.ts +6 -36
  193. package/dist/types.d.ts.map +1 -1
  194. package/dist/types.js +1 -1
  195. package/dist/types.js.map +1 -1
  196. package/dist/utils/cosmos.d.ts +113 -844
  197. package/dist/utils/cosmos.d.ts.map +1 -1
  198. package/dist/utils/cosmos.js +50 -91
  199. package/dist/utils/cosmos.js.map +1 -1
  200. package/dist/utils/schemas.d.ts +3 -3
  201. package/dist/utils/schemas.d.ts.map +1 -1
  202. package/dist/utils/schemas.js +2 -1
  203. package/dist/utils/schemas.js.map +1 -1
  204. package/dist/warp/types.d.ts +25 -367
  205. package/dist/warp/types.d.ts.map +1 -1
  206. package/package.json +11 -11
@@ -1,29 +1,128 @@
1
1
  import { ethers } from 'ethers';
2
2
  import { parseEventLogs } from 'viem';
3
- import { HypXERC20Lockbox__factory, IXERC20Lockbox__factory, } from '@hyperlane-xyz/core';
4
- import { assert, normalizeAddress, rootLogger, } from '@hyperlane-xyz/utils';
5
- import { isContractAddress } from '../contracts/contracts.js';
6
- import { isProxy, proxyImplementation } from '../deploy/proxy.js';
3
+ import { HypXERC20Lockbox__factory } from '@hyperlane-xyz/core';
4
+ import { assert, bytes32ToAddress, eqAddress, normalizeAddress, rootLogger, } from '@hyperlane-xyz/utils';
5
+ import { proxyImplementation } from '../deploy/proxy.js';
6
+ import { MultiProtocolProvider } from '../providers/MultiProtocolProvider.js';
7
7
  import { EvmEventLogsReader } from '../rpc/evm/EvmEventLogsReader.js';
8
- import { viemLogFromGetEventLogsResponse } from '../rpc/evm/utils.js';
9
- import { throwIfNotMissingSelector } from '../utils/contract.js';
10
8
  import { TokenType } from './config.js';
11
9
  import { XERC20Type, isXERC20TokenConfig, } from './types.js';
12
- import { CONFIGURATION_CHANGED_EVENT_SELECTOR, XERC20_VS_ABI, } from './xerc20-abi.js';
10
+ import { BRIDGE_LIMITS_SET_EVENT_SELECTOR, CONFIGURATION_CHANGED_EVENT_SELECTOR, XERC20_VS_ABI, } from './xerc20-abi.js';
11
+ import { limitsAreZero, readXERC20Limits } from './xerc20-limits.js';
13
12
  // xERC20 tokens emit ConfigurationChanged rarely, so scanning them over the
14
13
  // 500 block default is prohibitively slow. 1_000_000 was measured on base
15
14
  // specifically, which declares no pagination.maxBlockRange: the token's full
16
15
  // history was covered in 22 requests (~2.3s). Providers that cap the span
17
16
  // reject the chunk, and getLogsFromRpc halves the range until it is accepted.
18
17
  export const XERC20_LOG_SCAN_BLOCK_RANGE = 1_000_000;
19
- export async function getExtraLockBoxConfigs({ xERC20Address, chain, multiProvider, logger = rootLogger, }) {
18
+ /**
19
+ * Reads the bridges the xERC20 holds non-zero limits for, other than the warp
20
+ * route's own router.
21
+ *
22
+ * Neither xERC20 interface can list its bridges: every limit getter is keyed by
23
+ * a bridge address, so the set of addresses is only observable through the
24
+ * events the token emitted when those limits were set. Those events are
25
+ * therefore read for the addresses alone, and every limit is then read from the
26
+ * token, so a bridge reconfigured by something that emits nothing this SDK
27
+ * parses is still reported at the limits it currently holds.
28
+ */
29
+ export async function getExtraLockBoxConfigs({ xERC20Address, chain, multiProvider, logger = rootLogger, type: knownType, warpRouteAddress, }) {
30
+ const type = knownType ??
31
+ (await deriveXERC20TokenType(multiProvider, chain, xERC20Address));
32
+ const bridges = new Set(await discoverConfiguredBridges({
33
+ xERC20Address,
34
+ chain,
35
+ multiProvider,
36
+ logger,
37
+ type,
38
+ }));
39
+ if (warpRouteAddress) {
40
+ bridges.delete(normalizeAddress(warpRouteAddress));
41
+ }
42
+ if (bridges.size === 0) {
43
+ return [];
44
+ }
45
+ const limitsByBridge = await readXERC20Limits({
46
+ multiProtocolProvider: MultiProtocolProvider.fromMultiProvider(multiProvider),
47
+ chain: multiProvider.getChainName(chain),
48
+ xERC20Address,
49
+ bridges: [...bridges],
50
+ type,
51
+ });
52
+ const extraBridges = [];
53
+ for (const bridge of bridges) {
54
+ const limits = limitsByBridge[bridge];
55
+ assert(limits, `Missing xERC20 limits for bridge ${bridge} on chain ${multiProvider.getChainName(chain)}`);
56
+ // A bridge holding no limits can neither mint nor burn, which is how a
57
+ // bridge is deactivated.
58
+ if (limitsAreZero(limits)) {
59
+ continue;
60
+ }
61
+ extraBridges.push({ lockbox: bridge, limits });
62
+ }
63
+ return extraBridges;
64
+ }
65
+ /**
66
+ * The event announcing a bridge's limits, whose signature differs by
67
+ * implementation. Both put the bridge in the only indexed parameter, so the
68
+ * scan below reads it out of topics[1] without decoding the payload.
69
+ */
70
+ function bridgeLimitsEventSelector(type) {
71
+ return type === XERC20Type.Standard
72
+ ? BRIDGE_LIMITS_SET_EVENT_SELECTOR
73
+ : CONFIGURATION_CHANGED_EVENT_SELECTOR;
74
+ }
75
+ /**
76
+ * Every address the token has ever announced limits for, whether or not those
77
+ * limits are still in force: the limits are read from the token afterwards, so
78
+ * a bridge the events show as deactivated is dropped on what it holds now
79
+ * rather than on what it was last announced with.
80
+ *
81
+ * A failed scan is raised rather than answered as an empty set, because the
82
+ * events are the only place the addresses exist and "no bridges" from a failed
83
+ * read is indistinguishable from a token that genuinely has none.
84
+ */
85
+ async function discoverConfiguredBridges({ xERC20Address, chain, multiProvider, logger, type, }) {
20
86
  const logsReader = EvmEventLogsReader.fromConfig({ chain, paginationBlockRange: XERC20_LOG_SCAN_BLOCK_RANGE }, multiProvider, logger);
21
- const logs = await logsReader.getLogsByTopic({
87
+ // Resolved once and handed to both reads below. A reader left to derive it
88
+ // reads it over whichever source it was built on, and deriving it over the
89
+ // RPC bisects `eth_getCode` through historical blocks: a chain serving no
90
+ // archive state answers eth_getLogs over its whole history but refuses that
91
+ // bisection, so the RPC read would fail on the one thing it can do.
92
+ const query = {
22
93
  contractAddress: xERC20Address,
23
- eventTopic: CONFIGURATION_CHANGED_EVENT_SELECTOR,
94
+ eventTopic: bridgeLimitsEventSelector(type),
95
+ fromBlock: await logsReader.getContractDeploymentBlock(xERC20Address),
96
+ };
97
+ let logs = await logsReader.getLogsByTopic(query);
98
+ const answeredByExplorer = multiProvider.tryGetEvmExplorerMetadataList(chain).length > 0;
99
+ if (logs.length === 0 && answeredByExplorer) {
100
+ // The token holds limits for at least the warp route's own router, so it
101
+ // has announced at least one bridge and an empty answer is an explorer that
102
+ // could not answer rather than a token with nothing to report.
103
+ //
104
+ // Deliberately this caller's policy rather than EvmEventLogsReader's: a
105
+ // timelock with no salted operations and a freshly deployed blacklist are
106
+ // both legitimately empty, and confirming those over the RPC would spend a
107
+ // whole-history scan to learn what the explorer already answered correctly.
108
+ logger.debug({
109
+ chain: multiProvider.getChainName(chain),
110
+ xERC20Address,
111
+ }, 'Block explorer announced no xERC20 bridges, re-reading over the RPC');
112
+ logs = await EvmEventLogsReader.fromConfig({
113
+ chain,
114
+ paginationBlockRange: XERC20_LOG_SCAN_BLOCK_RANGE,
115
+ useRPC: true,
116
+ }, multiProvider, logger).getLogsByTopic(query);
117
+ }
118
+ return bridgeAddressesFromLogs(logs, xERC20Address, chain, multiProvider);
119
+ }
120
+ function bridgeAddressesFromLogs(logs, xERC20Address, chain, multiProvider) {
121
+ return logs.map((log) => {
122
+ const [, bridgeTopic] = log.topics;
123
+ assert(bridgeTopic, `Bridge limits log of ${xERC20Address} on chain ${multiProvider.getChainName(chain)} carries no bridge topic`);
124
+ return normalizeAddress(bytes32ToAddress(bridgeTopic));
24
125
  });
25
- const viemLogs = logs.map(viemLogFromGetEventLogsResponse);
26
- return getLockboxesFromLogs(viemLogs, multiProvider.getProvider(chain), chain, logger);
27
126
  }
28
127
  /**
29
128
  * Parses ConfigurationChanged logs and keeps only the most recent configuration
@@ -52,40 +151,6 @@ export function latestConfigurationPerBridge(logs) {
52
151
  }
53
152
  return latestPerBridge;
54
153
  }
55
- async function getLockboxesFromLogs(logs, provider, chain, logger) {
56
- const lockboxPromises = [...latestConfigurationPerBridge(logs).entries()]
57
- // Removing bridges where the limits are set to 0 because it is equivalent of being deactivated
58
- // A bridge is active if EITHER bufferCap OR rateLimitPerSecond is non-zero
59
- .filter(([, log]) => log.args.bufferCap !== 0n || log.args.rateLimitPerSecond !== 0n)
60
- .map(async ([bridge, log]) => {
61
- try {
62
- const maybeXERC20Lockbox = IXERC20Lockbox__factory.connect(bridge, provider);
63
- await maybeXERC20Lockbox.callStatic.XERC20();
64
- return { bridge, log };
65
- }
66
- catch (error) {
67
- throwIfNotMissingSelector(error);
68
- logger.debug(`Contract at address ${bridge} on chain ${chain} is not a XERC20Lockbox contract.`);
69
- return undefined;
70
- }
71
- });
72
- const lockboxes = await Promise.all(lockboxPromises);
73
- const extraBridges = [];
74
- for (const lockbox of lockboxes) {
75
- if (!lockbox) {
76
- continue;
77
- }
78
- extraBridges.push({
79
- lockbox: lockbox.bridge,
80
- limits: {
81
- type: XERC20Type.Velo,
82
- bufferCap: lockbox.log.args.bufferCap.toString(),
83
- rateLimitPerSecond: lockbox.log.args.rateLimitPerSecond.toString(),
84
- },
85
- });
86
- }
87
- return extraBridges;
88
- }
89
154
  /**
90
155
  * Derives bridge configurations for Velodrome XERC20 tokens.
91
156
  * Extracts bufferCap and rateLimitPerSecond limits from warp deploy config.
@@ -236,13 +301,25 @@ export async function deriveStandardBridgesConfig(chains = [], warpDeployConfig,
236
301
  }
237
302
  return bridgesConfig;
238
303
  }
239
- export async function deriveXERC20TokenType(multiProvider, chain, address) {
240
- const isContract = await isContractAddress(multiProvider, chain, address);
241
- if (!isContract) {
242
- throw new Error(`Unable to detect XERC20 type for ${address}. Contract has no bytecode.`);
304
+ /**
305
+ * Thrown when a contract exposes neither the Standard nor the Velodrome limit
306
+ * management interface, so which getter would answer its limits is unknown.
307
+ *
308
+ * Typed rather than a bare Error so a caller can tell it apart from a failure
309
+ * to read the bytecode at all, which says nothing about the contract and must
310
+ * not be treated as an answer.
311
+ */
312
+ export class UnknownXERC20TypeError extends Error {
313
+ static {
314
+ this.prototype.name = this.name;
243
315
  }
316
+ }
317
+ export async function deriveXERC20TokenType(multiProvider, chain, address) {
244
318
  const provider = multiProvider.getProvider(chain);
245
319
  let normalizedCode = (await provider.getCode(address)).toLowerCase();
320
+ if (normalizedCode === '0x') {
321
+ throw new Error(`Unable to detect XERC20 type for ${address}. Contract has no bytecode.`);
322
+ }
246
323
  const setBufferCapSelector = ethers.utils
247
324
  .id('setBufferCap(address,uint256)')
248
325
  .slice(2, 10)
@@ -253,11 +330,17 @@ export async function deriveXERC20TokenType(multiProvider, chain, address) {
253
330
  .toLowerCase();
254
331
  // xERC20 tokens are commonly deployed behind a proxy whose bytecode does not
255
332
  // embed the implementation's selectors; inspect the implementation in that case.
333
+ //
334
+ // Keyed on the EIP-1967 implementation slot alone. A UUPS proxy keeps its
335
+ // upgrade logic in the implementation and leaves the admin slot empty, so
336
+ // deciding this on an admin the way isProxy does would skip the only bytecode
337
+ // that carries the selectors and leave the token looking like neither type.
256
338
  if (!normalizedCode.includes(setBufferCapSelector) &&
257
- !normalizedCode.includes(setLimitsSelector) &&
258
- (await isProxy(provider, address))) {
339
+ !normalizedCode.includes(setLimitsSelector)) {
259
340
  const implementation = await proxyImplementation(provider, address);
260
- normalizedCode = (await provider.getCode(implementation)).toLowerCase();
341
+ if (!eqAddress(implementation, ethers.constants.AddressZero)) {
342
+ normalizedCode = (await provider.getCode(implementation)).toLowerCase();
343
+ }
261
344
  }
262
345
  // Prefer Velodrome if both selectors are present.
263
346
  if (normalizedCode.includes(setBufferCapSelector)) {
@@ -267,6 +350,6 @@ export async function deriveXERC20TokenType(multiProvider, chain, address) {
267
350
  return XERC20Type.Standard;
268
351
  }
269
352
  // Neither type detected
270
- throw new Error(`Unable to detect XERC20 type for ${address}. Contract does not implement Standard or Velodrome XERC20 interface.`);
353
+ throw new UnknownXERC20TypeError(`Unable to detect XERC20 type for ${address}. Contract does not implement Standard or Velodrome XERC20 interface.`);
271
354
  }
272
355
  //# sourceMappingURL=xerc20.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"xerc20.js","sourceRoot":"","sources":["../../src/token/xerc20.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xerc20.js","sourceRoot":"","sources":["../../src/token/xerc20.ts"],"names":[],"mappings":"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"}