@hyperlane-xyz/rebalancer 25.5.0 → 27.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 (168) hide show
  1. package/dist/bridges/LiFiBridge.d.ts +18 -2
  2. package/dist/bridges/LiFiBridge.d.ts.map +1 -1
  3. package/dist/bridges/LiFiBridge.js +176 -70
  4. package/dist/bridges/LiFiBridge.js.map +1 -1
  5. package/dist/bridges/LiFiBridge.test.js +115 -23
  6. package/dist/bridges/LiFiBridge.test.js.map +1 -1
  7. package/dist/config/RebalancerConfig.d.ts +4 -2
  8. package/dist/config/RebalancerConfig.d.ts.map +1 -1
  9. package/dist/config/RebalancerConfig.js +5 -5
  10. package/dist/config/RebalancerConfig.js.map +1 -1
  11. package/dist/config/RebalancerConfig.test.js +74 -6
  12. package/dist/config/RebalancerConfig.test.js.map +1 -1
  13. package/dist/config/types.d.ts +45 -5
  14. package/dist/config/types.d.ts.map +1 -1
  15. package/dist/config/types.js +167 -17
  16. package/dist/config/types.js.map +1 -1
  17. package/dist/core/InventoryRebalancer.d.ts +15 -4
  18. package/dist/core/InventoryRebalancer.d.ts.map +1 -1
  19. package/dist/core/InventoryRebalancer.js +126 -41
  20. package/dist/core/InventoryRebalancer.js.map +1 -1
  21. package/dist/core/InventoryRebalancer.test.js +77 -12
  22. package/dist/core/InventoryRebalancer.test.js.map +1 -1
  23. package/dist/core/RebalancerOrchestrator.test.js +2 -0
  24. package/dist/core/RebalancerOrchestrator.test.js.map +1 -1
  25. package/dist/core/RebalancerService.d.ts +3 -2
  26. package/dist/core/RebalancerService.d.ts.map +1 -1
  27. package/dist/core/RebalancerService.js +4 -4
  28. package/dist/core/RebalancerService.js.map +1 -1
  29. package/dist/core/RebalancerService.test.js +16 -16
  30. package/dist/core/RebalancerService.test.js.map +1 -1
  31. package/dist/e2e/collateral-deficit.e2e-test.js +7 -6
  32. package/dist/e2e/collateral-deficit.e2e-test.js.map +1 -1
  33. package/dist/e2e/composite.e2e-test.js +7 -6
  34. package/dist/e2e/composite.e2e-test.js.map +1 -1
  35. package/dist/e2e/fixtures/routes.d.ts.map +1 -1
  36. package/dist/e2e/fixtures/routes.js +5 -0
  37. package/dist/e2e/fixtures/routes.js.map +1 -1
  38. package/dist/e2e/harness/MixedLocalDeploymentManager.d.ts +21 -0
  39. package/dist/e2e/harness/MixedLocalDeploymentManager.d.ts.map +1 -0
  40. package/dist/e2e/harness/MixedLocalDeploymentManager.js +113 -0
  41. package/dist/e2e/harness/MixedLocalDeploymentManager.js.map +1 -0
  42. package/dist/e2e/harness/MockExternalBridge.d.ts +2 -1
  43. package/dist/e2e/harness/MockExternalBridge.d.ts.map +1 -1
  44. package/dist/e2e/harness/MockExternalBridge.js +5 -3
  45. package/dist/e2e/harness/MockExternalBridge.js.map +1 -1
  46. package/dist/e2e/harness/SnapshotHelper.d.ts +13 -0
  47. package/dist/e2e/harness/SnapshotHelper.d.ts.map +1 -0
  48. package/dist/e2e/harness/SnapshotHelper.js +36 -0
  49. package/dist/e2e/harness/SnapshotHelper.js.map +1 -0
  50. package/dist/e2e/harness/TestHelpers.d.ts.map +1 -1
  51. package/dist/e2e/harness/TestHelpers.js +18 -7
  52. package/dist/e2e/harness/TestHelpers.js.map +1 -1
  53. package/dist/e2e/harness/TestRebalancer.d.ts +0 -1
  54. package/dist/e2e/harness/TestRebalancer.d.ts.map +1 -1
  55. package/dist/e2e/harness/TestRebalancer.js +14 -24
  56. package/dist/e2e/harness/TestRebalancer.js.map +1 -1
  57. package/dist/e2e/inventory-erc20-minAmount.e2e-test.js +7 -11
  58. package/dist/e2e/inventory-erc20-minAmount.e2e-test.js.map +1 -1
  59. package/dist/e2e/inventory-erc20-weighted.e2e-test.js +7 -11
  60. package/dist/e2e/inventory-erc20-weighted.e2e-test.js.map +1 -1
  61. package/dist/e2e/inventory-minAmount.e2e-test.js +7 -11
  62. package/dist/e2e/inventory-minAmount.e2e-test.js.map +1 -1
  63. package/dist/e2e/inventory-weighted.e2e-test.js +9 -12
  64. package/dist/e2e/inventory-weighted.e2e-test.js.map +1 -1
  65. package/dist/e2e/minAmount.e2e-test.js +9 -7
  66. package/dist/e2e/minAmount.e2e-test.js.map +1 -1
  67. package/dist/e2e/mixed-weighted.e2e-test.d.ts +2 -0
  68. package/dist/e2e/mixed-weighted.e2e-test.d.ts.map +1 -0
  69. package/dist/e2e/mixed-weighted.e2e-test.js +189 -0
  70. package/dist/e2e/mixed-weighted.e2e-test.js.map +1 -0
  71. package/dist/e2e/weighted.e2e-test.js +7 -6
  72. package/dist/e2e/weighted.e2e-test.js.map +1 -1
  73. package/dist/factories/RebalancerContextFactory.d.ts +3 -4
  74. package/dist/factories/RebalancerContextFactory.d.ts.map +1 -1
  75. package/dist/factories/RebalancerContextFactory.js +123 -35
  76. package/dist/factories/RebalancerContextFactory.js.map +1 -1
  77. package/dist/factories/RebalancerContextFactory.test.d.ts +2 -0
  78. package/dist/factories/RebalancerContextFactory.test.d.ts.map +1 -0
  79. package/dist/factories/RebalancerContextFactory.test.js +270 -0
  80. package/dist/factories/RebalancerContextFactory.test.js.map +1 -0
  81. package/dist/interfaces/IExternalBridge.d.ts +3 -2
  82. package/dist/interfaces/IExternalBridge.d.ts.map +1 -1
  83. package/dist/metrics/scripts/metrics.d.ts +3 -3
  84. package/dist/monitor/Monitor.d.ts +2 -2
  85. package/dist/monitor/Monitor.d.ts.map +1 -1
  86. package/dist/monitor/Monitor.js +6 -1
  87. package/dist/monitor/Monitor.js.map +1 -1
  88. package/dist/service.js +84 -25
  89. package/dist/service.js.map +1 -1
  90. package/dist/test/helpers.d.ts.map +1 -1
  91. package/dist/test/helpers.js +4 -1
  92. package/dist/test/helpers.js.map +1 -1
  93. package/dist/test/lifiMocks.js +2 -2
  94. package/dist/test/lifiMocks.js.map +1 -1
  95. package/dist/tracking/ActionTracker.d.ts +1 -1
  96. package/dist/tracking/ActionTracker.d.ts.map +1 -1
  97. package/dist/tracking/ActionTracker.js +4 -4
  98. package/dist/tracking/ActionTracker.js.map +1 -1
  99. package/dist/utils/ExplorerClient.d.ts +1 -1
  100. package/dist/utils/ExplorerClient.d.ts.map +1 -1
  101. package/dist/utils/ExplorerClient.js +5 -3
  102. package/dist/utils/ExplorerClient.js.map +1 -1
  103. package/dist/utils/blockTag.d.ts.map +1 -1
  104. package/dist/utils/blockTag.js +21 -1
  105. package/dist/utils/blockTag.js.map +1 -1
  106. package/dist/utils/bridgeUtils.test.js +89 -1
  107. package/dist/utils/bridgeUtils.test.js.map +1 -1
  108. package/dist/utils/gasEstimation.d.ts.map +1 -1
  109. package/dist/utils/gasEstimation.js +31 -1
  110. package/dist/utils/gasEstimation.js.map +1 -1
  111. package/dist/utils/solanaKeyParser.d.ts +10 -0
  112. package/dist/utils/solanaKeyParser.d.ts.map +1 -0
  113. package/dist/utils/solanaKeyParser.js +87 -0
  114. package/dist/utils/solanaKeyParser.js.map +1 -0
  115. package/dist/utils/solanaKeyParser.test.d.ts +2 -0
  116. package/dist/utils/solanaKeyParser.test.d.ts.map +1 -0
  117. package/dist/utils/solanaKeyParser.test.js +71 -0
  118. package/dist/utils/solanaKeyParser.test.js.map +1 -0
  119. package/dist/utils/tokenUtils.d.ts +2 -2
  120. package/dist/utils/tokenUtils.d.ts.map +1 -1
  121. package/dist/utils/tokenUtils.js +15 -6
  122. package/dist/utils/tokenUtils.js.map +1 -1
  123. package/dist/utils/transactionUtils.d.ts +22 -0
  124. package/dist/utils/transactionUtils.d.ts.map +1 -0
  125. package/dist/utils/transactionUtils.js +26 -0
  126. package/dist/utils/transactionUtils.js.map +1 -0
  127. package/package.json +10 -8
  128. package/src/bridges/LiFiBridge.test.ts +128 -23
  129. package/src/bridges/LiFiBridge.ts +235 -78
  130. package/src/config/RebalancerConfig.test.ts +82 -6
  131. package/src/config/RebalancerConfig.ts +7 -3
  132. package/src/config/types.ts +238 -27
  133. package/src/core/InventoryRebalancer.test.ts +93 -12
  134. package/src/core/InventoryRebalancer.ts +206 -60
  135. package/src/core/RebalancerOrchestrator.test.ts +2 -0
  136. package/src/core/RebalancerService.test.ts +0 -16
  137. package/src/core/RebalancerService.ts +5 -3
  138. package/src/e2e/collateral-deficit.e2e-test.ts +7 -11
  139. package/src/e2e/composite.e2e-test.ts +7 -11
  140. package/src/e2e/fixtures/routes.ts +5 -0
  141. package/src/e2e/harness/MixedLocalDeploymentManager.ts +188 -0
  142. package/src/e2e/harness/MockExternalBridge.ts +5 -3
  143. package/src/e2e/harness/SnapshotHelper.ts +52 -0
  144. package/src/e2e/harness/TestHelpers.ts +21 -7
  145. package/src/e2e/harness/TestRebalancer.ts +14 -40
  146. package/src/e2e/inventory-erc20-minAmount.e2e-test.ts +7 -16
  147. package/src/e2e/inventory-erc20-weighted.e2e-test.ts +7 -16
  148. package/src/e2e/inventory-minAmount.e2e-test.ts +7 -16
  149. package/src/e2e/inventory-weighted.e2e-test.ts +12 -19
  150. package/src/e2e/minAmount.e2e-test.ts +9 -12
  151. package/src/e2e/mixed-weighted.e2e-test.ts +267 -0
  152. package/src/e2e/weighted.e2e-test.ts +7 -11
  153. package/src/factories/RebalancerContextFactory.test.ts +394 -0
  154. package/src/factories/RebalancerContextFactory.ts +192 -44
  155. package/src/interfaces/IExternalBridge.ts +3 -2
  156. package/src/monitor/Monitor.ts +12 -5
  157. package/src/service.ts +116 -33
  158. package/src/test/helpers.ts +4 -1
  159. package/src/test/lifiMocks.ts +2 -2
  160. package/src/tracking/ActionTracker.ts +5 -5
  161. package/src/utils/ExplorerClient.ts +6 -4
  162. package/src/utils/blockTag.ts +29 -3
  163. package/src/utils/bridgeUtils.test.ts +104 -0
  164. package/src/utils/gasEstimation.ts +35 -1
  165. package/src/utils/solanaKeyParser.test.ts +103 -0
  166. package/src/utils/solanaKeyParser.ts +117 -0
  167. package/src/utils/tokenUtils.ts +20 -6
  168. package/src/utils/transactionUtils.ts +41 -0
@@ -1,4 +1,5 @@
1
1
  import { type LiFiStep } from '@lifi/sdk';
2
+ import { ProtocolType } from '@hyperlane-xyz/utils';
2
3
  import type { Logger } from 'pino';
3
4
  import type { BridgeQuote, BridgeQuoteParams, BridgeTransferResult, BridgeTransferStatus, ExternalBridgeConfig, IExternalBridge } from '../interfaces/IExternalBridge.js';
4
5
  /**
@@ -15,9 +16,17 @@ import type { BridgeQuote, BridgeQuoteParams, BridgeTransferResult, BridgeTransf
15
16
  export declare class LiFiBridge implements IExternalBridge {
16
17
  private static readonly NATIVE_TOKEN_ADDRESS;
17
18
  readonly externalBridgeId = "lifi";
19
+ /**
20
+ * Convert a Hyperlane domain ID to a LiFi-compatible chain ID.
21
+ * For EVM chains, these are identical (e.g., Arbitrum = 42161 in both).
22
+ * For non-EVM chains like Solana, LiFi uses different chain identifiers.
23
+ */
24
+ static toLiFiChainId(chainId: number): number;
18
25
  readonly logger: Logger;
19
26
  private initialized;
27
+ private _executeLock;
20
28
  private readonly config;
29
+ private readonly chainMetadataByChainId;
21
30
  constructor(config: ExternalBridgeConfig, logger: Logger);
22
31
  getNativeTokenAddress(): string;
23
32
  private initialize;
@@ -26,6 +35,13 @@ export declare class LiFiBridge implements IExternalBridge {
26
35
  * Iterates metadata to find matching chainId and returns first HTTP RPC URL.
27
36
  */
28
37
  private getRpcUrlForChainId;
38
+ private getProtocolTypeForChainId;
39
+ private addressesEqual;
40
+ /**
41
+ * Configure LiFi SDK providers from the given private keys.
42
+ * Sets up wallet/signer for each protocol type present in the keys map.
43
+ */
44
+ private configureLiFiProviders;
29
45
  /**
30
46
  * Get a quote for bridging tokens.
31
47
  * Supports two modes:
@@ -56,9 +72,9 @@ export declare class LiFiBridge implements IExternalBridge {
56
72
  * Handles approvals, transaction signing, and execution automatically.
57
73
  *
58
74
  * @param quote - Quote obtained from quote()
59
- * @param privateKey - Private key hex string (0x-prefixed) for signing the transaction
75
+ * @param privateKeys - Private keys keyed by protocol type for signing transactions
60
76
  */
61
- execute(quote: BridgeQuote<LiFiStep>, privateKey: string): Promise<BridgeTransferResult>;
77
+ execute(quote: BridgeQuote<LiFiStep>, privateKeys: Partial<Record<ProtocolType, string>>): Promise<BridgeTransferResult>;
62
78
  /**
63
79
  * Validate that the route returned by LiFi matches the original request parameters.
64
80
  * Prevents execution against wrong chains, tokens, or recipients if the bridge API
@@ -1 +1 @@
1
- {"version":3,"file":"LiFiBridge.d.ts","sourceRoot":"","sources":["../../src/bridges/LiFiBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EASd,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAMnC,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EAChB,MAAM,kCAAkC,CAAC;AA2C1C;;;;;;;;;;GAUG;AACH,qBAAa,UAAW,YAAW,eAAe;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CACG;IAE/C,QAAQ,CAAC,gBAAgB,UAAU;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;gBAElC,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;IAKxD,qBAAqB,IAAI,MAAM;IAI/B,OAAO,CAAC,UAAU;IAelB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;;;;;OAOG;IACG,KAAK,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IA8BtE;;;OAGG;YACW,qBAAqB;IAgDnC;;;OAGG;YACW,sBAAsB;IAqEpC;;;;OAIG;IACH,OAAO,CAAC,YAAY;IA2BpB;;;;;;OAMG;IACG,OAAO,CACX,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,EAC5B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC;IA8HhC;;;;;;;OAOG;IACH,OAAO,CAAC,2BAA2B;IAmDnC;;;OAGG;IACG,SAAS,CACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,CAAC;CAiDjC"}
1
+ {"version":3,"file":"LiFiBridge.d.ts","sourceRoot":"","sources":["../../src/bridges/LiFiBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,QAAQ,EASd,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,YAAY,EAAoB,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAKnC,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EAChB,MAAM,kCAAkC,CAAC;AAwE1C;;;;;;;;;;GAUG;AACH,qBAAa,UAAW,YAAW,eAAe;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CACG;IAE/C,QAAQ,CAAC,gBAAgB,UAAU;IAEnC;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAG7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA6B;gBAExD,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;IAyBxD,qBAAqB,IAAI,MAAM;IAI/B,OAAO,CAAC,UAAU;IAelB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,yBAAyB;IAIjC,OAAO,CAAC,cAAc;IAStB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IA8D9B;;;;;;;OAOG;IACG,KAAK,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IA8BtE;;;OAGG;YACW,qBAAqB;IAuDnC;;;OAGG;YACW,sBAAsB;IA4EpC;;;;OAIG;IACH,OAAO,CAAC,YAAY;IA2BpB;;;;;;OAMG;IACG,OAAO,CACX,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,EAC5B,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,GACjD,OAAO,CAAC,oBAAoB,CAAC;IAwHhC;;;;;;;OAOG;IACH,OAAO,CAAC,2BAA2B;IA+DnC;;;OAGG;IACG,SAAS,CACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,CAAC;CAiDjC"}
@@ -1,8 +1,10 @@
1
- import { EVM, convertQuoteToRoute, createConfig, executeRoute, getQuote, getStatus, config as lifiConfig, } from '@lifi/sdk';
1
+ import { EVM, KeypairWalletAdapter, Solana, convertQuoteToRoute, createConfig, executeRoute, getQuote, getStatus, config as lifiConfig, } from '@lifi/sdk';
2
+ import bs58 from 'bs58';
3
+ import { ProtocolType, assert, ensure0x } from '@hyperlane-xyz/utils';
2
4
  import { createWalletClient, http } from 'viem';
3
5
  import { privateKeyToAccount } from 'viem/accounts';
4
6
  import { arbitrum, base, mainnet, optimism } from 'viem/chains';
5
- import { assert } from '@hyperlane-xyz/utils';
7
+ import { parseSolanaPrivateKey } from '../utils/solanaKeyParser.js';
6
8
  /**
7
9
  * LiFi API base URL for REST endpoints.
8
10
  * The SDK doesn't support toAmount quotes, so we use REST API directly.
@@ -18,6 +20,16 @@ const VIEM_CHAINS = {
18
20
  [base.id]: base,
19
21
  [optimism.id]: optimism,
20
22
  };
23
+ /**
24
+ * Mapping from Hyperlane domain IDs to LiFi chain IDs for non-EVM chains.
25
+ * EVM chains use their native chain ID which is the same in both systems.
26
+ * Non-EVM chains (e.g., Solana) have different identifiers in each system.
27
+ *
28
+ * @see https://docs.li.fi/introduction/lifi-architecture/solana-overview
29
+ */
30
+ const HYPERLANE_TO_LIFI_CHAIN_IDS = {
31
+ 1399811149: 1151111081099710, // Solana: Hyperlane domain → LiFi chain ID
32
+ };
21
33
  /**
22
34
  * Get viem chain config by chain ID.
23
35
  * Falls back to a minimal chain config if not found.
@@ -40,6 +52,22 @@ function getViemChain(chainId, rpcUrl) {
40
52
  },
41
53
  };
42
54
  }
55
+ function toBase58SolanaKey(rawKey) {
56
+ const trimmedKey = rawKey.trim();
57
+ if (!trimmedKey.startsWith('[') && !trimmedKey.includes(',')) {
58
+ try {
59
+ const decoded = bs58.decode(trimmedKey);
60
+ if (decoded.length === 64) {
61
+ return trimmedKey;
62
+ }
63
+ }
64
+ catch {
65
+ // Not valid base58, continue to parse as byte array
66
+ }
67
+ }
68
+ const bytes = parseSolanaPrivateKey(trimmedKey);
69
+ return bs58.encode(bytes);
70
+ }
43
71
  /**
44
72
  * LiFi implementation of IExternalBridge using the official @lifi/sdk.
45
73
  *
@@ -54,12 +82,38 @@ function getViemChain(chainId, rpcUrl) {
54
82
  export class LiFiBridge {
55
83
  static NATIVE_TOKEN_ADDRESS = '0x0000000000000000000000000000000000000000';
56
84
  externalBridgeId = 'lifi';
85
+ /**
86
+ * Convert a Hyperlane domain ID to a LiFi-compatible chain ID.
87
+ * For EVM chains, these are identical (e.g., Arbitrum = 42161 in both).
88
+ * For non-EVM chains like Solana, LiFi uses different chain identifiers.
89
+ */
90
+ static toLiFiChainId(chainId) {
91
+ return HYPERLANE_TO_LIFI_CHAIN_IDS[chainId] ?? chainId;
92
+ }
57
93
  logger;
58
94
  initialized = false;
95
+ _executeLock = Promise.resolve();
59
96
  config;
97
+ chainMetadataByChainId;
60
98
  constructor(config, logger) {
61
99
  this.config = config;
62
100
  this.logger = logger;
101
+ // Build chainId -> metadata map for O(1) lookups
102
+ this.chainMetadataByChainId = new Map();
103
+ if (config.chainMetadata) {
104
+ for (const metadata of Object.values(config.chainMetadata)) {
105
+ if (metadata.chainId !== undefined) {
106
+ this.chainMetadataByChainId.set(Number(metadata.chainId), metadata);
107
+ }
108
+ }
109
+ // Also key by LiFi chain IDs so both Hyperlane domains and LiFi IDs resolve to the same metadata.
110
+ for (const [hyperlaneDomainId, lifiChainId] of Object.entries(HYPERLANE_TO_LIFI_CHAIN_IDS)) {
111
+ const metadata = this.chainMetadataByChainId.get(Number(hyperlaneDomainId));
112
+ if (metadata !== undefined) {
113
+ this.chainMetadataByChainId.set(Number(lifiChainId), metadata);
114
+ }
115
+ }
116
+ }
63
117
  }
64
118
  getNativeTokenAddress() {
65
119
  return LiFiBridge.NATIVE_TOKEN_ADDRESS;
@@ -79,14 +133,65 @@ export class LiFiBridge {
79
133
  * Iterates metadata to find matching chainId and returns first HTTP RPC URL.
80
134
  */
81
135
  getRpcUrlForChainId(chainId) {
82
- if (!this.config.chainMetadata)
83
- return undefined;
84
- for (const metadata of Object.values(this.config.chainMetadata)) {
85
- if (metadata.chainId === chainId && metadata.rpcUrls?.length) {
86
- return metadata.rpcUrls[0].http;
136
+ return this.chainMetadataByChainId.get(chainId)?.rpcUrls?.[0]?.http;
137
+ }
138
+ getProtocolTypeForChainId(chainId) {
139
+ return this.chainMetadataByChainId.get(chainId)?.protocol;
140
+ }
141
+ addressesEqual(a, b, chainId) {
142
+ const protocol = this.getProtocolTypeForChainId(chainId);
143
+ // Sealevel uses base58 addresses where case is significant.
144
+ if (protocol === ProtocolType.Sealevel) {
145
+ return a === b;
146
+ }
147
+ return a.toLowerCase() === b.toLowerCase();
148
+ }
149
+ /**
150
+ * Configure LiFi SDK providers from the given private keys.
151
+ * Sets up wallet/signer for each protocol type present in the keys map.
152
+ */
153
+ configureLiFiProviders(privateKeys, fromChain, fromRpcUrl) {
154
+ const providers = [];
155
+ for (const [protocol, key] of Object.entries(privateKeys)) {
156
+ switch (protocol) {
157
+ case ProtocolType.Ethereum: {
158
+ const account = privateKeyToAccount(ensure0x(key));
159
+ const chain = getViemChain(fromChain, fromRpcUrl);
160
+ const walletClient = createWalletClient({
161
+ account,
162
+ chain,
163
+ transport: http(fromRpcUrl),
164
+ });
165
+ providers.push(EVM({
166
+ getWalletClient: async () => walletClient,
167
+ switchChain: async (requiredChainId) => {
168
+ const switchRpcUrl = this.getRpcUrlForChainId(requiredChainId);
169
+ const requiredChain = getViemChain(requiredChainId, switchRpcUrl);
170
+ return createWalletClient({
171
+ account,
172
+ chain: requiredChain,
173
+ transport: http(switchRpcUrl),
174
+ });
175
+ },
176
+ }));
177
+ break;
178
+ }
179
+ case ProtocolType.Sealevel: {
180
+ const base58Key = toBase58SolanaKey(key);
181
+ providers.push(Solana({
182
+ getWalletAdapter: async () => new KeypairWalletAdapter(base58Key),
183
+ }));
184
+ break;
185
+ }
186
+ default:
187
+ throw new Error(`Unsupported protocol type '${protocol}' for LiFi provider`);
87
188
  }
88
189
  }
89
- return undefined;
190
+ lifiConfig.setProviders(providers);
191
+ this.logger.debug({
192
+ fromChain,
193
+ protocols: Object.keys(privateKeys),
194
+ }, 'Configured LiFi providers for route execution');
90
195
  }
91
196
  /**
92
197
  * Get a quote for bridging tokens.
@@ -121,9 +226,11 @@ export class LiFiBridge {
121
226
  */
122
227
  async quoteBySpendingAmount(params) {
123
228
  this.logger.debug({ params }, 'Requesting LiFi quote by spending amount');
229
+ const lifiFromChain = LiFiBridge.toLiFiChainId(params.fromChain);
230
+ const lifiToChain = LiFiBridge.toLiFiChainId(params.toChain);
124
231
  const quote = await getQuote({
125
- fromChain: params.fromChain,
126
- toChain: params.toChain,
232
+ fromChain: lifiFromChain,
233
+ toChain: lifiToChain,
127
234
  fromToken: params.fromToken,
128
235
  toToken: params.toToken,
129
236
  fromAmount: params.fromAmount.toString(),
@@ -154,7 +261,11 @@ export class LiFiBridge {
154
261
  gasCosts,
155
262
  feeCosts,
156
263
  route: quote, // Store full quote for conversion to route
157
- requestParams: { ...params },
264
+ requestParams: {
265
+ ...params,
266
+ fromChain: lifiFromChain,
267
+ toChain: lifiToChain,
268
+ },
158
269
  };
159
270
  }
160
271
  /**
@@ -163,9 +274,11 @@ export class LiFiBridge {
163
274
  */
164
275
  async quoteByReceivingAmount(params) {
165
276
  this.logger.debug({ params }, 'Requesting LiFi quote by receiving amount');
277
+ const lifiFromChain = LiFiBridge.toLiFiChainId(params.fromChain);
278
+ const lifiToChain = LiFiBridge.toLiFiChainId(params.toChain);
166
279
  const queryParams = new URLSearchParams({
167
- fromChain: params.fromChain.toString(),
168
- toChain: params.toChain.toString(),
280
+ fromChain: lifiFromChain.toString(),
281
+ toChain: lifiToChain.toString(),
169
282
  fromToken: params.fromToken,
170
283
  toToken: params.toToken,
171
284
  toAmount: params.toAmount.toString(),
@@ -209,7 +322,11 @@ export class LiFiBridge {
209
322
  gasCosts,
210
323
  feeCosts,
211
324
  route: quote, // Store full quote for conversion to route
212
- requestParams: { ...params },
325
+ requestParams: {
326
+ ...params,
327
+ fromChain: lifiFromChain,
328
+ toChain: lifiToChain,
329
+ },
213
330
  };
214
331
  }
215
332
  /**
@@ -242,15 +359,17 @@ export class LiFiBridge {
242
359
  * Handles approvals, transaction signing, and execution automatically.
243
360
  *
244
361
  * @param quote - Quote obtained from quote()
245
- * @param privateKey - Private key hex string (0x-prefixed) for signing the transaction
362
+ * @param privateKeys - Private keys keyed by protocol type for signing transactions
246
363
  */
247
- async execute(quote, privateKey) {
364
+ async execute(quote, privateKeys) {
248
365
  this.initialize();
249
366
  // Convert quote to route for execution
250
367
  const route = convertQuoteToRoute(quote.route);
251
368
  this.validateRouteAgainstRequest(route, quote.requestParams);
252
369
  const fromChain = route.fromChainId;
253
370
  const toChain = route.toChainId;
371
+ const fromProtocol = this.getProtocolTypeForChainId(fromChain);
372
+ assert(privateKeys[fromProtocol ?? ProtocolType.Ethereum], `Missing private key for source chain protocol ${fromProtocol ?? ProtocolType.Ethereum}`);
254
373
  this.logger.info({
255
374
  quoteId: quote.id,
256
375
  tool: quote.tool,
@@ -258,54 +377,44 @@ export class LiFiBridge {
258
377
  toChain,
259
378
  fromAmount: quote.fromAmount.toString(),
260
379
  }, 'Executing LiFi bridge transfer');
261
- // Create viem account and wallet client for the source chain
262
- const account = privateKeyToAccount(privateKey);
263
- const rpcUrl = this.getRpcUrlForChainId(fromChain);
264
- const chain = getViemChain(fromChain, rpcUrl);
265
- const walletClient = createWalletClient({
266
- account,
267
- chain,
268
- transport: http(rpcUrl),
380
+ const fromRpcUrl = this.getRpcUrlForChainId(fromChain);
381
+ let release;
382
+ const acquired = new Promise((resolve) => {
383
+ release = resolve;
269
384
  });
270
- this.logger.debug({
271
- fromChain,
272
- chainName: chain.name,
273
- account: account.address,
274
- }, 'Created viem WalletClient for LiFi execution');
275
- // Configure LiFi SDK with EVM provider that has our wallet client
276
- lifiConfig.setProviders([
277
- EVM({
278
- getWalletClient: async () => walletClient,
279
- switchChain: async (requiredChainId) => {
280
- const switchRpcUrl = this.getRpcUrlForChainId(requiredChainId);
281
- const requiredChain = getViemChain(requiredChainId, switchRpcUrl);
282
- return createWalletClient({
283
- account,
284
- chain: requiredChain,
285
- transport: http(switchRpcUrl),
286
- });
287
- },
288
- }),
289
- ]);
385
+ const prev = this._executeLock;
386
+ this._executeLock = acquired;
387
+ await prev;
290
388
  let txHash;
291
- // Execute route with update callbacks
292
- const executedRoute = await executeRoute(route, {
293
- // Update callback for route progress
294
- updateRouteHook: (updatedRoute) => {
295
- this.logger.debug({ step: updatedRoute.steps[0]?.id }, 'Route step updated');
296
- // Extract txHash from execution if available (RouteExtended has LiFiStepExtended with execution)
297
- const execution = updatedRoute.steps[0]?.execution;
298
- if (execution?.process) {
299
- for (const process of execution.process) {
300
- if (process.txHash) {
301
- txHash = process.txHash;
389
+ let executedRoute;
390
+ try {
391
+ this.configureLiFiProviders(privateKeys, fromChain, fromRpcUrl);
392
+ this.logger.debug({
393
+ fromChain,
394
+ protocols: Object.keys(privateKeys),
395
+ }, 'Configured LiFi providers for route execution');
396
+ // Execute route with update callbacks
397
+ executedRoute = await executeRoute(route, {
398
+ // Update callback for route progress
399
+ updateRouteHook: (updatedRoute) => {
400
+ this.logger.debug({ step: updatedRoute.steps[0]?.id }, 'Route step updated');
401
+ // Extract txHash from execution if available (RouteExtended has LiFiStepExtended with execution)
402
+ const execution = updatedRoute.steps[0]?.execution;
403
+ if (execution?.process) {
404
+ for (const process of execution.process) {
405
+ if (process.txHash) {
406
+ txHash = process.txHash;
407
+ }
302
408
  }
303
409
  }
304
- }
305
- },
306
- // Auto-accept rate updates for rebalancing
307
- acceptExchangeRateUpdateHook: async () => true,
308
- });
410
+ },
411
+ // Auto-accept rate updates for rebalancing
412
+ acceptExchangeRateUpdateHook: async () => true,
413
+ });
414
+ }
415
+ finally {
416
+ release();
417
+ }
309
418
  // Extract txHash from executed route if not captured in callbacks
310
419
  if (!txHash) {
311
420
  const execution = executedRoute.steps[0]?.execution;
@@ -352,14 +461,11 @@ export class LiFiBridge {
352
461
  validateRouteAgainstRequest(route, requestParams) {
353
462
  assert(route.fromChainId === requestParams.fromChain, `Route fromChainId ${route.fromChainId} does not match requested ${requestParams.fromChain}`);
354
463
  assert(route.toChainId === requestParams.toChain, `Route toChainId ${route.toChainId} does not match requested ${requestParams.toChain}`);
355
- assert(route.fromToken.address.toLowerCase() ===
356
- requestParams.fromToken.toLowerCase(), `Route fromToken ${route.fromToken.address} does not match requested ${requestParams.fromToken}`);
357
- assert(route.toToken.address.toLowerCase() ===
358
- requestParams.toToken.toLowerCase(), `Route toToken ${route.toToken.address} does not match requested ${requestParams.toToken}`);
359
- const expectedToAddress = (requestParams.toAddress ?? requestParams.fromAddress).toLowerCase();
360
- assert(route.toAddress?.toLowerCase() === expectedToAddress, `Route toAddress ${route.toAddress} does not match requested ${expectedToAddress}`);
361
- assert(route.fromAddress?.toLowerCase() ===
362
- requestParams.fromAddress.toLowerCase(), `Route fromAddress ${route.fromAddress} does not match requested ${requestParams.fromAddress}`);
464
+ assert(this.addressesEqual(route.fromToken.address, requestParams.fromToken, route.fromChainId), `Route fromToken ${route.fromToken.address} does not match requested ${requestParams.fromToken}`);
465
+ assert(this.addressesEqual(route.toToken.address, requestParams.toToken, route.toChainId), `Route toToken ${route.toToken.address} does not match requested ${requestParams.toToken}`);
466
+ const expectedToAddress = requestParams.toAddress ?? requestParams.fromAddress;
467
+ assert(this.addressesEqual(route.toAddress ?? '', expectedToAddress, route.toChainId), `Route toAddress ${route.toAddress} does not match requested ${expectedToAddress}`);
468
+ assert(this.addressesEqual(route.fromAddress ?? '', requestParams.fromAddress, route.fromChainId), `Route fromAddress ${route.fromAddress} does not match requested ${requestParams.fromAddress}`);
363
469
  const routeFromAmount = BigInt(route.fromAmount);
364
470
  if (requestParams.fromAmount !== undefined) {
365
471
  assert(routeFromAmount === requestParams.fromAmount, `Route fromAmount ${route.fromAmount} does not match requested ${requestParams.fromAmount}`);
@@ -379,8 +485,8 @@ export class LiFiBridge {
379
485
  try {
380
486
  const status = await getStatus({
381
487
  txHash,
382
- fromChain,
383
- toChain,
488
+ fromChain: LiFiBridge.toLiFiChainId(fromChain),
489
+ toChain: LiFiBridge.toLiFiChainId(toChain),
384
490
  });
385
491
  switch (status.status) {
386
492
  case 'DONE': {
@@ -1 +1 @@
1
- {"version":3,"file":"LiFiBridge.js","sourceRoot":"","sources":["../../src/bridges/LiFiBridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LiFiBridge.js","sourceRoot":"","sources":["../../src/bridges/LiFiBridge.ts"],"names":[],"mappings":"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"}