@pushchain/core 4.0.14-alpha.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.
- package/CHANGELOG.md +6 -0
- package/package.json +1 -1
- package/src/lib/constants/abi/cea.evm.d.ts +23 -0
- package/src/lib/constants/abi/cea.evm.js +34 -0
- package/src/lib/constants/abi/cea.evm.js.map +1 -0
- package/src/lib/constants/abi/ceaFactory.evm.d.ts +65 -0
- package/src/lib/constants/abi/ceaFactory.evm.js +41 -0
- package/src/lib/constants/abi/ceaFactory.evm.js.map +1 -0
- package/src/lib/constants/abi/erc20.evm.d.ts +14 -0
- package/src/lib/constants/abi/erc20.evm.js +7 -0
- package/src/lib/constants/abi/erc20.evm.js.map +1 -1
- package/src/lib/constants/abi/index.d.ts +6 -0
- package/src/lib/constants/abi/index.js +15 -1
- package/src/lib/constants/abi/index.js.map +1 -1
- package/src/lib/constants/abi/prc20.evm.d.ts +188 -0
- package/src/lib/constants/abi/prc20.evm.js +130 -0
- package/src/lib/constants/abi/prc20.evm.js.map +1 -0
- package/src/lib/constants/abi/uea-factory.d.ts +30 -0
- package/src/lib/constants/abi/uea-factory.js +25 -0
- package/src/lib/constants/abi/uea-factory.js.map +1 -0
- package/src/lib/constants/abi/universalGateway.evm.d.ts +93 -0
- package/src/lib/constants/abi/universalGateway.evm.js +70 -0
- package/src/lib/constants/abi/universalGateway.evm.js.map +1 -0
- package/src/lib/constants/abi/universalGatewayPC.evm.d.ts +140 -0
- package/src/lib/constants/abi/universalGatewayPC.evm.js +70 -0
- package/src/lib/constants/abi/universalGatewayPC.evm.js.map +1 -0
- package/src/lib/constants/abi/universalGatewayV0.evm.js +57 -0
- package/src/lib/constants/abi/universalGatewayV0.evm.js.map +1 -1
- package/src/lib/constants/abi/universalGatewayV0.json +1162 -1647
- package/src/lib/constants/chain.d.ts +52 -0
- package/src/lib/constants/chain.js +161 -1
- package/src/lib/constants/chain.js.map +1 -1
- package/src/lib/constants/index.d.ts +9 -1
- package/src/lib/constants/index.js +20 -1
- package/src/lib/constants/index.js.map +1 -1
- package/src/lib/constants/selectors.d.ts +42 -0
- package/src/lib/constants/selectors.js +45 -0
- package/src/lib/constants/selectors.js.map +1 -0
- package/src/lib/constants/tokens.d.ts +41 -0
- package/src/lib/constants/tokens.js +62 -1
- package/src/lib/constants/tokens.js.map +1 -1
- package/src/lib/generated/uexecutor/v2/index.d.ts +2 -0
- package/src/lib/generated/uexecutor/v2/index.js +31 -0
- package/src/lib/generated/uexecutor/v2/index.js.map +1 -0
- package/src/lib/generated/uexecutor/v2/query.d.ts +23 -0
- package/src/lib/generated/uexecutor/v2/query.js +79 -0
- package/src/lib/generated/uexecutor/v2/query.js.map +1 -0
- package/src/lib/generated/uexecutor/v2/types.d.ts +101 -0
- package/src/lib/generated/uexecutor/v2/types.js +660 -0
- package/src/lib/generated/uexecutor/v2/types.js.map +1 -0
- package/src/lib/generated/v1/tx.d.ts +22 -0
- package/src/lib/generated/v1/tx.js +188 -1
- package/src/lib/generated/v1/tx.js.map +1 -1
- package/src/lib/index.d.ts +5 -0
- package/src/lib/index.js +25 -1
- package/src/lib/index.js.map +1 -1
- package/src/lib/orchestrator/cea-utils.d.ts +85 -0
- package/src/lib/orchestrator/cea-utils.js +186 -0
- package/src/lib/orchestrator/cea-utils.js.map +1 -0
- package/src/lib/orchestrator/orchestrator.d.ts +326 -3
- package/src/lib/orchestrator/orchestrator.js +3262 -135
- package/src/lib/orchestrator/orchestrator.js.map +1 -1
- package/src/lib/orchestrator/orchestrator.types.d.ts +487 -0
- package/src/lib/orchestrator/orchestrator.types.js +17 -0
- package/src/lib/orchestrator/orchestrator.types.js.map +1 -1
- package/src/lib/orchestrator/payload-builders.d.ts +210 -1
- package/src/lib/orchestrator/payload-builders.js +481 -0
- package/src/lib/orchestrator/payload-builders.js.map +1 -1
- package/src/lib/orchestrator/route-detector.d.ts +102 -0
- package/src/lib/orchestrator/route-detector.js +355 -0
- package/src/lib/orchestrator/route-detector.js.map +1 -0
- package/src/lib/price-fetch/price-fetch.js +5 -2
- package/src/lib/price-fetch/price-fetch.js.map +1 -1
- package/src/lib/progress-hook/progress-hook.js +43 -0
- package/src/lib/progress-hook/progress-hook.js.map +1 -1
- package/src/lib/progress-hook/progress-hook.types.d.ts +7 -1
- package/src/lib/progress-hook/progress-hook.types.js +7 -0
- package/src/lib/progress-hook/progress-hook.types.js.map +1 -1
- package/src/lib/push-chain/push-chain.d.ts +71 -1
- package/src/lib/push-chain/push-chain.js +70 -1
- package/src/lib/push-chain/push-chain.js.map +1 -1
- package/src/lib/push-client/push-client.d.ts +10 -1
- package/src/lib/push-client/push-client.js +35 -6
- package/src/lib/push-client/push-client.js.map +1 -1
- package/src/lib/vm-client/evm-client.d.ts +3 -1
- package/src/lib/vm-client/evm-client.js +23 -15
- package/src/lib/vm-client/evm-client.js.map +1 -1
|
@@ -1,9 +1,29 @@
|
|
|
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");
|
|
24
|
+
const selectors_1 = require("../constants/selectors");
|
|
25
|
+
const chain_1 = require("../constants/chain");
|
|
26
|
+
const enums_1 = require("../constants/enums");
|
|
7
27
|
function buildExecuteMulticall({ execute, ueaAddress, logger, }) {
|
|
8
28
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
9
29
|
const log = (msg) => logger === null || logger === void 0 ? void 0 : logger(msg);
|
|
@@ -95,4 +115,465 @@ function buildExecuteMulticall({ execute, ueaAddress, logger, }) {
|
|
|
95
115
|
JSON.stringify(multicallData, (_, v) => typeof v === 'bigint' ? v.toString() : v, 2));
|
|
96
116
|
return multicallData;
|
|
97
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
|
+
}
|
|
98
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":"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"}
|
|
1
|
+
{"version":3,"file":"payload-builders.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/orchestrator/payload-builders.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route Detection and Validation for Multi-Chain Transactions
|
|
3
|
+
*
|
|
4
|
+
* Detects which route a transaction should take based on `from` and `to` parameters:
|
|
5
|
+
* - Route 1 (UOA_TO_PUSH): UOA → Push Chain
|
|
6
|
+
* - Route 2 (UOA_TO_CEA): UOA → CEA on external chain
|
|
7
|
+
* - Route 3 (CEA_TO_PUSH): CEA → Push Chain
|
|
8
|
+
* - Route 4 (CEA_TO_CEA): CEA → CEA (external to external via Push)
|
|
9
|
+
*/
|
|
10
|
+
import { CHAIN } from '../constants/enums';
|
|
11
|
+
import { type MoveableToken } from '../constants/tokens';
|
|
12
|
+
import type { UniversalExecuteParams, ChainTarget } from './orchestrator.types';
|
|
13
|
+
/**
|
|
14
|
+
* Enum for transaction routes
|
|
15
|
+
*/
|
|
16
|
+
export declare enum TransactionRoute {
|
|
17
|
+
/** Route 1: UOA → Push Chain (existing flow) */
|
|
18
|
+
UOA_TO_PUSH = "UOA_TO_PUSH",
|
|
19
|
+
/** Route 2: UOA → CEA on external chain */
|
|
20
|
+
UOA_TO_CEA = "UOA_TO_CEA",
|
|
21
|
+
/** Route 3: CEA → Push Chain */
|
|
22
|
+
CEA_TO_PUSH = "CEA_TO_PUSH",
|
|
23
|
+
/** Route 4: CEA → CEA (external to external via Push) */
|
|
24
|
+
CEA_TO_CEA = "CEA_TO_CEA"
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Error thrown when route parameters are invalid
|
|
28
|
+
*/
|
|
29
|
+
export declare class RouteValidationError extends Error {
|
|
30
|
+
constructor(message: string);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Error thrown when a chain is not supported for CEA operations
|
|
34
|
+
*/
|
|
35
|
+
export declare class ChainNotSupportedError extends Error {
|
|
36
|
+
chain: CHAIN | string;
|
|
37
|
+
constructor(chain: CHAIN | string);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Error thrown when transaction type is invalid
|
|
41
|
+
*/
|
|
42
|
+
export declare class InvalidTransactionError extends Error {
|
|
43
|
+
constructor(message: string);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Check if a chain is a Push Chain
|
|
47
|
+
*/
|
|
48
|
+
export declare function isPushChain(chain: CHAIN): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Check if a chain is supported for CEA operations
|
|
51
|
+
*/
|
|
52
|
+
export declare function isSupportedExternalChain(chain: CHAIN): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Reverse-map a CHAIN enum value to its friendly name (e.g. CHAIN.ETHEREUM_SEPOLIA → 'ETHEREUM_SEPOLIA').
|
|
55
|
+
*/
|
|
56
|
+
export declare function chainEnumToName(chain: CHAIN): string;
|
|
57
|
+
/**
|
|
58
|
+
* Find which chain(s) a moveable token is registered for, by matching address.
|
|
59
|
+
* Returns the first matching chain, or undefined if not found.
|
|
60
|
+
*/
|
|
61
|
+
export declare function findTokenChain(token: MoveableToken): CHAIN | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Check if 'to' parameter is a ChainTarget object
|
|
64
|
+
*/
|
|
65
|
+
export declare function isChainTarget(to: unknown): to is ChainTarget;
|
|
66
|
+
/**
|
|
67
|
+
* Detect the transaction route based on params
|
|
68
|
+
*
|
|
69
|
+
* Route detection logic:
|
|
70
|
+
* | from.chain | to format | to.chain | Route |
|
|
71
|
+
* |------------|---------------|-------------|---------------|
|
|
72
|
+
* | undefined | string | N/A | UOA_TO_PUSH |
|
|
73
|
+
* | undefined | ChainTarget | external | UOA_TO_CEA |
|
|
74
|
+
* | undefined | ChainTarget | push | UOA_TO_PUSH |
|
|
75
|
+
* | defined | string | N/A | CEA_TO_PUSH |
|
|
76
|
+
* | defined | ChainTarget | push | CEA_TO_PUSH |
|
|
77
|
+
* | defined | ChainTarget | external | CEA_TO_CEA |
|
|
78
|
+
*
|
|
79
|
+
* @param params - Universal execute parameters
|
|
80
|
+
* @returns The detected transaction route
|
|
81
|
+
* @throws RouteValidationError if parameters are invalid
|
|
82
|
+
*/
|
|
83
|
+
export declare function detectRoute(params: UniversalExecuteParams): TransactionRoute;
|
|
84
|
+
/**
|
|
85
|
+
* Validate route parameters are valid for the detected route
|
|
86
|
+
*
|
|
87
|
+
* @param params - Universal execute parameters
|
|
88
|
+
* @throws RouteValidationError if validation fails
|
|
89
|
+
* @throws ChainNotSupportedError if chain is not supported
|
|
90
|
+
*/
|
|
91
|
+
export declare function validateRouteParams(params: UniversalExecuteParams, context?: {
|
|
92
|
+
clientChain?: CHAIN;
|
|
93
|
+
}): void;
|
|
94
|
+
/**
|
|
95
|
+
* Get route information for display/logging
|
|
96
|
+
*/
|
|
97
|
+
export declare function getRouteInfo(route: TransactionRoute): {
|
|
98
|
+
name: string;
|
|
99
|
+
description: string;
|
|
100
|
+
isOutbound: boolean;
|
|
101
|
+
requiresCEA: boolean;
|
|
102
|
+
};
|