@pushchain/core 5.1.3 → 5.1.4-alpha.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.
Files changed (131) hide show
  1. package/package.json +29 -6
  2. package/src/lib/constants/abi/prc20.evm.d.ts +22 -2
  3. package/src/lib/constants/abi/prc20.evm.js +11 -3
  4. package/src/lib/constants/abi/universalGatewayPC.evm.d.ts +59 -0
  5. package/src/lib/constants/abi/universalGatewayPC.evm.js +26 -0
  6. package/src/lib/constants/chain.d.ts +4 -0
  7. package/src/lib/constants/chain.js +6 -2
  8. package/src/lib/index.d.ts +2 -2
  9. package/src/lib/internal/bs58.d.ts +2 -0
  10. package/src/lib/internal/bs58.js +7 -0
  11. package/src/lib/orchestrator/cea-utils.d.ts +0 -9
  12. package/src/lib/orchestrator/cea-utils.js +15 -4
  13. package/src/lib/orchestrator/internals/account-manager.d.ts +16 -0
  14. package/src/lib/orchestrator/internals/account-manager.js +191 -0
  15. package/src/lib/orchestrator/internals/cascade.d.ts +23 -0
  16. package/src/lib/orchestrator/internals/cascade.js +945 -0
  17. package/src/lib/orchestrator/internals/confirmation.d.ts +9 -0
  18. package/src/lib/orchestrator/internals/confirmation.js +123 -0
  19. package/src/lib/orchestrator/internals/context.d.ts +38 -0
  20. package/src/lib/orchestrator/internals/context.js +49 -0
  21. package/src/lib/orchestrator/internals/execute-funds-only.d.ts +11 -0
  22. package/src/lib/orchestrator/internals/execute-funds-only.js +219 -0
  23. package/src/lib/orchestrator/internals/execute-funds-payload.d.ts +11 -0
  24. package/src/lib/orchestrator/internals/execute-funds-payload.js +222 -0
  25. package/src/lib/orchestrator/internals/execute-standard.d.ts +13 -0
  26. package/src/lib/orchestrator/internals/execute-standard.js +225 -0
  27. package/src/lib/orchestrator/internals/gas-calculator.d.ts +38 -0
  28. package/src/lib/orchestrator/internals/gas-calculator.js +424 -0
  29. package/src/lib/orchestrator/internals/gateway-client.d.ts +24 -0
  30. package/src/lib/orchestrator/internals/gateway-client.js +191 -0
  31. package/src/lib/orchestrator/internals/helpers.d.ts +26 -0
  32. package/src/lib/orchestrator/internals/helpers.js +181 -0
  33. package/src/lib/orchestrator/internals/index.d.ts +24 -0
  34. package/src/lib/orchestrator/internals/index.js +132 -0
  35. package/src/lib/orchestrator/internals/outbound-sync.d.ts +49 -0
  36. package/src/lib/orchestrator/internals/outbound-sync.js +357 -0
  37. package/src/lib/orchestrator/internals/outbound-tracker.d.ts +8 -0
  38. package/src/lib/orchestrator/internals/outbound-tracker.js +64 -0
  39. package/src/lib/orchestrator/internals/payload-builder.d.ts +24 -0
  40. package/src/lib/orchestrator/internals/payload-builder.js +178 -0
  41. package/src/lib/orchestrator/internals/push-chain-tx.d.ts +32 -0
  42. package/src/lib/orchestrator/internals/push-chain-tx.js +207 -0
  43. package/src/lib/orchestrator/internals/quote.d.ts +9 -0
  44. package/src/lib/orchestrator/internals/quote.js +114 -0
  45. package/src/lib/orchestrator/internals/rescue.d.ts +20 -0
  46. package/src/lib/orchestrator/internals/rescue.js +112 -0
  47. package/src/lib/orchestrator/internals/response-builder.d.ts +26 -0
  48. package/src/lib/orchestrator/internals/response-builder.js +504 -0
  49. package/src/lib/orchestrator/internals/route-handlers.d.ts +77 -0
  50. package/src/lib/orchestrator/internals/route-handlers.js +1192 -0
  51. package/src/lib/orchestrator/internals/signing.d.ts +27 -0
  52. package/src/lib/orchestrator/internals/signing.js +258 -0
  53. package/src/lib/orchestrator/internals/svm-bridge.d.ts +21 -0
  54. package/src/lib/orchestrator/internals/svm-bridge.js +122 -0
  55. package/src/lib/orchestrator/internals/svm-helpers.d.ts +35 -0
  56. package/src/lib/orchestrator/internals/svm-helpers.js +143 -0
  57. package/src/lib/orchestrator/internals/tx-transformer.d.ts +12 -0
  58. package/src/lib/orchestrator/internals/tx-transformer.js +120 -0
  59. package/src/lib/orchestrator/internals/uea-manager.d.ts +17 -0
  60. package/src/lib/orchestrator/internals/uea-manager.js +164 -0
  61. package/src/lib/orchestrator/orchestrator.d.ts +33 -431
  62. package/src/lib/orchestrator/orchestrator.js +124 -6125
  63. package/src/lib/orchestrator/orchestrator.types.d.ts +11 -10
  64. package/src/lib/orchestrator/payload-builders.js +34 -8
  65. package/src/lib/price-fetch/price-fetch.js +19 -7
  66. package/src/lib/push-chain/push-chain.d.ts +6 -0
  67. package/src/lib/push-chain/push-chain.js +10 -2
  68. package/src/lib/push-client/push-client.d.ts +3 -0
  69. package/src/lib/push-client/push-client.js +21 -31
  70. package/src/lib/universal/account/account.d.ts +35 -16
  71. package/src/lib/universal/account/account.js +298 -16
  72. package/src/lib/universal/signer/signer.d.ts +2 -3
  73. package/src/lib/universal/signer/signer.js +65 -115
  74. package/src/lib/universal/universal.types.d.ts +41 -0
  75. package/src/lib/utils.d.ts +7 -2
  76. package/src/lib/utils.js +65 -34
  77. package/src/lib/vm-client/evm-client.js +3 -11
  78. package/src/lib/vm-client/svm-client.d.ts +0 -4
  79. package/src/lib/vm-client/svm-client.js +2 -8
  80. package/src/index.js.map +0 -1
  81. package/src/lib/cache/cache.js.map +0 -1
  82. package/src/lib/constants/abi/cea.evm.js.map +0 -1
  83. package/src/lib/constants/abi/ceaFactory.evm.js.map +0 -1
  84. package/src/lib/constants/abi/erc20.evm.js.map +0 -1
  85. package/src/lib/constants/abi/factoryV1.js.map +0 -1
  86. package/src/lib/constants/abi/feeLocker.evm.js.map +0 -1
  87. package/src/lib/constants/abi/index.js.map +0 -1
  88. package/src/lib/constants/abi/prc20.evm.js.map +0 -1
  89. package/src/lib/constants/abi/uea-factory.js.map +0 -1
  90. package/src/lib/constants/abi/uea.evm.js.map +0 -1
  91. package/src/lib/constants/abi/uea.svm.js.map +0 -1
  92. package/src/lib/constants/abi/universalGateway.evm.js.map +0 -1
  93. package/src/lib/constants/abi/universalGatewayPC.evm.js.map +0 -1
  94. package/src/lib/constants/abi/universalGatewayV0.evm.js.map +0 -1
  95. package/src/lib/constants/chain.js.map +0 -1
  96. package/src/lib/constants/enums.js.map +0 -1
  97. package/src/lib/constants/index.js.map +0 -1
  98. package/src/lib/constants/selectors.js.map +0 -1
  99. package/src/lib/constants/tokens.js.map +0 -1
  100. package/src/lib/generated/uexecutor/v1/query.js.map +0 -1
  101. package/src/lib/generated/uexecutor/v1/types.js.map +0 -1
  102. package/src/lib/generated/uexecutor/v2/index.js.map +0 -1
  103. package/src/lib/generated/uexecutor/v2/query.js.map +0 -1
  104. package/src/lib/generated/uexecutor/v2/types.js.map +0 -1
  105. package/src/lib/generated/v1/tx.js.map +0 -1
  106. package/src/lib/index.js.map +0 -1
  107. package/src/lib/internal/buffer.js.map +0 -1
  108. package/src/lib/internal/global-buffer-polyfill.js.map +0 -1
  109. package/src/lib/orchestrator/cea-utils.js.map +0 -1
  110. package/src/lib/orchestrator/orchestrator.js.map +0 -1
  111. package/src/lib/orchestrator/orchestrator.types.js.map +0 -1
  112. package/src/lib/orchestrator/payload-builders.js.map +0 -1
  113. package/src/lib/orchestrator/route-detector.js.map +0 -1
  114. package/src/lib/price-fetch/price-fetch.js.map +0 -1
  115. package/src/lib/progress-hook/progress-hook.js.map +0 -1
  116. package/src/lib/progress-hook/progress-hook.types.js.map +0 -1
  117. package/src/lib/push-chain/helpers/abis.js.map +0 -1
  118. package/src/lib/push-chain/helpers/addresses.js.map +0 -1
  119. package/src/lib/push-chain/push-chain.js.map +0 -1
  120. package/src/lib/push-client/push-client.js.map +0 -1
  121. package/src/lib/push-client/push-client.types.js.map +0 -1
  122. package/src/lib/universal/account/account.js.map +0 -1
  123. package/src/lib/universal/account/index.js.map +0 -1
  124. package/src/lib/universal/signer/index.js.map +0 -1
  125. package/src/lib/universal/signer/signer.js.map +0 -1
  126. package/src/lib/universal/signer/signer.types.js.map +0 -1
  127. package/src/lib/universal/universal.types.js.map +0 -1
  128. package/src/lib/utils.js.map +0 -1
  129. package/src/lib/vm-client/evm-client.js.map +0 -1
  130. package/src/lib/vm-client/svm-client.js.map +0 -1
  131. package/src/lib/vm-client/vm-client.types.js.map +0 -1
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ /**
3
+ * Funds+payload execution flow — extracted from Orchestrator.execute().
4
+ *
5
+ * Handles bridging funds AND executing a payload on Push Chain
6
+ * for both EVM and SVM origin chains.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.executeFundsWithPayload = executeFundsWithPayload;
10
+ const tslib_1 = require("tslib");
11
+ const bs58_1 = require("../../internal/bs58");
12
+ const web3_js_1 = require("@solana/web3.js");
13
+ const viem_1 = require("viem");
14
+ const universalGatewayV0_json_1 = tslib_1.__importDefault(require("../../constants/abi/universalGatewayV0.json"));
15
+ const chain_1 = require("../../constants/chain");
16
+ const enums_1 = require("../../constants/enums");
17
+ const tokens_1 = require("../../constants/tokens");
18
+ const progress_hook_types_1 = require("../../progress-hook/progress-hook.types");
19
+ const price_fetch_1 = require("../../price-fetch/price-fetch");
20
+ const push_chain_1 = require("../../push-chain/push-chain");
21
+ const utils_1 = require("../../utils");
22
+ const svm_client_1 = require("../../vm-client/svm-client");
23
+ const context_1 = require("./context");
24
+ const gas_calculator_1 = require("./gas-calculator");
25
+ const gateway_client_1 = require("./gateway-client");
26
+ const payload_builder_1 = require("./payload-builder");
27
+ const uea_manager_1 = require("./uea-manager");
28
+ const confirmation_1 = require("./confirmation");
29
+ const response_builder_1 = require("./response-builder");
30
+ const push_chain_tx_1 = require("./push-chain-tx");
31
+ const svm_bridge_1 = require("./svm-bridge");
32
+ const signing_1 = require("./signing");
33
+ const quote_1 = require("./quote");
34
+ function executeFundsWithPayload(ctx, execute, eventBuffer, getResponseCallbacks) {
35
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
36
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
37
+ const transformFn = (tx, buf = []) => (0, response_builder_1.transformToUniversalTxResponse)(ctx, tx, buf, getResponseCallbacks());
38
+ const { chain, evmClient, gatewayAddress } = (0, gateway_client_1.getOriginGatewayContext)(ctx);
39
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_01, chain, ctx.universalSigner.account.address);
40
+ // Default token to native ETH if none provided
41
+ if (!execute.funds.token) {
42
+ const available = tokens_1.MOVEABLE_TOKENS[chain] || [];
43
+ const vm = chain_1.CHAIN_INFO[chain].vm;
44
+ const preferredSymbol = vm === enums_1.VM.EVM ? 'ETH' : vm === enums_1.VM.SVM ? 'SOL' : undefined;
45
+ const nativeToken = preferredSymbol
46
+ ? available.find((t) => t.symbol === preferredSymbol)
47
+ : undefined;
48
+ if (!nativeToken) {
49
+ throw new Error('Native token not configured for this chain');
50
+ }
51
+ execute.funds.token = nativeToken;
52
+ }
53
+ const mechanism = execute.funds.token.mechanism;
54
+ let nonce;
55
+ let deployed;
56
+ const deployedHint = (_b = (_a = ctx.accountStatusCache) === null || _a === void 0 ? void 0 : _a.uea) === null || _b === void 0 ? void 0 : _b.deployed;
57
+ if (deployedHint) {
58
+ deployed = true;
59
+ nonce = yield (0, uea_manager_1.getUEANonce)(ctx, (0, uea_manager_1.computeUEAOffchain)(ctx));
60
+ }
61
+ else {
62
+ const status = yield (0, uea_manager_1.getUeaStatusAndNonce)(ctx);
63
+ nonce = status.nonce;
64
+ deployed = status.deployed;
65
+ }
66
+ 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.SEND_TX_02_01);
68
+ // Compute required gas funding on Push Chain and current UEA balance
69
+ const gasEstimate = execute.gasLimit || BigInt(1e7);
70
+ const gasPrice = yield ctx.pushClient.getGasPrice();
71
+ const requiredGasFee = gasEstimate * gasPrice;
72
+ const payloadValue = (_c = execute.value) !== null && _c !== void 0 ? _c : BigInt(0);
73
+ const requiredFunds = requiredGasFee + payloadValue;
74
+ const ueaAddress = (0, uea_manager_1.computeUEAOffchain)(ctx);
75
+ const ueaBalance = yield ctx.pushClient.getBalance(ueaAddress);
76
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_03_02, ueaAddress, deployed);
77
+ // Determine USD to deposit via gateway (8 decimals) with caps: min=$1, max=$10
78
+ const oneUsd = utils_1.Utils.helpers.parseUnits('1', 8);
79
+ const tenUsd = utils_1.Utils.helpers.parseUnits('10', 8);
80
+ const deficit = requiredFunds > ueaBalance ? requiredFunds - ueaBalance : BigInt(0);
81
+ let depositUsd = deficit > BigInt(0) ? ctx.pushClient.pushToUSDC(deficit) : oneUsd;
82
+ if (depositUsd < oneUsd)
83
+ depositUsd = oneUsd;
84
+ if (depositUsd > tenUsd)
85
+ throw new Error('Deposit value exceeds max $10 worth of native token');
86
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_02_02, depositUsd);
87
+ // If SVM, clamp depositUsd to on-chain Config caps
88
+ if (chain_1.CHAIN_INFO[chain].vm === enums_1.VM.SVM) {
89
+ const svmClient = new svm_client_1.SvmClient({
90
+ rpcUrls: ctx.rpcUrls[enums_1.CHAIN.SOLANA_DEVNET] || chain_1.CHAIN_INFO[enums_1.CHAIN.SOLANA_DEVNET].defaultRPC,
91
+ });
92
+ const programId = new web3_js_1.PublicKey(universalGatewayV0_json_1.default.address);
93
+ const [configPda] = web3_js_1.PublicKey.findProgramAddressSync([(0, viem_1.stringToBytes)('config')], programId);
94
+ try {
95
+ const cfg = yield svmClient.readContract({
96
+ abi: universalGatewayV0_json_1.default, address: universalGatewayV0_json_1.default.address,
97
+ functionName: 'config', args: [configPda.toBase58()],
98
+ });
99
+ const minCapUsd = BigInt(((_d = cfg.minCapUniversalTxUsd) !== null && _d !== void 0 ? _d : cfg.min_cap_universal_tx_usd).toString());
100
+ const maxCapUsd = BigInt(((_e = cfg.maxCapUniversalTxUsd) !== null && _e !== void 0 ? _e : cfg.max_cap_universal_tx_usd).toString());
101
+ if (depositUsd < minCapUsd)
102
+ depositUsd = minCapUsd;
103
+ const withMargin = (minCapUsd * BigInt(12)) / BigInt(10);
104
+ if (depositUsd < withMargin)
105
+ depositUsd = withMargin;
106
+ if (depositUsd > maxCapUsd)
107
+ depositUsd = maxCapUsd;
108
+ }
109
+ catch (_m) {
110
+ // best-effort
111
+ }
112
+ }
113
+ // Convert USD(8) -> native units
114
+ const nativeTokenUsdPrice = yield new price_fetch_1.PriceFetch(ctx.rpcUrls).getPrice(chain);
115
+ const nativeDecimals = chain_1.CHAIN_INFO[chain].vm === enums_1.VM.SVM ? 9 : 18;
116
+ const oneNativeUnit = utils_1.Utils.helpers.parseUnits('1', nativeDecimals);
117
+ let nativeAmount = (depositUsd * oneNativeUnit + (nativeTokenUsdPrice - BigInt(1))) / nativeTokenUsdPrice;
118
+ nativeAmount = nativeAmount + BigInt(1);
119
+ const bridgeAmount = execute.funds.amount;
120
+ const symbol = execute.funds.token.symbol;
121
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_06_01, bridgeAmount, execute.funds.token.decimals, symbol);
122
+ if (chain_1.CHAIN_INFO[ctx.universalSigner.account.chain].vm === enums_1.VM.EVM) {
123
+ const tokenAddr = execute.funds.token.address;
124
+ if (mechanism === 'approve') {
125
+ const evmClientEvm = evmClient;
126
+ const gatewayAddressEvm = gatewayAddress;
127
+ yield (0, gas_calculator_1.ensureErc20Allowance)(ctx, evmClientEvm, tokenAddr, gatewayAddressEvm, bridgeAmount);
128
+ }
129
+ else if (mechanism === 'permit2') {
130
+ throw new Error('Permit2 is not supported yet');
131
+ }
132
+ }
133
+ let txHash;
134
+ try {
135
+ if (chain_1.CHAIN_INFO[ctx.universalSigner.account.chain].vm === enums_1.VM.EVM) {
136
+ const tokenAddr = execute.funds.token.address;
137
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_03_01);
138
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_03_02, ueaAddress, deployed);
139
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_04_01);
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);
142
+ const evmClientEvm = evmClient;
143
+ const gatewayAddressEvm = gatewayAddress;
144
+ const payloadBytes = (0, signing_1.encodeUniversalPayload)(universalPayload);
145
+ const payWith = execute.payGasWith;
146
+ const gasTokenAddress = (_f = payWith === null || payWith === void 0 ? void 0 : payWith.token) === null || _f === void 0 ? void 0 : _f.address;
147
+ if (gasTokenAddress) {
148
+ if (chain !== enums_1.CHAIN.ETHEREUM_SEPOLIA) {
149
+ throw new Error(`Only ${push_chain_1.PushChain.utils.chains.getChainName(enums_1.CHAIN.ETHEREUM_SEPOLIA)} is supported for paying gas fees with ERC-20 tokens`);
150
+ }
151
+ let amountOutMinETH = (payWith === null || payWith === void 0 ? void 0 : payWith.minAmountOut) !== undefined ? BigInt(payWith.minAmountOut) : nativeAmount;
152
+ const slippageBps = (_g = payWith === null || payWith === void 0 ? void 0 : payWith.slippageBps) !== null && _g !== void 0 ? _g : 100;
153
+ amountOutMinETH = BigInt(push_chain_1.PushChain.utils.conversion.slippageToMinAmount(amountOutMinETH.toString(), { slippageBps }));
154
+ const quoteExactOutputFn = (amountOut, opts) => (0, quote_1.quoteExactOutput)(ctx, amountOut, opts);
155
+ const { gasAmount } = yield (0, gas_calculator_1.calculateGasAmountFromAmountOutMinETH)(ctx, gasTokenAddress, amountOutMinETH, quoteExactOutputFn);
156
+ const deadline = BigInt(0);
157
+ const ownerAddress = ctx.universalSigner.account.address;
158
+ const gasTokenBalance = yield evmClientEvm.getErc20Balance({
159
+ tokenAddress: gasTokenAddress, ownerAddress,
160
+ });
161
+ if (gasTokenBalance < gasAmount) {
162
+ const sym = (_j = (_h = payWith === null || payWith === void 0 ? void 0 : payWith.token) === null || _h === void 0 ? void 0 : _h.symbol) !== null && _j !== void 0 ? _j : 'gas token';
163
+ const decimals = (_l = (_k = payWith === null || payWith === void 0 ? void 0 : payWith.token) === null || _k === void 0 ? void 0 : _k.decimals) !== null && _l !== void 0 ? _l : 18;
164
+ throw new Error(`Insufficient ${sym} balance to cover gas fees: need ${utils_1.Utils.helpers.formatUnits(gasAmount, decimals)}, have ${utils_1.Utils.helpers.formatUnits(gasTokenBalance, decimals)}`);
165
+ }
166
+ yield (0, gas_calculator_1.ensureErc20Allowance)(ctx, evmClientEvm, gasTokenAddress, gatewayAddressEvm, gasAmount);
167
+ const reqToken = Object.assign(Object.assign({}, req), { gasToken: gasTokenAddress, gasAmount, amountOutMinETH, deadline });
168
+ txHash = yield (0, gateway_client_1.sendGatewayTokenTxWithFallback)(ctx, evmClientEvm, gatewayAddressEvm, reqToken, ctx.universalSigner);
169
+ }
170
+ else {
171
+ const isNativeToken = mechanism === 'native';
172
+ const totalValue = isNativeToken ? nativeAmount + bridgeAmount : nativeAmount;
173
+ txHash = yield (0, gateway_client_1.sendGatewayTxWithFallback)(ctx, evmClientEvm, gatewayAddressEvm, req, ctx.universalSigner, totalValue);
174
+ }
175
+ }
176
+ else {
177
+ txHash = yield (0, svm_bridge_1.sendSVMTxWithFunds)(ctx, {
178
+ execute, mechanism, universalPayload, bridgeAmount, nativeAmount, req,
179
+ });
180
+ }
181
+ }
182
+ catch (err) {
183
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_04_04);
184
+ throw err;
185
+ }
186
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_04_03);
187
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_06_02, txHash, bridgeAmount, execute.funds.token.decimals, symbol);
188
+ // Awaiting confirmations
189
+ const signerChain = ctx.universalSigner.account.chain;
190
+ if (chain_1.CHAIN_INFO[signerChain].vm === enums_1.VM.EVM) {
191
+ yield (0, confirmation_1.waitForEvmConfirmationsWithCountdown)(ctx, evmClient, txHash, chain_1.CHAIN_INFO[signerChain].confirmations, chain_1.CHAIN_INFO[signerChain].timeout);
192
+ }
193
+ else {
194
+ const svmClient = new svm_client_1.SvmClient({
195
+ rpcUrls: ctx.rpcUrls[enums_1.CHAIN.SOLANA_DEVNET] || chain_1.CHAIN_INFO[enums_1.CHAIN.SOLANA_DEVNET].defaultRPC,
196
+ });
197
+ yield (0, confirmation_1.waitForSvmConfirmationsWithCountdown)(ctx, svmClient, txHash, chain_1.CHAIN_INFO[signerChain].confirmations, chain_1.CHAIN_INFO[signerChain].timeout);
198
+ }
199
+ // Funds Flow: Confirmed on origin
200
+ let feeLockTxHash = txHash;
201
+ if (chain_1.CHAIN_INFO[ctx.universalSigner.account.chain].vm === enums_1.VM.SVM) {
202
+ if (feeLockTxHash && !feeLockTxHash.startsWith('0x')) {
203
+ const decoded = bs58_1.bs58.decode(feeLockTxHash);
204
+ feeLockTxHash = (0, viem_1.bytesToHex)(new Uint8Array(decoded));
205
+ }
206
+ }
207
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_06_04);
208
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_06_05);
209
+ let pushChainUniversalTx;
210
+ if (chain_1.CHAIN_INFO[ctx.universalSigner.account.chain].vm === enums_1.VM.EVM) {
211
+ pushChainUniversalTx = yield (0, response_builder_1.queryUniversalTxStatusFromGatewayTx)(ctx, evmClient, gatewayAddress, txHash, 'sendTxWithFunds');
212
+ }
213
+ else {
214
+ pushChainUniversalTx = yield (0, response_builder_1.queryUniversalTxStatusFromGatewayTx)(ctx, undefined, undefined, txHash, 'sendTxWithFunds');
215
+ }
216
+ const response = yield (0, push_chain_tx_1.extractPcTxAndTransform)(ctx, pushChainUniversalTx, txHash, eventBuffer, 'sendTxWithFunds', transformFn);
217
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_06_06, bridgeAmount, execute.funds.token.decimals, symbol);
218
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_99_01, [response]);
219
+ return response;
220
+ });
221
+ }
222
+ //# sourceMappingURL=execute-funds-payload.js.map
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Standard payload execution flow (no funds) — extracted from Orchestrator.execute().
3
+ *
4
+ * Handles payload-only execution on Push Chain:
5
+ * - Push-to-Push direct transactions
6
+ * - Fee-locking path for undeployed/underfunded UEA
7
+ * - Signed verification path for deployed UEA with funds
8
+ */
9
+ import { ProgressEvent } from '../../progress-hook/progress-hook.types';
10
+ import type { ExecuteParams, UniversalTxResponse } from '../orchestrator.types';
11
+ import type { OrchestratorContext } from './context';
12
+ import { type ResponseBuilderCallbacks } from './response-builder';
13
+ export declare function executeStandardPayload(ctx: OrchestratorContext, execute: ExecuteParams, eventBuffer: ProgressEvent[], getResponseCallbacks: () => ResponseBuilderCallbacks): Promise<UniversalTxResponse>;
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ /**
3
+ * Standard payload execution flow (no funds) — extracted from Orchestrator.execute().
4
+ *
5
+ * Handles payload-only execution on Push Chain:
6
+ * - Push-to-Push direct transactions
7
+ * - Fee-locking path for undeployed/underfunded UEA
8
+ * - Signed verification path for deployed UEA with funds
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.executeStandardPayload = executeStandardPayload;
12
+ const tslib_1 = require("tslib");
13
+ const bs58_1 = require("../../internal/bs58");
14
+ const viem_1 = require("viem");
15
+ const chain_1 = require("../../constants/chain");
16
+ const enums_1 = require("../../constants/enums");
17
+ const tx_1 = require("../../generated/v1/tx");
18
+ const progress_hook_types_1 = require("../../progress-hook/progress-hook.types");
19
+ const utils_1 = require("../../utils");
20
+ const evm_client_1 = require("../../vm-client/evm-client");
21
+ const payload_builders_1 = require("../payload-builders");
22
+ const context_1 = require("./context");
23
+ const helpers_1 = require("./helpers");
24
+ const payload_builder_1 = require("./payload-builder");
25
+ const signing_1 = require("./signing");
26
+ const uea_manager_1 = require("./uea-manager");
27
+ const confirmation_1 = require("./confirmation");
28
+ const gateway_client_1 = require("./gateway-client");
29
+ const response_builder_1 = require("./response-builder");
30
+ const push_chain_tx_1 = require("./push-chain-tx");
31
+ function executeStandardPayload(ctx, execute, eventBuffer, getResponseCallbacks) {
32
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
33
+ var _a, _b;
34
+ const transformFn = (tx, buf = []) => (0, response_builder_1.transformToUniversalTxResponse)(ctx, tx, buf, getResponseCallbacks());
35
+ // Set default value for value if undefined
36
+ if (execute.value === undefined) {
37
+ execute.value = BigInt(0);
38
+ }
39
+ const chain = ctx.universalSigner.account.chain;
40
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_01, chain, ctx.universalSigner.account.address);
41
+ (0, helpers_1.validateMainnetConnection)(chain, ctx.pushClient.pushChainInfo.chainId);
42
+ // Push to Push Tx
43
+ if ((0, helpers_1.isPushChain)(chain)) {
44
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_07);
45
+ const tx = yield (0, push_chain_tx_1.sendPushTx)(ctx, execute, eventBuffer, transformFn);
46
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_99_01, [tx]);
47
+ return tx;
48
+ }
49
+ // Fetch Gas details and estimate cost of execution
50
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_02_01);
51
+ const gasEstimate = execute.gasLimit || BigInt(1e7);
52
+ const gasPrice = yield ctx.pushClient.getGasPrice();
53
+ const requiredGasFee = gasEstimate * gasPrice;
54
+ const requiredFunds = requiredGasFee + execute.value;
55
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_02_02, requiredFunds);
56
+ // Fetch UEA Details (or use pre-fetched status if available)
57
+ const UEA = (0, uea_manager_1.computeUEAOffchain)(ctx);
58
+ let isUEADeployed;
59
+ let nonce;
60
+ let funds;
61
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_03_01);
62
+ if (execute._ueaStatus) {
63
+ isUEADeployed = execute._ueaStatus.isDeployed;
64
+ nonce = execute._ueaStatus.nonce;
65
+ funds = execute._ueaStatus.balance;
66
+ }
67
+ else {
68
+ // Skip getCode if accountStatusCache already confirmed deployment
69
+ const deployedHint = (_b = (_a = ctx.accountStatusCache) === null || _a === void 0 ? void 0 : _a.uea) === null || _b === void 0 ? void 0 : _b.deployed;
70
+ if (deployedHint) {
71
+ const [balance, ueaNonce] = yield Promise.all([
72
+ ctx.pushClient.getBalance(UEA),
73
+ (0, uea_manager_1.getUEANonce)(ctx, UEA),
74
+ ]);
75
+ isUEADeployed = true;
76
+ nonce = ueaNonce;
77
+ funds = balance;
78
+ }
79
+ else {
80
+ const [code, balance] = yield Promise.all([
81
+ ctx.pushClient.publicClient.getCode({ address: UEA }),
82
+ ctx.pushClient.getBalance(UEA),
83
+ ]);
84
+ isUEADeployed = code !== undefined;
85
+ nonce = isUEADeployed ? yield (0, uea_manager_1.getUEANonce)(ctx, UEA) : BigInt(0);
86
+ funds = balance;
87
+ }
88
+ }
89
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_03_02, UEA, isUEADeployed);
90
+ // Validate and decode feeLockTxHash
91
+ let feeLockTxHash = execute.feeLockTxHash;
92
+ if (feeLockTxHash) {
93
+ (0, helpers_1.validateFeeLockTxHash)(feeLockTxHash);
94
+ if (!feeLockTxHash.startsWith('0x')) {
95
+ const decoded = bs58_1.bs58.decode(feeLockTxHash);
96
+ feeLockTxHash = (0, viem_1.bytesToHex)(new Uint8Array(decoded));
97
+ }
98
+ }
99
+ const feeLockingRequired = !execute._skipFeeLocking &&
100
+ (!isUEADeployed || funds < requiredFunds) && !feeLockTxHash;
101
+ // Support multicall payload encoding when execute.data is an array
102
+ let payloadData;
103
+ let payloadTo;
104
+ let req;
105
+ if (Array.isArray(execute.data)) {
106
+ payloadTo = viem_1.zeroAddress;
107
+ payloadData = (0, payload_builder_1.buildMulticallPayloadData)(ctx, execute.to, (0, payload_builders_1.buildExecuteMulticall)({ execute, ueaAddress: UEA }));
108
+ // Wrap in full UniversalPayload encoding for gateway req (matches non-array paths)
109
+ const universalPayloadForReq = JSON.parse(JSON.stringify({
110
+ to: viem_1.zeroAddress, value: execute.value,
111
+ data: payloadData,
112
+ gasLimit: execute.gasLimit || BigInt(5e7),
113
+ maxFeePerGas: execute.maxFeePerGas || BigInt(1e10),
114
+ maxPriorityFeePerGas: execute.maxPriorityFeePerGas || BigInt(0),
115
+ nonce, deadline: execute.deadline || BigInt(9999999999),
116
+ vType: feeLockingRequired
117
+ ? tx_1.VerificationType.universalTxVerification
118
+ : tx_1.VerificationType.signedVerification,
119
+ }, helpers_1.bigintReplacer));
120
+ req = (0, payload_builder_1.buildUniversalTxRequest)(ctx.universalSigner.account.address, {
121
+ recipient: viem_1.zeroAddress, token: viem_1.zeroAddress, amount: BigInt(0),
122
+ payload: (0, signing_1.encodeUniversalPayload)(universalPayloadForReq),
123
+ });
124
+ }
125
+ else {
126
+ if (execute.to.toLowerCase() !== UEA.toLowerCase()) {
127
+ if (execute.funds) {
128
+ payloadTo = viem_1.zeroAddress;
129
+ payloadData = (0, payload_builder_1.buildMulticallPayloadData)(ctx, execute.to, (0, payload_builders_1.buildExecuteMulticall)({ execute, ueaAddress: UEA }));
130
+ req = (0, payload_builder_1.buildUniversalTxRequest)(ctx.universalSigner.account.address, {
131
+ recipient: viem_1.zeroAddress, token: viem_1.zeroAddress, amount: BigInt(0), payload: payloadData,
132
+ });
133
+ }
134
+ else {
135
+ payloadTo = execute.to;
136
+ payloadData = execute.data || '0x';
137
+ const reqData = (0, payload_builder_1.buildMulticallPayloadData)(ctx, execute.to, (0, payload_builders_1.buildExecuteMulticall)({ execute, ueaAddress: UEA }));
138
+ const universalPayloadOther = JSON.parse(JSON.stringify({
139
+ to: viem_1.zeroAddress, value: execute.value,
140
+ data: reqData,
141
+ gasLimit: execute.gasLimit || BigInt(5e7),
142
+ maxFeePerGas: execute.maxFeePerGas || BigInt(1e10),
143
+ maxPriorityFeePerGas: execute.maxPriorityFeePerGas || BigInt(0),
144
+ nonce, deadline: execute.deadline || BigInt(9999999999),
145
+ vType: feeLockingRequired
146
+ ? tx_1.VerificationType.universalTxVerification
147
+ : tx_1.VerificationType.signedVerification,
148
+ }, helpers_1.bigintReplacer));
149
+ req = (0, payload_builder_1.buildUniversalTxRequest)(ctx.universalSigner.account.address, {
150
+ recipient: viem_1.zeroAddress, token: viem_1.zeroAddress, amount: BigInt(0),
151
+ payload: (0, signing_1.encodeUniversalPayload)(universalPayloadOther),
152
+ });
153
+ }
154
+ }
155
+ else {
156
+ payloadTo = execute.to;
157
+ payloadData = execute.data || '0x';
158
+ const reqData = (0, payload_builder_1.buildMulticallPayloadData)(ctx, execute.to, (0, payload_builders_1.buildExecuteMulticall)({ execute, ueaAddress: UEA }));
159
+ const universalPayloadSelf = JSON.parse(JSON.stringify({
160
+ to: viem_1.zeroAddress, value: execute.value,
161
+ data: reqData,
162
+ gasLimit: execute.gasLimit || BigInt(5e7),
163
+ maxFeePerGas: execute.maxFeePerGas || BigInt(1e10),
164
+ maxPriorityFeePerGas: execute.maxPriorityFeePerGas || BigInt(0),
165
+ nonce, deadline: execute.deadline || BigInt(9999999999),
166
+ vType: feeLockingRequired
167
+ ? tx_1.VerificationType.universalTxVerification
168
+ : tx_1.VerificationType.signedVerification,
169
+ }, helpers_1.bigintReplacer));
170
+ req = (0, payload_builder_1.buildUniversalTxRequest)(ctx.universalSigner.account.address, {
171
+ recipient: viem_1.zeroAddress, token: viem_1.zeroAddress, amount: BigInt(0),
172
+ payload: (0, signing_1.encodeUniversalPayload)(universalPayloadSelf),
173
+ });
174
+ }
175
+ }
176
+ const universalPayload = JSON.parse(JSON.stringify({
177
+ to: payloadTo, value: execute.value, data: payloadData,
178
+ gasLimit: execute.gasLimit || BigInt(5e7),
179
+ maxFeePerGas: execute.maxFeePerGas || BigInt(1e10),
180
+ maxPriorityFeePerGas: execute.maxPriorityFeePerGas || BigInt(0),
181
+ nonce, deadline: execute.deadline || BigInt(9999999999),
182
+ vType: feeLockingRequired
183
+ ? tx_1.VerificationType.universalTxVerification
184
+ : tx_1.VerificationType.signedVerification,
185
+ }, helpers_1.bigintReplacer));
186
+ // Prepare verification data by either signature or fund locking
187
+ let verificationData;
188
+ if (!feeLockingRequired) {
189
+ const ueaVersion = yield (0, uea_manager_1.fetchUEAVersion)(ctx);
190
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_04_02);
191
+ const signature = yield (0, signing_1.signUniversalPayload)(ctx, universalPayload, UEA, ueaVersion);
192
+ verificationData = (0, viem_1.bytesToHex)(signature);
193
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_04_03);
194
+ }
195
+ else {
196
+ // Fee Locking
197
+ const fundDifference = requiredFunds - funds;
198
+ const fixedPushAmount = utils_1.Utils.helpers.parseUnits('0.001', 18);
199
+ const lockAmount = funds < requiredFunds ? fundDifference : fixedPushAmount;
200
+ const lockAmountInUSD = ctx.pushClient.pushToUSDC(lockAmount);
201
+ const feeLockTxHashBytes = yield (0, gateway_client_1.lockFee)(ctx, lockAmountInUSD, universalPayload, req);
202
+ feeLockTxHash = (0, viem_1.bytesToHex)(feeLockTxHashBytes);
203
+ verificationData = (0, viem_1.bytesToHex)(feeLockTxHashBytes);
204
+ const { vm } = chain_1.CHAIN_INFO[chain];
205
+ const feeLockTxHashDisplay = vm === enums_1.VM.SVM
206
+ ? bs58_1.bs58.encode(Buffer.from(feeLockTxHashBytes))
207
+ : feeLockTxHash;
208
+ const originTx = yield (0, helpers_1.fetchOriginChainTransactionForProgress)(ctx, chain, feeLockTxHash, feeLockTxHashDisplay);
209
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_05_01, feeLockTxHashDisplay, originTx);
210
+ yield (0, confirmation_1.waitForLockerFeeConfirmation)(ctx, feeLockTxHashBytes);
211
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_05_02);
212
+ const { defaultRPC, lockerContract } = chain_1.CHAIN_INFO[chain];
213
+ const pushChainUniversalTx = yield (0, response_builder_1.queryUniversalTxStatusFromGatewayTx)(ctx, new evm_client_1.EvmClient({ rpcUrls: ctx.rpcUrls[chain] || defaultRPC }), lockerContract, feeLockTxHash, 'sendTxWithGas');
214
+ const response = yield (0, push_chain_tx_1.extractPcTxAndTransform)(ctx, pushChainUniversalTx, feeLockTxHash, eventBuffer, 'sendTxWithGas', transformFn);
215
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_99_01, [response]);
216
+ return response;
217
+ }
218
+ // Non-fee-locking path: Broadcasting Tx to PC via sendUniversalTx
219
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_07);
220
+ const transactions = yield (0, push_chain_tx_1.sendUniversalTx)(ctx, isUEADeployed, feeLockTxHash, universalPayload, verificationData, eventBuffer, transformFn);
221
+ (0, context_1.fireProgressHook)(ctx, progress_hook_types_1.PROGRESS_HOOK.SEND_TX_99_01, transactions);
222
+ return transactions[transactions.length - 1];
223
+ });
224
+ }
225
+ //# sourceMappingURL=execute-standard.js.map
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Gas fee queries, native amount calculations, ERC-20 allowance,
3
+ * and Uniswap V3 quoting — extracted from Orchestrator.
4
+ */
5
+ import { CHAIN } from '../../constants/enums';
6
+ import { ConversionQuote, MoveableToken, PayableToken } from '../../constants/tokens';
7
+ import { EvmClient } from '../../vm-client/evm-client';
8
+ import type { OrchestratorContext } from './context';
9
+ export declare function ensureErc20Allowance(ctx: OrchestratorContext, evmClient: EvmClient, tokenAddress: `0x${string}`, spender: `0x${string}`, requiredAmount: bigint): Promise<void>;
10
+ export declare function queryOutboundGasFee(ctx: OrchestratorContext, prc20Token: `0x${string}`, gasLimit: bigint): Promise<{
11
+ gasToken: `0x${string}`;
12
+ gasFee: bigint;
13
+ protocolFee: bigint;
14
+ nativeValueForGas: bigint;
15
+ gasPrice: bigint;
16
+ universalCoreAddress: `0x${string}`;
17
+ }>;
18
+ /**
19
+ * Estimate the native WPC amount needed to swap for `gasFee` of `gasToken`
20
+ * by reading the Uniswap V3 pool price on Push Chain.
21
+ * Returns the estimated amount with a 2x safety buffer (excess is refunded by the contract).
22
+ * Falls back to a percentage of accountBalance if any on-chain query fails.
23
+ */
24
+ export declare function estimateNativeValueForSwap(ctx: OrchestratorContext, universalCoreAddress: `0x${string}`, gasToken: `0x${string}`, gasFee: bigint, accountBalance: bigint): Promise<bigint>;
25
+ export declare function queryRescueGasFee(ctx: OrchestratorContext, prc20Token: `0x${string}`): Promise<{
26
+ gasToken: `0x${string}`;
27
+ gasFee: bigint;
28
+ rescueGasLimit: bigint;
29
+ gasPrice: bigint;
30
+ nativeValueForGas: bigint;
31
+ }>;
32
+ export declare function calculateNativeAmountForDeposit(ctx: OrchestratorContext, chain: CHAIN, requiredFunds: bigint, ueaBalance: bigint): Promise<bigint>;
33
+ export declare function calculateGasAmountFromAmountOutMinETH(ctx: OrchestratorContext, gasTokenAddress: `0x${string}`, amountOutMinETH: bigint | string, quoteExactOutputFn: (amountOut: bigint, opts: {
34
+ from: PayableToken | undefined;
35
+ to: MoveableToken | undefined;
36
+ }) => Promise<ConversionQuote>): Promise<{
37
+ gasAmount: bigint;
38
+ }>;