@dynamic-labs/embedded-wallet-solana 4.0.0-alpha.6 → 4.0.0-alpha.7
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 +18 -0
- package/package.cjs +4 -4
- package/package.js +4 -4
- package/package.json +11 -11
- package/src/lib/TurnkeySolanaWalletConnector/TurnkeySolanaWalletConnector.cjs +10 -16
- package/src/lib/TurnkeySolanaWalletConnector/TurnkeySolanaWalletConnector.js +10 -16
- package/src/lib/utils/transactionDecoder/transactionDecoder.cjs +23 -9
- package/src/lib/utils/transactionDecoder/transactionDecoder.js +23 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
|
|
2
|
+
## [4.0.0-alpha.7](https://github.com/dynamic-labs/dynamic-auth/compare/v4.0.0-alpha.6...v4.0.0-alpha.7) (2024-10-03)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* add account abstraction module to client ([#7002](https://github.com/dynamic-labs/dynamic-auth/issues/7002)) ([2f06975](https://github.com/dynamic-labs/dynamic-auth/commit/2f06975083dfa9d40537ef4a99b414eda1a68e01))
|
|
8
|
+
* add support for wallet events in rn ([#7061](https://github.com/dynamic-labs/dynamic-auth/issues/7061)) ([c7c4ce5](https://github.com/dynamic-labs/dynamic-auth/commit/c7c4ce51f27a2b84a1710c120d7006a00920c1e7))
|
|
9
|
+
* add zerodev extension for react native ([#7028](https://github.com/dynamic-labs/dynamic-auth/issues/7028)) ([858b8a8](https://github.com/dynamic-labs/dynamic-auth/commit/858b8a851cfa0cddc8e4559541b03992cf5ccdfc))
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
* do not modify sol tx blockhash as tx could have been signed already ([#7050](https://github.com/dynamic-labs/dynamic-auth/issues/7050)) ([770edb4](https://github.com/dynamic-labs/dynamic-auth/commit/770edb49ddc231b75fb45a9f6d563f22e5185df2))
|
|
15
|
+
* ensure the correct auth mode is used on social redirect ([#7047](https://github.com/dynamic-labs/dynamic-auth/issues/7047)) ([7c27172](https://github.com/dynamic-labs/dynamic-auth/commit/7c271721d5ddf19e3fd1bf56ddb1d49e0e2bca07))
|
|
16
|
+
* prevent react native message timeout before sdk is ready ([#7051](https://github.com/dynamic-labs/dynamic-auth/issues/7051)) ([6421237](https://github.com/dynamic-labs/dynamic-auth/commit/6421237d677d788b824d53432c1a75b9d571aa78))
|
|
17
|
+
* update version error text ([#7054](https://github.com/dynamic-labs/dynamic-auth/issues/7054)) ([713dacb](https://github.com/dynamic-labs/dynamic-auth/commit/713dacb79c2513323c2e6840d7418716011c2dcd))
|
|
18
|
+
* use project settings sdk network for send flow ([#7011](https://github.com/dynamic-labs/dynamic-auth/issues/7011)) ([983e796](https://github.com/dynamic-labs/dynamic-auth/commit/983e79632762f71ee0502c92057a32ea985ae19c))
|
|
19
|
+
|
|
2
20
|
## [4.0.0-alpha.6](https://github.com/dynamic-labs/dynamic-auth/compare/v4.0.0-alpha.5...v4.0.0-alpha.6) (2024-10-01)
|
|
3
21
|
|
|
4
22
|
|
package/package.cjs
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
|
|
4
4
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
5
|
|
|
6
|
-
var version = "4.0.0-alpha.
|
|
6
|
+
var version = "4.0.0-alpha.7";
|
|
7
7
|
var dependencies = {
|
|
8
8
|
"@dynamic-labs/sdk-api-core": "0.0.535",
|
|
9
|
-
"@dynamic-labs/utils": "4.0.0-alpha.
|
|
10
|
-
"@dynamic-labs/logger": "4.0.0-alpha.
|
|
11
|
-
"@dynamic-labs/types": "4.0.0-alpha.
|
|
9
|
+
"@dynamic-labs/utils": "4.0.0-alpha.7",
|
|
10
|
+
"@dynamic-labs/logger": "4.0.0-alpha.7",
|
|
11
|
+
"@dynamic-labs/types": "4.0.0-alpha.7",
|
|
12
12
|
eventemitter3: "5.0.1",
|
|
13
13
|
"@solana/spl-token": "0.4.6",
|
|
14
14
|
"@solana/web3.js": "1.92.1",
|
package/package.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use client'
|
|
2
|
-
var version = "4.0.0-alpha.
|
|
2
|
+
var version = "4.0.0-alpha.7";
|
|
3
3
|
var dependencies = {
|
|
4
4
|
"@dynamic-labs/sdk-api-core": "0.0.535",
|
|
5
|
-
"@dynamic-labs/utils": "4.0.0-alpha.
|
|
6
|
-
"@dynamic-labs/logger": "4.0.0-alpha.
|
|
7
|
-
"@dynamic-labs/types": "4.0.0-alpha.
|
|
5
|
+
"@dynamic-labs/utils": "4.0.0-alpha.7",
|
|
6
|
+
"@dynamic-labs/logger": "4.0.0-alpha.7",
|
|
7
|
+
"@dynamic-labs/types": "4.0.0-alpha.7",
|
|
8
8
|
eventemitter3: "5.0.1",
|
|
9
9
|
"@solana/spl-token": "0.4.6",
|
|
10
10
|
"@solana/web3.js": "1.92.1",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs/embedded-wallet-solana",
|
|
3
|
-
"version": "4.0.0-alpha.
|
|
3
|
+
"version": "4.0.0-alpha.7",
|
|
4
4
|
"description": "A React SDK for implementing wallet web3 authentication and authorization to your website.",
|
|
5
5
|
"author": "Dynamic Labs, Inc.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"homepage": "https://www.dynamic.xyz/",
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@dynamic-labs/sdk-api-core": "0.0.535",
|
|
22
|
-
"@dynamic-labs/utils": "4.0.0-alpha.
|
|
23
|
-
"@dynamic-labs/logger": "4.0.0-alpha.
|
|
24
|
-
"@dynamic-labs/types": "4.0.0-alpha.
|
|
22
|
+
"@dynamic-labs/utils": "4.0.0-alpha.7",
|
|
23
|
+
"@dynamic-labs/logger": "4.0.0-alpha.7",
|
|
24
|
+
"@dynamic-labs/types": "4.0.0-alpha.7",
|
|
25
25
|
"eventemitter3": "5.0.1",
|
|
26
26
|
"@solana/spl-token": "0.4.6",
|
|
27
27
|
"@solana/web3.js": "1.92.1",
|
|
@@ -29,13 +29,13 @@
|
|
|
29
29
|
"@turnkey/iframe-stamper": "2.0.0",
|
|
30
30
|
"@turnkey/solana": "0.3.9",
|
|
31
31
|
"@turnkey/webauthn-stamper": "0.5.0",
|
|
32
|
-
"@dynamic-labs/assert-package-version": "4.0.0-alpha.
|
|
33
|
-
"@dynamic-labs/embedded-wallet": "4.0.0-alpha.
|
|
34
|
-
"@dynamic-labs/rpc-providers": "4.0.0-alpha.
|
|
35
|
-
"@dynamic-labs/solana-core": "4.0.0-alpha.
|
|
36
|
-
"@dynamic-labs/wallet-book": "4.0.0-alpha.
|
|
37
|
-
"@dynamic-labs/wallet-connector-core": "4.0.0-alpha.
|
|
38
|
-
"@dynamic-labs/webauthn": "4.0.0-alpha.
|
|
32
|
+
"@dynamic-labs/assert-package-version": "4.0.0-alpha.7",
|
|
33
|
+
"@dynamic-labs/embedded-wallet": "4.0.0-alpha.7",
|
|
34
|
+
"@dynamic-labs/rpc-providers": "4.0.0-alpha.7",
|
|
35
|
+
"@dynamic-labs/solana-core": "4.0.0-alpha.7",
|
|
36
|
+
"@dynamic-labs/wallet-book": "4.0.0-alpha.7",
|
|
37
|
+
"@dynamic-labs/wallet-connector-core": "4.0.0-alpha.7",
|
|
38
|
+
"@dynamic-labs/webauthn": "4.0.0-alpha.7",
|
|
39
39
|
"react-dom": "18.2.0",
|
|
40
40
|
"viem": "2.9.25"
|
|
41
41
|
},
|
|
@@ -290,25 +290,11 @@ class TurnkeySolanaWalletConnector extends embeddedWallet.TurnkeyWalletConnector
|
|
|
290
290
|
}
|
|
291
291
|
internalSignAndSendTransaction(transaction, options) {
|
|
292
292
|
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
293
|
-
var _a;
|
|
294
293
|
if (!this.turnkeyAddress)
|
|
295
294
|
throw new utils.DynamicError('Solana wallet not found');
|
|
296
295
|
const currentConnection = this.getConnection('confirmed');
|
|
297
|
-
const blockhash = yield currentConnection.getLatestBlockhash();
|
|
298
|
-
if ('version' in transaction) {
|
|
299
|
-
transaction.message.recentBlockhash =
|
|
300
|
-
blockhash.blockhash;
|
|
301
|
-
}
|
|
302
|
-
else {
|
|
303
|
-
transaction.recentBlockhash = blockhash.blockhash;
|
|
304
|
-
transaction.feePayer =
|
|
305
|
-
(_a = transaction.feePayer) !== null && _a !== void 0 ? _a : new web3_js.PublicKey(this.turnkeyAddress);
|
|
306
|
-
}
|
|
307
296
|
const signedTransaction = yield this.signTransaction(transaction);
|
|
308
|
-
const signature = yield currentConnection.sendRawTransaction(
|
|
309
|
-
requireAllSignatures: false,
|
|
310
|
-
verifySignatures: false,
|
|
311
|
-
})), options);
|
|
297
|
+
const signature = yield currentConnection.sendRawTransaction(signedTransaction.serialize(), options);
|
|
312
298
|
// listen for tx confirmation until 60 seconds, which is ~150 blocks expiration
|
|
313
299
|
return new Promise((resolve, reject) => {
|
|
314
300
|
const timeout = setTimeout(() => {
|
|
@@ -332,8 +318,16 @@ class TurnkeySolanaWalletConnector extends embeddedWallet.TurnkeyWalletConnector
|
|
|
332
318
|
if (!this.turnkeyAddress)
|
|
333
319
|
throw new utils.DynamicError('Solana wallet not found');
|
|
334
320
|
let optimizedTransaction = transaction;
|
|
321
|
+
let alreadySigned = false;
|
|
322
|
+
if ('version' in transaction) {
|
|
323
|
+
alreadySigned = transaction.signatures.some((sig) => !sig.every((byte) => byte === 0));
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
alreadySigned = transaction.signatures.some((sig) => sig.signature);
|
|
327
|
+
}
|
|
335
328
|
try {
|
|
336
|
-
|
|
329
|
+
// we cannot optimize partially signed transactions as once a tx is modified the signatures are no longer valid
|
|
330
|
+
if ((yield this.getNetwork()) === 'mainnet' && !alreadySigned) {
|
|
337
331
|
optimizedTransaction = (yield api.optimizeSolanaTransaction(this.getEnvId(), transaction, (_a = this.turnkeyAddress) !== null && _a !== void 0 ? _a : ''));
|
|
338
332
|
}
|
|
339
333
|
}
|
|
@@ -286,25 +286,11 @@ class TurnkeySolanaWalletConnector extends TurnkeyWalletConnectorBase {
|
|
|
286
286
|
}
|
|
287
287
|
internalSignAndSendTransaction(transaction, options) {
|
|
288
288
|
return __awaiter(this, void 0, void 0, function* () {
|
|
289
|
-
var _a;
|
|
290
289
|
if (!this.turnkeyAddress)
|
|
291
290
|
throw new DynamicError('Solana wallet not found');
|
|
292
291
|
const currentConnection = this.getConnection('confirmed');
|
|
293
|
-
const blockhash = yield currentConnection.getLatestBlockhash();
|
|
294
|
-
if ('version' in transaction) {
|
|
295
|
-
transaction.message.recentBlockhash =
|
|
296
|
-
blockhash.blockhash;
|
|
297
|
-
}
|
|
298
|
-
else {
|
|
299
|
-
transaction.recentBlockhash = blockhash.blockhash;
|
|
300
|
-
transaction.feePayer =
|
|
301
|
-
(_a = transaction.feePayer) !== null && _a !== void 0 ? _a : new PublicKey(this.turnkeyAddress);
|
|
302
|
-
}
|
|
303
292
|
const signedTransaction = yield this.signTransaction(transaction);
|
|
304
|
-
const signature = yield currentConnection.sendRawTransaction(
|
|
305
|
-
requireAllSignatures: false,
|
|
306
|
-
verifySignatures: false,
|
|
307
|
-
})), options);
|
|
293
|
+
const signature = yield currentConnection.sendRawTransaction(signedTransaction.serialize(), options);
|
|
308
294
|
// listen for tx confirmation until 60 seconds, which is ~150 blocks expiration
|
|
309
295
|
return new Promise((resolve, reject) => {
|
|
310
296
|
const timeout = setTimeout(() => {
|
|
@@ -328,8 +314,16 @@ class TurnkeySolanaWalletConnector extends TurnkeyWalletConnectorBase {
|
|
|
328
314
|
if (!this.turnkeyAddress)
|
|
329
315
|
throw new DynamicError('Solana wallet not found');
|
|
330
316
|
let optimizedTransaction = transaction;
|
|
317
|
+
let alreadySigned = false;
|
|
318
|
+
if ('version' in transaction) {
|
|
319
|
+
alreadySigned = transaction.signatures.some((sig) => !sig.every((byte) => byte === 0));
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
alreadySigned = transaction.signatures.some((sig) => sig.signature);
|
|
323
|
+
}
|
|
331
324
|
try {
|
|
332
|
-
|
|
325
|
+
// we cannot optimize partially signed transactions as once a tx is modified the signatures are no longer valid
|
|
326
|
+
if ((yield this.getNetwork()) === 'mainnet' && !alreadySigned) {
|
|
333
327
|
optimizedTransaction = (yield optimizeSolanaTransaction(this.getEnvId(), transaction, (_a = this.turnkeyAddress) !== null && _a !== void 0 ? _a : ''));
|
|
334
328
|
}
|
|
335
329
|
}
|
|
@@ -10,16 +10,27 @@ var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
|
|
|
10
10
|
var utils = require('@dynamic-labs/utils');
|
|
11
11
|
|
|
12
12
|
const getTotalSolanaSpend = (transaction, connection, thisAddress) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
13
|
-
var _a, _b, _c, _d, _e, _f;
|
|
13
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
14
14
|
let simulation;
|
|
15
|
+
let feePayer;
|
|
15
16
|
if ('version' in transaction) {
|
|
17
|
+
[feePayer] = transaction.message.staticAccountKeys;
|
|
16
18
|
simulation = yield connection.simulateTransaction(transaction, {
|
|
17
|
-
accounts: {
|
|
19
|
+
accounts: {
|
|
20
|
+
addresses: feePayer.toBase58() && feePayer.toBase58() !== thisAddress
|
|
21
|
+
? [feePayer.toBase58(), thisAddress]
|
|
22
|
+
: [thisAddress],
|
|
23
|
+
encoding: 'base64',
|
|
24
|
+
},
|
|
18
25
|
replaceRecentBlockhash: true,
|
|
19
26
|
});
|
|
20
27
|
}
|
|
21
28
|
else {
|
|
22
|
-
|
|
29
|
+
feePayer =
|
|
30
|
+
transaction.feePayer || transaction.instructions[0].keys[0].pubkey;
|
|
31
|
+
simulation = yield connection.simulateTransaction(transaction, undefined, feePayer.toBase58() && feePayer.toBase58() !== thisAddress
|
|
32
|
+
? [feePayer, new web3_js.PublicKey(thisAddress)]
|
|
33
|
+
: [new web3_js.PublicKey(thisAddress)]);
|
|
23
34
|
}
|
|
24
35
|
const previousBalance = yield connection.getBalance(new web3_js.PublicKey(thisAddress));
|
|
25
36
|
if (!((_c = (_b = (_a = simulation === null || simulation === void 0 ? void 0 : simulation.value) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.lamports)) {
|
|
@@ -43,11 +54,14 @@ const getTotalSolanaSpend = (transaction, connection, thisAddress) => _tslib.__a
|
|
|
43
54
|
}
|
|
44
55
|
return undefined;
|
|
45
56
|
}
|
|
46
|
-
|
|
57
|
+
// the last account will be the embedded wallet,
|
|
58
|
+
// if there are two addresses the first will be gas-sponsoring so we dont want to calculate sol for that
|
|
59
|
+
const totalSolTransfer = previousBalance -
|
|
60
|
+
((_g = (_f = (_e = (_d = simulation === null || simulation === void 0 ? void 0 : simulation.value) === null || _d === void 0 ? void 0 : _d.accounts) === null || _e === void 0 ? void 0 : _e[1]) === null || _f === void 0 ? void 0 : _f.lamports) !== null && _g !== void 0 ? _g : (_k = (_j = (_h = simulation === null || simulation === void 0 ? void 0 : simulation.value) === null || _h === void 0 ? void 0 : _h.accounts) === null || _j === void 0 ? void 0 : _j[0]) === null || _k === void 0 ? void 0 : _k.lamports);
|
|
47
61
|
return BigInt(totalSolTransfer);
|
|
48
62
|
});
|
|
49
63
|
const decodeTransaction = (transaction, connection, thisAddress) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
50
|
-
var
|
|
64
|
+
var _l;
|
|
51
65
|
if (!transaction) {
|
|
52
66
|
throw new utils.DynamicError('Transaction is required');
|
|
53
67
|
}
|
|
@@ -72,7 +86,7 @@ const decodeTransaction = (transaction, connection, thisAddress) => _tslib.__awa
|
|
|
72
86
|
}
|
|
73
87
|
}
|
|
74
88
|
else if (!transaction.instructions) {
|
|
75
|
-
decodedInstructions = (
|
|
89
|
+
decodedInstructions = (_l = web3_js.Transaction.from(Buffer.from(transaction.serialize()))) === null || _l === void 0 ? void 0 : _l.instructions;
|
|
76
90
|
}
|
|
77
91
|
else {
|
|
78
92
|
decodedInstructions = transaction.instructions;
|
|
@@ -100,7 +114,7 @@ const decodeTransaction = (transaction, connection, thisAddress) => _tslib.__awa
|
|
|
100
114
|
}
|
|
101
115
|
// SPL transfers
|
|
102
116
|
let splTransfers = yield Promise.all(decodedInstructions.map((instruction) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
103
|
-
var
|
|
117
|
+
var _m, _o, _p, _q, _r, _s, _t;
|
|
104
118
|
if (instruction.programId.equals(splToken.TOKEN_PROGRAM_ID)) {
|
|
105
119
|
const decodedTokenInstruction = splToken.decodeTransferInstructionUnchecked(instruction);
|
|
106
120
|
const { source, destination } = decodedTokenInstruction.keys;
|
|
@@ -114,9 +128,9 @@ const decodeTransaction = (transaction, connection, thisAddress) => _tslib.__awa
|
|
|
114
128
|
}
|
|
115
129
|
// Pure SPL transfers, get the address from the destination token account to display to user
|
|
116
130
|
const destinationAccountInfo = yield connection.getParsedAccountInfo(destination.pubkey);
|
|
117
|
-
const isTokenAccount = ((
|
|
131
|
+
const isTokenAccount = ((_p = (_o = (_m = destinationAccountInfo.value) === null || _m === void 0 ? void 0 : _m.data) === null || _o === void 0 ? void 0 : _o.parsed) === null || _p === void 0 ? void 0 : _p.type) === 'account';
|
|
118
132
|
const destinationOwner = isTokenAccount
|
|
119
|
-
? (
|
|
133
|
+
? (_t = (_s = (_r = (_q = destinationAccountInfo.value) === null || _q === void 0 ? void 0 : _q.data) === null || _r === void 0 ? void 0 : _r.parsed) === null || _s === void 0 ? void 0 : _s.info) === null || _t === void 0 ? void 0 : _t.owner
|
|
120
134
|
: null;
|
|
121
135
|
const toAddress = destinationOwner
|
|
122
136
|
? destinationOwner
|
|
@@ -6,16 +6,27 @@ import { logger } from '@dynamic-labs/wallet-connector-core';
|
|
|
6
6
|
import { DynamicError } from '@dynamic-labs/utils';
|
|
7
7
|
|
|
8
8
|
const getTotalSolanaSpend = (transaction, connection, thisAddress) => __awaiter(void 0, void 0, void 0, function* () {
|
|
9
|
-
var _a, _b, _c, _d, _e, _f;
|
|
9
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
10
10
|
let simulation;
|
|
11
|
+
let feePayer;
|
|
11
12
|
if ('version' in transaction) {
|
|
13
|
+
[feePayer] = transaction.message.staticAccountKeys;
|
|
12
14
|
simulation = yield connection.simulateTransaction(transaction, {
|
|
13
|
-
accounts: {
|
|
15
|
+
accounts: {
|
|
16
|
+
addresses: feePayer.toBase58() && feePayer.toBase58() !== thisAddress
|
|
17
|
+
? [feePayer.toBase58(), thisAddress]
|
|
18
|
+
: [thisAddress],
|
|
19
|
+
encoding: 'base64',
|
|
20
|
+
},
|
|
14
21
|
replaceRecentBlockhash: true,
|
|
15
22
|
});
|
|
16
23
|
}
|
|
17
24
|
else {
|
|
18
|
-
|
|
25
|
+
feePayer =
|
|
26
|
+
transaction.feePayer || transaction.instructions[0].keys[0].pubkey;
|
|
27
|
+
simulation = yield connection.simulateTransaction(transaction, undefined, feePayer.toBase58() && feePayer.toBase58() !== thisAddress
|
|
28
|
+
? [feePayer, new PublicKey(thisAddress)]
|
|
29
|
+
: [new PublicKey(thisAddress)]);
|
|
19
30
|
}
|
|
20
31
|
const previousBalance = yield connection.getBalance(new PublicKey(thisAddress));
|
|
21
32
|
if (!((_c = (_b = (_a = simulation === null || simulation === void 0 ? void 0 : simulation.value) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.lamports)) {
|
|
@@ -39,11 +50,14 @@ const getTotalSolanaSpend = (transaction, connection, thisAddress) => __awaiter(
|
|
|
39
50
|
}
|
|
40
51
|
return undefined;
|
|
41
52
|
}
|
|
42
|
-
|
|
53
|
+
// the last account will be the embedded wallet,
|
|
54
|
+
// if there are two addresses the first will be gas-sponsoring so we dont want to calculate sol for that
|
|
55
|
+
const totalSolTransfer = previousBalance -
|
|
56
|
+
((_g = (_f = (_e = (_d = simulation === null || simulation === void 0 ? void 0 : simulation.value) === null || _d === void 0 ? void 0 : _d.accounts) === null || _e === void 0 ? void 0 : _e[1]) === null || _f === void 0 ? void 0 : _f.lamports) !== null && _g !== void 0 ? _g : (_k = (_j = (_h = simulation === null || simulation === void 0 ? void 0 : simulation.value) === null || _h === void 0 ? void 0 : _h.accounts) === null || _j === void 0 ? void 0 : _j[0]) === null || _k === void 0 ? void 0 : _k.lamports);
|
|
43
57
|
return BigInt(totalSolTransfer);
|
|
44
58
|
});
|
|
45
59
|
const decodeTransaction = (transaction, connection, thisAddress) => __awaiter(void 0, void 0, void 0, function* () {
|
|
46
|
-
var
|
|
60
|
+
var _l;
|
|
47
61
|
if (!transaction) {
|
|
48
62
|
throw new DynamicError('Transaction is required');
|
|
49
63
|
}
|
|
@@ -68,7 +82,7 @@ const decodeTransaction = (transaction, connection, thisAddress) => __awaiter(vo
|
|
|
68
82
|
}
|
|
69
83
|
}
|
|
70
84
|
else if (!transaction.instructions) {
|
|
71
|
-
decodedInstructions = (
|
|
85
|
+
decodedInstructions = (_l = Transaction.from(Buffer.from(transaction.serialize()))) === null || _l === void 0 ? void 0 : _l.instructions;
|
|
72
86
|
}
|
|
73
87
|
else {
|
|
74
88
|
decodedInstructions = transaction.instructions;
|
|
@@ -96,7 +110,7 @@ const decodeTransaction = (transaction, connection, thisAddress) => __awaiter(vo
|
|
|
96
110
|
}
|
|
97
111
|
// SPL transfers
|
|
98
112
|
let splTransfers = yield Promise.all(decodedInstructions.map((instruction) => __awaiter(void 0, void 0, void 0, function* () {
|
|
99
|
-
var
|
|
113
|
+
var _m, _o, _p, _q, _r, _s, _t;
|
|
100
114
|
if (instruction.programId.equals(TOKEN_PROGRAM_ID)) {
|
|
101
115
|
const decodedTokenInstruction = decodeTransferInstructionUnchecked(instruction);
|
|
102
116
|
const { source, destination } = decodedTokenInstruction.keys;
|
|
@@ -110,9 +124,9 @@ const decodeTransaction = (transaction, connection, thisAddress) => __awaiter(vo
|
|
|
110
124
|
}
|
|
111
125
|
// Pure SPL transfers, get the address from the destination token account to display to user
|
|
112
126
|
const destinationAccountInfo = yield connection.getParsedAccountInfo(destination.pubkey);
|
|
113
|
-
const isTokenAccount = ((
|
|
127
|
+
const isTokenAccount = ((_p = (_o = (_m = destinationAccountInfo.value) === null || _m === void 0 ? void 0 : _m.data) === null || _o === void 0 ? void 0 : _o.parsed) === null || _p === void 0 ? void 0 : _p.type) === 'account';
|
|
114
128
|
const destinationOwner = isTokenAccount
|
|
115
|
-
? (
|
|
129
|
+
? (_t = (_s = (_r = (_q = destinationAccountInfo.value) === null || _q === void 0 ? void 0 : _q.data) === null || _r === void 0 ? void 0 : _r.parsed) === null || _s === void 0 ? void 0 : _s.info) === null || _t === void 0 ? void 0 : _t.owner
|
|
116
130
|
: null;
|
|
117
131
|
const toAddress = destinationOwner
|
|
118
132
|
? destinationOwner
|