@hyperlane-xyz/rebalancer 27.1.2 → 27.2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"RebalancerContextFactory.d.ts","sourceRoot":"","sources":["../../src/factories/RebalancerContextFactory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RebalancerContextFactory.d.ts","sourceRoot":"","sources":["../../src/factories/RebalancerContextFactory.ts"],"names":[],"mappings":"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"}
@@ -143,7 +143,7 @@ export class RebalancerContextFactory {
143
143
  const intentStore = new InMemoryStore();
144
144
  const actionStore = new InMemoryStore();
145
145
  const explorerClient = typeof explorerUrlOrClient === 'string'
146
- ? new ExplorerClient(explorerUrlOrClient)
146
+ ? new ExplorerClient(explorerUrlOrClient, (domain) => this.multiProvider.getProtocol(domain))
147
147
  : explorerUrlOrClient;
148
148
  // 3. Get MultiProtocolCore from registry (supports all VM types)
149
149
  // Only fetch/validate addresses for warp route chains (not all registry chains)
@@ -1 +1 @@
1
- {"version":3,"file":"RebalancerContextFactory.js","sourceRoot":"","sources":["../../src/factories/RebalancerContextFactory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RebalancerContextFactory.js","sourceRoot":"","sources":["../../src/factories/RebalancerContextFactory.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { Logger } from 'pino';
2
+ import { ProtocolType } from '@hyperlane-xyz/utils';
2
3
  export type InflightRebalanceQueryParams = {
3
4
  bridges: string[];
4
5
  routersByDomain: Record<number, string>;
@@ -36,7 +37,16 @@ export interface IExplorerClient {
36
37
  }
37
38
  export declare class ExplorerClient implements IExplorerClient {
38
39
  private readonly baseUrl;
39
- constructor(baseUrl: string);
40
+ private readonly getProtocol;
41
+ constructor(baseUrl: string, getProtocol: (domainId: number) => ProtocolType);
42
+ /**
43
+ * Convert an address to PostgreSQL bytea format (\\x-prefixed hex).
44
+ * When `domain` is provided, resolves the chain's protocol to encode
45
+ * non-EVM addresses (e.g. base58 Solana, 32-byte Starknet) correctly
46
+ * via `addressToByteHexString`. Without `domain`, assumes the address
47
+ * is already EVM-format hex (used for bridges, txSender, etc. which
48
+ * are always EVM addresses).
49
+ */
40
50
  private toBytea;
41
51
  /**
42
52
  * Normalize all hex fields in Explorer response from PostgreSQL bytea format (\\x) to standard hex (0x)
@@ -1 +1 @@
1
- {"version":3,"file":"ExplorerClient.d.ts","sourceRoot":"","sources":["../../src/utils/ExplorerClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,wBAAwB,CACtB,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC9B,2BAA2B,CACzB,MAAM,EAAE,0BAA0B,EAClC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;CAC/B;AAED,qBAAa,cAAe,YAAW,eAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAE5C,OAAO,CAAC,OAAO;IAIf;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAqB1B,uBAAuB,CAC3B,MAAM,EAAE,4BAA4B,EACpC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC;IA0GnB;;;OAGG;IACG,wBAAwB,CAC5B,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,EAAE,CAAC;IAsF7B;;;;OAIG;IACG,2BAA2B,CAC/B,MAAM,EAAE,0BAA0B,EAClC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,EAAE,CAAC;CAsG9B"}
1
+ {"version":3,"file":"ExplorerClient.d.ts","sourceRoot":"","sources":["../../src/utils/ExplorerClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAGL,YAAY,EACb,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,wBAAwB,CACtB,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC9B,2BAA2B,CACzB,MAAM,EAAE,0BAA0B,EAClC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;CAC/B;AAED,qBAAa,cAAe,YAAW,eAAe;IAElD,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBADX,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,YAAY;IAGlE;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO;IAUf;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAqB1B,uBAAuB,CAC3B,MAAM,EAAE,4BAA4B,EACpC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC;IAuHnB;;;OAGG;IACG,wBAAwB,CAC5B,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,EAAE,CAAC;IA2F7B;;;;OAIG;IACG,2BAA2B,CAC/B,MAAM,EAAE,0BAA0B,EAClC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,EAAE,CAAC;CA4G9B"}
@@ -1,9 +1,25 @@
1
+ import { addressToByteHexString, isEVMLike, } from '@hyperlane-xyz/utils';
1
2
  export class ExplorerClient {
2
3
  baseUrl;
3
- constructor(baseUrl) {
4
+ getProtocol;
5
+ constructor(baseUrl, getProtocol) {
4
6
  this.baseUrl = baseUrl;
7
+ this.getProtocol = getProtocol;
5
8
  }
6
- toBytea(addr) {
9
+ /**
10
+ * Convert an address to PostgreSQL bytea format (\\x-prefixed hex).
11
+ * When `domain` is provided, resolves the chain's protocol to encode
12
+ * non-EVM addresses (e.g. base58 Solana, 32-byte Starknet) correctly
13
+ * via `addressToByteHexString`. Without `domain`, assumes the address
14
+ * is already EVM-format hex (used for bridges, txSender, etc. which
15
+ * are always EVM addresses).
16
+ */
17
+ toBytea(addr, domain) {
18
+ const protocol = domain !== undefined ? this.getProtocol(domain) : undefined;
19
+ if (protocol && !isEVMLike(protocol)) {
20
+ const hex = addressToByteHexString(addr, protocol);
21
+ return hex.replace(/^0x/i, '\\x').toLowerCase();
22
+ }
7
23
  return addr.replace(/^0x/i, '\\x').toLowerCase();
8
24
  }
9
25
  /**
@@ -32,14 +48,17 @@ export class ExplorerClient {
32
48
  async hasUndeliveredRebalance(params, logger) {
33
49
  const { bridges, routersByDomain, txSender, limit = 5 } = params;
34
50
  // Derive routers and domains from routersByDomain
35
- const routers = Object.values(routersByDomain);
51
+ const routerEntries = Object.entries(routersByDomain);
36
52
  const domains = Object.keys(routersByDomain).map(Number);
37
53
  const variables = {
54
+ // NOTE: bridges are always EVM addresses; pass domain here if non-EVM bridges are added
38
55
  senders: bridges.map((a) => this.toBytea(a)),
56
+ // NOTE: bridges are always EVM addresses; pass domain here if non-EVM bridges are added
39
57
  recipients: bridges.map((a) => this.toBytea(a)),
40
- originTxRecipients: routers.map((a) => this.toBytea(a)),
58
+ originTxRecipients: routerEntries.map(([domain, addr]) => this.toBytea(addr, Number(domain))),
41
59
  originDomains: domains,
42
60
  destDomains: domains,
61
+ // NOTE: txSender is always an EVM address (rebalancer signer)
43
62
  txSenders: [this.toBytea(txSender)],
44
63
  limit,
45
64
  };
@@ -112,9 +131,14 @@ export class ExplorerClient {
112
131
  const expectedRouter = routersByDomain[msg.origin_domain_id];
113
132
  if (!expectedRouter)
114
133
  return false;
134
+ const protocol = this.getProtocol(msg.origin_domain_id);
115
135
  const normalizedMsgRouter = msg.origin_tx_recipient?.startsWith('\\x')
116
136
  ? '0x' + msg.origin_tx_recipient.slice(2)
117
137
  : msg.origin_tx_recipient;
138
+ if (protocol && !isEVMLike(protocol)) {
139
+ const expectedHex = addressToByteHexString(expectedRouter, protocol).toLowerCase();
140
+ return normalizedMsgRouter?.toLowerCase() === expectedHex;
141
+ }
118
142
  return (normalizedMsgRouter?.toLowerCase() === expectedRouter.toLowerCase());
119
143
  });
120
144
  logger.debug({ totalRows: rows.length, validatedRows: validatedRows.length }, 'Post-query validation results');
@@ -127,13 +151,14 @@ export class ExplorerClient {
127
151
  async getInflightUserTransfers(params, logger) {
128
152
  const { routersByDomain, excludeTxSenders, limit = 100 } = params;
129
153
  // Derive routers and domains from routersByDomain
130
- const routers = Object.values(routersByDomain);
154
+ const routerEntries = Object.entries(routersByDomain);
131
155
  const domains = Object.keys(routersByDomain).map(Number);
132
156
  const variables = {
133
- senders: routers.map((a) => this.toBytea(a)),
134
- recipients: routers.map((a) => this.toBytea(a)),
157
+ senders: routerEntries.map(([domain, addr]) => this.toBytea(addr, Number(domain))),
158
+ recipients: routerEntries.map(([domain, addr]) => this.toBytea(addr, Number(domain))),
135
159
  originDomains: domains,
136
160
  destDomains: domains,
161
+ // NOTE: excludeTxSenders are always EVM addresses
137
162
  excludeTxSenders: excludeTxSenders.map((a) => this.toBytea(a)),
138
163
  limit,
139
164
  };
@@ -208,19 +233,23 @@ export class ExplorerClient {
208
233
  async getInflightRebalanceActions(params, logger) {
209
234
  const { bridges, routersByDomain, rebalancerAddress, inventorySignerAddresses, limit = 100, } = params;
210
235
  // Derive routers and domains from routersByDomain
211
- const routers = Object.values(routersByDomain);
236
+ const routerEntries = Object.entries(routersByDomain);
212
237
  const domains = Object.keys(routersByDomain).map(Number);
213
238
  // Build list of tx senders to include (rebalancer + optional inventory signer)
239
+ // NOTE: rebalancerAddress is always an EVM address (rebalancer signer)
214
240
  const txSenders = [this.toBytea(rebalancerAddress)];
215
241
  if (inventorySignerAddresses) {
216
242
  for (const addr of inventorySignerAddresses) {
243
+ // NOTE: inventorySignerAddresses are filtered to ProtocolType.Ethereum
217
244
  txSenders.push(this.toBytea(addr));
218
245
  }
219
246
  }
220
247
  const variables = {
248
+ // NOTE: bridges are always EVM addresses; pass domain here if non-EVM bridges are added
221
249
  senders: bridges.map((a) => this.toBytea(a)),
250
+ // NOTE: bridges are always EVM addresses; pass domain here if non-EVM bridges are added
222
251
  recipients: bridges.map((a) => this.toBytea(a)),
223
- originTxRecipients: routers.map((a) => this.toBytea(a)),
252
+ originTxRecipients: routerEntries.map(([domain, addr]) => this.toBytea(addr, Number(domain))),
224
253
  originDomains: domains,
225
254
  destDomains: domains,
226
255
  txSenders,
@@ -1 +1 @@
1
- {"version":3,"file":"ExplorerClient.js","sourceRoot":"","sources":["../../src/utils/ExplorerClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExplorerClient.js","sourceRoot":"","sources":["../../src/utils/ExplorerClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ExplorerClient.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExplorerClient.test.d.ts","sourceRoot":"","sources":["../../src/utils/ExplorerClient.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,261 @@
1
+ import chai, { expect } from 'chai';
2
+ import chaiAsPromised from 'chai-as-promised';
3
+ import { pino } from 'pino';
4
+ import Sinon from 'sinon';
5
+ import { addressToByteHexString, ProtocolType } from '@hyperlane-xyz/utils';
6
+ import { ExplorerClient } from './ExplorerClient.js';
7
+ chai.use(chaiAsPromised);
8
+ const testLogger = pino({ level: 'silent' });
9
+ describe('ExplorerClient', () => {
10
+ let fetchStub;
11
+ beforeEach(() => {
12
+ fetchStub = Sinon.stub(globalThis, 'fetch').resolves(new Response(JSON.stringify({ data: { message_view: [] } }), {
13
+ status: 200,
14
+ }));
15
+ });
16
+ afterEach(() => {
17
+ fetchStub.restore();
18
+ });
19
+ describe('getInflightUserTransfers address encoding', () => {
20
+ it('encodes EVM router addresses as 20-byte hex bytea', async () => {
21
+ const evmAddr = '0x5a0e13290ec57f5e9031d01d03c6a40029cc24ea';
22
+ const getProtocol = Sinon.stub().returns(ProtocolType.Ethereum);
23
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
24
+ await client.getInflightUserTransfers({
25
+ routersByDomain: { 1: evmAddr },
26
+ excludeTxSenders: [],
27
+ }, testLogger);
28
+ expect(fetchStub.calledOnce).to.be.true;
29
+ const body = JSON.parse(fetchStub.firstCall.args[1].body);
30
+ expect(body.variables.senders).to.deep.equal([
31
+ '\\x5a0e13290ec57f5e9031d01d03c6a40029cc24ea',
32
+ ]);
33
+ expect(body.variables.recipients).to.deep.equal([
34
+ '\\x5a0e13290ec57f5e9031d01d03c6a40029cc24ea',
35
+ ]);
36
+ });
37
+ it('encodes Solana router addresses as 32-byte hex bytea', async () => {
38
+ const solAddr = 'E5rVV8zXwtc4TKGypCJvSBaYbgxa4XaYg5MS6N9QGdeo';
39
+ const getProtocol = Sinon.stub().returns(ProtocolType.Sealevel);
40
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
41
+ await client.getInflightUserTransfers({
42
+ routersByDomain: { 1399811149: solAddr },
43
+ excludeTxSenders: [],
44
+ }, testLogger);
45
+ expect(fetchStub.calledOnce).to.be.true;
46
+ const body = JSON.parse(fetchStub.firstCall.args[1].body);
47
+ const expectedHex = addressToByteHexString(solAddr, ProtocolType.Sealevel);
48
+ const expectedBytea = expectedHex.replace(/^0x/i, '\\x').toLowerCase();
49
+ expect(body.variables.senders).to.deep.equal([expectedBytea]);
50
+ expect(body.variables.recipients).to.deep.equal([expectedBytea]);
51
+ // 32 bytes = 64 hex chars + 2-char \\x prefix
52
+ expect(expectedBytea.length).to.equal(66);
53
+ });
54
+ it('encodes Starknet router addresses as hex bytea', async () => {
55
+ const starkAddr = '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7';
56
+ const getProtocol = Sinon.stub().returns(ProtocolType.Starknet);
57
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
58
+ await client.getInflightUserTransfers({
59
+ routersByDomain: { 4009: starkAddr },
60
+ excludeTxSenders: [],
61
+ }, testLogger);
62
+ expect(fetchStub.calledOnce).to.be.true;
63
+ const body = JSON.parse(fetchStub.firstCall.args[1].body);
64
+ const expectedHex = addressToByteHexString(starkAddr, ProtocolType.Starknet);
65
+ const expectedBytea = expectedHex.replace(/^0x/i, '\\x').toLowerCase();
66
+ expect(body.variables.senders).to.deep.equal([expectedBytea]);
67
+ });
68
+ it('encodes mixed EVM+Solana routersByDomain correctly', async () => {
69
+ const evmAddr = '0x5a0e13290ec57f5e9031d01d03c6a40029cc24ea';
70
+ const solAddr = 'E5rVV8zXwtc4TKGypCJvSBaYbgxa4XaYg5MS6N9QGdeo';
71
+ const getProtocol = Sinon.stub().callsFake((domain) => {
72
+ if (domain === 1)
73
+ return ProtocolType.Ethereum;
74
+ if (domain === 1399811149)
75
+ return ProtocolType.Sealevel;
76
+ return ProtocolType.Ethereum;
77
+ });
78
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
79
+ await client.getInflightUserTransfers({
80
+ routersByDomain: { 1: evmAddr, 1399811149: solAddr },
81
+ excludeTxSenders: [],
82
+ }, testLogger);
83
+ expect(fetchStub.calledOnce).to.be.true;
84
+ const body = JSON.parse(fetchStub.firstCall.args[1].body);
85
+ const expectedEvmBytea = '\\x5a0e13290ec57f5e9031d01d03c6a40029cc24ea';
86
+ const expectedSolHex = addressToByteHexString(solAddr, ProtocolType.Sealevel);
87
+ const expectedSolBytea = expectedSolHex
88
+ .replace(/^0x/i, '\\x')
89
+ .toLowerCase();
90
+ expect(body.variables.senders).to.include(expectedEvmBytea);
91
+ expect(body.variables.senders).to.include(expectedSolBytea);
92
+ expect(body.variables.recipients).to.include(expectedEvmBytea);
93
+ expect(body.variables.recipients).to.include(expectedSolBytea);
94
+ });
95
+ it('handles empty routersByDomain gracefully', async () => {
96
+ const getProtocol = Sinon.stub().returns(ProtocolType.Ethereum);
97
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
98
+ await client.getInflightUserTransfers({
99
+ routersByDomain: {},
100
+ excludeTxSenders: [],
101
+ }, testLogger);
102
+ expect(fetchStub.calledOnce).to.be.true;
103
+ const body = JSON.parse(fetchStub.firstCall.args[1].body);
104
+ expect(body.variables.senders).to.deep.equal([]);
105
+ expect(body.variables.recipients).to.deep.equal([]);
106
+ expect(body.variables.originDomains).to.deep.equal([]);
107
+ });
108
+ });
109
+ describe('getInflightRebalanceActions address encoding', () => {
110
+ it('encodes mixed EVM+Solana routersByDomain in originTxRecipients', async () => {
111
+ const evmAddr = '0x5a0e13290ec57f5e9031d01d03c6a40029cc24ea';
112
+ const solAddr = 'E5rVV8zXwtc4TKGypCJvSBaYbgxa4XaYg5MS6N9QGdeo';
113
+ const bridgeAddr = '0x1234567890abcdef1234567890abcdef12345678';
114
+ const rebalancerAddr = '0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef';
115
+ const getProtocol = Sinon.stub().callsFake((domain) => {
116
+ if (domain === 1)
117
+ return ProtocolType.Ethereum;
118
+ if (domain === 1399811149)
119
+ return ProtocolType.Sealevel;
120
+ return ProtocolType.Ethereum;
121
+ });
122
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
123
+ await client.getInflightRebalanceActions({
124
+ bridges: [bridgeAddr],
125
+ routersByDomain: { 1: evmAddr, 1399811149: solAddr },
126
+ rebalancerAddress: rebalancerAddr,
127
+ }, testLogger);
128
+ expect(fetchStub.calledOnce).to.be.true;
129
+ const body = JSON.parse(fetchStub.firstCall.args[1].body);
130
+ // bridges encoded as EVM bytea (20-byte)
131
+ expect(body.variables.senders).to.deep.equal([
132
+ '\\x1234567890abcdef1234567890abcdef12345678',
133
+ ]);
134
+ expect(body.variables.recipients).to.deep.equal([
135
+ '\\x1234567890abcdef1234567890abcdef12345678',
136
+ ]);
137
+ // rebalancer encoded as EVM bytea
138
+ expect(body.variables.txSenders).to.deep.equal([
139
+ '\\xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
140
+ ]);
141
+ // originTxRecipients: EVM router as 20-byte bytea, Solana as 32-byte bytea
142
+ const expectedEvmBytea = '\\x5a0e13290ec57f5e9031d01d03c6a40029cc24ea';
143
+ const expectedSolHex = addressToByteHexString(solAddr, ProtocolType.Sealevel);
144
+ const expectedSolBytea = expectedSolHex
145
+ .replace(/^0x/i, '\\x')
146
+ .toLowerCase();
147
+ expect(body.variables.originTxRecipients).to.include(expectedEvmBytea);
148
+ expect(body.variables.originTxRecipients).to.include(expectedSolBytea);
149
+ // 32 bytes = 64 hex chars + 2-char \\x prefix
150
+ expect(expectedSolBytea.length).to.equal(66);
151
+ });
152
+ });
153
+ describe('hasUndeliveredRebalance post-query validation', () => {
154
+ it('validates non-EVM router addresses correctly in post-query filter', async () => {
155
+ const solAddr = 'E5rVV8zXwtc4TKGypCJvSBaYbgxa4XaYg5MS6N9QGdeo';
156
+ const solHex = addressToByteHexString(solAddr, ProtocolType.Sealevel);
157
+ const solBytea = solHex.replace(/^0x/i, '\\x').toLowerCase();
158
+ const bridgeAddr = '0x1234567890abcdef1234567890abcdef12345678';
159
+ const txSenderAddr = '0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef';
160
+ const getProtocol = Sinon.stub().returns(ProtocolType.Sealevel);
161
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
162
+ fetchStub.resolves(new Response(JSON.stringify({
163
+ data: {
164
+ message_view: [
165
+ {
166
+ msg_id: '\\xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
167
+ origin_domain_id: 1399811149,
168
+ destination_domain_id: 1,
169
+ sender: '\\x1234567890abcdef1234567890abcdef12345678',
170
+ recipient: '\\x1234567890abcdef1234567890abcdef12345678',
171
+ origin_tx_hash: '\\xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
172
+ origin_tx_sender: '\\xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
173
+ origin_tx_recipient: solBytea,
174
+ is_delivered: false,
175
+ },
176
+ ],
177
+ },
178
+ }), { status: 200 }));
179
+ const result = await client.hasUndeliveredRebalance({
180
+ bridges: [bridgeAddr],
181
+ routersByDomain: { 1399811149: solAddr },
182
+ txSender: txSenderAddr,
183
+ }, testLogger);
184
+ expect(result).to.be.true;
185
+ });
186
+ it('returns false when origin_tx_recipient does not match expected router', async () => {
187
+ const evmAddr = '0x5a0e13290ec57f5e9031d01d03c6a40029cc24ea';
188
+ const wrongRouter = '0xffffffffffffffffffffffffffffffffffffffff';
189
+ const getProtocol = Sinon.stub().returns(ProtocolType.Ethereum);
190
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
191
+ fetchStub.resolves(new Response(JSON.stringify({
192
+ data: {
193
+ message_view: [
194
+ {
195
+ msg_id: '\\xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
196
+ origin_domain_id: 1,
197
+ destination_domain_id: 137,
198
+ sender: '\\x1234567890abcdef1234567890abcdef12345678',
199
+ recipient: '\\x1234567890abcdef1234567890abcdef12345678',
200
+ origin_tx_hash: '\\xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
201
+ origin_tx_sender: '\\xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
202
+ origin_tx_recipient: '\\x' + wrongRouter.slice(2),
203
+ is_delivered: false,
204
+ },
205
+ ],
206
+ },
207
+ }), { status: 200 }));
208
+ const result = await client.hasUndeliveredRebalance({
209
+ bridges: ['0x1234567890abcdef1234567890abcdef12345678'],
210
+ routersByDomain: { 1: evmAddr },
211
+ txSender: '0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
212
+ }, testLogger);
213
+ expect(result).to.be.false;
214
+ });
215
+ it('validates EVM router addresses correctly in post-query filter', async () => {
216
+ const evmAddr = '0x5a0e13290ec57f5e9031d01d03c6a40029cc24ea';
217
+ const getProtocol = Sinon.stub().returns(ProtocolType.Ethereum);
218
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
219
+ fetchStub.resolves(new Response(JSON.stringify({
220
+ data: {
221
+ message_view: [
222
+ {
223
+ msg_id: '\\xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
224
+ origin_domain_id: 1,
225
+ destination_domain_id: 137,
226
+ sender: '\\x1234567890abcdef1234567890abcdef12345678',
227
+ recipient: '\\x1234567890abcdef1234567890abcdef12345678',
228
+ origin_tx_hash: '\\xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
229
+ origin_tx_sender: '\\xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
230
+ origin_tx_recipient: '\\x5a0e13290ec57f5e9031d01d03c6a40029cc24ea',
231
+ is_delivered: false,
232
+ },
233
+ ],
234
+ },
235
+ }), { status: 200 }));
236
+ const result = await client.hasUndeliveredRebalance({
237
+ bridges: ['0x1234567890abcdef1234567890abcdef12345678'],
238
+ routersByDomain: { 1: evmAddr },
239
+ txSender: '0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
240
+ }, testLogger);
241
+ expect(result).to.be.true;
242
+ });
243
+ });
244
+ describe('error handling', () => {
245
+ it('throws on non-200 response from explorer', async () => {
246
+ const getProtocol = Sinon.stub().returns(ProtocolType.Ethereum);
247
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
248
+ fetchStub.resolves(new Response(JSON.stringify({
249
+ errors: [{ message: 'Internal Server Error' }],
250
+ }), { status: 500 }));
251
+ await expect(client.hasUndeliveredRebalance({
252
+ bridges: ['0x1234567890abcdef1234567890abcdef12345678'],
253
+ routersByDomain: {
254
+ 1: '0x5a0e13290ec57f5e9031d01d03c6a40029cc24ea',
255
+ },
256
+ txSender: '0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
257
+ }, testLogger)).to.be.rejectedWith('Explorer query failed: 500');
258
+ });
259
+ });
260
+ });
261
+ //# sourceMappingURL=ExplorerClient.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExplorerClient.test.js","sourceRoot":"","sources":["../../src/utils/ExplorerClient.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperlane-xyz/rebalancer",
3
- "version": "27.1.2",
3
+ "version": "27.2.0",
4
4
  "description": "Hyperlane Warp Route Collateral Rebalancer Service",
5
5
  "keywords": [
6
6
  "blockchain",
@@ -43,13 +43,14 @@
43
43
  "zod": "^3.21.2",
44
44
  "zod-validation-error": "^3.3.0",
45
45
  "@hyperlane-xyz/core": "11.1.0",
46
- "@hyperlane-xyz/metrics": "0.2.4",
47
- "@hyperlane-xyz/provider-sdk": "4.1.0",
48
- "@hyperlane-xyz/sdk": "28.1.0",
49
- "@hyperlane-xyz/utils": "28.1.0"
46
+ "@hyperlane-xyz/metrics": "0.2.6",
47
+ "@hyperlane-xyz/provider-sdk": "4.2.1",
48
+ "@hyperlane-xyz/sdk": "29.0.1",
49
+ "@hyperlane-xyz/utils": "29.0.1"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@ethersproject/constants": "*",
53
+ "@types/chai": "^4.3.11",
53
54
  "@types/chai-as-promised": "^8",
54
55
  "@types/express": "^5.0.3",
55
56
  "@types/mocha": "^10.0.1",
@@ -65,10 +66,10 @@
65
66
  "sinon": "^13.0.2",
66
67
  "testcontainers": "11.12.0",
67
68
  "tsx": "^4.19.1",
68
- "typescript": "5.8.3",
69
- "@hyperlane-xyz/eslint-config": "28.1.0",
70
- "@hyperlane-xyz/relayer": "1.1.11",
71
- "@hyperlane-xyz/tsconfig": "^28.1.0"
69
+ "typescript": "6.0.2",
70
+ "@hyperlane-xyz/eslint-config": "29.0.1",
71
+ "@hyperlane-xyz/relayer": "1.1.13",
72
+ "@hyperlane-xyz/tsconfig": "^29.0.1"
72
73
  },
73
74
  "engines": {
74
75
  "node": ">=18"
@@ -323,7 +323,9 @@ export class RebalancerContextFactory {
323
323
 
324
324
  const explorerClient =
325
325
  typeof explorerUrlOrClient === 'string'
326
- ? new ExplorerClient(explorerUrlOrClient)
326
+ ? new ExplorerClient(explorerUrlOrClient, (domain) =>
327
+ this.multiProvider.getProtocol(domain),
328
+ )
327
329
  : explorerUrlOrClient;
328
330
 
329
331
  // 3. Get MultiProtocolCore from registry (supports all VM types)
@@ -0,0 +1,383 @@
1
+ import chai, { expect } from 'chai';
2
+ import chaiAsPromised from 'chai-as-promised';
3
+ import { pino } from 'pino';
4
+ import Sinon from 'sinon';
5
+
6
+ import { addressToByteHexString, ProtocolType } from '@hyperlane-xyz/utils';
7
+
8
+ import { ExplorerClient } from './ExplorerClient.js';
9
+
10
+ chai.use(chaiAsPromised);
11
+ const testLogger = pino({ level: 'silent' });
12
+
13
+ describe('ExplorerClient', () => {
14
+ let fetchStub: Sinon.SinonStub;
15
+
16
+ beforeEach(() => {
17
+ fetchStub = Sinon.stub(globalThis, 'fetch').resolves(
18
+ new Response(JSON.stringify({ data: { message_view: [] } }), {
19
+ status: 200,
20
+ }),
21
+ );
22
+ });
23
+
24
+ afterEach(() => {
25
+ fetchStub.restore();
26
+ });
27
+
28
+ describe('getInflightUserTransfers address encoding', () => {
29
+ it('encodes EVM router addresses as 20-byte hex bytea', async () => {
30
+ const evmAddr = '0x5a0e13290ec57f5e9031d01d03c6a40029cc24ea';
31
+ const getProtocol = Sinon.stub().returns(ProtocolType.Ethereum);
32
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
33
+
34
+ await client.getInflightUserTransfers(
35
+ {
36
+ routersByDomain: { 1: evmAddr },
37
+ excludeTxSenders: [],
38
+ },
39
+ testLogger,
40
+ );
41
+
42
+ expect(fetchStub.calledOnce).to.be.true;
43
+ const body = JSON.parse(fetchStub.firstCall.args[1].body);
44
+ expect(body.variables.senders).to.deep.equal([
45
+ '\\x5a0e13290ec57f5e9031d01d03c6a40029cc24ea',
46
+ ]);
47
+ expect(body.variables.recipients).to.deep.equal([
48
+ '\\x5a0e13290ec57f5e9031d01d03c6a40029cc24ea',
49
+ ]);
50
+ });
51
+
52
+ it('encodes Solana router addresses as 32-byte hex bytea', async () => {
53
+ const solAddr = 'E5rVV8zXwtc4TKGypCJvSBaYbgxa4XaYg5MS6N9QGdeo';
54
+ const getProtocol = Sinon.stub().returns(ProtocolType.Sealevel);
55
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
56
+
57
+ await client.getInflightUserTransfers(
58
+ {
59
+ routersByDomain: { 1399811149: solAddr },
60
+ excludeTxSenders: [],
61
+ },
62
+ testLogger,
63
+ );
64
+
65
+ expect(fetchStub.calledOnce).to.be.true;
66
+ const body = JSON.parse(fetchStub.firstCall.args[1].body);
67
+ const expectedHex = addressToByteHexString(
68
+ solAddr,
69
+ ProtocolType.Sealevel,
70
+ );
71
+ const expectedBytea = expectedHex.replace(/^0x/i, '\\x').toLowerCase();
72
+ expect(body.variables.senders).to.deep.equal([expectedBytea]);
73
+ expect(body.variables.recipients).to.deep.equal([expectedBytea]);
74
+ // 32 bytes = 64 hex chars + 2-char \\x prefix
75
+ expect(expectedBytea.length).to.equal(66);
76
+ });
77
+
78
+ it('encodes Starknet router addresses as hex bytea', async () => {
79
+ const starkAddr =
80
+ '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7';
81
+ const getProtocol = Sinon.stub().returns(ProtocolType.Starknet);
82
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
83
+
84
+ await client.getInflightUserTransfers(
85
+ {
86
+ routersByDomain: { 4009: starkAddr },
87
+ excludeTxSenders: [],
88
+ },
89
+ testLogger,
90
+ );
91
+
92
+ expect(fetchStub.calledOnce).to.be.true;
93
+ const body = JSON.parse(fetchStub.firstCall.args[1].body);
94
+ const expectedHex = addressToByteHexString(
95
+ starkAddr,
96
+ ProtocolType.Starknet,
97
+ );
98
+ const expectedBytea = expectedHex.replace(/^0x/i, '\\x').toLowerCase();
99
+ expect(body.variables.senders).to.deep.equal([expectedBytea]);
100
+ });
101
+
102
+ it('encodes mixed EVM+Solana routersByDomain correctly', async () => {
103
+ const evmAddr = '0x5a0e13290ec57f5e9031d01d03c6a40029cc24ea';
104
+ const solAddr = 'E5rVV8zXwtc4TKGypCJvSBaYbgxa4XaYg5MS6N9QGdeo';
105
+
106
+ const getProtocol = Sinon.stub().callsFake((domain: number) => {
107
+ if (domain === 1) return ProtocolType.Ethereum;
108
+ if (domain === 1399811149) return ProtocolType.Sealevel;
109
+ return ProtocolType.Ethereum;
110
+ });
111
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
112
+
113
+ await client.getInflightUserTransfers(
114
+ {
115
+ routersByDomain: { 1: evmAddr, 1399811149: solAddr },
116
+ excludeTxSenders: [],
117
+ },
118
+ testLogger,
119
+ );
120
+
121
+ expect(fetchStub.calledOnce).to.be.true;
122
+ const body = JSON.parse(fetchStub.firstCall.args[1].body);
123
+
124
+ const expectedEvmBytea = '\\x5a0e13290ec57f5e9031d01d03c6a40029cc24ea';
125
+ const expectedSolHex = addressToByteHexString(
126
+ solAddr,
127
+ ProtocolType.Sealevel,
128
+ );
129
+ const expectedSolBytea = expectedSolHex
130
+ .replace(/^0x/i, '\\x')
131
+ .toLowerCase();
132
+
133
+ expect(body.variables.senders).to.include(expectedEvmBytea);
134
+ expect(body.variables.senders).to.include(expectedSolBytea);
135
+ expect(body.variables.recipients).to.include(expectedEvmBytea);
136
+ expect(body.variables.recipients).to.include(expectedSolBytea);
137
+ });
138
+
139
+ it('handles empty routersByDomain gracefully', async () => {
140
+ const getProtocol = Sinon.stub().returns(ProtocolType.Ethereum);
141
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
142
+
143
+ await client.getInflightUserTransfers(
144
+ {
145
+ routersByDomain: {},
146
+ excludeTxSenders: [],
147
+ },
148
+ testLogger,
149
+ );
150
+
151
+ expect(fetchStub.calledOnce).to.be.true;
152
+ const body = JSON.parse(fetchStub.firstCall.args[1].body);
153
+ expect(body.variables.senders).to.deep.equal([]);
154
+ expect(body.variables.recipients).to.deep.equal([]);
155
+ expect(body.variables.originDomains).to.deep.equal([]);
156
+ });
157
+ });
158
+
159
+ describe('getInflightRebalanceActions address encoding', () => {
160
+ it('encodes mixed EVM+Solana routersByDomain in originTxRecipients', async () => {
161
+ const evmAddr = '0x5a0e13290ec57f5e9031d01d03c6a40029cc24ea';
162
+ const solAddr = 'E5rVV8zXwtc4TKGypCJvSBaYbgxa4XaYg5MS6N9QGdeo';
163
+ const bridgeAddr = '0x1234567890abcdef1234567890abcdef12345678';
164
+ const rebalancerAddr = '0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef';
165
+
166
+ const getProtocol = Sinon.stub().callsFake((domain: number) => {
167
+ if (domain === 1) return ProtocolType.Ethereum;
168
+ if (domain === 1399811149) return ProtocolType.Sealevel;
169
+ return ProtocolType.Ethereum;
170
+ });
171
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
172
+
173
+ await client.getInflightRebalanceActions(
174
+ {
175
+ bridges: [bridgeAddr],
176
+ routersByDomain: { 1: evmAddr, 1399811149: solAddr },
177
+ rebalancerAddress: rebalancerAddr,
178
+ },
179
+ testLogger,
180
+ );
181
+
182
+ expect(fetchStub.calledOnce).to.be.true;
183
+ const body = JSON.parse(fetchStub.firstCall.args[1].body);
184
+
185
+ // bridges encoded as EVM bytea (20-byte)
186
+ expect(body.variables.senders).to.deep.equal([
187
+ '\\x1234567890abcdef1234567890abcdef12345678',
188
+ ]);
189
+ expect(body.variables.recipients).to.deep.equal([
190
+ '\\x1234567890abcdef1234567890abcdef12345678',
191
+ ]);
192
+ // rebalancer encoded as EVM bytea
193
+ expect(body.variables.txSenders).to.deep.equal([
194
+ '\\xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
195
+ ]);
196
+
197
+ // originTxRecipients: EVM router as 20-byte bytea, Solana as 32-byte bytea
198
+ const expectedEvmBytea = '\\x5a0e13290ec57f5e9031d01d03c6a40029cc24ea';
199
+ const expectedSolHex = addressToByteHexString(
200
+ solAddr,
201
+ ProtocolType.Sealevel,
202
+ );
203
+ const expectedSolBytea = expectedSolHex
204
+ .replace(/^0x/i, '\\x')
205
+ .toLowerCase();
206
+
207
+ expect(body.variables.originTxRecipients).to.include(expectedEvmBytea);
208
+ expect(body.variables.originTxRecipients).to.include(expectedSolBytea);
209
+ // 32 bytes = 64 hex chars + 2-char \\x prefix
210
+ expect(expectedSolBytea.length).to.equal(66);
211
+ });
212
+ });
213
+
214
+ describe('hasUndeliveredRebalance post-query validation', () => {
215
+ it('validates non-EVM router addresses correctly in post-query filter', async () => {
216
+ const solAddr = 'E5rVV8zXwtc4TKGypCJvSBaYbgxa4XaYg5MS6N9QGdeo';
217
+ const solHex = addressToByteHexString(solAddr, ProtocolType.Sealevel);
218
+ const solBytea = solHex.replace(/^0x/i, '\\x').toLowerCase();
219
+
220
+ const bridgeAddr = '0x1234567890abcdef1234567890abcdef12345678';
221
+ const txSenderAddr = '0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef';
222
+
223
+ const getProtocol = Sinon.stub().returns(ProtocolType.Sealevel);
224
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
225
+
226
+ fetchStub.resolves(
227
+ new Response(
228
+ JSON.stringify({
229
+ data: {
230
+ message_view: [
231
+ {
232
+ msg_id:
233
+ '\\xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
234
+ origin_domain_id: 1399811149,
235
+ destination_domain_id: 1,
236
+ sender: '\\x1234567890abcdef1234567890abcdef12345678',
237
+ recipient: '\\x1234567890abcdef1234567890abcdef12345678',
238
+ origin_tx_hash:
239
+ '\\xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
240
+ origin_tx_sender:
241
+ '\\xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
242
+ origin_tx_recipient: solBytea,
243
+ is_delivered: false,
244
+ },
245
+ ],
246
+ },
247
+ }),
248
+ { status: 200 },
249
+ ),
250
+ );
251
+
252
+ const result = await client.hasUndeliveredRebalance(
253
+ {
254
+ bridges: [bridgeAddr],
255
+ routersByDomain: { 1399811149: solAddr },
256
+ txSender: txSenderAddr,
257
+ },
258
+ testLogger,
259
+ );
260
+
261
+ expect(result).to.be.true;
262
+ });
263
+
264
+ it('returns false when origin_tx_recipient does not match expected router', async () => {
265
+ const evmAddr = '0x5a0e13290ec57f5e9031d01d03c6a40029cc24ea';
266
+ const wrongRouter = '0xffffffffffffffffffffffffffffffffffffffff';
267
+
268
+ const getProtocol = Sinon.stub().returns(ProtocolType.Ethereum);
269
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
270
+
271
+ fetchStub.resolves(
272
+ new Response(
273
+ JSON.stringify({
274
+ data: {
275
+ message_view: [
276
+ {
277
+ msg_id:
278
+ '\\xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
279
+ origin_domain_id: 1,
280
+ destination_domain_id: 137,
281
+ sender: '\\x1234567890abcdef1234567890abcdef12345678',
282
+ recipient: '\\x1234567890abcdef1234567890abcdef12345678',
283
+ origin_tx_hash:
284
+ '\\xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
285
+ origin_tx_sender:
286
+ '\\xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
287
+ origin_tx_recipient: '\\x' + wrongRouter.slice(2),
288
+ is_delivered: false,
289
+ },
290
+ ],
291
+ },
292
+ }),
293
+ { status: 200 },
294
+ ),
295
+ );
296
+
297
+ const result = await client.hasUndeliveredRebalance(
298
+ {
299
+ bridges: ['0x1234567890abcdef1234567890abcdef12345678'],
300
+ routersByDomain: { 1: evmAddr },
301
+ txSender: '0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
302
+ },
303
+ testLogger,
304
+ );
305
+
306
+ expect(result).to.be.false;
307
+ });
308
+
309
+ it('validates EVM router addresses correctly in post-query filter', async () => {
310
+ const evmAddr = '0x5a0e13290ec57f5e9031d01d03c6a40029cc24ea';
311
+
312
+ const getProtocol = Sinon.stub().returns(ProtocolType.Ethereum);
313
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
314
+
315
+ fetchStub.resolves(
316
+ new Response(
317
+ JSON.stringify({
318
+ data: {
319
+ message_view: [
320
+ {
321
+ msg_id:
322
+ '\\xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
323
+ origin_domain_id: 1,
324
+ destination_domain_id: 137,
325
+ sender: '\\x1234567890abcdef1234567890abcdef12345678',
326
+ recipient: '\\x1234567890abcdef1234567890abcdef12345678',
327
+ origin_tx_hash:
328
+ '\\xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
329
+ origin_tx_sender:
330
+ '\\xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
331
+ origin_tx_recipient:
332
+ '\\x5a0e13290ec57f5e9031d01d03c6a40029cc24ea',
333
+ is_delivered: false,
334
+ },
335
+ ],
336
+ },
337
+ }),
338
+ { status: 200 },
339
+ ),
340
+ );
341
+
342
+ const result = await client.hasUndeliveredRebalance(
343
+ {
344
+ bridges: ['0x1234567890abcdef1234567890abcdef12345678'],
345
+ routersByDomain: { 1: evmAddr },
346
+ txSender: '0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
347
+ },
348
+ testLogger,
349
+ );
350
+
351
+ expect(result).to.be.true;
352
+ });
353
+ });
354
+
355
+ describe('error handling', () => {
356
+ it('throws on non-200 response from explorer', async () => {
357
+ const getProtocol = Sinon.stub().returns(ProtocolType.Ethereum);
358
+ const client = new ExplorerClient('https://explorer.test', getProtocol);
359
+
360
+ fetchStub.resolves(
361
+ new Response(
362
+ JSON.stringify({
363
+ errors: [{ message: 'Internal Server Error' }],
364
+ }),
365
+ { status: 500 },
366
+ ),
367
+ );
368
+
369
+ await expect(
370
+ client.hasUndeliveredRebalance(
371
+ {
372
+ bridges: ['0x1234567890abcdef1234567890abcdef12345678'],
373
+ routersByDomain: {
374
+ 1: '0x5a0e13290ec57f5e9031d01d03c6a40029cc24ea',
375
+ },
376
+ txSender: '0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef',
377
+ },
378
+ testLogger,
379
+ ),
380
+ ).to.be.rejectedWith('Explorer query failed: 500');
381
+ });
382
+ });
383
+ });
@@ -1,5 +1,11 @@
1
1
  import type { Logger } from 'pino';
2
2
 
3
+ import {
4
+ addressToByteHexString,
5
+ isEVMLike,
6
+ ProtocolType,
7
+ } from '@hyperlane-xyz/utils';
8
+
3
9
  export type InflightRebalanceQueryParams = {
4
10
  bridges: string[];
5
11
  routersByDomain: Record<number, string>; // Domain ID → router address (derive routers and domains from this)
@@ -47,9 +53,26 @@ export interface IExplorerClient {
47
53
  }
48
54
 
49
55
  export class ExplorerClient implements IExplorerClient {
50
- constructor(private readonly baseUrl: string) {}
56
+ constructor(
57
+ private readonly baseUrl: string,
58
+ private readonly getProtocol: (domainId: number) => ProtocolType,
59
+ ) {}
51
60
 
52
- private toBytea(addr: string): string {
61
+ /**
62
+ * Convert an address to PostgreSQL bytea format (\\x-prefixed hex).
63
+ * When `domain` is provided, resolves the chain's protocol to encode
64
+ * non-EVM addresses (e.g. base58 Solana, 32-byte Starknet) correctly
65
+ * via `addressToByteHexString`. Without `domain`, assumes the address
66
+ * is already EVM-format hex (used for bridges, txSender, etc. which
67
+ * are always EVM addresses).
68
+ */
69
+ private toBytea(addr: string, domain?: number): string {
70
+ const protocol =
71
+ domain !== undefined ? this.getProtocol(domain) : undefined;
72
+ if (protocol && !isEVMLike(protocol)) {
73
+ const hex = addressToByteHexString(addr, protocol);
74
+ return hex.replace(/^0x/i, '\\x').toLowerCase();
75
+ }
53
76
  return addr.replace(/^0x/i, '\\x').toLowerCase();
54
77
  }
55
78
 
@@ -84,15 +107,20 @@ export class ExplorerClient implements IExplorerClient {
84
107
  const { bridges, routersByDomain, txSender, limit = 5 } = params;
85
108
 
86
109
  // Derive routers and domains from routersByDomain
87
- const routers = Object.values(routersByDomain);
110
+ const routerEntries = Object.entries(routersByDomain);
88
111
  const domains = Object.keys(routersByDomain).map(Number);
89
112
 
90
113
  const variables = {
114
+ // NOTE: bridges are always EVM addresses; pass domain here if non-EVM bridges are added
91
115
  senders: bridges.map((a) => this.toBytea(a)),
116
+ // NOTE: bridges are always EVM addresses; pass domain here if non-EVM bridges are added
92
117
  recipients: bridges.map((a) => this.toBytea(a)),
93
- originTxRecipients: routers.map((a) => this.toBytea(a)),
118
+ originTxRecipients: routerEntries.map(([domain, addr]) =>
119
+ this.toBytea(addr, Number(domain)),
120
+ ),
94
121
  originDomains: domains,
95
122
  destDomains: domains,
123
+ // NOTE: txSender is always an EVM address (rebalancer signer)
96
124
  txSenders: [this.toBytea(txSender)],
97
125
  limit,
98
126
  };
@@ -170,9 +198,17 @@ export class ExplorerClient implements IExplorerClient {
170
198
  const validatedRows = rows.filter((msg: any) => {
171
199
  const expectedRouter = routersByDomain[msg.origin_domain_id];
172
200
  if (!expectedRouter) return false;
201
+ const protocol = this.getProtocol(msg.origin_domain_id);
173
202
  const normalizedMsgRouter = msg.origin_tx_recipient?.startsWith('\\x')
174
203
  ? '0x' + msg.origin_tx_recipient.slice(2)
175
204
  : msg.origin_tx_recipient;
205
+ if (protocol && !isEVMLike(protocol)) {
206
+ const expectedHex = addressToByteHexString(
207
+ expectedRouter,
208
+ protocol,
209
+ ).toLowerCase();
210
+ return normalizedMsgRouter?.toLowerCase() === expectedHex;
211
+ }
176
212
  return (
177
213
  normalizedMsgRouter?.toLowerCase() === expectedRouter.toLowerCase()
178
214
  );
@@ -197,14 +233,19 @@ export class ExplorerClient implements IExplorerClient {
197
233
  const { routersByDomain, excludeTxSenders, limit = 100 } = params;
198
234
 
199
235
  // Derive routers and domains from routersByDomain
200
- const routers = Object.values(routersByDomain);
236
+ const routerEntries = Object.entries(routersByDomain);
201
237
  const domains = Object.keys(routersByDomain).map(Number);
202
238
 
203
239
  const variables = {
204
- senders: routers.map((a) => this.toBytea(a)),
205
- recipients: routers.map((a) => this.toBytea(a)),
240
+ senders: routerEntries.map(([domain, addr]) =>
241
+ this.toBytea(addr, Number(domain)),
242
+ ),
243
+ recipients: routerEntries.map(([domain, addr]) =>
244
+ this.toBytea(addr, Number(domain)),
245
+ ),
206
246
  originDomains: domains,
207
247
  destDomains: domains,
248
+ // NOTE: excludeTxSenders are always EVM addresses
208
249
  excludeTxSenders: excludeTxSenders.map((a) => this.toBytea(a)),
209
250
  limit,
210
251
  };
@@ -297,21 +338,27 @@ export class ExplorerClient implements IExplorerClient {
297
338
  } = params;
298
339
 
299
340
  // Derive routers and domains from routersByDomain
300
- const routers = Object.values(routersByDomain);
341
+ const routerEntries = Object.entries(routersByDomain);
301
342
  const domains = Object.keys(routersByDomain).map(Number);
302
343
 
303
344
  // Build list of tx senders to include (rebalancer + optional inventory signer)
345
+ // NOTE: rebalancerAddress is always an EVM address (rebalancer signer)
304
346
  const txSenders = [this.toBytea(rebalancerAddress)];
305
347
  if (inventorySignerAddresses) {
306
348
  for (const addr of inventorySignerAddresses) {
349
+ // NOTE: inventorySignerAddresses are filtered to ProtocolType.Ethereum
307
350
  txSenders.push(this.toBytea(addr));
308
351
  }
309
352
  }
310
353
 
311
354
  const variables = {
355
+ // NOTE: bridges are always EVM addresses; pass domain here if non-EVM bridges are added
312
356
  senders: bridges.map((a) => this.toBytea(a)),
357
+ // NOTE: bridges are always EVM addresses; pass domain here if non-EVM bridges are added
313
358
  recipients: bridges.map((a) => this.toBytea(a)),
314
- originTxRecipients: routers.map((a) => this.toBytea(a)),
359
+ originTxRecipients: routerEntries.map(([domain, addr]) =>
360
+ this.toBytea(addr, Number(domain)),
361
+ ),
315
362
  originDomains: domains,
316
363
  destDomains: domains,
317
364
  txSenders,