@lifi/sdk 3.3.1 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -4
- package/src/_cjs/config.js +6 -5
- package/src/_cjs/config.js.map +1 -1
- package/src/_cjs/core/Solana/SolanaStepExecutor.js +12 -47
- package/src/_cjs/core/Solana/SolanaStepExecutor.js.map +1 -1
- package/src/_cjs/core/Solana/connection.js +30 -9
- package/src/_cjs/core/Solana/connection.js.map +1 -1
- package/src/_cjs/core/Solana/getSolanaBalance.js +5 -5
- package/src/_cjs/core/Solana/getSolanaBalance.js.map +1 -1
- package/src/_cjs/core/Solana/sendAndConfirmTransaction.js +68 -0
- package/src/_cjs/core/Solana/sendAndConfirmTransaction.js.map +1 -0
- package/src/_cjs/utils/withDedupe.js.map +1 -1
- package/src/_cjs/version.js +1 -1
- package/src/_esm/config.js +6 -5
- package/src/_esm/config.js.map +1 -1
- package/src/_esm/core/Solana/SolanaStepExecutor.js +14 -65
- package/src/_esm/core/Solana/SolanaStepExecutor.js.map +1 -1
- package/src/_esm/core/Solana/connection.js +40 -10
- package/src/_esm/core/Solana/connection.js.map +1 -1
- package/src/_esm/core/Solana/getSolanaBalance.js +6 -6
- package/src/_esm/core/Solana/getSolanaBalance.js.map +1 -1
- package/src/_esm/core/Solana/sendAndConfirmTransaction.js +76 -0
- package/src/_esm/core/Solana/sendAndConfirmTransaction.js.map +1 -0
- package/src/_esm/utils/withDedupe.js.map +1 -1
- package/src/_esm/version.js +1 -1
- package/src/_types/config.d.ts +2 -2
- package/src/_types/config.d.ts.map +1 -1
- package/src/_types/core/Solana/SolanaStepExecutor.d.ts.map +1 -1
- package/src/_types/core/Solana/connection.d.ts +14 -3
- package/src/_types/core/Solana/connection.d.ts.map +1 -1
- package/src/_types/core/Solana/getSolanaBalance.d.ts.map +1 -1
- package/src/_types/core/Solana/sendAndConfirmTransaction.d.ts +13 -0
- package/src/_types/core/Solana/sendAndConfirmTransaction.d.ts.map +1 -0
- package/src/_types/utils/withDedupe.d.ts +1 -1
- package/src/_types/utils/withDedupe.d.ts.map +1 -1
- package/src/_types/version.d.ts +1 -1
- package/src/config.ts +6 -6
- package/src/core/Solana/SolanaStepExecutor.ts +15 -86
- package/src/core/Solana/connection.ts +43 -10
- package/src/core/Solana/getSolanaBalance.ts +27 -7
- package/src/core/Solana/sendAndConfirmTransaction.ts +111 -0
- package/src/utils/withDedupe.ts +3 -3
- package/src/version.ts +1 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"dependencies": {
|
|
3
|
-
"@bigmi/core": "^0.0.
|
|
4
|
-
"@lifi/types": "^16.
|
|
3
|
+
"@bigmi/core": "^0.0.4",
|
|
4
|
+
"@lifi/types": "^16.1.0",
|
|
5
5
|
"@noble/curves": "^1.6.0",
|
|
6
6
|
"@noble/hashes": "^1.5.0",
|
|
7
7
|
"@solana/wallet-adapter-base": "^0.9.23",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"bech32": "^2.0.0",
|
|
10
10
|
"bitcoinjs-lib": "^7.0.0-rc.0",
|
|
11
11
|
"bs58": "^6.0.0",
|
|
12
|
-
"viem": "^2.21.
|
|
12
|
+
"viem": "^2.21.35"
|
|
13
13
|
},
|
|
14
14
|
"description": "LI.FI Any-to-Any Cross-Chain-Swap SDK",
|
|
15
15
|
"exports": {
|
|
@@ -65,5 +65,5 @@
|
|
|
65
65
|
"sideEffects": false,
|
|
66
66
|
"types": "./src/_types/index.d.ts",
|
|
67
67
|
"typings": "./src/_types/index.d.ts",
|
|
68
|
-
"version": "3.
|
|
68
|
+
"version": "3.4.0"
|
|
69
69
|
}
|
package/src/_cjs/config.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.config = void 0;
|
|
4
|
+
const types_1 = require("@lifi/types");
|
|
4
5
|
exports.config = (() => {
|
|
5
6
|
const _config = {
|
|
6
7
|
integrator: 'lifi-sdk',
|
|
@@ -47,7 +48,7 @@ exports.config = (() => {
|
|
|
47
48
|
}
|
|
48
49
|
return rpcUrls;
|
|
49
50
|
}, {});
|
|
50
|
-
this.setRPCUrls(rpcUrls);
|
|
51
|
+
this.setRPCUrls(rpcUrls, [types_1.ChainId.SOL]);
|
|
51
52
|
_config.chains = chains;
|
|
52
53
|
_loading = undefined;
|
|
53
54
|
},
|
|
@@ -67,9 +68,9 @@ exports.config = (() => {
|
|
|
67
68
|
}
|
|
68
69
|
return chain;
|
|
69
70
|
},
|
|
70
|
-
setRPCUrls(rpcUrls) {
|
|
71
|
+
setRPCUrls(rpcUrls, skipChains) {
|
|
71
72
|
for (const rpcUrlsKey in rpcUrls) {
|
|
72
|
-
const chainId = rpcUrlsKey;
|
|
73
|
+
const chainId = Number(rpcUrlsKey);
|
|
73
74
|
const urls = rpcUrls[chainId];
|
|
74
75
|
if (!urls?.length) {
|
|
75
76
|
continue;
|
|
@@ -77,9 +78,9 @@ exports.config = (() => {
|
|
|
77
78
|
if (!_config.rpcUrls[chainId]?.length) {
|
|
78
79
|
_config.rpcUrls[chainId] = Array.from(urls);
|
|
79
80
|
}
|
|
80
|
-
else {
|
|
81
|
+
else if (!skipChains?.includes(chainId)) {
|
|
81
82
|
const filteredUrls = urls.filter((url) => !_config.rpcUrls[chainId]?.includes(url));
|
|
82
|
-
_config.rpcUrls[chainId]
|
|
83
|
+
_config.rpcUrls[chainId].push(...filteredUrls);
|
|
83
84
|
}
|
|
84
85
|
}
|
|
85
86
|
},
|
package/src/_cjs/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SolanaStepExecutor = void 0;
|
|
4
4
|
const web3_js_1 = require("@solana/web3.js");
|
|
5
|
-
const bs58_1 = require("bs58");
|
|
6
5
|
const viem_1 = require("viem");
|
|
7
6
|
const config_js_1 = require("../../config.js");
|
|
8
7
|
const constants_js_1 = require("../../errors/constants.js");
|
|
@@ -10,7 +9,6 @@ const errors_js_1 = require("../../errors/errors.js");
|
|
|
10
9
|
const api_js_1 = require("../../services/api.js");
|
|
11
10
|
const base64ToUint8Array_js_1 = require("../../utils/base64ToUint8Array.js");
|
|
12
11
|
const getTransactionMessage_js_1 = require("../../utils/getTransactionMessage.js");
|
|
13
|
-
const sleep_js_1 = require("../../utils/sleep.js");
|
|
14
12
|
const BaseStepExecutor_js_1 = require("../BaseStepExecutor.js");
|
|
15
13
|
const checkBalance_js_1 = require("../checkBalance.js");
|
|
16
14
|
const processMessages_js_1 = require("../processMessages.js");
|
|
@@ -18,6 +16,7 @@ const stepComparison_js_1 = require("../stepComparison.js");
|
|
|
18
16
|
const waitForReceivingTransaction_js_1 = require("../waitForReceivingTransaction.js");
|
|
19
17
|
const connection_js_1 = require("./connection.js");
|
|
20
18
|
const parseSolanaErrors_js_1 = require("./parseSolanaErrors.js");
|
|
19
|
+
const sendAndConfirmTransaction_js_1 = require("./sendAndConfirmTransaction.js");
|
|
21
20
|
class SolanaStepExecutor extends BaseStepExecutor_js_1.BaseStepExecutor {
|
|
22
21
|
constructor(options) {
|
|
23
22
|
super(options);
|
|
@@ -53,7 +52,6 @@ class SolanaStepExecutor extends BaseStepExecutor_js_1.BaseStepExecutor {
|
|
|
53
52
|
});
|
|
54
53
|
if (process.status !== 'DONE') {
|
|
55
54
|
try {
|
|
56
|
-
const connection = await (0, connection_js_1.getSolanaConnection)();
|
|
57
55
|
process = this.statusManager.updateProcess(step, process.type, 'STARTED');
|
|
58
56
|
await (0, checkBalance_js_1.checkBalance)(this.walletAdapter.publicKey.toString(), step);
|
|
59
57
|
if (!step.transactionRequest) {
|
|
@@ -75,9 +73,6 @@ class SolanaStepExecutor extends BaseStepExecutor_js_1.BaseStepExecutor {
|
|
|
75
73
|
let transactionRequest = {
|
|
76
74
|
data: step.transactionRequest.data,
|
|
77
75
|
};
|
|
78
|
-
const blockhashResult = await connection.getLatestBlockhash({
|
|
79
|
-
commitment: 'confirmed',
|
|
80
|
-
});
|
|
81
76
|
if (this.executionOptions?.updateTransactionRequestHook) {
|
|
82
77
|
const customizedTransactionRequest = await this.executionOptions.updateTransactionRequestHook({
|
|
83
78
|
requestType: 'transaction',
|
|
@@ -98,56 +93,26 @@ class SolanaStepExecutor extends BaseStepExecutor_js_1.BaseStepExecutor {
|
|
|
98
93
|
errorInstance: new errors_js_1.TransactionError(constants_js_1.LiFiErrorCode.TransactionExpired, 'Transaction has expired: blockhash is no longer recent enough.'),
|
|
99
94
|
});
|
|
100
95
|
process = this.statusManager.updateProcess(step, process.type, 'PENDING');
|
|
101
|
-
const simulationResult = await connection.simulateTransaction(signedTx, {
|
|
102
|
-
commitment: '
|
|
96
|
+
const simulationResult = await (0, connection_js_1.callSolanaWithRetry)((connection) => connection.simulateTransaction(signedTx, {
|
|
97
|
+
commitment: 'confirmed',
|
|
103
98
|
replaceRecentBlockhash: true,
|
|
104
|
-
});
|
|
99
|
+
}));
|
|
105
100
|
if (simulationResult.value.err) {
|
|
106
101
|
throw new errors_js_1.TransactionError(constants_js_1.LiFiErrorCode.TransactionSimulationFailed, 'Transaction simulation failed');
|
|
107
102
|
}
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
const abortController = new AbortController();
|
|
111
|
-
const confirmTransactionPromise = connection
|
|
112
|
-
.confirmTransaction({
|
|
113
|
-
signature: txSignature,
|
|
114
|
-
blockhash: blockhashResult.blockhash,
|
|
115
|
-
lastValidBlockHeight: lastValidBlockHeight,
|
|
116
|
-
abortSignal: abortController.signal,
|
|
117
|
-
}, 'confirmed')
|
|
118
|
-
.then((result) => result.value);
|
|
119
|
-
let confirmedTx = null;
|
|
120
|
-
let blockHeight = await connection.getBlockHeight();
|
|
121
|
-
const rawTransactionOptions = {
|
|
122
|
-
skipPreflight: true,
|
|
123
|
-
maxRetries: 0,
|
|
124
|
-
preflightCommitment: 'confirmed',
|
|
125
|
-
};
|
|
126
|
-
const signedTxSerialized = signedTx.serialize();
|
|
127
|
-
while (!confirmedTx && blockHeight < lastValidBlockHeight) {
|
|
128
|
-
await connection.sendRawTransaction(signedTxSerialized, rawTransactionOptions);
|
|
129
|
-
confirmedTx = await Promise.race([
|
|
130
|
-
confirmTransactionPromise,
|
|
131
|
-
(0, sleep_js_1.sleep)(1000),
|
|
132
|
-
]);
|
|
133
|
-
if (confirmedTx) {
|
|
134
|
-
break;
|
|
135
|
-
}
|
|
136
|
-
blockHeight = await connection.getBlockHeight();
|
|
137
|
-
}
|
|
138
|
-
abortController.abort();
|
|
139
|
-
if (!confirmedTx) {
|
|
103
|
+
const confirmedTx = await (0, sendAndConfirmTransaction_js_1.sendAndConfirmTransaction)(signedTx);
|
|
104
|
+
if (!confirmedTx.signatureResult) {
|
|
140
105
|
throw new errors_js_1.TransactionError(constants_js_1.LiFiErrorCode.TransactionExpired, 'Transaction has expired: The block height has exceeded the maximum allowed limit.');
|
|
141
106
|
}
|
|
142
|
-
if (confirmedTx
|
|
143
|
-
const reason = typeof confirmedTx.err === 'object'
|
|
144
|
-
? JSON.stringify(confirmedTx.err)
|
|
145
|
-
: confirmedTx.err;
|
|
107
|
+
if (confirmedTx.signatureResult.err) {
|
|
108
|
+
const reason = typeof confirmedTx.signatureResult.err === 'object'
|
|
109
|
+
? JSON.stringify(confirmedTx.signatureResult.err)
|
|
110
|
+
: confirmedTx.signatureResult.err;
|
|
146
111
|
throw new errors_js_1.TransactionError(constants_js_1.LiFiErrorCode.TransactionFailed, `Transaction failed: ${reason}`);
|
|
147
112
|
}
|
|
148
113
|
process = this.statusManager.updateProcess(step, process.type, 'PENDING', {
|
|
149
|
-
txHash: txSignature,
|
|
150
|
-
txLink: `${fromChain.metamask.blockExplorerUrls[0]}tx/${txSignature}`,
|
|
114
|
+
txHash: confirmedTx.txSignature,
|
|
115
|
+
txLink: `${fromChain.metamask.blockExplorerUrls[0]}tx/${confirmedTx.txSignature}`,
|
|
151
116
|
});
|
|
152
117
|
if (isBridgeExecution) {
|
|
153
118
|
process = this.statusManager.updateProcess(step, process.type, 'DONE');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolanaStepExecutor.js","sourceRoot":"","sources":["../../../core/Solana/SolanaStepExecutor.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"file":"SolanaStepExecutor.js","sourceRoot":"","sources":["../../../core/Solana/SolanaStepExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getSolanaConnections = exports.ensureConnections = void 0;
|
|
4
|
+
exports.callSolanaWithRetry = callSolanaWithRetry;
|
|
4
5
|
const types_1 = require("@lifi/types");
|
|
5
6
|
const web3_js_1 = require("@solana/web3.js");
|
|
6
7
|
const rpc_js_1 = require("../rpc.js");
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
const connections = new Map();
|
|
9
|
+
const ensureConnections = async () => {
|
|
10
|
+
const rpcUrls = await (0, rpc_js_1.getRpcUrls)(types_1.ChainId.SOL);
|
|
11
|
+
for (const rpcUrl of rpcUrls) {
|
|
12
|
+
if (!connections.get(rpcUrl)) {
|
|
13
|
+
const connection = new web3_js_1.Connection(rpcUrl);
|
|
14
|
+
connections.set(rpcUrl, connection);
|
|
15
|
+
}
|
|
13
16
|
}
|
|
14
|
-
return connection;
|
|
15
17
|
};
|
|
16
|
-
exports.
|
|
18
|
+
exports.ensureConnections = ensureConnections;
|
|
19
|
+
const getSolanaConnections = async () => {
|
|
20
|
+
await (0, exports.ensureConnections)();
|
|
21
|
+
return Array.from(connections.values());
|
|
22
|
+
};
|
|
23
|
+
exports.getSolanaConnections = getSolanaConnections;
|
|
24
|
+
async function callSolanaWithRetry(fn) {
|
|
25
|
+
await (0, exports.ensureConnections)();
|
|
26
|
+
let lastError = null;
|
|
27
|
+
for (const connection of connections.values()) {
|
|
28
|
+
try {
|
|
29
|
+
const result = await fn(connection);
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
lastError = error;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
throw lastError;
|
|
37
|
+
}
|
|
17
38
|
//# sourceMappingURL=connection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../core/Solana/connection.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../core/Solana/connection.ts"],"names":[],"mappings":";;;AAkCA,kDAgBC;AAlDD,uCAAqC;AACrC,6CAA4C;AAC5C,sCAAsC;AAEtC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAA;AAM1C,MAAM,iBAAiB,GAAG,KAAK,IAAmB,EAAE;IACzD,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAU,EAAC,eAAO,CAAC,GAAG,CAAC,CAAA;IAC7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,IAAI,oBAAU,CAAC,MAAM,CAAC,CAAA;YACzC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AARY,QAAA,iBAAiB,qBAQ7B;AAMM,MAAM,oBAAoB,GAAG,KAAK,IAA2B,EAAE;IACpE,MAAM,IAAA,yBAAiB,GAAE,CAAA;IACzB,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;AACzC,CAAC,CAAA;AAHY,QAAA,oBAAoB,wBAGhC;AAOM,KAAK,UAAU,mBAAmB,CACvC,EAA0C;IAG1C,MAAM,IAAA,yBAAiB,GAAE,CAAA;IACzB,IAAI,SAAS,GAAQ,IAAI,CAAA;IACzB,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,CAAA;YACnC,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAA;QACnB,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAA;AACjB,CAAC"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getSolanaBalance = void 0;
|
|
4
4
|
const web3_js_1 = require("@solana/web3.js");
|
|
5
5
|
const constants_js_1 = require("../../constants.js");
|
|
6
|
+
const withDedupe_js_1 = require("../../utils/withDedupe.js");
|
|
6
7
|
const connection_js_1 = require("./connection.js");
|
|
7
8
|
const types_js_1 = require("./types.js");
|
|
8
9
|
const getSolanaBalance = async (walletAddress, tokens) => {
|
|
@@ -19,15 +20,14 @@ const getSolanaBalance = async (walletAddress, tokens) => {
|
|
|
19
20
|
};
|
|
20
21
|
exports.getSolanaBalance = getSolanaBalance;
|
|
21
22
|
const getSolanaBalanceDefault = async (_chainId, tokens, walletAddress) => {
|
|
22
|
-
const connection = await (0, connection_js_1.getSolanaConnection)();
|
|
23
23
|
const accountPublicKey = new web3_js_1.PublicKey(walletAddress);
|
|
24
24
|
const tokenProgramPublicKey = new web3_js_1.PublicKey(types_js_1.TokenProgramAddress);
|
|
25
25
|
const [slot, balance, tokenAccountsByOwner] = await Promise.allSettled([
|
|
26
|
-
connection.getSlot(),
|
|
27
|
-
connection.getBalance(accountPublicKey),
|
|
28
|
-
connection.getParsedTokenAccountsByOwner(accountPublicKey, {
|
|
26
|
+
(0, withDedupe_js_1.withDedupe)(() => (0, connection_js_1.callSolanaWithRetry)((connection) => connection.getSlot('confirmed')), { id: `${getSolanaBalanceDefault.name}.getSlot` }),
|
|
27
|
+
(0, withDedupe_js_1.withDedupe)(() => (0, connection_js_1.callSolanaWithRetry)((connection) => connection.getBalance(accountPublicKey, 'confirmed')), { id: `${getSolanaBalanceDefault.name}.getBalance` }),
|
|
28
|
+
(0, withDedupe_js_1.withDedupe)(() => (0, connection_js_1.callSolanaWithRetry)((connection) => connection.getParsedTokenAccountsByOwner(accountPublicKey, {
|
|
29
29
|
programId: tokenProgramPublicKey,
|
|
30
|
-
}),
|
|
30
|
+
}, 'confirmed')), { id: `${getSolanaBalanceDefault.name}.getParsedTokenAccountsByOwner` }),
|
|
31
31
|
]);
|
|
32
32
|
const blockNumber = slot.status === 'fulfilled' ? BigInt(slot.value) : 0n;
|
|
33
33
|
const solBalance = balance.status === 'fulfilled' ? BigInt(balance.value) : 0n;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSolanaBalance.js","sourceRoot":"","sources":["../../../core/Solana/getSolanaBalance.ts"],"names":[],"mappings":";;;AACA,6CAA2C;AAC3C,qDAAqD;AACrD,mDAAqD;AACrD,yCAAgD;AAEzC,MAAM,gBAAgB,GAAG,KAAK,EACnC,aAAqB,EACrB,MAAe,EACS,EAAE;IAC1B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;QAChE,CAAC;IACH,CAAC;IAED,OAAO,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAA;AAChE,CAAC,CAAA;AAfY,QAAA,gBAAgB,oBAe5B;AAED,MAAM,uBAAuB,GAAG,KAAK,EACnC,QAAiB,EACjB,MAAe,EACf,aAAqB,EACG,EAAE;IAC1B,MAAM,
|
|
1
|
+
{"version":3,"file":"getSolanaBalance.js","sourceRoot":"","sources":["../../../core/Solana/getSolanaBalance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendAndConfirmTransaction = sendAndConfirmTransaction;
|
|
4
|
+
const bs58_1 = require("bs58");
|
|
5
|
+
const sleep_js_1 = require("../../utils/sleep.js");
|
|
6
|
+
const connection_js_1 = require("./connection.js");
|
|
7
|
+
async function sendAndConfirmTransaction(signedTx) {
|
|
8
|
+
const connections = await (0, connection_js_1.getSolanaConnections)();
|
|
9
|
+
const signedTxSerialized = signedTx.serialize();
|
|
10
|
+
const txSignature = bs58_1.default.encode(signedTx.signatures[0]);
|
|
11
|
+
if (!txSignature) {
|
|
12
|
+
throw new Error('Transaction signature is missing.');
|
|
13
|
+
}
|
|
14
|
+
const rawTransactionOptions = {
|
|
15
|
+
skipPreflight: true,
|
|
16
|
+
maxRetries: 0,
|
|
17
|
+
preflightCommitment: 'confirmed',
|
|
18
|
+
};
|
|
19
|
+
for (const connection of connections) {
|
|
20
|
+
connection
|
|
21
|
+
.sendRawTransaction(signedTxSerialized, rawTransactionOptions)
|
|
22
|
+
.catch();
|
|
23
|
+
}
|
|
24
|
+
const abortControllers = [];
|
|
25
|
+
const confirmPromises = connections.map(async (connection) => {
|
|
26
|
+
const abortController = new AbortController();
|
|
27
|
+
abortControllers.push(abortController);
|
|
28
|
+
try {
|
|
29
|
+
const blockhashResult = await connection.getLatestBlockhash('confirmed');
|
|
30
|
+
const confirmTransactionPromise = connection
|
|
31
|
+
.confirmTransaction({
|
|
32
|
+
signature: txSignature,
|
|
33
|
+
blockhash: blockhashResult.blockhash,
|
|
34
|
+
lastValidBlockHeight: blockhashResult.lastValidBlockHeight,
|
|
35
|
+
abortSignal: abortController.signal,
|
|
36
|
+
}, 'confirmed')
|
|
37
|
+
.then((result) => result.value);
|
|
38
|
+
let signatureResult = null;
|
|
39
|
+
let blockHeight = await connection.getBlockHeight('confirmed');
|
|
40
|
+
while (!signatureResult &&
|
|
41
|
+
blockHeight < blockhashResult.lastValidBlockHeight) {
|
|
42
|
+
await connection.sendRawTransaction(signedTxSerialized, rawTransactionOptions);
|
|
43
|
+
signatureResult = await Promise.race([
|
|
44
|
+
confirmTransactionPromise,
|
|
45
|
+
(0, sleep_js_1.sleep)(1000),
|
|
46
|
+
]);
|
|
47
|
+
if (signatureResult || abortController.signal.aborted) {
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
blockHeight = await connection.getBlockHeight('confirmed');
|
|
51
|
+
}
|
|
52
|
+
abortController.abort();
|
|
53
|
+
return signatureResult;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
if (abortController.signal.aborted) {
|
|
57
|
+
return Promise.reject(new Error('Confirmation aborted.'));
|
|
58
|
+
}
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
const signatureResult = await Promise.any(confirmPromises).catch(() => null);
|
|
63
|
+
for (const abortController of abortControllers) {
|
|
64
|
+
abortController.abort();
|
|
65
|
+
}
|
|
66
|
+
return { signatureResult, txSignature };
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=sendAndConfirmTransaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendAndConfirmTransaction.js","sourceRoot":"","sources":["../../../core/Solana/sendAndConfirmTransaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withDedupe.js","sourceRoot":"","sources":["../../utils/withDedupe.ts"],"names":[],"mappings":";;;AA+BA,gCAaC;AAvCD,MAAa,MAAwB,SAAQ,GAAkB;IAG7D,YAAY,IAAY;QACtB,KAAK,EAAE,CAAA;QAHT;;;;;WAAe;QAIb,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACrB,CAAC;IAEQ,GAAG,CAAC,GAAW,EAAE,KAAY;QACpC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACrB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAfD,wBAeC;AAGY,QAAA,YAAY,GAAiB,IAAI,MAAM,CAAe,IAAI,CAAC,CAAA;AAQxE,SAAgB,UAAU,CACxB,
|
|
1
|
+
{"version":3,"file":"withDedupe.js","sourceRoot":"","sources":["../../utils/withDedupe.ts"],"names":[],"mappings":";;;AA+BA,gCAaC;AAvCD,MAAa,MAAwB,SAAQ,GAAkB;IAG7D,YAAY,IAAY;QACtB,KAAK,EAAE,CAAA;QAHT;;;;;WAAe;QAIb,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACrB,CAAC;IAEQ,GAAG,CAAC,GAAW,EAAE,KAAY;QACpC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACrB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAfD,wBAeC;AAGY,QAAA,YAAY,GAAiB,IAAI,MAAM,CAAe,IAAI,CAAC,CAAA;AAQxE,SAAgB,UAAU,CACxB,EAAoB,EACpB,EAAE,OAAO,GAAG,IAAI,EAAE,EAAE,EAAqB;IAEzC,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC;QACpB,OAAO,EAAE,EAAE,CAAA;IACb,CAAC;IACD,IAAI,oBAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACzB,OAAO,oBAAY,CAAC,GAAG,CAAC,EAAE,CAAE,CAAA;IAC9B,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,oBAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3D,oBAAY,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAC7B,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
package/src/_cjs/version.js
CHANGED
package/src/_esm/config.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ChainId } from '@lifi/types';
|
|
1
2
|
export const config = (() => {
|
|
2
3
|
const _config = {
|
|
3
4
|
integrator: 'lifi-sdk',
|
|
@@ -44,7 +45,7 @@ export const config = (() => {
|
|
|
44
45
|
}
|
|
45
46
|
return rpcUrls;
|
|
46
47
|
}, {});
|
|
47
|
-
this.setRPCUrls(rpcUrls);
|
|
48
|
+
this.setRPCUrls(rpcUrls, [ChainId.SOL]);
|
|
48
49
|
_config.chains = chains;
|
|
49
50
|
_loading = undefined;
|
|
50
51
|
},
|
|
@@ -64,9 +65,9 @@ export const config = (() => {
|
|
|
64
65
|
}
|
|
65
66
|
return chain;
|
|
66
67
|
},
|
|
67
|
-
setRPCUrls(rpcUrls) {
|
|
68
|
+
setRPCUrls(rpcUrls, skipChains) {
|
|
68
69
|
for (const rpcUrlsKey in rpcUrls) {
|
|
69
|
-
const chainId = rpcUrlsKey;
|
|
70
|
+
const chainId = Number(rpcUrlsKey);
|
|
70
71
|
const urls = rpcUrls[chainId];
|
|
71
72
|
if (!urls?.length) {
|
|
72
73
|
continue;
|
|
@@ -74,9 +75,9 @@ export const config = (() => {
|
|
|
74
75
|
if (!_config.rpcUrls[chainId]?.length) {
|
|
75
76
|
_config.rpcUrls[chainId] = Array.from(urls);
|
|
76
77
|
}
|
|
77
|
-
else {
|
|
78
|
+
else if (!skipChains?.includes(chainId)) {
|
|
78
79
|
const filteredUrls = urls.filter((url) => !_config.rpcUrls[chainId]?.includes(url));
|
|
79
|
-
_config.rpcUrls[chainId]
|
|
80
|
+
_config.rpcUrls[chainId].push(...filteredUrls);
|
|
80
81
|
}
|
|
81
82
|
}
|
|
82
83
|
},
|
package/src/_esm/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { VersionedTransaction
|
|
2
|
-
import bs58 from 'bs58';
|
|
1
|
+
import { VersionedTransaction } from '@solana/web3.js';
|
|
3
2
|
import { withTimeout } from 'viem';
|
|
4
3
|
import { config } from '../../config.js';
|
|
5
4
|
import { LiFiErrorCode } from '../../errors/constants.js';
|
|
@@ -7,14 +6,14 @@ import { TransactionError } from '../../errors/errors.js';
|
|
|
7
6
|
import { getStepTransaction } from '../../services/api.js';
|
|
8
7
|
import { base64ToUint8Array } from '../../utils/base64ToUint8Array.js';
|
|
9
8
|
import { getTransactionFailedMessage } from '../../utils/getTransactionMessage.js';
|
|
10
|
-
import { sleep } from '../../utils/sleep.js';
|
|
11
9
|
import { BaseStepExecutor } from '../BaseStepExecutor.js';
|
|
12
10
|
import { checkBalance } from '../checkBalance.js';
|
|
13
11
|
import { getSubstatusMessage } from '../processMessages.js';
|
|
14
12
|
import { stepComparison } from '../stepComparison.js';
|
|
15
13
|
import { waitForReceivingTransaction } from '../waitForReceivingTransaction.js';
|
|
16
|
-
import {
|
|
14
|
+
import { callSolanaWithRetry } from './connection.js';
|
|
17
15
|
import { parseSolanaErrors } from './parseSolanaErrors.js';
|
|
16
|
+
import { sendAndConfirmTransaction } from './sendAndConfirmTransaction.js';
|
|
18
17
|
export class SolanaStepExecutor extends BaseStepExecutor {
|
|
19
18
|
constructor(options) {
|
|
20
19
|
super(options);
|
|
@@ -52,7 +51,6 @@ export class SolanaStepExecutor extends BaseStepExecutor {
|
|
|
52
51
|
});
|
|
53
52
|
if (process.status !== 'DONE') {
|
|
54
53
|
try {
|
|
55
|
-
const connection = await getSolanaConnection();
|
|
56
54
|
process = this.statusManager.updateProcess(step, process.type, 'STARTED');
|
|
57
55
|
// Check balance
|
|
58
56
|
await checkBalance(this.walletAdapter.publicKey.toString(), step);
|
|
@@ -76,9 +74,6 @@ export class SolanaStepExecutor extends BaseStepExecutor {
|
|
|
76
74
|
let transactionRequest = {
|
|
77
75
|
data: step.transactionRequest.data,
|
|
78
76
|
};
|
|
79
|
-
const blockhashResult = await connection.getLatestBlockhash({
|
|
80
|
-
commitment: 'confirmed',
|
|
81
|
-
});
|
|
82
77
|
if (this.executionOptions?.updateTransactionRequestHook) {
|
|
83
78
|
const customizedTransactionRequest = await this.executionOptions.updateTransactionRequestHook({
|
|
84
79
|
requestType: 'transaction',
|
|
@@ -102,73 +97,27 @@ export class SolanaStepExecutor extends BaseStepExecutor {
|
|
|
102
97
|
errorInstance: new TransactionError(LiFiErrorCode.TransactionExpired, 'Transaction has expired: blockhash is no longer recent enough.'),
|
|
103
98
|
});
|
|
104
99
|
process = this.statusManager.updateProcess(step, process.type, 'PENDING');
|
|
105
|
-
const simulationResult = await connection.simulateTransaction(signedTx, {
|
|
106
|
-
commitment: '
|
|
100
|
+
const simulationResult = await callSolanaWithRetry((connection) => connection.simulateTransaction(signedTx, {
|
|
101
|
+
commitment: 'confirmed',
|
|
107
102
|
replaceRecentBlockhash: true,
|
|
108
|
-
});
|
|
103
|
+
}));
|
|
109
104
|
if (simulationResult.value.err) {
|
|
110
105
|
throw new TransactionError(LiFiErrorCode.TransactionSimulationFailed, 'Transaction simulation failed');
|
|
111
106
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
// A known weirdness - MAX_RECENT_BLOCKHASHES is 300
|
|
115
|
-
// https://github.com/solana-labs/solana/blob/master/sdk/program/src/clock.rs#L123
|
|
116
|
-
// but MAX_PROCESSING_AGE is 150
|
|
117
|
-
// https://github.com/solana-labs/solana/blob/master/sdk/program/src/clock.rs#L129
|
|
118
|
-
// the blockhash queue in the bank tells you 300 + current slot, but it won't be accepted 150 blocks later.
|
|
119
|
-
// https://solana.com/docs/advanced/confirmation#transaction-expiration
|
|
120
|
-
const lastValidBlockHeight = blockhashResult.lastValidBlockHeight - 150;
|
|
121
|
-
// In the following section, we wait and constantly check for the transaction to be confirmed
|
|
122
|
-
// and resend the transaction if it is not confirmed within a certain time interval
|
|
123
|
-
// thus handling tx retries on the client side rather than relying on the RPC
|
|
124
|
-
const abortController = new AbortController();
|
|
125
|
-
const confirmTransactionPromise = connection
|
|
126
|
-
.confirmTransaction({
|
|
127
|
-
signature: txSignature,
|
|
128
|
-
blockhash: blockhashResult.blockhash,
|
|
129
|
-
lastValidBlockHeight: lastValidBlockHeight,
|
|
130
|
-
abortSignal: abortController.signal,
|
|
131
|
-
}, 'confirmed')
|
|
132
|
-
.then((result) => result.value);
|
|
133
|
-
let confirmedTx = null;
|
|
134
|
-
let blockHeight = await connection.getBlockHeight();
|
|
135
|
-
const rawTransactionOptions = {
|
|
136
|
-
// We can skip preflight check after the first transaction has been sent
|
|
137
|
-
// https://solana.com/docs/advanced/retry#the-cost-of-skipping-preflight
|
|
138
|
-
skipPreflight: true,
|
|
139
|
-
// Setting max retries to 0 as we are handling retries manually
|
|
140
|
-
maxRetries: 0,
|
|
141
|
-
// https://solana.com/docs/advanced/confirmation#use-an-appropriate-preflight-commitment-level
|
|
142
|
-
preflightCommitment: 'confirmed',
|
|
143
|
-
};
|
|
144
|
-
const signedTxSerialized = signedTx.serialize();
|
|
145
|
-
// https://solana.com/docs/advanced/retry#customizing-rebroadcast-logic
|
|
146
|
-
while (!confirmedTx && blockHeight < lastValidBlockHeight) {
|
|
147
|
-
await connection.sendRawTransaction(signedTxSerialized, rawTransactionOptions);
|
|
148
|
-
confirmedTx = await Promise.race([
|
|
149
|
-
confirmTransactionPromise,
|
|
150
|
-
sleep(1000),
|
|
151
|
-
]);
|
|
152
|
-
if (confirmedTx) {
|
|
153
|
-
break;
|
|
154
|
-
}
|
|
155
|
-
blockHeight = await connection.getBlockHeight();
|
|
156
|
-
}
|
|
157
|
-
// Stop waiting for tx confirmation
|
|
158
|
-
abortController.abort();
|
|
159
|
-
if (!confirmedTx) {
|
|
107
|
+
const confirmedTx = await sendAndConfirmTransaction(signedTx);
|
|
108
|
+
if (!confirmedTx.signatureResult) {
|
|
160
109
|
throw new TransactionError(LiFiErrorCode.TransactionExpired, 'Transaction has expired: The block height has exceeded the maximum allowed limit.');
|
|
161
110
|
}
|
|
162
|
-
if (confirmedTx
|
|
163
|
-
const reason = typeof confirmedTx.err === 'object'
|
|
164
|
-
? JSON.stringify(confirmedTx.err)
|
|
165
|
-
: confirmedTx.err;
|
|
111
|
+
if (confirmedTx.signatureResult.err) {
|
|
112
|
+
const reason = typeof confirmedTx.signatureResult.err === 'object'
|
|
113
|
+
? JSON.stringify(confirmedTx.signatureResult.err)
|
|
114
|
+
: confirmedTx.signatureResult.err;
|
|
166
115
|
throw new TransactionError(LiFiErrorCode.TransactionFailed, `Transaction failed: ${reason}`);
|
|
167
116
|
}
|
|
168
117
|
// Transaction has been confirmed and we can update the process
|
|
169
118
|
process = this.statusManager.updateProcess(step, process.type, 'PENDING', {
|
|
170
|
-
txHash: txSignature,
|
|
171
|
-
txLink: `${fromChain.metamask.blockExplorerUrls[0]}tx/${txSignature}`,
|
|
119
|
+
txHash: confirmedTx.txSignature,
|
|
120
|
+
txLink: `${fromChain.metamask.blockExplorerUrls[0]}tx/${confirmedTx.txSignature}`,
|
|
172
121
|
});
|
|
173
122
|
if (isBridgeExecution) {
|
|
174
123
|
process = this.statusManager.updateProcess(step, process.type, 'DONE');
|