rubic-sdk 5.50.5-alpha.solana.3 → 5.50.5-alpha.solana.31
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/lib/common/tokens/token.d.ts +2 -0
- package/lib/common/tokens/token.js +5 -2
- package/lib/common/tokens/token.js.map +1 -1
- package/lib/core/blockchain/web3-private-service/web3-private/solana-web3-private/models/solana-transaction-options.d.ts +1 -0
- package/lib/core/blockchain/web3-private-service/web3-private/solana-web3-private/solana-web3-private.d.ts +1 -1
- package/lib/core/blockchain/web3-private-service/web3-private/solana-web3-private/solana-web3-private.js +41 -2
- package/lib/core/blockchain/web3-private-service/web3-private/solana-web3-private/solana-web3-private.js.map +1 -1
- package/lib/core/blockchain/web3-public-service/web3-public/models/supported-token-field.d.ts +1 -1
- package/lib/core/blockchain/web3-public-service/web3-public/solana-web3-public/models/solana-token.d.ts +6 -0
- package/lib/core/blockchain/web3-public-service/web3-public/solana-web3-public/services/solana-tokens-api-service.d.ts +0 -6
- package/lib/core/blockchain/web3-public-service/web3-public/solana-web3-public/services/solana-tokens-api-service.js +0 -31
- package/lib/core/blockchain/web3-public-service/web3-public/solana-web3-public/services/solana-tokens-api-service.js.map +1 -1
- package/lib/core/blockchain/web3-public-service/web3-public/solana-web3-public/services/solana-tokens-service.d.ts +14 -0
- package/lib/core/blockchain/web3-public-service/web3-public/solana-web3-public/services/solana-tokens-service.js +106 -0
- package/lib/core/blockchain/web3-public-service/web3-public/solana-web3-public/services/solana-tokens-service.js.map +1 -0
- package/lib/core/blockchain/web3-public-service/web3-public/solana-web3-public/solana-web3-public.d.ts +3 -2
- package/lib/core/blockchain/web3-public-service/web3-public/solana-web3-public/solana-web3-public.js +37 -69
- package/lib/core/blockchain/web3-public-service/web3-public/solana-web3-public/solana-web3-public.js.map +1 -1
- package/lib/core/blockchain/web3-public-service/web3-public/web3-public.js +0 -10
- package/lib/core/blockchain/web3-public-service/web3-public/web3-public.js.map +1 -1
- package/lib/features/common/models/swap-transaction-options.d.ts +1 -0
- package/lib/features/common/providers/dln/dln-api-service.d.ts +1 -1
- package/lib/features/common/providers/dln/dln-api-service.js +14 -10
- package/lib/features/common/providers/dln/dln-api-service.js.map +1 -1
- package/lib/features/common/providers/unizen/services/unizen-api-service.js +3 -3
- package/lib/features/common/providers/unizen/services/unizen-api-service.js.map +1 -1
- package/lib/features/cross-chain/calculation-manager/providers/debridge-provider/chains/debridge-solana-cross-chain-trade.js +5 -1
- package/lib/features/cross-chain/calculation-manager/providers/debridge-provider/chains/debridge-solana-cross-chain-trade.js.map +1 -1
- package/lib/features/cross-chain/calculation-manager/providers/lifi-provider/chains/lifi-solana-cross-chain-trade.js +5 -1
- package/lib/features/cross-chain/calculation-manager/providers/lifi-provider/chains/lifi-solana-cross-chain-trade.js.map +1 -1
- package/lib/features/on-chain/calculation-manager/providers/aggregators/dln/chains/dln-solana-on-chain-trade.js +1 -1
- package/lib/features/on-chain/calculation-manager/providers/aggregators/dln/chains/dln-solana-on-chain-trade.js.map +1 -1
- package/lib/features/on-chain/calculation-manager/providers/aggregators/dln/constants/dln-on-chain-supported-blockchains.d.ts +1 -1
- package/lib/features/on-chain/calculation-manager/providers/aggregators/dln/constants/dln-on-chain-supported-blockchains.js +8 -8
- package/lib/features/on-chain/calculation-manager/providers/aggregators/dln/constants/dln-on-chain-supported-blockchains.js.map +1 -1
- package/lib/features/on-chain/calculation-manager/providers/aggregators/lifi/chains/lifi-solana-on-chain-trade.js +1 -1
- package/lib/features/on-chain/calculation-manager/providers/aggregators/lifi/chains/lifi-solana-on-chain-trade.js.map +1 -1
- package/lib/features/on-chain/calculation-manager/providers/aggregators/okuswap/constants/okuswap-api.d.ts +1 -1
- package/lib/features/on-chain/calculation-manager/providers/aggregators/okuswap/constants/okuswap-api.js +2 -2
- package/lib/features/on-chain/calculation-manager/providers/aggregators/okuswap/constants/okuswap-api.js.map +1 -1
- package/lib/features/on-chain/calculation-manager/providers/aggregators/okuswap/services/okuswap-api-service.js +3 -3
- package/lib/features/on-chain/calculation-manager/providers/aggregators/okuswap/services/okuswap-api-service.js.map +1 -1
- package/lib/features/on-chain/calculation-manager/providers/common/on-chain-aggregator/aggregator-solana-on-chain-trade-abstract.d.ts +1 -1
- package/lib/features/on-chain/calculation-manager/providers/common/on-chain-aggregator/aggregator-solana-on-chain-trade-abstract.js +4 -5
- package/lib/features/on-chain/calculation-manager/providers/common/on-chain-aggregator/aggregator-solana-on-chain-trade-abstract.js.map +1 -1
- package/lib/features/on-chain/calculation-manager/providers/common/on-chain-trade/solana-on-chain-trade/solana-on-chain-trade.js +3 -2
- package/lib/features/on-chain/calculation-manager/providers/common/on-chain-trade/solana-on-chain-trade/solana-on-chain-trade.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
@@ -6,6 +6,7 @@ export type TokenStruct<T extends BlockchainName = BlockchainName> = {
|
|
6
6
|
name: string;
|
7
7
|
symbol: string;
|
8
8
|
decimals: number;
|
9
|
+
image?: string;
|
9
10
|
};
|
10
11
|
/**
|
11
12
|
* Contains main token's fields.
|
@@ -29,6 +30,7 @@ export declare class Token<T extends BlockchainName = BlockchainName> {
|
|
29
30
|
readonly name: string;
|
30
31
|
readonly symbol: string;
|
31
32
|
readonly decimals: number;
|
33
|
+
readonly image: string | undefined;
|
32
34
|
get isNative(): boolean;
|
33
35
|
get isWrapped(): boolean;
|
34
36
|
constructor(tokenStruct: TokenStruct<T>);
|
@@ -39,7 +39,8 @@ class Token {
|
|
39
39
|
...tokenBaseStruct,
|
40
40
|
name: tokenInfo.name,
|
41
41
|
symbol: tokenInfo.symbol,
|
42
|
-
decimals: parseInt(tokenInfo.decimals)
|
42
|
+
decimals: parseInt(tokenInfo.decimals),
|
43
|
+
...('image' in tokenInfo && { image: tokenInfo.image })
|
43
44
|
});
|
44
45
|
}
|
45
46
|
/**
|
@@ -66,7 +67,8 @@ class Token {
|
|
66
67
|
blockchain,
|
67
68
|
name: tokenInfo.name,
|
68
69
|
symbol: tokenInfo.symbol,
|
69
|
-
decimals: parseInt(tokenInfo.decimals)
|
70
|
+
decimals: parseInt(tokenInfo.decimals),
|
71
|
+
...('image' in tokenInfo && { image: tokenInfo.image })
|
70
72
|
});
|
71
73
|
});
|
72
74
|
}
|
@@ -96,6 +98,7 @@ class Token {
|
|
96
98
|
this.name = tokenStruct.name;
|
97
99
|
this.symbol = tokenStruct.symbol;
|
98
100
|
this.decimals = tokenStruct.decimals;
|
101
|
+
this.image = tokenStruct.image;
|
99
102
|
}
|
100
103
|
isEqualTo(token) {
|
101
104
|
return (token.blockchain === this.blockchain && (0, blockchain_1.compareAddresses)(token.address, this.address));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/common/tokens/token.ts"],"names":[],"mappings":";;;AAAA,uEAAkE;AAClE,6EAA6E;AAE7E,4DAA+D;AAC/D,gFAA6F;AAE7F,kGAA8F;AAC9F,qGAAgG;AAChG,uEAAmE;AACnE,yDAAsD;AAEtD,qEAA+D;
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/common/tokens/token.ts"],"names":[],"mappings":"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"}
|
@@ -7,6 +7,6 @@ export declare class SolanaWeb3Private extends Web3Private {
|
|
7
7
|
private readonly solanaWeb3;
|
8
8
|
protected readonly Web3Pure: typeof SolanaWeb3Pure;
|
9
9
|
getBlockchainName(): Promise<BlockchainName | undefined>;
|
10
|
-
sendTransaction(options
|
10
|
+
sendTransaction(options: SolanaTransactionOptions): Promise<string>;
|
11
11
|
constructor(solanaWeb3: SolanaWeb3);
|
12
12
|
}
|
@@ -12,16 +12,55 @@ class SolanaWeb3Private extends web3_private_1.Web3Private {
|
|
12
12
|
async getBlockchainName() {
|
13
13
|
return blockchain_name_1.BLOCKCHAIN_NAME.SOLANA;
|
14
14
|
}
|
15
|
-
async sendTransaction(options
|
15
|
+
async sendTransaction(options) {
|
16
16
|
try {
|
17
17
|
const web3Public = injector_1.Injector.web3PublicService.getWeb3Public(blockchain_name_1.BLOCKCHAIN_NAME.SOLANA);
|
18
18
|
const decodedData = options.data.startsWith('0x')
|
19
19
|
? Buffer.from(options.data.slice(2), 'hex')
|
20
20
|
: utils_1.base64.decode(options.data);
|
21
21
|
const tx = web3_js_1.VersionedTransaction.deserialize(decodedData);
|
22
|
+
// const txMessage = TransactionMessage.decompile(tx.message);
|
22
23
|
const { blockhash } = await web3Public.getRecentBlockhash();
|
24
|
+
const avgGas = await injector_1.Injector.web3PublicService
|
25
|
+
.getWeb3Public('SOLANA')
|
26
|
+
.getLastComputeUnits();
|
27
|
+
// tx.message.recentBlockhash = blockhash;
|
28
|
+
// Create the priority fee instructions
|
29
|
+
const computeUnitLimit = avgGas.multipliedBy(1.2).toNumber();
|
30
|
+
const computePriceIx = web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({
|
31
|
+
microLamports: 1
|
32
|
+
});
|
33
|
+
const computeLimitIx = web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
|
34
|
+
units: computeUnitLimit
|
35
|
+
});
|
36
|
+
const swapIx = tx.message.compiledInstructions.map((ci) => {
|
37
|
+
const programId = tx.message.staticAccountKeys[ci.programIdIndex];
|
38
|
+
const keys = ci.accountKeyIndexes.map(index => ({
|
39
|
+
pubkey: tx.message.staticAccountKeys[index],
|
40
|
+
isSigner: tx.message.isAccountSigner(index),
|
41
|
+
isWritable: tx.message.isAccountWritable(index)
|
42
|
+
}));
|
43
|
+
return new web3_js_1.TransactionInstruction({
|
44
|
+
programId,
|
45
|
+
keys,
|
46
|
+
data: Buffer.from(ci.data)
|
47
|
+
});
|
48
|
+
});
|
23
49
|
tx.message.recentBlockhash = blockhash;
|
24
|
-
const
|
50
|
+
const instructions = [
|
51
|
+
computePriceIx,
|
52
|
+
computeLimitIx,
|
53
|
+
...swapIx
|
54
|
+
];
|
55
|
+
// txMessage.instructions.push(computePriceIx, computeLimitIx);
|
56
|
+
// const msgWithGas = txMessage.compileToV0Message();
|
57
|
+
const msgWithGas = new web3_js_1.TransactionMessage({
|
58
|
+
instructions,
|
59
|
+
payerKey: new web3_js_1.PublicKey(options.fromAddress),
|
60
|
+
recentBlockhash: blockhash
|
61
|
+
}).compileToV0Message();
|
62
|
+
const txWithGas = new web3_js_1.VersionedTransaction(msgWithGas);
|
63
|
+
const { signature } = await this.solanaWeb3.signAndSendTransaction(txWithGas);
|
25
64
|
options.onTransactionHash?.(signature);
|
26
65
|
return signature;
|
27
66
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solana-web3-private.js","sourceRoot":"","sources":["../../../../../../src/core/blockchain/web3-private-service/web3-private/solana-web3-private/solana-web3-private.ts"],"names":[],"mappings":";;;AAAA,
|
1
|
+
{"version":3,"file":"solana-web3-private.js","sourceRoot":"","sources":["../../../../../../src/core/blockchain/web3-private-service/web3-private/solana-web3-private/solana-web3-private.ts"],"names":[],"mappings":"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"}
|
package/lib/core/blockchain/web3-public-service/web3-public/models/supported-token-field.d.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export type SupportedTokenField = 'decimals' | 'symbol' | 'name';
|
1
|
+
export type SupportedTokenField = 'decimals' | 'symbol' | 'name' | 'image';
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { PublicKey } from '@solana/web3.js';
|
1
2
|
export interface SolanaToken {
|
2
3
|
name: string;
|
3
4
|
symbol: string;
|
@@ -7,3 +8,8 @@ export interface SolanaToken {
|
|
7
8
|
decimals: number | null;
|
8
9
|
holders?: number | null;
|
9
10
|
}
|
11
|
+
export interface SolanaTokensFetchingResp {
|
12
|
+
tokensList: SolanaToken[];
|
13
|
+
notFetchedMints: PublicKey[];
|
14
|
+
hasNotFetchedTokens: boolean;
|
15
|
+
}
|
@@ -1,14 +1,8 @@
|
|
1
1
|
import { SolanaToken } from '../models/solana-token';
|
2
|
-
interface TokenList {
|
3
|
-
preparedTokens: SolanaToken[];
|
4
|
-
addresses: string[];
|
5
|
-
}
|
6
2
|
export declare class SolanaTokensApiService {
|
7
3
|
private static readonly apiEndpoint;
|
8
4
|
private static readonly xApiKey;
|
9
5
|
static getTokensList(tokenAddresses: string[]): Promise<{
|
10
6
|
content: SolanaToken[];
|
11
7
|
}>;
|
12
|
-
static prepareTokens(tokenAddresses: string[]): TokenList;
|
13
8
|
}
|
14
|
-
export {};
|
@@ -1,7 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.SolanaTokensApiService = void 0;
|
4
|
-
const blockchain_1 = require("../../../../../../common/utils/blockchain");
|
5
4
|
const injector_1 = require("../../../../../injector/injector");
|
6
5
|
class SolanaTokensApiService {
|
7
6
|
static getTokensList(tokenAddresses) {
|
@@ -11,36 +10,6 @@ class SolanaTokensApiService {
|
|
11
10
|
}
|
12
11
|
});
|
13
12
|
}
|
14
|
-
static prepareTokens(tokenAddresses) {
|
15
|
-
const preparedTokens = [
|
16
|
-
{
|
17
|
-
name: 'Happy Cat',
|
18
|
-
symbol: 'HAPPY',
|
19
|
-
logoURI: null,
|
20
|
-
address: 'HAPPYwgFcjEJDzRtfWE6tiHE9zGdzpNky2FvjPHsvvGZ',
|
21
|
-
decimals: 9
|
22
|
-
},
|
23
|
-
{
|
24
|
-
name: 'Just a chill guy',
|
25
|
-
symbol: 'CHILLGUY',
|
26
|
-
logoURI: 'https://ipfs.io/ipfs/Qmckb3nWWHyoJKtX3FeagfmDZXNVqiXM4nKkYsTnygm2Ah',
|
27
|
-
address: 'Df6yfrKC8kZE3KNkrHERKzAetSxbrWeniQfyJY4Jpump',
|
28
|
-
decimals: 6
|
29
|
-
}
|
30
|
-
];
|
31
|
-
return tokenAddresses.reduce((list, address) => {
|
32
|
-
const existedToken = preparedTokens.find(token => (0, blockchain_1.compareAddresses)(token.address, address));
|
33
|
-
return existedToken
|
34
|
-
? {
|
35
|
-
preparedTokens: [...list.preparedTokens, existedToken],
|
36
|
-
addresses: list.addresses
|
37
|
-
}
|
38
|
-
: {
|
39
|
-
preparedTokens: list.preparedTokens,
|
40
|
-
addresses: [...list.addresses, address]
|
41
|
-
};
|
42
|
-
}, { preparedTokens: [], addresses: [] });
|
43
|
-
}
|
44
13
|
}
|
45
14
|
exports.SolanaTokensApiService = SolanaTokensApiService;
|
46
15
|
SolanaTokensApiService.apiEndpoint = 'https://x-api.rubic.exchange/sol_token_list';
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solana-tokens-api-service.js","sourceRoot":"","sources":["../../../../../../../src/core/blockchain/web3-public-service/web3-public/solana-web3-public/services/solana-tokens-api-service.ts"],"names":[],"mappings":";;;AAAA,
|
1
|
+
{"version":3,"file":"solana-tokens-api-service.js","sourceRoot":"","sources":["../../../../../../../src/core/blockchain/web3-public-service/web3-public/solana-web3-public/services/solana-tokens-api-service.ts"],"names":[],"mappings":";;;AAAA,yDAAsD;AAItD,MAAa,sBAAsB;IAKxB,MAAM,CAAC,aAAa,CAAC,cAAwB;QAChD,OAAO,mBAAQ,CAAC,UAAU,CAAC,IAAI,CAC3B,GAAG,IAAI,CAAC,WAAW,uBAAuB,EAC1C,EAAE,SAAS,EAAE,cAAc,EAAE,EAC7B;YACI,OAAO,EAAE;gBACL,MAAM,EAAE,IAAI,CAAC,OAAO;aACvB;SACJ,CACJ,CAAC;IACN,CAAC;;AAfL,wDAgBC;AAf2B,kCAAW,GAAG,6CAA6C,CAAC;AAE5D,8BAAO,GAAG,8CAA8C,CAAC"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { Connection, PublicKey } from '@solana/web3.js';
|
2
|
+
import { SolanaToken } from '../models/solana-token';
|
3
|
+
export declare class SolanaTokensService {
|
4
|
+
private connection;
|
5
|
+
private tokensOrder;
|
6
|
+
private initialMints;
|
7
|
+
constructor(connection: Connection);
|
8
|
+
fetchTokensData(mints: PublicKey[]): Promise<SolanaToken[]>;
|
9
|
+
private fetchTokensFromBackend;
|
10
|
+
private fetchTokensFromMetaplex;
|
11
|
+
private fetchTokensFromSplApi;
|
12
|
+
private sortTokensByIdx;
|
13
|
+
private getNotFetchedTokensList;
|
14
|
+
}
|
@@ -0,0 +1,106 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.SolanaTokensService = void 0;
|
7
|
+
const spl_token_1 = require("@solana/spl-token");
|
8
|
+
const utl_sdk_1 = require("@solflare-wallet/utl-sdk");
|
9
|
+
const blockchain_1 = require("../../../../../../common/utils/blockchain");
|
10
|
+
const p_timeout_1 = __importDefault(require("../../../../../../common/utils/p-timeout"));
|
11
|
+
const solana_tokens_api_service_1 = require("./solana-tokens-api-service");
|
12
|
+
class SolanaTokensService {
|
13
|
+
constructor(connection) {
|
14
|
+
// key - address of token, value - idx of token in initial tokensAddress
|
15
|
+
this.tokensOrder = {};
|
16
|
+
this.initialMints = [];
|
17
|
+
this.connection = connection;
|
18
|
+
}
|
19
|
+
async fetchTokensData(mints) {
|
20
|
+
const tokensAddresses = mints.map(mint => mint.toString());
|
21
|
+
this.initialMints = mints;
|
22
|
+
this.tokensOrder = tokensAddresses.reduce((acc, address, idx) => ({ ...acc, [address.toLowerCase()]: idx }), {});
|
23
|
+
const fromBackend = await this.fetchTokensFromBackend(mints);
|
24
|
+
if (!fromBackend.hasNotFetchedTokens)
|
25
|
+
return this.sortTokensByIdx(fromBackend.tokensList);
|
26
|
+
const fromMetaplex = await this.fetchTokensFromMetaplex(fromBackend.notFetchedMints, fromBackend.tokensList);
|
27
|
+
const backendWithMetaplexTokens = this.sortTokensByIdx([
|
28
|
+
...fromBackend.tokensList,
|
29
|
+
...fromMetaplex.tokensList
|
30
|
+
]);
|
31
|
+
if (!fromMetaplex.hasNotFetchedTokens)
|
32
|
+
return backendWithMetaplexTokens;
|
33
|
+
const fromSplApi = await this.fetchTokensFromSplApi(fromMetaplex.notFetchedMints, backendWithMetaplexTokens);
|
34
|
+
return this.sortTokensByIdx([
|
35
|
+
...fromBackend.tokensList,
|
36
|
+
...fromMetaplex.tokensList,
|
37
|
+
...fromSplApi.tokensList
|
38
|
+
]);
|
39
|
+
}
|
40
|
+
async fetchTokensFromBackend(mints) {
|
41
|
+
try {
|
42
|
+
const tokensAddresses = mints.map(mint => mint.toString());
|
43
|
+
const { content: notSortedTokensList } = await (0, p_timeout_1.default)(solana_tokens_api_service_1.SolanaTokensApiService.getTokensList(tokensAddresses), 4000, new Error('Api Timeout!'));
|
44
|
+
const notFetchedMints = this.getNotFetchedTokensList(notSortedTokensList);
|
45
|
+
return {
|
46
|
+
tokensList: notSortedTokensList,
|
47
|
+
notFetchedMints,
|
48
|
+
hasNotFetchedTokens: notFetchedMints.length > 0
|
49
|
+
};
|
50
|
+
}
|
51
|
+
catch {
|
52
|
+
return {
|
53
|
+
tokensList: [],
|
54
|
+
notFetchedMints: [...mints],
|
55
|
+
hasNotFetchedTokens: true
|
56
|
+
};
|
57
|
+
}
|
58
|
+
}
|
59
|
+
async fetchTokensFromMetaplex(mints, prevTokensList) {
|
60
|
+
const config = new utl_sdk_1.UtlConfig({
|
61
|
+
connection: this.connection,
|
62
|
+
timeout: 5000
|
63
|
+
});
|
64
|
+
const tokenSDK = new utl_sdk_1.Client(config);
|
65
|
+
const metaplexTokens = await tokenSDK.getFromMetaplex(mints).catch(() => []);
|
66
|
+
const notSortedTokensList = [...prevTokensList, ...metaplexTokens];
|
67
|
+
const notFetchedMints = this.getNotFetchedTokensList(notSortedTokensList);
|
68
|
+
return {
|
69
|
+
tokensList: metaplexTokens,
|
70
|
+
notFetchedMints,
|
71
|
+
hasNotFetchedTokens: notFetchedMints.length > 0
|
72
|
+
};
|
73
|
+
}
|
74
|
+
async fetchTokensFromSplApi(mints, prevTokensList) {
|
75
|
+
const splApiResp = await Promise.all(mints.map(mint => (0, spl_token_1.getMint)(this.connection, mint, 'confirmed'))).catch(() => []);
|
76
|
+
const splApiTokens = splApiResp.filter(Boolean).map(token => ({
|
77
|
+
name: `Token ${token.address.toString().slice(0, 10)}`,
|
78
|
+
symbol: `Token ${token.address.toString().slice(0, 10)}`,
|
79
|
+
logoURI: null,
|
80
|
+
decimals: token.decimals,
|
81
|
+
address: token.address.toString(),
|
82
|
+
verified: token.isInitialized
|
83
|
+
}));
|
84
|
+
const notSortedTokensList = [...prevTokensList, ...splApiTokens];
|
85
|
+
const notFetchedMints = this.getNotFetchedTokensList(notSortedTokensList);
|
86
|
+
return {
|
87
|
+
tokensList: notSortedTokensList,
|
88
|
+
notFetchedMints,
|
89
|
+
hasNotFetchedTokens: notFetchedMints.length > 0
|
90
|
+
};
|
91
|
+
}
|
92
|
+
sortTokensByIdx(notSortedList) {
|
93
|
+
const sortedList = [];
|
94
|
+
for (const token of notSortedList) {
|
95
|
+
const originalIdx = this.tokensOrder[token.address.toLowerCase()];
|
96
|
+
sortedList[originalIdx] = token;
|
97
|
+
}
|
98
|
+
return sortedList;
|
99
|
+
}
|
100
|
+
getNotFetchedTokensList(tokensList) {
|
101
|
+
const notFetchedTokensList = this.initialMints.filter(mint => tokensList.every(token => !(0, blockchain_1.compareAddresses)(token.address, mint.toString())));
|
102
|
+
return notFetchedTokensList;
|
103
|
+
}
|
104
|
+
}
|
105
|
+
exports.SolanaTokensService = SolanaTokensService;
|
106
|
+
//# sourceMappingURL=solana-tokens-service.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"solana-tokens-service.js","sourceRoot":"","sources":["../../../../../../../src/core/blockchain/web3-public-service/web3-public/solana-web3-public/services/solana-tokens-service.ts"],"names":[],"mappings":"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"}
|
@@ -13,13 +13,16 @@ import { AbiItem } from 'web3-utils';
|
|
13
13
|
*/
|
14
14
|
export declare class SolanaWeb3Public extends Web3Public {
|
15
15
|
private readonly connection;
|
16
|
+
private readonly MAX_TRANSFER_COST;
|
16
17
|
constructor(connection: Connection);
|
18
|
+
getLastComputeUnits(): Promise<BigNumber>;
|
17
19
|
getBlockNumber(): Promise<number>;
|
18
20
|
multicallContractsMethods<Output extends Web3PrimitiveType>(_contractAbi: AbiItem[], _contractsData: {
|
19
21
|
contractAddress: string;
|
20
22
|
methodsData: MethodData[];
|
21
23
|
}[]): Promise<ContractMulticallResponse<Output>[][]>;
|
22
24
|
getTransactionStatus(hash: string): Promise<TxStatus>;
|
25
|
+
callForTokenInfo(tokenAddress: string, tokenFields?: SupportedTokenField[]): Promise<Partial<Record<SupportedTokenField, string>>>;
|
23
26
|
callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>, tokenFields?: SupportedTokenField[]): Promise<Partial<Record<SupportedTokenField, string>>[]>;
|
24
27
|
getBalance(userAddress: string, tokenAddress: string): Promise<BigNumber>;
|
25
28
|
getTokenBalance(address: string, tokenAddress: string): Promise<BigNumber>;
|
@@ -29,8 +32,6 @@ export declare class SolanaWeb3Public extends Web3Public {
|
|
29
32
|
gasPrice?: string;
|
30
33
|
gas?: string;
|
31
34
|
}): Promise<T>;
|
32
|
-
private fetchMints;
|
33
|
-
private hasNotFetchedTokens;
|
34
35
|
healthCheck(timeoutMs?: number): Promise<boolean>;
|
35
36
|
/**
|
36
37
|
* Gets balance of multiple tokens.
|
package/lib/core/blockchain/web3-public-service/web3-public/solana-web3-public/solana-web3-public.js
CHANGED
@@ -1,10 +1,4 @@
|
|
1
1
|
"use strict";
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
7
|
-
};
|
8
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
9
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
10
4
|
};
|
@@ -12,18 +6,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
6
|
exports.SolanaWeb3Public = void 0;
|
13
7
|
const spl_token_1 = require("@solana/spl-token");
|
14
8
|
const web3_js_1 = require("@solana/web3.js");
|
15
|
-
const utl_sdk_1 = require("@solflare-wallet/utl-sdk");
|
16
9
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
17
10
|
const rxjs_1 = require("rxjs");
|
18
11
|
const native_tokens_1 = require("../../../../../common/tokens/constants/native-tokens");
|
19
|
-
const blockchain_1 = require("../../../../../common/utils/blockchain");
|
20
|
-
const decorators_1 = require("../../../../../common/utils/decorators");
|
21
12
|
const native_solana_mint_address_1 = require("../../../constants/solana/native-solana-mint-address");
|
22
13
|
const blockchain_name_1 = require("../../../models/blockchain-name");
|
23
14
|
const tx_status_1 = require("../models/tx-status");
|
24
15
|
const web3_public_1 = require("../web3-public");
|
25
16
|
const solana_web3_pure_1 = require("../../../web3-pure/typed-web3-pure/solana-web3-pure/solana-web3-pure");
|
26
|
-
const
|
17
|
+
const solana_tokens_service_1 = require("./services/solana-tokens-service");
|
27
18
|
/**
|
28
19
|
* Class containing methods for calling contracts in order to obtain information from the blockchain.
|
29
20
|
* To send transaction or execute contract method use {@link Web3Private}.
|
@@ -32,6 +23,21 @@ class SolanaWeb3Public extends web3_public_1.Web3Public {
|
|
32
23
|
constructor(connection) {
|
33
24
|
super(blockchain_name_1.BLOCKCHAIN_NAME.SOLANA);
|
34
25
|
this.connection = connection;
|
26
|
+
this.MAX_TRANSFER_COST = 10000;
|
27
|
+
}
|
28
|
+
/* like gasLimit in evm */
|
29
|
+
async getLastComputeUnits() {
|
30
|
+
const latestSlot = await this.connection.getSlot();
|
31
|
+
const block = await this.connection.getParsedBlock(latestSlot, {
|
32
|
+
transactionDetails: 'full',
|
33
|
+
maxSupportedTransactionVersion: 0
|
34
|
+
});
|
35
|
+
const txCountInLastBlock = block.transactions.length;
|
36
|
+
const onlyDeFiSwaps = block.transactions.filter(tx => Number(tx.meta?.computeUnitsConsumed) > this.MAX_TRANSFER_COST);
|
37
|
+
const totalGasForSwaps = onlyDeFiSwaps.reduce((acc, tx) => acc + Number(tx.meta?.computeUnitsConsumed), 0);
|
38
|
+
const avgGas = new bignumber_js_1.default(totalGasForSwaps).dividedBy(txCountInLastBlock);
|
39
|
+
console.log('%cLAST_BLOCK ===> ', 'color: pink; font-size: 20px;', { block, avgGas });
|
40
|
+
return avgGas;
|
35
41
|
}
|
36
42
|
getBlockNumber() {
|
37
43
|
return this.connection.getBlockHeight('finalized');
|
@@ -56,25 +62,33 @@ class SolanaWeb3Public extends web3_public_1.Web3Public {
|
|
56
62
|
return tx_status_1.TX_STATUS.PENDING;
|
57
63
|
}
|
58
64
|
}
|
59
|
-
async
|
65
|
+
async callForTokenInfo(tokenAddress, tokenFields = ['decimals', 'symbol', 'name', 'image']) {
|
66
|
+
return (await this.callForTokensInfo([tokenAddress], tokenFields))[0];
|
67
|
+
}
|
68
|
+
async callForTokensInfo(tokenAddresses, tokenFields = ['decimals', 'symbol', 'name', 'image']) {
|
60
69
|
const nativeTokenIndex = tokenAddresses.findIndex(address => this.Web3Pure.isNativeAddress(address));
|
61
70
|
const filteredTokenAddresses = tokenAddresses.filter((_, index) => index !== nativeTokenIndex);
|
62
|
-
const { preparedTokens, addresses } = solana_tokens_api_service_1.SolanaTokensApiService.prepareTokens(filteredTokenAddresses);
|
63
|
-
const mints = addresses.map(address => new web3_js_1.PublicKey(address));
|
64
|
-
const tokensMint = await this.fetchMints(mints);
|
65
|
-
const fetchedTokens = tokensMint.map(token => {
|
66
|
-
const entries = tokenFields.map(field => [field, token?.[field]]);
|
67
|
-
return Object.fromEntries(entries);
|
68
|
-
});
|
69
|
-
const tokens = [...fetchedTokens, ...preparedTokens];
|
70
|
-
if (nativeTokenIndex === -1) {
|
71
|
-
return tokens;
|
72
|
-
}
|
73
71
|
const blockchainNativeToken = native_tokens_1.nativeTokensList[this.blockchainName];
|
74
72
|
const nativeToken = {
|
75
73
|
...blockchainNativeToken,
|
76
74
|
decimals: blockchainNativeToken.decimals.toString()
|
77
75
|
};
|
76
|
+
// only native token in array
|
77
|
+
if (!filteredTokenAddresses.length && nativeTokenIndex !== -1) {
|
78
|
+
return [nativeToken];
|
79
|
+
}
|
80
|
+
const mints = filteredTokenAddresses.map(address => new web3_js_1.PublicKey(address));
|
81
|
+
const tokensMint = await new solana_tokens_service_1.SolanaTokensService(this.connection).fetchTokensData(mints);
|
82
|
+
const tokens = tokensMint.map(token => {
|
83
|
+
const data = tokenFields.reduce((acc, fieldName) => ({
|
84
|
+
...acc,
|
85
|
+
[fieldName]: fieldName === 'image' ? token.logoURI : token[fieldName]
|
86
|
+
}), {});
|
87
|
+
return data;
|
88
|
+
});
|
89
|
+
if (nativeTokenIndex === -1) {
|
90
|
+
return tokens;
|
91
|
+
}
|
78
92
|
tokens.splice(nativeTokenIndex, 0, nativeToken);
|
79
93
|
return tokens;
|
80
94
|
}
|
@@ -94,49 +108,6 @@ class SolanaWeb3Public extends web3_public_1.Web3Public {
|
|
94
108
|
async callContractMethod(_contractAddress, _contractAbi, _methodName, _methodArguments = [], _options = {}) {
|
95
109
|
throw new Error('Method call is not supported');
|
96
110
|
}
|
97
|
-
async fetchMints(mints) {
|
98
|
-
const tokensAddresses = mints.map(mint => mint.toString());
|
99
|
-
let tokensList = [];
|
100
|
-
let notFetchedList = [];
|
101
|
-
const m = await (0, spl_token_1.getMint)(this.connection, mints[0], 'confirmed');
|
102
|
-
const tokenData = await (0, spl_token_1.getTokenMetadata)(this.connection, mints[0], 'confirmed').catch(err => err);
|
103
|
-
console.log(`%cMINT`, 'color: aqua; font-sie: 20px;', { mint: m, tokenData });
|
104
|
-
try {
|
105
|
-
const { content } = await solana_tokens_api_service_1.SolanaTokensApiService.getTokensList(tokensAddresses);
|
106
|
-
tokensList = content;
|
107
|
-
notFetchedList = mints.filter(mint => tokensList.some(token => !(0, blockchain_1.compareAddresses)(token.address, mint.toString())));
|
108
|
-
}
|
109
|
-
catch { }
|
110
|
-
if (!this.hasNotFetchedTokens(notFetchedList))
|
111
|
-
return tokensList;
|
112
|
-
const config = new utl_sdk_1.UtlConfig({
|
113
|
-
connection: this.connection,
|
114
|
-
timeout: 5000
|
115
|
-
});
|
116
|
-
const tokenSDK = new utl_sdk_1.Client(config);
|
117
|
-
const metaplexTokens = await tokenSDK.getFromMetaplex(notFetchedList);
|
118
|
-
notFetchedList = mints.filter(mint => [...tokensList, ...metaplexTokens].some(token => !(0, blockchain_1.compareAddresses)(token.address, mint.toString())));
|
119
|
-
if (!this.hasNotFetchedTokens(notFetchedList))
|
120
|
-
return [...tokensList, ...metaplexTokens];
|
121
|
-
// const splApiResp = await Promise.all(
|
122
|
-
notFetchedList.map(mint => (0, spl_token_1.getTokenMetadata)(this.connection, mint, 'confirmed'));
|
123
|
-
// );
|
124
|
-
// const splApiTokens = splApiResp.filter(Boolean).map(
|
125
|
-
// token =>
|
126
|
-
// ({
|
127
|
-
// name: token!.name,
|
128
|
-
// symbol: token!.symbol,
|
129
|
-
// logoURI: token!.uri,
|
130
|
-
// decimals: Number(token?.additionalMetadata?.[0]?.[0] || 9),
|
131
|
-
// address: token!.mint.toString(),
|
132
|
-
// verified: true
|
133
|
-
// } as SolanaToken)
|
134
|
-
// );
|
135
|
-
return [...tokensList, ...metaplexTokens];
|
136
|
-
}
|
137
|
-
hasNotFetchedTokens(notFetchedList) {
|
138
|
-
return notFetchedList.length > 0;
|
139
|
-
}
|
140
111
|
healthCheck(timeoutMs = 4000) {
|
141
112
|
const request = this.connection.getBalanceAndContext(new web3_js_1.PublicKey('DVLwQbEaw5txuduQwvfbNP3sXvjawHqaoMuGMKZx15bQ'), 'confirmed');
|
142
113
|
return (0, rxjs_1.firstValueFrom)((0, rxjs_1.from)(request).pipe((0, rxjs_1.timeout)(timeoutMs), (0, rxjs_1.map)(result => Boolean(result)), (0, rxjs_1.catchError)((err) => {
|
@@ -157,7 +128,7 @@ class SolanaWeb3Public extends web3_public_1.Web3Public {
|
|
157
128
|
async getTokensBalances(address, tokensAddresses) {
|
158
129
|
const resp = await this.connection._rpcRequest('getTokenAccountsByOwner', [
|
159
130
|
address,
|
160
|
-
{ programId:
|
131
|
+
{ programId: spl_token_1.TOKEN_PROGRAM_ID },
|
161
132
|
{ encoding: 'jsonParsed' }
|
162
133
|
]);
|
163
134
|
const tokenInfo = new Map(resp.result.value.map(el => {
|
@@ -191,7 +162,4 @@ class SolanaWeb3Public extends web3_public_1.Web3Public {
|
|
191
162
|
}
|
192
163
|
}
|
193
164
|
exports.SolanaWeb3Public = SolanaWeb3Public;
|
194
|
-
__decorate([
|
195
|
-
decorators_1.Cache
|
196
|
-
], SolanaWeb3Public.prototype, "callForTokensInfo", null);
|
197
165
|
//# sourceMappingURL=solana-web3-public.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solana-web3-public.js","sourceRoot":"","sources":["../../../../../../src/core/blockchain/web3-public-service/web3-public/solana-web3-public/solana-web3-public.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"solana-web3-public.js","sourceRoot":"","sources":["../../../../../../src/core/blockchain/web3-public-service/web3-public/solana-web3-public/solana-web3-public.ts"],"names":[],"mappings":"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"}
|