@pushchain/core 5.0.0 → 5.1.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 (92) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/package.json +1 -1
  3. package/src/lib/constants/abi/cea.evm.d.ts +23 -0
  4. package/src/lib/constants/abi/cea.evm.js +34 -0
  5. package/src/lib/constants/abi/cea.evm.js.map +1 -0
  6. package/src/lib/constants/abi/ceaFactory.evm.d.ts +65 -0
  7. package/src/lib/constants/abi/ceaFactory.evm.js +41 -0
  8. package/src/lib/constants/abi/ceaFactory.evm.js.map +1 -0
  9. package/src/lib/constants/abi/erc20.evm.d.ts +14 -0
  10. package/src/lib/constants/abi/erc20.evm.js +7 -0
  11. package/src/lib/constants/abi/erc20.evm.js.map +1 -1
  12. package/src/lib/constants/abi/index.d.ts +6 -0
  13. package/src/lib/constants/abi/index.js +15 -1
  14. package/src/lib/constants/abi/index.js.map +1 -1
  15. package/src/lib/constants/abi/prc20.evm.d.ts +188 -0
  16. package/src/lib/constants/abi/prc20.evm.js +130 -0
  17. package/src/lib/constants/abi/prc20.evm.js.map +1 -0
  18. package/src/lib/constants/abi/uea-factory.d.ts +30 -0
  19. package/src/lib/constants/abi/uea-factory.js +25 -0
  20. package/src/lib/constants/abi/uea-factory.js.map +1 -0
  21. package/src/lib/constants/abi/universalGateway.evm.d.ts +93 -0
  22. package/src/lib/constants/abi/universalGateway.evm.js +70 -0
  23. package/src/lib/constants/abi/universalGateway.evm.js.map +1 -0
  24. package/src/lib/constants/abi/universalGatewayPC.evm.d.ts +140 -0
  25. package/src/lib/constants/abi/universalGatewayPC.evm.js +70 -0
  26. package/src/lib/constants/abi/universalGatewayPC.evm.js.map +1 -0
  27. package/src/lib/constants/abi/universalGatewayV0.evm.js +57 -0
  28. package/src/lib/constants/abi/universalGatewayV0.evm.js.map +1 -1
  29. package/src/lib/constants/abi/universalGatewayV0.json +1581 -859
  30. package/src/lib/constants/chain.d.ts +54 -1
  31. package/src/lib/constants/chain.js +207 -17
  32. package/src/lib/constants/chain.js.map +1 -1
  33. package/src/lib/constants/index.d.ts +9 -1
  34. package/src/lib/constants/index.js +20 -1
  35. package/src/lib/constants/index.js.map +1 -1
  36. package/src/lib/constants/selectors.d.ts +42 -0
  37. package/src/lib/constants/selectors.js +45 -0
  38. package/src/lib/constants/selectors.js.map +1 -0
  39. package/src/lib/constants/tokens.d.ts +48 -1
  40. package/src/lib/constants/tokens.js +112 -9
  41. package/src/lib/constants/tokens.js.map +1 -1
  42. package/src/lib/generated/uexecutor/v2/index.d.ts +2 -0
  43. package/src/lib/generated/uexecutor/v2/index.js +31 -0
  44. package/src/lib/generated/uexecutor/v2/index.js.map +1 -0
  45. package/src/lib/generated/uexecutor/v2/query.d.ts +23 -0
  46. package/src/lib/generated/uexecutor/v2/query.js +79 -0
  47. package/src/lib/generated/uexecutor/v2/query.js.map +1 -0
  48. package/src/lib/generated/uexecutor/v2/types.d.ts +101 -0
  49. package/src/lib/generated/uexecutor/v2/types.js +660 -0
  50. package/src/lib/generated/uexecutor/v2/types.js.map +1 -0
  51. package/src/lib/generated/v1/tx.d.ts +22 -0
  52. package/src/lib/generated/v1/tx.js +188 -1
  53. package/src/lib/generated/v1/tx.js.map +1 -1
  54. package/src/lib/index.d.ts +5 -0
  55. package/src/lib/index.js +25 -1
  56. package/src/lib/index.js.map +1 -1
  57. package/src/lib/orchestrator/cea-utils.d.ts +85 -0
  58. package/src/lib/orchestrator/cea-utils.js +186 -0
  59. package/src/lib/orchestrator/cea-utils.js.map +1 -0
  60. package/src/lib/orchestrator/orchestrator.d.ts +348 -3
  61. package/src/lib/orchestrator/orchestrator.js +3853 -290
  62. package/src/lib/orchestrator/orchestrator.js.map +1 -1
  63. package/src/lib/orchestrator/orchestrator.types.d.ts +529 -0
  64. package/src/lib/orchestrator/orchestrator.types.js +17 -0
  65. package/src/lib/orchestrator/orchestrator.types.js.map +1 -1
  66. package/src/lib/orchestrator/payload-builders.d.ts +212 -2
  67. package/src/lib/orchestrator/payload-builders.js +536 -16
  68. package/src/lib/orchestrator/payload-builders.js.map +1 -1
  69. package/src/lib/orchestrator/route-detector.d.ts +102 -0
  70. package/src/lib/orchestrator/route-detector.js +355 -0
  71. package/src/lib/orchestrator/route-detector.js.map +1 -0
  72. package/src/lib/price-fetch/price-fetch.js +5 -2
  73. package/src/lib/price-fetch/price-fetch.js.map +1 -1
  74. package/src/lib/progress-hook/progress-hook.js +54 -4
  75. package/src/lib/progress-hook/progress-hook.js.map +1 -1
  76. package/src/lib/progress-hook/progress-hook.types.d.ts +10 -3
  77. package/src/lib/progress-hook/progress-hook.types.js +8 -0
  78. package/src/lib/progress-hook/progress-hook.types.js.map +1 -1
  79. package/src/lib/push-chain/push-chain.d.ts +75 -1
  80. package/src/lib/push-chain/push-chain.js +73 -1
  81. package/src/lib/push-chain/push-chain.js.map +1 -1
  82. package/src/lib/push-client/push-client.d.ts +20 -4
  83. package/src/lib/push-client/push-client.js +133 -67
  84. package/src/lib/push-client/push-client.js.map +1 -1
  85. package/src/lib/universal/signer/signer.js +17 -3
  86. package/src/lib/universal/signer/signer.js.map +1 -1
  87. package/src/lib/utils.d.ts +14 -0
  88. package/src/lib/utils.js +25 -0
  89. package/src/lib/utils.js.map +1 -1
  90. package/src/lib/vm-client/evm-client.d.ts +3 -1
  91. package/src/lib/vm-client/evm-client.js +23 -15
  92. package/src/lib/vm-client/evm-client.js.map +1 -1
@@ -1,34 +1,89 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildExecuteMulticall = buildExecuteMulticall;
4
+ exports.buildCeaMulticallPayload = buildCeaMulticallPayload;
5
+ exports.buildInboundUniversalPayload = buildInboundUniversalPayload;
6
+ exports.buildSingleCeaCall = buildSingleCeaCall;
7
+ exports.buildApproveAndInteract = buildApproveAndInteract;
8
+ exports.buildSendUniversalTxFromCEA = buildSendUniversalTxFromCEA;
9
+ exports.buildSendUniversalTxToUEA = buildSendUniversalTxToUEA;
10
+ exports.buildOutboundRequest = buildOutboundRequest;
11
+ exports.buildNativeTransfer = buildNativeTransfer;
12
+ exports.buildErc20Transfer = buildErc20Transfer;
13
+ exports.buildErc20WithdrawalMulticall = buildErc20WithdrawalMulticall;
14
+ exports.buildMigrationPayload = buildMigrationPayload;
15
+ exports.isZeroAddress = isZeroAddress;
16
+ exports.buildOutboundApprovalAndCall = buildOutboundApprovalAndCall;
17
+ exports.isSvmChain = isSvmChain;
18
+ exports.isValidSolanaHexAddress = isValidSolanaHexAddress;
19
+ exports.encodeSvmExecutePayload = encodeSvmExecutePayload;
20
+ exports.encodeSvmCeaToUeaPayload = encodeSvmCeaToUeaPayload;
4
21
  const viem_1 = require("viem");
5
22
  const push_chain_1 = require("../push-chain/push-chain");
6
23
  const abi_1 = require("../constants/abi");
7
- function buildExecuteMulticall({ execute, ueaAddress, }) {
8
- var _a, _b;
24
+ const selectors_1 = require("../constants/selectors");
25
+ const chain_1 = require("../constants/chain");
26
+ const enums_1 = require("../constants/enums");
27
+ function buildExecuteMulticall({ execute, ueaAddress, logger, }) {
28
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
29
+ const log = (msg) => logger === null || logger === void 0 ? void 0 : logger(msg);
30
+ log('buildExecuteMulticall — input: ' + JSON.stringify({
31
+ to: execute.to,
32
+ value: (_b = (_a = execute.value) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : 'undefined',
33
+ data: execute.data ? (Array.isArray(execute.data) ? `Array(${execute.data.length})` : execute.data.slice(0, 20) + '...') : 'undefined',
34
+ hasData: !!execute.data,
35
+ fundsAmount: (_e = (_d = (_c = execute.funds) === null || _c === void 0 ? void 0 : _c.amount) === null || _d === void 0 ? void 0 : _d.toString()) !== null && _e !== void 0 ? _e : 'undefined',
36
+ fundsTokenSymbol: (_h = (_g = (_f = execute.funds) === null || _f === void 0 ? void 0 : _f.token) === null || _g === void 0 ? void 0 : _g.symbol) !== null && _h !== void 0 ? _h : 'undefined',
37
+ fundsTokenMechanism: (_l = (_k = (_j = execute.funds) === null || _j === void 0 ? void 0 : _j.token) === null || _k === void 0 ? void 0 : _k.mechanism) !== null && _l !== void 0 ? _l : 'undefined',
38
+ ueaAddress,
39
+ }, null, 2));
9
40
  const multicallData = [];
10
41
  // *** We will pass the value alongside with the data in a single message now ***
42
+ const branch1 = !execute.data && execute.value;
43
+ log(`buildExecuteMulticall — Branch 1 (!data && value): ${branch1} | !execute.data: ${!execute.data} | execute.value: ${(_o = (_m = execute.value) === null || _m === void 0 ? void 0 : _m.toString()) !== null && _o !== void 0 ? _o : 'undefined'}`);
11
44
  if (!execute.data && execute.value) {
12
45
  multicallData.push({
13
46
  to: execute.to,
14
47
  value: execute.value,
15
48
  data: '0x',
16
49
  });
50
+ log(`buildExecuteMulticall — Branch 1 ENTERED: pushed native value transfer to ${execute.to}`);
17
51
  }
18
- if ((_a = execute.funds) === null || _a === void 0 ? void 0 : _a.amount) {
19
- const erc20Transfer = (0, viem_1.encodeFunctionData)({
20
- abi: abi_1.ERC20_EVM,
21
- functionName: 'transfer',
22
- args: [execute.to, (_b = execute.funds) === null || _b === void 0 ? void 0 : _b.amount],
23
- });
52
+ if ((_p = execute.funds) === null || _p === void 0 ? void 0 : _p.amount) {
24
53
  const token = execute.funds.token;
25
- const pushChainTo = push_chain_1.PushChain.utils.tokens.getPRC20Address(token);
26
- multicallData.push({
27
- to: pushChainTo,
28
- value: BigInt(0),
29
- data: erc20Transfer,
30
- });
54
+ const isArrayMulticall = Array.isArray(execute.data);
55
+ const isNative = token.mechanism === 'native';
56
+ log('buildExecuteMulticall — Branch 2 (funds): ' + JSON.stringify({
57
+ amount: execute.funds.amount.toString(),
58
+ mechanism: token.mechanism,
59
+ isNative,
60
+ isArrayMulticall,
61
+ willAddErc20Transfer: !isNative && !isArrayMulticall,
62
+ skippedReason: isNative ? 'native token — no PRC-20 transfer needed' : isArrayMulticall ? 'array multicall — user handles transfers' : 'none',
63
+ }, null, 2));
64
+ // Only add ERC-20 transfer for non-native tokens AND when NOT in array multicall mode
65
+ // - Native tokens (ETH/SOL) are bridged as native PC on Push Chain, not as PRC-20
66
+ // - When execute.data is an array (explicit multicall), user handles fund transfers in their calls
67
+ if (!isArrayMulticall) {
68
+ const erc20Transfer = (0, viem_1.encodeFunctionData)({
69
+ abi: abi_1.ERC20_EVM,
70
+ functionName: 'transfer',
71
+ args: [execute.to, (_q = execute.funds) === null || _q === void 0 ? void 0 : _q.amount],
72
+ });
73
+ const pushChainTo = push_chain_1.PushChain.utils.tokens.getPRC20Address(token);
74
+ multicallData.push({
75
+ to: pushChainTo,
76
+ value: BigInt(0),
77
+ data: erc20Transfer,
78
+ });
79
+ log(`buildExecuteMulticall — Branch 2 ENTERED: pushed ERC-20 transfer to ${pushChainTo}`);
80
+ }
81
+ // For native tokens or array multicall: funds arrive in UEA, user's multicall handles distribution
82
+ }
83
+ else {
84
+ log('buildExecuteMulticall — Branch 2 SKIPPED: no funds.amount');
31
85
  }
86
+ log(`buildExecuteMulticall — Branch 3 (execute.data): ${!!execute.data}`);
32
87
  if (execute.data) {
33
88
  // *************************
34
89
  // Check for `execute.to`
@@ -40,11 +95,12 @@ function buildExecuteMulticall({ execute, ueaAddress, }) {
40
95
  }
41
96
  else {
42
97
  // We can't execute payload against our UEA.
43
- if (execute.to === ueaAddress)
44
- throw new Error(`You can't execute data on the UEA address`);
98
+ // if (execute.to === ueaAddress)
99
+ // throw new Error(`You can't execute data on the UEA address`);
45
100
  }
46
101
  if (Array.isArray(execute.data)) {
47
102
  multicallData.push(...execute.data);
103
+ log(`buildExecuteMulticall — Branch 3 ENTERED: pushed ${execute.data.length} array multicall entries`);
48
104
  }
49
105
  else {
50
106
  multicallData.push({
@@ -52,8 +108,472 @@ function buildExecuteMulticall({ execute, ueaAddress, }) {
52
108
  value: execute.value ? execute.value : BigInt(0),
53
109
  data: execute.data,
54
110
  });
111
+ log(`buildExecuteMulticall — Branch 3 ENTERED: pushed single calldata to ${execute.to}`);
55
112
  }
56
113
  }
114
+ log('buildExecuteMulticall — result: multicallData.length: ' + multicallData.length + ' ' +
115
+ JSON.stringify(multicallData, (_, v) => typeof v === 'bigint' ? v.toString() : v, 2));
57
116
  return multicallData;
58
117
  }
118
+ // ============================================================================
119
+ // Multi-Chain Payload Builders
120
+ // ============================================================================
121
+ /**
122
+ * Multicall tuple type definition for ABI encoding
123
+ */
124
+ const MULTICALL_TUPLE_TYPE = {
125
+ type: 'tuple[]',
126
+ components: [
127
+ { name: 'to', type: 'address' },
128
+ { name: 'value', type: 'uint256' },
129
+ { name: 'data', type: 'bytes' },
130
+ ],
131
+ };
132
+ /**
133
+ * Build CEA multicall payload for outbound transactions
134
+ * Format: UEA_MULTICALL_SELECTOR + abi.encode(Multicall[])
135
+ *
136
+ * The CEA contract checks for UEA_MULTICALL_SELECTOR (0x2cc2842d) at the
137
+ * start of the payload to route to _handleMulticall. Without this prefix,
138
+ * the CEA treats it as a single call and fails with InvalidRecipient.
139
+ *
140
+ * @param multicalls - Array of multicall operations to execute on external chain
141
+ * @returns UEA_MULTICALL_SELECTOR + ABI-encoded Multicall[] array
142
+ */
143
+ function buildCeaMulticallPayload(multicalls) {
144
+ if (multicalls.length === 0) {
145
+ return '0x';
146
+ }
147
+ // Encode the multicall array
148
+ const encoded = (0, viem_1.encodeAbiParameters)([MULTICALL_TUPLE_TYPE], [multicalls.map((m) => ({
149
+ to: m.to,
150
+ value: m.value,
151
+ data: m.data,
152
+ }))]);
153
+ // Prefix with UEA_MULTICALL_SELECTOR (0x2cc2842d) so CEA recognizes it as multicall
154
+ return `${selectors_1.UEA_MULTICALL_SELECTOR}${encoded.slice(2)}`;
155
+ }
156
+ /**
157
+ * Build an ABI-encoded UniversalPayload struct for inbound relay (Route 3 CEA→Push).
158
+ *
159
+ * The relay and Push Chain gateway expect the payload parameter of sendUniversalTxToUEA
160
+ * to be a full UniversalPayload struct: (address to, uint256 value, bytes data, uint256 gasLimit,
161
+ * uint256 maxFeePerGas, uint256 maxPriorityFeePerGas, uint256 nonce, uint256 deadline, uint8 vType).
162
+ *
163
+ * The `data` field inside the struct contains the multicall payload (with UEA_MULTICALL_SELECTOR prefix)
164
+ * which the UEA uses to execute calls on Push Chain.
165
+ *
166
+ * @param multicallData - The multicall payload (selector + abi.encode(Multicall[]))
167
+ * @param opts - Optional overrides for gasLimit, nonce, deadline
168
+ * @returns ABI-encoded UniversalPayload struct
169
+ */
170
+ function buildInboundUniversalPayload(multicallData, opts) {
171
+ var _a, _b, _c;
172
+ return (0, viem_1.encodeAbiParameters)([
173
+ {
174
+ type: 'tuple',
175
+ components: [
176
+ { name: 'to', type: 'address' },
177
+ { name: 'value', type: 'uint256' },
178
+ { name: 'data', type: 'bytes' },
179
+ { name: 'gasLimit', type: 'uint256' },
180
+ { name: 'maxFeePerGas', type: 'uint256' },
181
+ { name: 'maxPriorityFeePerGas', type: 'uint256' },
182
+ { name: 'nonce', type: 'uint256' },
183
+ { name: 'deadline', type: 'uint256' },
184
+ { name: 'vType', type: 'uint8' },
185
+ ],
186
+ },
187
+ ], [
188
+ {
189
+ to: selectors_1.ZERO_ADDRESS,
190
+ value: BigInt(0),
191
+ data: multicallData,
192
+ gasLimit: (_a = opts === null || opts === void 0 ? void 0 : opts.gasLimit) !== null && _a !== void 0 ? _a : BigInt(10e7),
193
+ maxFeePerGas: BigInt(1e10),
194
+ maxPriorityFeePerGas: BigInt(0),
195
+ nonce: (_b = opts === null || opts === void 0 ? void 0 : opts.nonce) !== null && _b !== void 0 ? _b : BigInt(0),
196
+ deadline: (_c = opts === null || opts === void 0 ? void 0 : opts.deadline) !== null && _c !== void 0 ? _c : BigInt(9999999999),
197
+ vType: 1, // universalTxVerification
198
+ },
199
+ ]);
200
+ }
201
+ /**
202
+ * Build a single call as CEA multicall payload
203
+ *
204
+ * @param target - Target contract address
205
+ * @param value - Native value to send
206
+ * @param data - Calldata to execute
207
+ * @returns Encoded payload with selector prefix
208
+ */
209
+ function buildSingleCeaCall(target, value, data) {
210
+ return buildCeaMulticallPayload([{ to: target, value, data }]);
211
+ }
212
+ /**
213
+ * Build approve + interact pattern for ERC20 operations on external chains
214
+ *
215
+ * @param tokenAddress - ERC20 token address
216
+ * @param spender - Address to approve (e.g., DEX router)
217
+ * @param amount - Amount to approve
218
+ * @param interactCall - The interaction call (e.g., swap)
219
+ * @returns Array of multicall operations
220
+ */
221
+ function buildApproveAndInteract(tokenAddress, spender, amount, interactCall) {
222
+ const approveData = (0, viem_1.encodeFunctionData)({
223
+ abi: abi_1.ERC20_EVM,
224
+ functionName: 'approve',
225
+ args: [spender, amount],
226
+ });
227
+ return [
228
+ {
229
+ to: tokenAddress,
230
+ value: BigInt(0),
231
+ data: approveData,
232
+ },
233
+ interactCall,
234
+ ];
235
+ }
236
+ /**
237
+ * Build sendUniversalTxFromCEA call for CEA → Push routing (Route 3)
238
+ *
239
+ * @param gatewayAddress - UniversalGateway address on external chain
240
+ * @param recipient - Recipient on Push Chain (usually UEA)
241
+ * @param token - Token address (address(0) for native)
242
+ * @param amount - Amount to send
243
+ * @param payload - Payload for Push Chain execution
244
+ * @param revertRecipient - Address to receive funds on revert
245
+ * @param signatureData - Signature data (usually empty for CEA calls)
246
+ * @param nativeValue - Native value to send with the call
247
+ * @returns MultiCall for sendUniversalTxFromCEA
248
+ */
249
+ function buildSendUniversalTxFromCEA(gatewayAddress, recipient, token, amount, payload, revertRecipient, signatureData = '0x', nativeValue = BigInt(0)) {
250
+ const calldata = (0, viem_1.encodeFunctionData)({
251
+ abi: abi_1.UNIVERSAL_GATEWAY_V0,
252
+ functionName: 'sendUniversalTxFromCEA',
253
+ args: [
254
+ {
255
+ recipient,
256
+ token,
257
+ amount,
258
+ payload,
259
+ revertInstruction: {
260
+ fundRecipient: revertRecipient,
261
+ revertMsg: '0x',
262
+ },
263
+ signatureData,
264
+ },
265
+ ],
266
+ });
267
+ return {
268
+ to: gatewayAddress,
269
+ value: nativeValue,
270
+ data: calldata,
271
+ };
272
+ }
273
+ /**
274
+ * Build sendUniversalTxToUEA call for CEA self-call (Route 3)
275
+ *
276
+ * The CEA contract has a `sendUniversalTxToUEA(token, amount, payload, revertRecipient)` function
277
+ * that is only callable via self-call (multicall with to=CEA, value=0).
278
+ * It internally calls `gateway.sendUniversalTxFromCEA(...)`.
279
+ *
280
+ * @param ceaAddress - CEA contract address (multicall target = self)
281
+ * @param token - Token address (address(0) for native)
282
+ * @param amount - Amount to send
283
+ * @param payload - Payload for Push Chain execution
284
+ * @param revertRecipient - Address to receive funds on revert (on source chain)
285
+ * @returns MultiCall for sendUniversalTxToUEA (to=CEA, value=0)
286
+ */
287
+ function buildSendUniversalTxToUEA(ceaAddress, token, amount, payload, revertRecipient) {
288
+ const calldata = (0, viem_1.encodeFunctionData)({
289
+ abi: abi_1.CEA_EVM,
290
+ functionName: 'sendUniversalTxToUEA',
291
+ args: [token, amount, payload, revertRecipient],
292
+ });
293
+ return {
294
+ to: ceaAddress,
295
+ value: BigInt(0),
296
+ data: calldata,
297
+ };
298
+ }
299
+ /**
300
+ * Build UniversalOutboundTxRequest for Push Chain outbound
301
+ *
302
+ * @param target - LEGACY/DUMMY: Any non-zero address for contract compatibility.
303
+ * This value is NOT used by the relay to determine the actual destination.
304
+ * The relay determines the destination from the PRC-20 token's SOURCE_CHAIN_NAMESPACE.
305
+ * Will be removed in future contract upgrades.
306
+ * @param prc20Token - PRC20 token address to burn (or address(0) for native)
307
+ * @param amount - Amount to burn
308
+ * @param gasLimit - Gas limit for fee calculation
309
+ * @param payload - CEA multicall payload
310
+ * @param revertRecipient - Address to receive funds on revert
311
+ * @returns UniversalOutboundTxRequest object
312
+ */
313
+ function buildOutboundRequest(target, prc20Token, amount, gasLimit, payload, revertRecipient) {
314
+ return {
315
+ target,
316
+ token: prc20Token,
317
+ amount,
318
+ gasLimit,
319
+ payload,
320
+ revertRecipient,
321
+ };
322
+ }
323
+ /**
324
+ * Build native transfer multicall
325
+ *
326
+ * @param to - Recipient address
327
+ * @param value - Native value to transfer
328
+ * @returns MultiCall for native transfer
329
+ */
330
+ function buildNativeTransfer(to, value) {
331
+ return {
332
+ to,
333
+ value,
334
+ data: '0x',
335
+ };
336
+ }
337
+ /**
338
+ * Build ERC20 transfer multicall
339
+ *
340
+ * @param tokenAddress - ERC20 token address
341
+ * @param to - Recipient address
342
+ * @param amount - Amount to transfer
343
+ * @returns MultiCall for ERC20 transfer
344
+ */
345
+ function buildErc20Transfer(tokenAddress, to, amount) {
346
+ const transferData = (0, viem_1.encodeFunctionData)({
347
+ abi: abi_1.ERC20_EVM,
348
+ functionName: 'transfer',
349
+ args: [to, amount],
350
+ });
351
+ return {
352
+ to: tokenAddress,
353
+ value: BigInt(0),
354
+ data: transferData,
355
+ };
356
+ }
357
+ /**
358
+ * Build a single-element MultiCall[] for an ERC20 withdrawal (Flow 2.2).
359
+ * Wraps buildErc20Transfer so callers of Route 2 (executeUoaToCea) don't
360
+ * need to manually construct the transfer() multicall step.
361
+ *
362
+ * @param tokenAddress - ERC20 token contract on the external chain
363
+ * @param recipientAddress - Withdrawal recipient on the external chain
364
+ * @param amount - Amount of tokens to transfer
365
+ * @returns MultiCall[] with a single ERC20 transfer call
366
+ */
367
+ function buildErc20WithdrawalMulticall(tokenAddress, recipientAddress, amount) {
368
+ return [buildErc20Transfer(tokenAddress, recipientAddress, amount)];
369
+ }
370
+ /**
371
+ * Build the 4-byte migration payload for CEA upgrade (Migration flow).
372
+ * Returns exactly MIGRATION_SELECTOR — no Multicall wrapping.
373
+ *
374
+ * @returns 4-byte hex string `0xcac656d6`
375
+ */
376
+ function buildMigrationPayload() {
377
+ return selectors_1.MIGRATION_SELECTOR;
378
+ }
379
+ /**
380
+ * Check if an address is the zero address
381
+ */
382
+ function isZeroAddress(address) {
383
+ return address.toLowerCase() === selectors_1.ZERO_ADDRESS.toLowerCase();
384
+ }
385
+ // ============================================================================
386
+ // Cascade Composition Helpers
387
+ // ============================================================================
388
+ /**
389
+ * Build approval multicalls + sendUniversalTxOutbound call for Push Chain.
390
+ *
391
+ * Extracted from executeUoaToCea to be reusable in cascade composition.
392
+ * Handles two cases:
393
+ * - gasToken === prc20Token: single approval for burnAmount + gasFee
394
+ * - gasToken !== prc20Token: two separate approvals
395
+ *
396
+ * @param opts.prc20Token - PRC-20 token to burn
397
+ * @param opts.gasToken - Gas token for fee payment
398
+ * @param opts.burnAmount - Amount to burn
399
+ * @param opts.gasFee - Gas fee amount
400
+ * @param opts.gatewayPcAddress - UniversalGatewayPC precompile address
401
+ * @param opts.outboundRequest - The outbound request struct
402
+ * @returns Array of MultiCall operations (approvals + outbound call)
403
+ */
404
+ function buildOutboundApprovalAndCall(opts) {
405
+ var _a;
406
+ const { prc20Token, burnAmount, gasFee, gatewayPcAddress, outboundRequest } = opts;
407
+ const multicalls = [];
408
+ // ERC20 approve for burn amount (contract calls transferFrom for PRC20 burn)
409
+ if (burnAmount > BigInt(0) &&
410
+ prc20Token.toLowerCase() !== selectors_1.ZERO_ADDRESS.toLowerCase()) {
411
+ const approveData = (0, viem_1.encodeFunctionData)({
412
+ abi: abi_1.ERC20_EVM,
413
+ functionName: 'approve',
414
+ args: [gatewayPcAddress, burnAmount],
415
+ });
416
+ multicalls.push({
417
+ to: prc20Token,
418
+ value: BigInt(0),
419
+ data: approveData,
420
+ });
421
+ }
422
+ // Gas fee + protocol fee paid as native msg.value (no ERC20 approve for gas)
423
+ const outboundCallData = (0, viem_1.encodeFunctionData)({
424
+ abi: abi_1.UNIVERSAL_GATEWAY_PC,
425
+ functionName: 'sendUniversalTxOutbound',
426
+ args: [outboundRequest],
427
+ });
428
+ // Use pre-computed nativeValueForGas (from Uniswap quoter) or fallback to 5x gasFee
429
+ const nativeValue = (_a = opts.nativeValueForGas) !== null && _a !== void 0 ? _a : (gasFee * BigInt(5));
430
+ multicalls.push({
431
+ to: gatewayPcAddress,
432
+ value: nativeValue,
433
+ data: outboundCallData,
434
+ });
435
+ return multicalls;
436
+ }
437
+ // ============================================================================
438
+ // SVM (Solana) Payload Builders
439
+ // ============================================================================
440
+ /**
441
+ * Check if a chain targets the SVM (Solana) virtual machine
442
+ */
443
+ function isSvmChain(chain) {
444
+ var _a;
445
+ return ((_a = chain_1.CHAIN_INFO[chain]) === null || _a === void 0 ? void 0 : _a.vm) === enums_1.VM.SVM;
446
+ }
447
+ /**
448
+ * Validate a Solana address in 0x-prefixed hex format.
449
+ * Must be exactly 32 bytes (0x + 64 hex chars = 66 characters total).
450
+ */
451
+ function isValidSolanaHexAddress(address) {
452
+ return /^0x[a-fA-F0-9]{64}$/.test(address);
453
+ }
454
+ /** Convert 0x-prefixed hex string to Uint8Array */
455
+ function hexToBytes(hex) {
456
+ const h = hex.startsWith('0x') ? hex.slice(2) : hex;
457
+ const bytes = new Uint8Array(h.length / 2);
458
+ for (let i = 0; i < bytes.length; i++) {
459
+ bytes[i] = parseInt(h.substr(i * 2, 2), 16);
460
+ }
461
+ return bytes;
462
+ }
463
+ /** Convert Uint8Array to hex string (no 0x prefix) */
464
+ function bytesToHex(bytes) {
465
+ return Array.from(bytes)
466
+ .map((b) => b.toString(16).padStart(2, '0'))
467
+ .join('');
468
+ }
469
+ /**
470
+ * Encode SVM execute payload for CPI execution on Solana.
471
+ *
472
+ * Binary format (matching the Solana gateway contract expectation):
473
+ * ```
474
+ * [accounts_count: 4 bytes (u32 BE)]
475
+ * [account[i].pubkey: 32 bytes][account[i].is_writable: 1 byte] × N
476
+ * [ix_data_length: 4 bytes (u32 BE)]
477
+ * [ix_data: variable bytes]
478
+ * [instruction_id: 1 byte (u8)]
479
+ * [target_program: 32 bytes]
480
+ * ```
481
+ *
482
+ * @param fields - SVM execute payload fields
483
+ * @returns 0x-prefixed hex string of the encoded payload
484
+ */
485
+ function encodeSvmExecutePayload(fields) {
486
+ const { targetProgram, accounts, ixData, instructionId = 2, } = fields;
487
+ // Total size:
488
+ // 4 (accounts_count) + 33*N (accounts) + 4 (ix_data_length) + M (ix_data) + 1 (instruction_id) + 32 (target_program)
489
+ const totalSize = 4 + 33 * accounts.length + 4 + ixData.length + 1 + 32;
490
+ const buffer = new Uint8Array(totalSize);
491
+ const view = new DataView(buffer.buffer);
492
+ let offset = 0;
493
+ // accounts_count (u32 BE)
494
+ view.setUint32(offset, accounts.length, false);
495
+ offset += 4;
496
+ // Each account: pubkey (32 bytes) + is_writable (1 byte)
497
+ for (const account of accounts) {
498
+ const pubkeyBytes = hexToBytes(account.pubkey);
499
+ buffer.set(pubkeyBytes, offset);
500
+ offset += 32;
501
+ buffer[offset] = account.isWritable ? 1 : 0;
502
+ offset += 1;
503
+ }
504
+ // ix_data_length (u32 BE)
505
+ view.setUint32(offset, ixData.length, false);
506
+ offset += 4;
507
+ // ix_data
508
+ buffer.set(ixData, offset);
509
+ offset += ixData.length;
510
+ // instruction_id (u8)
511
+ buffer[offset] = instructionId;
512
+ offset += 1;
513
+ // target_program (32 bytes)
514
+ const targetProgramBytes = hexToBytes(targetProgram);
515
+ buffer.set(targetProgramBytes, offset);
516
+ return `0x${bytesToHex(buffer)}`;
517
+ }
518
+ /**
519
+ * Encode the SVM CEA-to-UEA payload for Route 3 on Solana.
520
+ *
521
+ * This builds a `send_universal_tx_to_uea` instruction wrapped in
522
+ * `encodeSvmExecutePayload`, targeting the gateway program as a self-call.
523
+ *
524
+ * Borsh ixData layout:
525
+ * ```
526
+ * [discriminator: 8 bytes (SHA-256("global:send_universal_tx_to_uea")[0..8])]
527
+ * [token: 32 bytes (PublicKey::default for SOL, mint pubkey for SPL)]
528
+ * [amount: 8 bytes (u64 LE)]
529
+ * [payload_len: 4 bytes (u32 LE)]
530
+ * [payload_bytes: variable]
531
+ * [revert_recipient: 32 bytes (PublicKey)]
532
+ * ```
533
+ */
534
+ function encodeSvmCeaToUeaPayload({ gatewayProgramHex, drainAmount, tokenMintHex, extraPayload, revertRecipientHex, }) {
535
+ // Anchor discriminator: first 8 bytes of SHA-256("global:send_universal_tx_to_uea")
536
+ const discrimHash = (0, viem_1.sha256)((0, viem_1.toBytes)('global:send_universal_tx_to_uea'));
537
+ const discrimBytes = hexToBytes(discrimHash.slice(0, 18)); // 0x + 16 hex chars = 8 bytes
538
+ // Token: 32 zero bytes for native SOL, or the SPL mint bytes
539
+ const tokenBytes = new Uint8Array(32);
540
+ if (tokenMintHex && tokenMintHex !== '0x' + '00'.repeat(32)) {
541
+ const mintBytes = hexToBytes(tokenMintHex);
542
+ tokenBytes.set(mintBytes, 0);
543
+ }
544
+ // Amount: u64 little-endian
545
+ const amountBuf = new Uint8Array(8);
546
+ const amountView = new DataView(amountBuf.buffer);
547
+ amountView.setBigUint64(0, drainAmount, true); // LE
548
+ // Extra payload (Vec<u8>: u32 LE length + bytes)
549
+ const payloadData = extraPayload !== null && extraPayload !== void 0 ? extraPayload : new Uint8Array(0);
550
+ const payloadLenBuf = new Uint8Array(4);
551
+ const payloadLenView = new DataView(payloadLenBuf.buffer);
552
+ payloadLenView.setUint32(0, payloadData.length, true); // LE
553
+ // revertRecipient: 32 bytes (PublicKey)
554
+ const revertRecipientBytes = hexToBytes(revertRecipientHex);
555
+ // Combine into Borsh ixData
556
+ const ixDataLen = discrimBytes.length + tokenBytes.length + amountBuf.length +
557
+ payloadLenBuf.length + payloadData.length + revertRecipientBytes.length;
558
+ const ixData = new Uint8Array(ixDataLen);
559
+ let offset = 0;
560
+ ixData.set(discrimBytes, offset);
561
+ offset += discrimBytes.length;
562
+ ixData.set(tokenBytes, offset);
563
+ offset += tokenBytes.length;
564
+ ixData.set(amountBuf, offset);
565
+ offset += amountBuf.length;
566
+ ixData.set(payloadLenBuf, offset);
567
+ offset += payloadLenBuf.length;
568
+ ixData.set(payloadData, offset);
569
+ offset += payloadData.length;
570
+ ixData.set(revertRecipientBytes, offset);
571
+ // Wrap in encodeSvmExecutePayload (self-call to gateway, no extra accounts)
572
+ return encodeSvmExecutePayload({
573
+ targetProgram: gatewayProgramHex,
574
+ accounts: [],
575
+ ixData,
576
+ instructionId: 2,
577
+ });
578
+ }
59
579
  //# sourceMappingURL=payload-builders.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"payload-builders.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/orchestrator/payload-builders.ts"],"names":[],"mappings":";;AAMA,sDAwDC;AA9DD,+BAAqD;AACrD,yDAAqD;AACrD,0CAA6C;AAI7C,SAAgB,qBAAqB,CAAC,EACpC,OAAO,EACP,UAAU,GAIX;;IACC,MAAM,aAAa,GAAgB,EAAE,CAAC;IACtC,iFAAiF;IACjF,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,aAAa,CAAC,IAAI,CAAC;YACjB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAA,OAAO,CAAC,KAAK,0CAAE,MAAM,EAAE,CAAC;QAC1B,MAAM,aAAa,GAAG,IAAA,yBAAkB,EAAC;YACvC,GAAG,EAAE,eAAS;YACd,YAAY,EAAE,UAAU;YACxB,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,MAAM,CAAC;SAC1C,CAAC,CAAC;QACH,MAAM,KAAK,GAAI,OAAO,CAAC,KAAkC,CAAC,KAAK,CAAC;QAChE,MAAM,WAAW,GAAG,sBAAS,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClE,aAAa,CAAC,IAAI,CAAC;YACjB,EAAE,EAAE,WAAW;YACf,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;YAChB,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,4BAA4B;QAC5B,yBAAyB;QACzB,4BAA4B;QAE5B,2FAA2F;QAC3F,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,IAAA,gBAAS,EAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,qCAAqC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,4CAA4C;YAC5C,IAAI,OAAO,CAAC,EAAE,KAAK,UAAU;gBAC3B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,aAAa,CAAC,IAAI,CAAC,GAAI,OAAO,CAAC,IAAoB,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,IAAI,CAAC;gBACjB,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChD,IAAI,EAAE,OAAO,CAAC,IAAqB;aACpC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"payload-builders.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/orchestrator/payload-builders.ts"],"names":[],"mappings":"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"}