@pushchain/core 5.0.0 → 5.1.1
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 +1581 -859
- package/src/lib/constants/chain.d.ts +54 -1
- package/src/lib/constants/chain.js +207 -17
- 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 +48 -1
- package/src/lib/constants/tokens.js +112 -9
- 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 +358 -3
- package/src/lib/orchestrator/orchestrator.js +3983 -348
- package/src/lib/orchestrator/orchestrator.js.map +1 -1
- package/src/lib/orchestrator/orchestrator.types.d.ts +529 -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 +212 -2
- package/src/lib/orchestrator/payload-builders.js +536 -16
- 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 +54 -4
- package/src/lib/progress-hook/progress-hook.js.map +1 -1
- package/src/lib/progress-hook/progress-hook.types.d.ts +10 -3
- package/src/lib/progress-hook/progress-hook.types.js +8 -0
- package/src/lib/progress-hook/progress-hook.types.js.map +1 -1
- package/src/lib/push-chain/push-chain.d.ts +75 -1
- package/src/lib/push-chain/push-chain.js +73 -1
- package/src/lib/push-chain/push-chain.js.map +1 -1
- package/src/lib/push-client/push-client.d.ts +20 -4
- package/src/lib/push-client/push-client.js +133 -67
- package/src/lib/push-client/push-client.js.map +1 -1
- package/src/lib/universal/signer/signer.js +17 -3
- package/src/lib/universal/signer/signer.js.map +1 -1
- package/src/lib/utils.d.ts +14 -0
- package/src/lib/utils.js +25 -0
- package/src/lib/utils.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,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
|
-
|
|
8
|
-
|
|
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 ((
|
|
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
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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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"}
|