@pushchain/core 5.1.5-alpha.1 → 5.1.6
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 +21 -0
- package/package.json +1 -1
- package/src/lib/constants/abi/index.d.ts +2 -0
- package/src/lib/constants/abi/index.js +6 -1
- package/src/lib/constants/abi/uniswap-v3-router.evm.d.ts +58 -0
- package/src/lib/constants/abi/uniswap-v3-router.evm.js +41 -0
- package/src/lib/constants/abi/wpc.evm.d.ts +24 -0
- package/src/lib/constants/abi/wpc.evm.js +27 -0
- package/src/lib/constants/chain.d.ts +1 -0
- package/src/lib/constants/chain.js +8 -6
- package/src/lib/constants/tokens.js +3 -3
- package/src/lib/generated/uexecutor/v2/types.d.ts +14 -0
- package/src/lib/generated/uexecutor/v2/types.js +96 -3
- package/src/lib/orchestrator/internals/cascade.d.ts +1 -1
- package/src/lib/orchestrator/internals/cascade.js +521 -239
- package/src/lib/orchestrator/internals/confirmation.js +60 -15
- package/src/lib/orchestrator/internals/context.d.ts +23 -0
- package/src/lib/orchestrator/internals/context.js +58 -0
- package/src/lib/orchestrator/internals/execute-funds-only.js +47 -21
- package/src/lib/orchestrator/internals/execute-funds-payload.js +70 -37
- package/src/lib/orchestrator/internals/execute-standard.js +137 -26
- package/src/lib/orchestrator/internals/gas-calculator.d.ts +5 -2
- package/src/lib/orchestrator/internals/gas-calculator.js +59 -11
- package/src/lib/orchestrator/internals/gas-usd-sizer.d.ts +53 -0
- package/src/lib/orchestrator/internals/gas-usd-sizer.js +165 -0
- package/src/lib/orchestrator/internals/helpers.js +2 -0
- package/src/lib/orchestrator/internals/inbound-tracker.d.ts +83 -0
- package/src/lib/orchestrator/internals/inbound-tracker.js +322 -0
- package/src/lib/orchestrator/internals/index.d.ts +3 -1
- package/src/lib/orchestrator/internals/index.js +8 -2
- package/src/lib/orchestrator/internals/outbound-sync.d.ts +32 -1
- package/src/lib/orchestrator/internals/outbound-sync.js +154 -17
- package/src/lib/orchestrator/internals/pc-usd-oracle.d.ts +28 -0
- package/src/lib/orchestrator/internals/pc-usd-oracle.js +285 -0
- package/src/lib/orchestrator/internals/progress-route-hooks.d.ts +23 -0
- package/src/lib/orchestrator/internals/progress-route-hooks.js +72 -0
- package/src/lib/orchestrator/internals/push-chain-tx.d.ts +27 -1
- package/src/lib/orchestrator/internals/push-chain-tx.js +111 -15
- package/src/lib/orchestrator/internals/rescue.js +1 -1
- package/src/lib/orchestrator/internals/response-builder.d.ts +5 -0
- package/src/lib/orchestrator/internals/response-builder.js +242 -66
- package/src/lib/orchestrator/internals/route-handlers.js +480 -206
- package/src/lib/orchestrator/internals/tx-transformer.js +293 -35
- package/src/lib/orchestrator/orchestrator.d.ts +7 -1
- package/src/lib/orchestrator/orchestrator.js +108 -56
- package/src/lib/orchestrator/orchestrator.types.d.ts +111 -5
- package/src/lib/orchestrator/payload-builders.d.ts +16 -0
- package/src/lib/orchestrator/payload-builders.js +6 -5
- package/src/lib/orchestrator/route-detector.js +20 -8
- package/src/lib/orchestrator/svm-idl/normalize-address.d.ts +19 -0
- package/src/lib/orchestrator/svm-idl/normalize-address.js +56 -0
- package/src/lib/orchestrator/svm-idl/registry.d.ts +13 -4
- package/src/lib/orchestrator/svm-idl/registry.js +15 -14
- package/src/lib/orchestrator/svm-idl/resolve.js +5 -2
- package/src/lib/progress-hook/progress-hook.d.ts +28 -0
- package/src/lib/progress-hook/progress-hook.js +552 -133
- package/src/lib/progress-hook/progress-hook.types.d.ts +77 -29
- package/src/lib/progress-hook/progress-hook.types.js +75 -35
- package/src/lib/push-client/push-client.d.ts +7 -0
- package/src/lib/push-client/push-client.js +18 -1
- package/src/lib/universal-tx-detector/__tests__/fixtures/builders.d.ts +32 -0
- package/src/lib/universal-tx-detector/__tests__/fixtures/builders.js +65 -0
- package/src/lib/universal-tx-detector/__tests__/fixtures/scenarios.d.ts +72 -0
- package/src/lib/universal-tx-detector/__tests__/fixtures/scenarios.js +669 -0
- package/src/lib/universal-tx-detector/auto-detect.d.ts +37 -0
- package/src/lib/universal-tx-detector/auto-detect.js +112 -0
- package/src/lib/universal-tx-detector/cascade.d.ts +64 -0
- package/src/lib/universal-tx-detector/cascade.js +254 -0
- package/src/lib/universal-tx-detector/child-inbounds.d.ts +58 -0
- package/src/lib/universal-tx-detector/child-inbounds.js +145 -0
- package/src/lib/universal-tx-detector/classify.d.ts +33 -0
- package/src/lib/universal-tx-detector/classify.js +228 -0
- package/src/lib/universal-tx-detector/detector-svm.d.ts +46 -0
- package/src/lib/universal-tx-detector/detector-svm.js +324 -0
- package/src/lib/universal-tx-detector/detector.d.ts +13 -0
- package/src/lib/universal-tx-detector/detector.js +233 -0
- package/src/lib/universal-tx-detector/events.d.ts +765 -0
- package/src/lib/universal-tx-detector/events.js +241 -0
- package/src/lib/universal-tx-detector/index.d.ts +18 -0
- package/src/lib/universal-tx-detector/index.js +36 -0
- package/src/lib/universal-tx-detector/svm-events.d.ts +41 -0
- package/src/lib/universal-tx-detector/svm-events.js +68 -0
- package/src/lib/universal-tx-detector/types.d.ts +100 -0
- package/src/lib/universal-tx-detector/types.js +3 -0
- package/src/lib/utils.d.ts +30 -13
- package/src/lib/utils.js +47 -21
|
@@ -18,10 +18,10 @@ const context_2 = require("./context");
|
|
|
18
18
|
function waitForEvmConfirmationsWithCountdown(ctx, evmClient, txHash, confirmations, timeoutMs) {
|
|
19
19
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
20
20
|
if (confirmations <= 0) {
|
|
21
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
21
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_03_02, 0, 0);
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
24
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_03, confirmations);
|
|
25
25
|
const start = Date.now();
|
|
26
26
|
const receipt = yield evmClient.publicClient.waitForTransactionReceipt({
|
|
27
27
|
hash: txHash,
|
|
@@ -33,7 +33,7 @@ function waitForEvmConfirmationsWithCountdown(ctx, evmClient, txHash, confirmati
|
|
|
33
33
|
const currentBlock = yield evmClient.publicClient.getBlockNumber();
|
|
34
34
|
if (currentBlock >= targetBlock) {
|
|
35
35
|
if (lastEmitted < confirmations) {
|
|
36
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
36
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_03_02, confirmations, confirmations);
|
|
37
37
|
}
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
@@ -41,8 +41,8 @@ function waitForEvmConfirmationsWithCountdown(ctx, evmClient, txHash, confirmati
|
|
|
41
41
|
const completed = Math.max(1, confirmations - remaining + 1);
|
|
42
42
|
if (completed > lastEmitted) {
|
|
43
43
|
(0, context_2.fireProgressHook)(ctx, completed >= confirmations
|
|
44
|
-
? progress_hook_types_1.PROGRESS_HOOK.
|
|
45
|
-
: progress_hook_types_1.PROGRESS_HOOK.
|
|
44
|
+
? progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_03_02
|
|
45
|
+
: progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_03_01, completed, confirmations);
|
|
46
46
|
lastEmitted = completed;
|
|
47
47
|
if (completed >= confirmations)
|
|
48
48
|
return;
|
|
@@ -57,10 +57,10 @@ function waitForEvmConfirmationsWithCountdown(ctx, evmClient, txHash, confirmati
|
|
|
57
57
|
function waitForSvmConfirmationsWithCountdown(ctx, svmClient, txSignature, confirmations, timeoutMs) {
|
|
58
58
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
59
59
|
if (confirmations <= 0) {
|
|
60
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
60
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_03_02, 0, 0);
|
|
61
61
|
return;
|
|
62
62
|
}
|
|
63
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
63
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_03, confirmations);
|
|
64
64
|
const start = Date.now();
|
|
65
65
|
let lastConfirmed = 0;
|
|
66
66
|
// eslint-disable-next-line no-constant-condition
|
|
@@ -81,13 +81,13 @@ function waitForSvmConfirmationsWithCountdown(ctx, svmClient, txSignature, confi
|
|
|
81
81
|
if (currentConfirms > lastConfirmed) {
|
|
82
82
|
const clamped = currentConfirms >= confirmations ? confirmations : currentConfirms;
|
|
83
83
|
(0, context_2.fireProgressHook)(ctx, clamped >= confirmations
|
|
84
|
-
? progress_hook_types_1.PROGRESS_HOOK.
|
|
85
|
-
: progress_hook_types_1.PROGRESS_HOOK.
|
|
84
|
+
? progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_03_02
|
|
85
|
+
: progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_03_01, Math.max(1, clamped), confirmations);
|
|
86
86
|
lastConfirmed = currentConfirms;
|
|
87
87
|
}
|
|
88
88
|
if (hasEnoughConfirmations || isFinalized) {
|
|
89
89
|
if (lastConfirmed < confirmations) {
|
|
90
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
90
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_03_02, confirmations, confirmations);
|
|
91
91
|
}
|
|
92
92
|
return;
|
|
93
93
|
}
|
|
@@ -103,17 +103,62 @@ function waitForLockerFeeConfirmation(ctx, txHashBytes) {
|
|
|
103
103
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
104
104
|
const chain = ctx.universalSigner.account.chain;
|
|
105
105
|
const { vm, defaultRPC, fastConfirmations, timeout } = chain_1.CHAIN_INFO[chain];
|
|
106
|
-
|
|
106
|
+
// Poll silently — the fee-lock path fires SEND-TX-105-02 as its terminal
|
|
107
|
+
// confirmation marker; emitting 106-xx here would leak funds-bridge hooks
|
|
108
|
+
// into a non-funds-bridge path. Uses the same underlying RPC wait as the
|
|
109
|
+
// funds-bridge confirmation helpers but without the 106-03 / 106-03-02
|
|
110
|
+
// emissions.
|
|
107
111
|
switch (vm) {
|
|
108
112
|
case enums_1.VM.EVM: {
|
|
109
113
|
const evmClient = (0, context_1.getOriginEvmClient)(ctx);
|
|
110
|
-
|
|
111
|
-
|
|
114
|
+
const txHash = (0, viem_1.bytesToHex)(txHashBytes);
|
|
115
|
+
const receipt = yield evmClient.publicClient.waitForTransactionReceipt({
|
|
116
|
+
hash: txHash,
|
|
117
|
+
});
|
|
118
|
+
if (fastConfirmations <= 1)
|
|
119
|
+
return;
|
|
120
|
+
const targetBlock = receipt.blockNumber + BigInt(fastConfirmations);
|
|
121
|
+
const start = Date.now();
|
|
122
|
+
// eslint-disable-next-line no-constant-condition
|
|
123
|
+
while (true) {
|
|
124
|
+
const currentBlock = yield evmClient.publicClient.getBlockNumber();
|
|
125
|
+
if (currentBlock >= targetBlock)
|
|
126
|
+
return;
|
|
127
|
+
if (Date.now() - start > timeout) {
|
|
128
|
+
throw new Error(`Timeout: fee-lock tx ${txHash} not confirmed with ${fastConfirmations} confirmations within ${timeout} ms`);
|
|
129
|
+
}
|
|
130
|
+
yield new Promise((r) => setTimeout(r, 12000));
|
|
131
|
+
}
|
|
112
132
|
}
|
|
113
133
|
case enums_1.VM.SVM: {
|
|
134
|
+
const rpcUrls = ctx.rpcUrls[chain] || defaultRPC;
|
|
114
135
|
const svmClient = new svm_client_1.SvmClient({ rpcUrls });
|
|
115
|
-
|
|
116
|
-
|
|
136
|
+
const signature = bs58_1.bs58.encode(Buffer.from(txHashBytes));
|
|
137
|
+
const start = Date.now();
|
|
138
|
+
// eslint-disable-next-line no-constant-condition
|
|
139
|
+
while (true) {
|
|
140
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
141
|
+
const connection = svmClient.connections[
|
|
142
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
143
|
+
svmClient.currentConnectionIndex];
|
|
144
|
+
const { value } = yield connection.getSignatureStatuses([signature]);
|
|
145
|
+
const status = value[0];
|
|
146
|
+
if (status) {
|
|
147
|
+
if (status.err) {
|
|
148
|
+
throw new Error(`SVM fee-lock tx ${signature} failed: ${JSON.stringify(status.err)}`);
|
|
149
|
+
}
|
|
150
|
+
const isFinalized = status.confirmationStatus === 'finalized' ||
|
|
151
|
+
status.confirmations === null;
|
|
152
|
+
const hasEnough = status.confirmations != null &&
|
|
153
|
+
status.confirmations >= fastConfirmations;
|
|
154
|
+
if (isFinalized || hasEnough)
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (Date.now() - start > timeout) {
|
|
158
|
+
throw new Error(`Timeout: fee-lock tx ${signature} not confirmed with ${fastConfirmations} confirmations within ${timeout} ms`);
|
|
159
|
+
}
|
|
160
|
+
yield new Promise((r) => setTimeout(r, 500));
|
|
161
|
+
}
|
|
117
162
|
}
|
|
118
163
|
default:
|
|
119
164
|
throw new Error(`Unsupported VM for tx confirmation: ${vm}`);
|
|
@@ -10,6 +10,7 @@ import type { UniversalSigner } from '../../universal/universal.types';
|
|
|
10
10
|
import type { CHAIN, PUSH_NETWORK } from '../../constants/enums';
|
|
11
11
|
import type { ProgressEvent } from '../../progress-hook/progress-hook.types';
|
|
12
12
|
import type { AccountStatus } from '../orchestrator.types';
|
|
13
|
+
import { TransactionRoute } from '../route-detector';
|
|
13
14
|
import { EvmClient } from '../../vm-client/evm-client';
|
|
14
15
|
export interface OrchestratorContext {
|
|
15
16
|
readonly pushClient: PushClient;
|
|
@@ -18,10 +19,26 @@ export interface OrchestratorContext {
|
|
|
18
19
|
readonly rpcUrls: Partial<Record<CHAIN, string[]>>;
|
|
19
20
|
readonly printTraces: boolean;
|
|
20
21
|
progressHook?: (progress: ProgressEvent) => void;
|
|
22
|
+
/**
|
|
23
|
+
* The transaction route currently being executed. Set by
|
|
24
|
+
* `Orchestrator.execute()` and `Orchestrator.trackTransaction()` before any
|
|
25
|
+
* submodule fires progress hooks, so route-aware emission code can pick the
|
|
26
|
+
* correct ID range (101 / 201 / 301). Undefined when no transaction is in
|
|
27
|
+
* flight (e.g. during account-status reads).
|
|
28
|
+
*/
|
|
29
|
+
currentRoute?: TransactionRoute;
|
|
21
30
|
ueaVersionCache?: string;
|
|
22
31
|
accountStatusCache: AccountStatus | null;
|
|
23
32
|
/** Cached origin chain EvmClient — avoids creating new clients per call site */
|
|
24
33
|
_originEvmClient?: EvmClient;
|
|
34
|
+
/**
|
|
35
|
+
* Set to `true` by inner route handlers after they emit a terminal-ish
|
|
36
|
+
* error hook (104-04 / 204-04 / 304-04 / 199-02 via execute-standard).
|
|
37
|
+
* Checked by `Orchestrator.execute()`'s outer catch so it doesn't fire a
|
|
38
|
+
* second terminal (199-02 / 299-02 / 399-02) on top of the inner one.
|
|
39
|
+
* Reset to `false` at the start of each `execute()` call.
|
|
40
|
+
*/
|
|
41
|
+
_routeTerminalEmitted?: boolean;
|
|
25
42
|
}
|
|
26
43
|
/**
|
|
27
44
|
* Returns (and caches) an EvmClient for the signer's origin chain.
|
|
@@ -34,5 +51,11 @@ export declare function getOriginEvmClient(ctx: OrchestratorContext): EvmClient;
|
|
|
34
51
|
export declare function printLog(ctx: OrchestratorContext, msg: string): void;
|
|
35
52
|
/**
|
|
36
53
|
* Fires a progress hook event by ID, forwarding args to the hook factory.
|
|
54
|
+
*
|
|
55
|
+
* Suppresses Route 1 IDs when the active route is not R1 — the inner R1
|
|
56
|
+
* execute pipeline still calls fireProgressHook for events like 101 / 107 /
|
|
57
|
+
* 199_01, but those describe a Push-perspective view that doesn't match the
|
|
58
|
+
* R2/R3/R4 lifecycle the consumer is observing. Route handlers emit the
|
|
59
|
+
* route-specific IDs (201/207/301/307/etc.) explicitly.
|
|
37
60
|
*/
|
|
38
61
|
export declare function fireProgressHook(ctx: OrchestratorContext, hookId: string, ...args: any[]): void;
|
|
@@ -11,9 +11,11 @@ exports.getOriginEvmClient = getOriginEvmClient;
|
|
|
11
11
|
exports.printLog = printLog;
|
|
12
12
|
exports.fireProgressHook = fireProgressHook;
|
|
13
13
|
const tslib_1 = require("tslib");
|
|
14
|
+
const route_detector_1 = require("../route-detector");
|
|
14
15
|
const chain_1 = require("../../constants/chain");
|
|
15
16
|
const evm_client_1 = require("../../vm-client/evm-client");
|
|
16
17
|
const progress_hook_1 = tslib_1.__importDefault(require("../../progress-hook/progress-hook"));
|
|
18
|
+
const progress_hook_types_1 = require("../../progress-hook/progress-hook.types");
|
|
17
19
|
/**
|
|
18
20
|
* Returns (and caches) an EvmClient for the signer's origin chain.
|
|
19
21
|
* Avoids creating new EvmClient instances in lockFee, confirmation, fetchOriginTx, etc.
|
|
@@ -35,10 +37,66 @@ function printLog(ctx, msg) {
|
|
|
35
37
|
console.log(`[Orchestrator] ${msg}`);
|
|
36
38
|
}
|
|
37
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* IDs in the Route 1 range (101–199 + the funds/payload sub-IDs). When the
|
|
42
|
+
* orchestrator is executing a non-R1 route, these IDs are suppressed at the
|
|
43
|
+
* fire boundary so emission code in the inner R1 execute pipeline doesn't
|
|
44
|
+
* leak Route 1 events into a Route 2/3/4 progress stream. The route-specific
|
|
45
|
+
* IDs (201/207/299, 301/307/399, etc.) are emitted explicitly by the route
|
|
46
|
+
* handlers and by `wait()` in response-builder.ts.
|
|
47
|
+
*
|
|
48
|
+
* Exceptions kept in the stream regardless of route:
|
|
49
|
+
* - All UEA migration hooks.
|
|
50
|
+
*
|
|
51
|
+
* Separately, the intermediate Push-success markers 199-99-99 (R3) and
|
|
52
|
+
* 299-99 (R2) are suppressed at `fanOut` in response-builder.ts — they're
|
|
53
|
+
* internal transition signals, not consumer-facing spec events.
|
|
54
|
+
*/
|
|
55
|
+
const R1_SUPPRESSED_IN_NON_R1 = new Set([
|
|
56
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_101,
|
|
57
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_102_01,
|
|
58
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_01,
|
|
59
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_02,
|
|
60
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_03,
|
|
61
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_03_01,
|
|
62
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_03_02,
|
|
63
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_03_03,
|
|
64
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_03_04,
|
|
65
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_104_01,
|
|
66
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_104_02,
|
|
67
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_104_03,
|
|
68
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_104_04,
|
|
69
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_105_01,
|
|
70
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_105_02,
|
|
71
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_01,
|
|
72
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_02,
|
|
73
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_03,
|
|
74
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_03_01,
|
|
75
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_03_02,
|
|
76
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_04,
|
|
77
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_05,
|
|
78
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_06,
|
|
79
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_107,
|
|
80
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_199_01,
|
|
81
|
+
progress_hook_types_1.PROGRESS_HOOK.SEND_TX_199_02,
|
|
82
|
+
]);
|
|
83
|
+
function isR1Route(route) {
|
|
84
|
+
return route === undefined || route === route_detector_1.TransactionRoute.UOA_TO_PUSH;
|
|
85
|
+
}
|
|
38
86
|
/**
|
|
39
87
|
* Fires a progress hook event by ID, forwarding args to the hook factory.
|
|
88
|
+
*
|
|
89
|
+
* Suppresses Route 1 IDs when the active route is not R1 — the inner R1
|
|
90
|
+
* execute pipeline still calls fireProgressHook for events like 101 / 107 /
|
|
91
|
+
* 199_01, but those describe a Push-perspective view that doesn't match the
|
|
92
|
+
* R2/R3/R4 lifecycle the consumer is observing. Route handlers emit the
|
|
93
|
+
* route-specific IDs (201/207/301/307/etc.) explicitly.
|
|
40
94
|
*/
|
|
41
95
|
function fireProgressHook(ctx, hookId, ...args) {
|
|
96
|
+
if (!isR1Route(ctx.currentRoute) &&
|
|
97
|
+
R1_SUPPRESSED_IN_NON_R1.has(hookId)) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
42
100
|
const hookEntry = progress_hook_1.default[hookId];
|
|
43
101
|
const hookPayload = hookEntry(...args);
|
|
44
102
|
printLog(ctx, hookPayload.message);
|
|
@@ -37,7 +37,7 @@ function executeFundsOnly(ctx, execute, eventBuffer, getResponseCallbacks) {
|
|
|
37
37
|
if (!helpers_1.SUPPORTED_GATEWAY_CHAINS.includes(chain)) {
|
|
38
38
|
throw new Error(`Funds bridging is not supported on chain ${chain}. Supported chains: ${helpers_1.SUPPORTED_GATEWAY_CHAINS.join(', ')}`);
|
|
39
39
|
}
|
|
40
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
40
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_101, chain, ctx.universalSigner.account.address);
|
|
41
41
|
const { defaultRPC, lockerContract } = chain_1.CHAIN_INFO[chain];
|
|
42
42
|
const rpcUrls = ctx.rpcUrls[chain] || defaultRPC;
|
|
43
43
|
// Resolve token: default to native token based on VM
|
|
@@ -97,10 +97,10 @@ function executeFundsOnlyEvm(ctx, execute, eventBuffer, transformFn, chain, rpcU
|
|
|
97
97
|
const ueaBalanceForGas = yield ctx.pushClient.getBalance(ueaAddress);
|
|
98
98
|
const nativeAmount = yield (0, gas_calculator_1.calculateNativeAmountForDeposit)(ctx, chain, BigInt(0), ueaBalanceForGas);
|
|
99
99
|
(0, context_2.printLog)(ctx, `sendFunds — nativeAmount: ${nativeAmount.toString()}, ueaBalanceForGas: ${ueaBalanceForGas.toString()}`);
|
|
100
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
101
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
100
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_01);
|
|
101
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_02, ueaAddress, deployed);
|
|
102
102
|
(0, context_2.printLog)(ctx, `UEA resolved: ${ueaAddress}, deployed: ${deployed}`);
|
|
103
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
103
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_01, execute.funds.amount, execute.funds.token.decimals, symbol);
|
|
104
104
|
// Approve gateway to pull tokens if ERC-20
|
|
105
105
|
if (execute.funds.token.mechanism === 'approve') {
|
|
106
106
|
yield (0, gas_calculator_1.ensureErc20Allowance)(ctx, evmClient, tokenAddr, gatewayAddress, execute.funds.amount);
|
|
@@ -119,21 +119,35 @@ function executeFundsOnlyEvm(ctx, execute, eventBuffer, transformFn, chain, rpcU
|
|
|
119
119
|
txHash = yield (0, gateway_client_1.sendGatewayTxWithFallback)(ctx, evmClient, gatewayAddress, req, ctx.universalSigner, isNative ? nativeAmount + bridgeAmount : nativeAmount);
|
|
120
120
|
}
|
|
121
121
|
catch (err) {
|
|
122
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
122
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_104_04);
|
|
123
123
|
throw err;
|
|
124
124
|
}
|
|
125
125
|
const originTx = yield (0, helpers_2.fetchOriginChainTransactionForProgress)(ctx, chain, txHash, txHash);
|
|
126
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
126
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_02, txHash, bridgeAmount, execute.funds.token.decimals, symbol, originTx);
|
|
127
127
|
yield (0, confirmation_1.waitForEvmConfirmationsWithCountdown)(ctx, evmClient, txHash, chain_1.CHAIN_INFO[chain].confirmations, chain_1.CHAIN_INFO[chain].timeout);
|
|
128
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
129
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
128
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_04);
|
|
129
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_05);
|
|
130
130
|
(0, context_2.printLog)(ctx, 'sendFunds — querying Push Chain status: ' + JSON.stringify({
|
|
131
131
|
txHash, evmGatewayMethod: execute.to === ueaAddress ? 'sendFunds' : 'sendTxWithFunds',
|
|
132
132
|
}));
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
133
|
+
let response;
|
|
134
|
+
try {
|
|
135
|
+
const pushChainUniversalTx = yield (0, response_builder_1.queryUniversalTxStatusFromGatewayTx)(ctx, evmClient, gatewayAddress, txHash, execute.to === ueaAddress ? 'sendFunds' : 'sendTxWithFunds');
|
|
136
|
+
// extractPcTxAndTransform fires 199-02 itself on pcTx FAILED; only emit
|
|
137
|
+
// for non-typed failures (RPC lookup error, timeout).
|
|
138
|
+
response = yield (0, push_chain_tx_1.extractPcTxAndTransform)(ctx, pushChainUniversalTx, txHash, eventBuffer, 'sendFunds', transformFn);
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
if (!(err instanceof push_chain_tx_1.PushChainExecutionError)) {
|
|
142
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
143
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_199_02, errMsg);
|
|
144
|
+
throw new push_chain_tx_1.PushChainExecutionError(errMsg, { gatewayTxHash: txHash });
|
|
145
|
+
}
|
|
146
|
+
throw err;
|
|
147
|
+
}
|
|
148
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_06, bridgeAmount, execute.funds.token.decimals, symbol);
|
|
149
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_107);
|
|
150
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_199_01, [response]);
|
|
137
151
|
return response;
|
|
138
152
|
});
|
|
139
153
|
}
|
|
@@ -154,10 +168,10 @@ function executeFundsOnlySvm(ctx, execute, eventBuffer, transformFn, chain, rpcU
|
|
|
154
168
|
throw new Error('Pay-with token is not supported on Solana');
|
|
155
169
|
}
|
|
156
170
|
const recipientEvm20 = Array.from(Buffer.from(execute.to.slice(2).padStart(40, '0'), 'hex').subarray(0, 20));
|
|
157
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
171
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_01);
|
|
158
172
|
const ueaAddress = (0, uea_manager_1.computeUEAOffchain)(ctx);
|
|
159
173
|
const { nonce, deployed } = yield (0, uea_manager_1.getUeaStatusAndNonce)(ctx);
|
|
160
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
174
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_02, ueaAddress, deployed);
|
|
161
175
|
let txSignature;
|
|
162
176
|
if (execute.funds.token.mechanism === 'native') {
|
|
163
177
|
const [tokenRateLimitPda] = web3_js_1.PublicKey.findProgramAddressSync([(0, viem_1.stringToBytes)('rate_limit'), web3_js_1.PublicKey.default.toBuffer()], programId);
|
|
@@ -205,14 +219,26 @@ function executeFundsOnlySvm(ctx, execute, eventBuffer, transformFn, chain, rpcU
|
|
|
205
219
|
throw new Error('Unsupported token mechanism on Solana');
|
|
206
220
|
}
|
|
207
221
|
const originTx = yield (0, helpers_2.fetchOriginChainTransactionForProgress)(ctx, chain, '0x', txSignature);
|
|
208
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
222
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_02, txSignature, bridgeAmount, execute.funds.token.decimals, symbol, originTx);
|
|
209
223
|
yield (0, confirmation_1.waitForSvmConfirmationsWithCountdown)(ctx, svmClient, txSignature, chain_1.CHAIN_INFO[chain].confirmations, chain_1.CHAIN_INFO[chain].timeout);
|
|
210
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
211
|
-
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
224
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_04);
|
|
225
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_05);
|
|
226
|
+
let response;
|
|
227
|
+
try {
|
|
228
|
+
const pushChainUniversalTx = yield (0, response_builder_1.queryUniversalTxStatusFromGatewayTx)(ctx, undefined, undefined, txSignature, 'sendFunds');
|
|
229
|
+
response = yield (0, push_chain_tx_1.extractPcTxAndTransform)(ctx, pushChainUniversalTx, txSignature, eventBuffer, 'sendFunds (SVM)', transformFn);
|
|
230
|
+
}
|
|
231
|
+
catch (err) {
|
|
232
|
+
if (!(err instanceof push_chain_tx_1.PushChainExecutionError)) {
|
|
233
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
234
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_199_02, errMsg);
|
|
235
|
+
throw new push_chain_tx_1.PushChainExecutionError(errMsg, { gatewayTxHash: txSignature });
|
|
236
|
+
}
|
|
237
|
+
throw err;
|
|
238
|
+
}
|
|
239
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_06, bridgeAmount, execute.funds.token.decimals, symbol);
|
|
240
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_107);
|
|
241
|
+
(0, context_2.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_199_01, [response]);
|
|
216
242
|
return response;
|
|
217
243
|
});
|
|
218
244
|
}
|
|
@@ -24,6 +24,7 @@ const context_1 = require("./context");
|
|
|
24
24
|
const gas_calculator_1 = require("./gas-calculator");
|
|
25
25
|
const gateway_client_1 = require("./gateway-client");
|
|
26
26
|
const payload_builder_1 = require("./payload-builder");
|
|
27
|
+
const gas_usd_sizer_1 = require("./gas-usd-sizer");
|
|
27
28
|
const uea_manager_1 = require("./uea-manager");
|
|
28
29
|
const confirmation_1 = require("./confirmation");
|
|
29
30
|
const response_builder_1 = require("./response-builder");
|
|
@@ -36,7 +37,7 @@ function executeFundsWithPayload(ctx, execute, eventBuffer, getResponseCallbacks
|
|
|
36
37
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
37
38
|
const transformFn = (tx, buf = []) => (0, response_builder_1.transformToUniversalTxResponse)(ctx, tx, buf, getResponseCallbacks());
|
|
38
39
|
const { chain, evmClient, gatewayAddress } = (0, gateway_client_1.getOriginGatewayContext)(ctx);
|
|
39
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
40
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_101, chain, ctx.universalSigner.account.address);
|
|
40
41
|
// Default token to native ETH if none provided
|
|
41
42
|
if (!execute.funds.token) {
|
|
42
43
|
const available = tokens_1.MOVEABLE_TOKENS[chain] || [];
|
|
@@ -64,7 +65,7 @@ function executeFundsWithPayload(ctx, execute, eventBuffer, getResponseCallbacks
|
|
|
64
65
|
deployed = status.deployed;
|
|
65
66
|
}
|
|
66
67
|
const { payload: universalPayload, req } = yield (0, payload_builder_1.buildGatewayPayloadAndGas)(ctx, execute, nonce, 'sendTxWithFunds', execute.funds.amount);
|
|
67
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
68
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_102_01);
|
|
68
69
|
// Compute required gas funding on Push Chain and current UEA balance
|
|
69
70
|
const gasEstimate = execute.gasLimit || BigInt(1e7);
|
|
70
71
|
const gasPrice = yield ctx.pushClient.getGasPrice();
|
|
@@ -73,17 +74,42 @@ function executeFundsWithPayload(ctx, execute, eventBuffer, getResponseCallbacks
|
|
|
73
74
|
const requiredFunds = requiredGasFee + payloadValue;
|
|
74
75
|
const ueaAddress = (0, uea_manager_1.computeUEAOffchain)(ctx);
|
|
75
76
|
const ueaBalance = yield ctx.pushClient.getBalance(ueaAddress);
|
|
76
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_01);
|
|
78
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_02, ueaAddress, deployed);
|
|
79
|
+
// SDK 5.2 Case A/B/C sizing on the Push-chain gas portion.
|
|
80
|
+
// Floor pad comes from the sizer ($1 for Case A); upper bound now lives in
|
|
81
|
+
// the origin gateway (MAX_CAP_UNIVERSAL_TX_USD) — the SDK no longer caps.
|
|
82
|
+
const r1Sizing = yield (0, gas_usd_sizer_1.sizeR1PushGas)(ctx, {
|
|
83
|
+
pushGasFeeWei: requiredGasFee,
|
|
84
|
+
originChain: chain,
|
|
85
|
+
});
|
|
86
|
+
// Convert the sizer's USD result into planned PC native deposit so the
|
|
87
|
+
// sizer progress hook can surface the user-facing `extraDepositPC` =
|
|
88
|
+
// totalPCDeposit - gasRequired. The same conversion is reused below for
|
|
89
|
+
// the final nativeAmount calc (after SVM clamp).
|
|
90
|
+
const nativeTokenUsdPrice = yield new price_fetch_1.PriceFetch(ctx.rpcUrls).getPrice(chain);
|
|
91
|
+
const nativeDecimals = chain_1.CHAIN_INFO[chain].vm === enums_1.VM.SVM ? 9 : 18;
|
|
92
|
+
const oneNativeUnit = utils_1.Utils.helpers.parseUnits('1', nativeDecimals);
|
|
93
|
+
const usdToNative = (usd) => {
|
|
94
|
+
if (nativeTokenUsdPrice === BigInt(0))
|
|
95
|
+
return BigInt(0);
|
|
96
|
+
const out = (usd * oneNativeUnit + (nativeTokenUsdPrice - BigInt(1))) / nativeTokenUsdPrice;
|
|
97
|
+
return out + BigInt(1);
|
|
98
|
+
};
|
|
99
|
+
const plannedPCDeposit = usdToNative(r1Sizing.paddedDepositUsd);
|
|
100
|
+
const extraDepositPC = plannedPCDeposit > requiredGasFee ? plannedPCDeposit - requiredGasFee : BigInt(0);
|
|
101
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_03, chain, r1Sizing.paddedDepositUsd);
|
|
102
|
+
const r1SizingHookId = {
|
|
103
|
+
A: progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_03_01,
|
|
104
|
+
B: progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_03_02,
|
|
105
|
+
C: progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_03_03,
|
|
106
|
+
}[r1Sizing.category];
|
|
107
|
+
(0, context_1.fireProgressHook)(ctx, r1SizingHookId, chain, requiredGasFee, extraDepositPC, r1Sizing.paddedDepositUsd);
|
|
80
108
|
const deficit = requiredFunds > ueaBalance ? requiredFunds - ueaBalance : BigInt(0);
|
|
81
|
-
let depositUsd = deficit > BigInt(0) ? ctx.pushClient.pushToUSDC(deficit) :
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
throw new Error('Deposit value exceeds max $1000 worth of native token');
|
|
86
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_02_02, depositUsd);
|
|
109
|
+
let depositUsd = deficit > BigInt(0) ? ctx.pushClient.pushToUSDC(deficit) : BigInt(0);
|
|
110
|
+
// Apply sizer floor: Case A pads to $1, Cases B/C pass-through.
|
|
111
|
+
if (depositUsd < r1Sizing.paddedDepositUsd)
|
|
112
|
+
depositUsd = r1Sizing.paddedDepositUsd;
|
|
87
113
|
// If SVM, clamp depositUsd to on-chain Config caps
|
|
88
114
|
if (chain_1.CHAIN_INFO[chain].vm === enums_1.VM.SVM) {
|
|
89
115
|
const svmClient = new svm_client_1.SvmClient({
|
|
@@ -110,15 +136,12 @@ function executeFundsWithPayload(ctx, execute, eventBuffer, getResponseCallbacks
|
|
|
110
136
|
// best-effort
|
|
111
137
|
}
|
|
112
138
|
}
|
|
113
|
-
//
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
const oneNativeUnit = utils_1.Utils.helpers.parseUnits('1', nativeDecimals);
|
|
117
|
-
let nativeAmount = (depositUsd * oneNativeUnit + (nativeTokenUsdPrice - BigInt(1))) / nativeTokenUsdPrice;
|
|
118
|
-
nativeAmount = nativeAmount + BigInt(1);
|
|
139
|
+
// Final USD(8) -> native conversion reusing the cached price fetched above.
|
|
140
|
+
let nativeAmount = usdToNative(depositUsd);
|
|
141
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_103_03_04, nativeAmount, depositUsd, chain);
|
|
119
142
|
const bridgeAmount = execute.funds.amount;
|
|
120
143
|
const symbol = execute.funds.token.symbol;
|
|
121
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
144
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_01, bridgeAmount, execute.funds.token.decimals, symbol);
|
|
122
145
|
if (chain_1.CHAIN_INFO[ctx.universalSigner.account.chain].vm === enums_1.VM.EVM) {
|
|
123
146
|
const tokenAddr = execute.funds.token.address;
|
|
124
147
|
if (mechanism === 'approve') {
|
|
@@ -134,11 +157,9 @@ function executeFundsWithPayload(ctx, execute, eventBuffer, getResponseCallbacks
|
|
|
134
157
|
try {
|
|
135
158
|
if (chain_1.CHAIN_INFO[ctx.universalSigner.account.chain].vm === enums_1.VM.EVM) {
|
|
136
159
|
const tokenAddr = execute.funds.token.address;
|
|
137
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
138
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
139
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
140
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_04_02);
|
|
141
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_04_03);
|
|
160
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_104_01);
|
|
161
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_104_02);
|
|
162
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_104_03);
|
|
142
163
|
const evmClientEvm = evmClient;
|
|
143
164
|
const gatewayAddressEvm = gatewayAddress;
|
|
144
165
|
const payloadBytes = (0, signing_1.encodeUniversalPayload)(universalPayload);
|
|
@@ -180,11 +201,11 @@ function executeFundsWithPayload(ctx, execute, eventBuffer, getResponseCallbacks
|
|
|
180
201
|
}
|
|
181
202
|
}
|
|
182
203
|
catch (err) {
|
|
183
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
204
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_104_04);
|
|
184
205
|
throw err;
|
|
185
206
|
}
|
|
186
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
187
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
207
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_104_03);
|
|
208
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_02, txHash, bridgeAmount, execute.funds.token.decimals, symbol);
|
|
188
209
|
// Awaiting confirmations
|
|
189
210
|
const signerChain = ctx.universalSigner.account.chain;
|
|
190
211
|
if (chain_1.CHAIN_INFO[signerChain].vm === enums_1.VM.EVM) {
|
|
@@ -204,18 +225,30 @@ function executeFundsWithPayload(ctx, execute, eventBuffer, getResponseCallbacks
|
|
|
204
225
|
feeLockTxHash = (0, viem_1.bytesToHex)(new Uint8Array(decoded));
|
|
205
226
|
}
|
|
206
227
|
}
|
|
207
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
208
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
209
|
-
let
|
|
210
|
-
|
|
211
|
-
pushChainUniversalTx
|
|
228
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_04);
|
|
229
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_05);
|
|
230
|
+
let response;
|
|
231
|
+
try {
|
|
232
|
+
let pushChainUniversalTx;
|
|
233
|
+
if (chain_1.CHAIN_INFO[ctx.universalSigner.account.chain].vm === enums_1.VM.EVM) {
|
|
234
|
+
pushChainUniversalTx = yield (0, response_builder_1.queryUniversalTxStatusFromGatewayTx)(ctx, evmClient, gatewayAddress, txHash, 'sendTxWithFunds');
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
pushChainUniversalTx = yield (0, response_builder_1.queryUniversalTxStatusFromGatewayTx)(ctx, undefined, undefined, txHash, 'sendTxWithFunds');
|
|
238
|
+
}
|
|
239
|
+
response = yield (0, push_chain_tx_1.extractPcTxAndTransform)(ctx, pushChainUniversalTx, txHash, eventBuffer, 'sendTxWithFunds', transformFn);
|
|
212
240
|
}
|
|
213
|
-
|
|
214
|
-
|
|
241
|
+
catch (err) {
|
|
242
|
+
if (!(err instanceof push_chain_tx_1.PushChainExecutionError)) {
|
|
243
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
244
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_199_02, errMsg);
|
|
245
|
+
throw new push_chain_tx_1.PushChainExecutionError(errMsg, { gatewayTxHash: txHash });
|
|
246
|
+
}
|
|
247
|
+
throw err;
|
|
215
248
|
}
|
|
216
|
-
|
|
217
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
218
|
-
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.
|
|
249
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_106_06, bridgeAmount, execute.funds.token.decimals, symbol);
|
|
250
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_107);
|
|
251
|
+
(0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_199_01, [response]);
|
|
219
252
|
return response;
|
|
220
253
|
});
|
|
221
254
|
}
|