@cryptorubic/web3 0.8.5-alpha.2 → 0.8.6-alpha-relay-solana.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 CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@cryptorubic/web3",
3
- "version": "0.8.5-alpha.2",
3
+ "version": "0.8.6-alpha-relay-solana.0",
4
4
  "dependencies": {
5
5
  "tslib": "^2.3.0",
6
6
  "bignumber.js": "9.1.2",
7
- "@cryptorubic/core": "0.8.5-alpha.2",
7
+ "@cryptorubic/core": "0.8.6-alpha-relay-solana.0",
8
8
  "viem": "^2.19.1",
9
9
  "web3-utils": "^4.3.1",
10
10
  "@ton/ton": "^15.1.0",
11
11
  "@solana/web3.js": "1.95.3",
12
12
  "@solflare-wallet/utl-sdk": "^1.4.0",
13
13
  "@ethersproject/bignumber": "^5.7.0",
14
- "@cryptorubic/tron-types": "0.8.5-alpha.2",
14
+ "@cryptorubic/tron-types": "0.8.6-alpha-relay-solana.0",
15
15
  "bitcoin-address-validation": "^2.2.3",
16
16
  "axios": "0.27.2",
17
17
  "crc-32": "^1.2.2",
@@ -49,3 +49,12 @@ export type ReturnValue = Promise<{
49
49
  }>;
50
50
  }>>;
51
51
  }>;
52
+ export interface SolanaRawInstruction {
53
+ data: string;
54
+ keys: {
55
+ isSigner: boolean;
56
+ isWritable: boolean;
57
+ pubkey: string;
58
+ }[];
59
+ programId: string;
60
+ }
@@ -1,9 +1,10 @@
1
1
  import { Abi, MulticallResponse, MulticallParameters } from 'viem';
2
2
  import { AbstractAdapter } from './abstract-adapter';
3
- import { Connection } from '@solana/web3.js';
3
+ import { Connection, TransactionInstruction, VersionedTransaction } from '@solana/web3.js';
4
4
  import { HttpClient, ICustomLogger, PriceTokenAmount, SolanaBlockchainName, Token, TokenAmount } from '@cryptorubic/core';
5
5
  import { EvmTransactionConfig } from '../../utils/models/evm-transaction-config';
6
6
  import BigNumber from 'bignumber.js';
7
+ import { SolanaRawInstruction } from './models/solana-web3-types';
7
8
  export declare const NATIVE_SOLANA_MINT_ADDRESS = "So11111111111111111111111111111111111111111";
8
9
  export declare class SolanaAdapter extends AbstractAdapter<Connection, Connection, SolanaBlockchainName> {
9
10
  private readonly httpClient;
@@ -23,4 +24,6 @@ export declare class SolanaAdapter extends AbstractAdapter<Connection, Connectio
23
24
  */
24
25
  getTokensBalances(address: string, tokensAddresses: string[]): Promise<BigNumber[]>;
25
26
  callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token<SolanaBlockchainName>[]>;
27
+ parseRawInstruction(rawInstruction: SolanaRawInstruction[], dataFormat: BufferEncoding): TransactionInstruction[];
28
+ createVersionedTransaction(instructions: TransactionInstruction[], walletAddress: string, addressLookupTableAddresses?: string[]): Promise<VersionedTransaction>;
26
29
  }
@@ -70,32 +70,6 @@ class SolanaAdapter extends abstract_adapter_1.AbstractAdapter {
70
70
  return new bignumber_js_1.default(tokenWithBalance || NaN);
71
71
  });
72
72
  }
73
- // public async callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token<SolanaBlockchainName>[]> {
74
- // const nativeToken = nativeTokensList[BLOCKCHAIN_NAME.SOLANA] as Token<SolanaBlockchainName>;
75
- // const nativeTokenIndex = tokenAddresses.findIndex((address) => Web3Pure.isNativeAddress(CHAIN_TYPE.SOLANA, address));
76
- // const filteredTokenAddresses = tokenAddresses.filter((_, index) => index !== nativeTokenIndex);
77
- // // only native token in tokenAddresses
78
- // if (!filteredTokenAddresses.length) {
79
- // return [nativeToken];
80
- // }
81
- // const mints = filteredTokenAddresses.map((address) => new PublicKey(address));
82
- // const tokenSdk = new TokenSdk();
83
- // const tokensMint = await tokenSdk.fetchMints(mints);
84
- // const tokens = tokensMint.map((token) => {
85
- // return new Token({
86
- // address: token.address.toString(),
87
- // blockchain: BLOCKCHAIN_NAME.SOLANA,
88
- // decimals: token.decimals!,
89
- // name: token.name,
90
- // symbol: token.symbol
91
- // });
92
- // });
93
- // if (nativeTokenIndex === -1) {
94
- // return tokens;
95
- // }
96
- // tokens.splice(nativeTokenIndex, 0, nativeToken);
97
- // return tokens;
98
- // }
99
73
  async callForTokensInfo(tokenAddresses) {
100
74
  const nativeToken = core_1.nativeTokensList[core_1.BLOCKCHAIN_NAME.SOLANA];
101
75
  const nativeTokenIndex = tokenAddresses.findIndex((address) => web3_pure_1.Web3Pure.isNativeAddress(core_1.CHAIN_TYPE.SOLANA, address));
@@ -121,5 +95,32 @@ class SolanaAdapter extends abstract_adapter_1.AbstractAdapter {
121
95
  tokens.splice(nativeTokenIndex, 0, nativeToken);
122
96
  return tokens;
123
97
  }
98
+ parseRawInstruction(rawInstruction, dataFormat) {
99
+ return rawInstruction.map((instruction) => {
100
+ return new web3_js_1.TransactionInstruction({
101
+ keys: instruction.keys.map((key) => ({
102
+ pubkey: new web3_js_1.PublicKey(key.pubkey),
103
+ isWritable: key.isWritable,
104
+ isSigner: key.isSigner
105
+ })),
106
+ data: Buffer.from(instruction.data, dataFormat),
107
+ programId: new web3_js_1.PublicKey(instruction.programId)
108
+ });
109
+ });
110
+ }
111
+ async createVersionedTransaction(instructions, walletAddress, addressLookupTableAddresses) {
112
+ const { blockhash } = await this.public.getLatestBlockhash();
113
+ let addressLookupTableAccounts = [];
114
+ if (addressLookupTableAddresses) {
115
+ const res = await Promise.all(addressLookupTableAddresses.map((address) => this.public.getAddressLookupTable(new web3_js_1.PublicKey(address)).then((v) => v.value)));
116
+ addressLookupTableAccounts = res.filter((v) => !!v);
117
+ }
118
+ const message = new web3_js_1.TransactionMessage({
119
+ instructions,
120
+ payerKey: new web3_js_1.PublicKey(walletAddress),
121
+ recentBlockhash: blockhash
122
+ }).compileToV0Message(addressLookupTableAccounts);
123
+ return new web3_js_1.VersionedTransaction(message);
124
+ }
124
125
  }
125
126
  exports.SolanaAdapter = SolanaAdapter;
@@ -109,12 +109,6 @@ class SolanaTokensService {
109
109
  const notFetchedTokensList = this.initialMints.filter((mint) => !fetchedTokensMap.get(mint.toString()));
110
110
  return notFetchedTokensList;
111
111
  }
112
- // private getNotFetchedTokensList(tokensList: SolanaToken[]): PublicKey[] {
113
- // const notFetchedTokensList = this.initialMints.filter((mint) =>
114
- // tokensList.every((token) => !compareAddresses(token.address, mint.toString()))
115
- // );
116
- // return notFetchedTokensList;
117
- // }
118
112
  async getTokensList(tokenAddresses) {
119
113
  try {
120
114
  const queryParams = tokenAddresses.length > 1 ? { addresses: tokenAddresses.join(',') } : { query: tokenAddresses[0] };