@reown/appkit-solana-react-native 0.0.0-accounts-canary.1-20251023174733
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/commonjs/adapter.js +271 -0
- package/lib/commonjs/adapter.js.map +1 -0
- package/lib/commonjs/connectors/DeeplinkConnector.js +271 -0
- package/lib/commonjs/connectors/DeeplinkConnector.js.map +1 -0
- package/lib/commonjs/connectors/PhantomConnector.js +39 -0
- package/lib/commonjs/connectors/PhantomConnector.js.map +1 -0
- package/lib/commonjs/connectors/SolflareConnector.js +39 -0
- package/lib/commonjs/connectors/SolflareConnector.js.map +1 -0
- package/lib/commonjs/helpers.js +102 -0
- package/lib/commonjs/helpers.js.map +1 -0
- package/lib/commonjs/index.js +27 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/providers/DeeplinkProvider.js +432 -0
- package/lib/commonjs/providers/DeeplinkProvider.js.map +1 -0
- package/lib/commonjs/types.js +6 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/utils/createSPLTokenTransaction.js +96 -0
- package/lib/commonjs/utils/createSPLTokenTransaction.js.map +1 -0
- package/lib/commonjs/utils/createSendTransaction.js +30 -0
- package/lib/commonjs/utils/createSendTransaction.js.map +1 -0
- package/lib/module/adapter.js +265 -0
- package/lib/module/adapter.js.map +1 -0
- package/lib/module/connectors/DeeplinkConnector.js +265 -0
- package/lib/module/connectors/DeeplinkConnector.js.map +1 -0
- package/lib/module/connectors/PhantomConnector.js +34 -0
- package/lib/module/connectors/PhantomConnector.js.map +1 -0
- package/lib/module/connectors/SolflareConnector.js +34 -0
- package/lib/module/connectors/SolflareConnector.js.map +1 -0
- package/lib/module/helpers.js +95 -0
- package/lib/module/helpers.js.map +1 -0
- package/lib/module/index.js +11 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/providers/DeeplinkProvider.js +426 -0
- package/lib/module/providers/DeeplinkProvider.js.map +1 -0
- package/lib/module/types.js +4 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils/createSPLTokenTransaction.js +92 -0
- package/lib/module/utils/createSPLTokenTransaction.js.map +1 -0
- package/lib/module/utils/createSendTransaction.js +26 -0
- package/lib/module/utils/createSendTransaction.js.map +1 -0
- package/lib/typescript/adapter.d.ts +23 -0
- package/lib/typescript/adapter.d.ts.map +1 -0
- package/lib/typescript/connectors/DeeplinkConnector.d.ts +30 -0
- package/lib/typescript/connectors/DeeplinkConnector.d.ts.map +1 -0
- package/lib/typescript/connectors/PhantomConnector.d.ts +12 -0
- package/lib/typescript/connectors/PhantomConnector.d.ts.map +1 -0
- package/lib/typescript/connectors/SolflareConnector.d.ts +12 -0
- package/lib/typescript/connectors/SolflareConnector.d.ts.map +1 -0
- package/lib/typescript/helpers.d.ts +31 -0
- package/lib/typescript/helpers.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +5 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/providers/DeeplinkProvider.d.ts +59 -0
- package/lib/typescript/providers/DeeplinkProvider.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +99 -0
- package/lib/typescript/types.d.ts.map +1 -0
- package/lib/typescript/utils/createSPLTokenTransaction.d.ts +4 -0
- package/lib/typescript/utils/createSPLTokenTransaction.d.ts.map +1 -0
- package/lib/typescript/utils/createSendTransaction.d.ts +10 -0
- package/lib/typescript/utils/createSendTransaction.d.ts.map +1 -0
- package/package.json +54 -0
- package/readme.md +9 -0
- package/src/adapter.ts +315 -0
- package/src/connectors/DeeplinkConnector.ts +353 -0
- package/src/connectors/PhantomConnector.ts +36 -0
- package/src/connectors/SolflareConnector.ts +36 -0
- package/src/helpers.ts +102 -0
- package/src/index.ts +9 -0
- package/src/providers/DeeplinkProvider.ts +605 -0
- package/src/types.ts +132 -0
- package/src/utils/createSPLTokenTransaction.ts +152 -0
- package/src/utils/createSendTransaction.ts +41 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createSPLTokenTransaction = createSPLTokenTransaction;
|
|
7
|
+
var _splToken = require("@solana/spl-token");
|
|
8
|
+
var _web = require("@solana/web3.js");
|
|
9
|
+
const SPL_COMPUTE_BUDGET_CONSTANTS = {
|
|
10
|
+
UNIT_PRICE_MICRO_LAMPORTS: 1000000,
|
|
11
|
+
UNIT_LIMIT_WITH_ATA_CREATION: 400000
|
|
12
|
+
};
|
|
13
|
+
async function getMintOwnerProgramId(connection, mint) {
|
|
14
|
+
const info = await connection.getAccountInfo(mint);
|
|
15
|
+
if (!info) {
|
|
16
|
+
throw new Error('Mint account not found');
|
|
17
|
+
}
|
|
18
|
+
if (info.owner.equals(_splToken.TOKEN_PROGRAM_ID)) {
|
|
19
|
+
return _splToken.TOKEN_PROGRAM_ID;
|
|
20
|
+
}
|
|
21
|
+
if (info.owner.equals(_splToken.TOKEN_2022_PROGRAM_ID)) {
|
|
22
|
+
return _splToken.TOKEN_2022_PROGRAM_ID;
|
|
23
|
+
}
|
|
24
|
+
throw new Error('Unknown mint owner program');
|
|
25
|
+
}
|
|
26
|
+
async function createSPLTokenTransaction({
|
|
27
|
+
fromAddress,
|
|
28
|
+
toAddress,
|
|
29
|
+
amount,
|
|
30
|
+
tokenMint,
|
|
31
|
+
connection
|
|
32
|
+
}) {
|
|
33
|
+
if (!fromAddress) {
|
|
34
|
+
throw new Error('No public key found');
|
|
35
|
+
}
|
|
36
|
+
if (amount <= 0) {
|
|
37
|
+
throw new Error('Amount must be greater than 0');
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const fromPubkey = new _web.PublicKey(fromAddress);
|
|
41
|
+
const toPubkey = new _web.PublicKey(toAddress);
|
|
42
|
+
const mintPubkey = new _web.PublicKey(tokenMint);
|
|
43
|
+
const programId = await getMintOwnerProgramId(connection, mintPubkey);
|
|
44
|
+
const mintInfo = await (0, _splToken.getMint)(connection, mintPubkey, undefined, programId);
|
|
45
|
+
const decimals = mintInfo.decimals;
|
|
46
|
+
if (decimals < 0) {
|
|
47
|
+
throw new Error('Invalid token decimals');
|
|
48
|
+
}
|
|
49
|
+
const tokenAmount = Math.floor(amount * 10 ** decimals);
|
|
50
|
+
const fromTokenAccount = (0, _splToken.getAssociatedTokenAddressSync)(mintPubkey, fromPubkey, false, programId);
|
|
51
|
+
const toTokenAccount = (0, _splToken.getAssociatedTokenAddressSync)(mintPubkey, toPubkey, false, programId);
|
|
52
|
+
try {
|
|
53
|
+
const fromAccount = await (0, _splToken.getAccount)(connection, fromTokenAccount, undefined, programId);
|
|
54
|
+
if (fromAccount.amount < BigInt(tokenAmount)) {
|
|
55
|
+
throw new Error('Insufficient token balance');
|
|
56
|
+
}
|
|
57
|
+
} catch (error) {
|
|
58
|
+
if (error instanceof _splToken.TokenAccountNotFoundError) {
|
|
59
|
+
throw new Error('Sender does not have a token account for this mint');
|
|
60
|
+
}
|
|
61
|
+
throw error;
|
|
62
|
+
}
|
|
63
|
+
let shouldCreateATA = false;
|
|
64
|
+
try {
|
|
65
|
+
await (0, _splToken.getAccount)(connection, toTokenAccount, undefined, programId);
|
|
66
|
+
} catch (error) {
|
|
67
|
+
if (error instanceof _splToken.TokenAccountNotFoundError) {
|
|
68
|
+
shouldCreateATA = true;
|
|
69
|
+
} else {
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const instructions = [];
|
|
74
|
+
if (shouldCreateATA) {
|
|
75
|
+
instructions.push(_web.ComputeBudgetProgram.setComputeUnitPrice({
|
|
76
|
+
microLamports: SPL_COMPUTE_BUDGET_CONSTANTS.UNIT_PRICE_MICRO_LAMPORTS
|
|
77
|
+
}), _web.ComputeBudgetProgram.setComputeUnitLimit({
|
|
78
|
+
units: SPL_COMPUTE_BUDGET_CONSTANTS.UNIT_LIMIT_WITH_ATA_CREATION
|
|
79
|
+
}));
|
|
80
|
+
instructions.push((0, _splToken.createAssociatedTokenAccountInstruction)(fromPubkey, toTokenAccount, toPubkey, mintPubkey, programId));
|
|
81
|
+
}
|
|
82
|
+
instructions.push((0, _splToken.createTransferCheckedInstruction)(fromTokenAccount, mintPubkey, toTokenAccount, fromPubkey, tokenAmount, decimals, [], programId));
|
|
83
|
+
const {
|
|
84
|
+
blockhash,
|
|
85
|
+
lastValidBlockHeight
|
|
86
|
+
} = await connection.getLatestBlockhash();
|
|
87
|
+
return new _web.Transaction({
|
|
88
|
+
feePayer: fromPubkey,
|
|
89
|
+
blockhash,
|
|
90
|
+
lastValidBlockHeight
|
|
91
|
+
}).add(...instructions);
|
|
92
|
+
} catch (error) {
|
|
93
|
+
throw new Error(`Failed to create SPL token transaction: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=createSPLTokenTransaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_splToken","require","_web","SPL_COMPUTE_BUDGET_CONSTANTS","UNIT_PRICE_MICRO_LAMPORTS","UNIT_LIMIT_WITH_ATA_CREATION","getMintOwnerProgramId","connection","mint","info","getAccountInfo","Error","owner","equals","TOKEN_PROGRAM_ID","TOKEN_2022_PROGRAM_ID","createSPLTokenTransaction","fromAddress","toAddress","amount","tokenMint","fromPubkey","PublicKey","toPubkey","mintPubkey","programId","mintInfo","getMint","undefined","decimals","tokenAmount","Math","floor","fromTokenAccount","getAssociatedTokenAddressSync","toTokenAccount","fromAccount","getAccount","BigInt","error","TokenAccountNotFoundError","shouldCreateATA","instructions","push","ComputeBudgetProgram","setComputeUnitPrice","microLamports","setComputeUnitLimit","units","createAssociatedTokenAccountInstruction","createTransferCheckedInstruction","blockhash","lastValidBlockHeight","getLatestBlockhash","Transaction","feePayer","add","message"],"sourceRoot":"../../../src","sources":["utils/createSPLTokenTransaction.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createSendTransaction = createSendTransaction;
|
|
7
|
+
var _web = require("@solana/web3.js");
|
|
8
|
+
async function createSendTransaction({
|
|
9
|
+
fromAddress,
|
|
10
|
+
toAddress,
|
|
11
|
+
amount,
|
|
12
|
+
connection
|
|
13
|
+
}) {
|
|
14
|
+
const fromPubkey = new _web.PublicKey(fromAddress);
|
|
15
|
+
const toPubkey = new _web.PublicKey(toAddress);
|
|
16
|
+
const lamports = Math.floor(amount * _web.LAMPORTS_PER_SOL);
|
|
17
|
+
const {
|
|
18
|
+
blockhash
|
|
19
|
+
} = await connection.getLatestBlockhash();
|
|
20
|
+
const instructions = [_web.SystemProgram.transfer({
|
|
21
|
+
fromPubkey,
|
|
22
|
+
toPubkey,
|
|
23
|
+
lamports
|
|
24
|
+
})];
|
|
25
|
+
const transaction = new _web.Transaction().add(...instructions);
|
|
26
|
+
transaction.feePayer = fromPubkey;
|
|
27
|
+
transaction.recentBlockhash = blockhash;
|
|
28
|
+
return transaction;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=createSendTransaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_web","require","createSendTransaction","fromAddress","toAddress","amount","connection","fromPubkey","PublicKey","toPubkey","lamports","Math","floor","LAMPORTS_PER_SOL","blockhash","getLatestBlockhash","instructions","SystemProgram","transfer","transaction","Transaction","add","feePayer","recentBlockhash"],"sourceRoot":"../../../src","sources":["utils/createSendTransaction.ts"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AAeO,eAAeC,qBAAqBA,CAAC;EAC1CC,WAAW;EACXC,SAAS;EACTC,MAAM;EACNC;AACmB,CAAC,EAAwB;EAC5C,MAAMC,UAAU,GAAG,IAAIC,cAAS,CAACL,WAAW,CAAC;EAC7C,MAAMM,QAAQ,GAAG,IAAID,cAAS,CAACJ,SAAS,CAAC;EACzC,MAAMM,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAACP,MAAM,GAAGQ,qBAAgB,CAAC;EAEtD,MAAM;IAAEC;EAAU,CAAC,GAAG,MAAMR,UAAU,CAACS,kBAAkB,CAAC,CAAC;EAE3D,MAAMC,YAAY,GAAG,CACnBC,kBAAa,CAACC,QAAQ,CAAC;IACrBX,UAAU;IACVE,QAAQ;IACRC;EACF,CAAC,CAAC,CACH;EAED,MAAMS,WAAW,GAAG,IAAIC,gBAAW,CAAC,CAAC,CAACC,GAAG,CAAC,GAAGL,YAAY,CAAC;EAC1DG,WAAW,CAACG,QAAQ,GAAGf,UAAU;EACjCY,WAAW,CAACI,eAAe,GAAGT,SAAS;EAEvC,OAAOK,WAAW;AACpB","ignoreList":[]}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { SolanaBaseAdapter } from '@reown/appkit-common-react-native';
|
|
4
|
+
import { getSolanaNativeBalance, getSolanaTokenBalance } from './helpers';
|
|
5
|
+
import { Connection, Transaction, VersionedTransaction } from '@solana/web3.js';
|
|
6
|
+
import base58 from 'bs58';
|
|
7
|
+
import { createSendTransaction } from './utils/createSendTransaction';
|
|
8
|
+
import { createSPLTokenTransaction } from './utils/createSPLTokenTransaction';
|
|
9
|
+
export class SolanaAdapter extends SolanaBaseAdapter {
|
|
10
|
+
static supportedNamespace = 'solana';
|
|
11
|
+
constructor() {
|
|
12
|
+
super({
|
|
13
|
+
supportedNamespace: SolanaAdapter.supportedNamespace,
|
|
14
|
+
adapterType: 'solana'
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
async getBalance(params) {
|
|
18
|
+
const {
|
|
19
|
+
network,
|
|
20
|
+
address,
|
|
21
|
+
tokens
|
|
22
|
+
} = params;
|
|
23
|
+
if (!this.connector) throw new Error('No active connector');
|
|
24
|
+
if (!network) throw new Error('No network provided');
|
|
25
|
+
const balanceAddress = address || this.getAccounts()?.find(account => account.includes(network.id.toString()));
|
|
26
|
+
if (!balanceAddress) {
|
|
27
|
+
return {
|
|
28
|
+
amount: '0.00',
|
|
29
|
+
symbol: 'SOL'
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const rpcUrl = network.rpcUrls?.default?.http?.[0];
|
|
34
|
+
if (!rpcUrl) throw new Error('No RPC URL available');
|
|
35
|
+
const base58Address = balanceAddress.split(':')[2];
|
|
36
|
+
if (!base58Address) throw new Error('Invalid balance address');
|
|
37
|
+
const token = network?.caipNetworkId && tokens?.[network.caipNetworkId]?.address;
|
|
38
|
+
let balance;
|
|
39
|
+
if (token) {
|
|
40
|
+
const {
|
|
41
|
+
amount,
|
|
42
|
+
symbol
|
|
43
|
+
} = await getSolanaTokenBalance(rpcUrl, base58Address, token);
|
|
44
|
+
balance = {
|
|
45
|
+
amount,
|
|
46
|
+
symbol
|
|
47
|
+
};
|
|
48
|
+
} else {
|
|
49
|
+
const amount = await getSolanaNativeBalance(rpcUrl, base58Address);
|
|
50
|
+
balance = {
|
|
51
|
+
amount: amount.toString(),
|
|
52
|
+
symbol: 'SOL'
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
this.emit('balanceChanged', {
|
|
56
|
+
address: balanceAddress,
|
|
57
|
+
balance
|
|
58
|
+
});
|
|
59
|
+
return balance;
|
|
60
|
+
} catch (error) {
|
|
61
|
+
return {
|
|
62
|
+
amount: '0.00',
|
|
63
|
+
symbol: 'SOL'
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async signTransaction(transaction, network) {
|
|
68
|
+
if (!this.connector) {
|
|
69
|
+
throw new Error('SolanaAdapter:signTransaction - no active connector');
|
|
70
|
+
}
|
|
71
|
+
if (!network) {
|
|
72
|
+
throw new Error('SolanaAdapter:signTransaction - network is undefined');
|
|
73
|
+
}
|
|
74
|
+
const provider = this.connector.getProvider('solana');
|
|
75
|
+
if (!provider) {
|
|
76
|
+
throw new Error('SolanaAdapter:signTransaction - provider is undefined');
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
// Check if this is a deeplink provider (Phantom/Solflare)
|
|
80
|
+
const isDeeplinkProvider = this.connector.type === 'phantom' || this.connector.type === 'solflare';
|
|
81
|
+
|
|
82
|
+
// Serialize transaction based on provider type
|
|
83
|
+
let serializedTransaction;
|
|
84
|
+
if (isDeeplinkProvider) {
|
|
85
|
+
// Deeplink providers (Phantom/Solflare) expect base58
|
|
86
|
+
const transactionBytes = new Uint8Array(transaction.serialize({
|
|
87
|
+
verifySignatures: false
|
|
88
|
+
}));
|
|
89
|
+
serializedTransaction = base58.encode(transactionBytes);
|
|
90
|
+
} else {
|
|
91
|
+
// WalletConnect providers expect base64 (following WalletConnect standard)
|
|
92
|
+
serializedTransaction = Buffer.from(new Uint8Array(transaction.serialize({
|
|
93
|
+
verifySignatures: false
|
|
94
|
+
}))).toString('base64');
|
|
95
|
+
}
|
|
96
|
+
const result = await provider.request({
|
|
97
|
+
method: 'solana_signTransaction',
|
|
98
|
+
params: {
|
|
99
|
+
transaction: serializedTransaction,
|
|
100
|
+
pubkey: this.getAccounts()?.[0]?.split(':')[2] || ''
|
|
101
|
+
}
|
|
102
|
+
}, network.caipNetworkId);
|
|
103
|
+
|
|
104
|
+
// Handle different response formats
|
|
105
|
+
if ('signature' in result && result.signature) {
|
|
106
|
+
// Old RPC response format - add signature to transaction
|
|
107
|
+
const decoded = base58.decode(result.signature);
|
|
108
|
+
if (transaction instanceof Transaction && transaction.feePayer) {
|
|
109
|
+
transaction.addSignature(transaction.feePayer, Buffer.from(decoded));
|
|
110
|
+
}
|
|
111
|
+
return transaction;
|
|
112
|
+
}
|
|
113
|
+
if ('transaction' in result && result.transaction) {
|
|
114
|
+
// New response format - deserialize the signed transaction
|
|
115
|
+
let decodedTransaction;
|
|
116
|
+
if (isDeeplinkProvider) {
|
|
117
|
+
// Deeplink providers return base58 encoded transactions
|
|
118
|
+
try {
|
|
119
|
+
const decodedBytes = base58.decode(result.transaction);
|
|
120
|
+
decodedTransaction = Buffer.from(decodedBytes);
|
|
121
|
+
} catch (error) {
|
|
122
|
+
throw new Error('Failed to decode base58 transaction from deeplink provider');
|
|
123
|
+
}
|
|
124
|
+
} else {
|
|
125
|
+
// WalletConnect providers return base64 encoded transactions
|
|
126
|
+
decodedTransaction = Buffer.from(result.transaction, 'base64');
|
|
127
|
+
}
|
|
128
|
+
if (transaction instanceof VersionedTransaction) {
|
|
129
|
+
return VersionedTransaction.deserialize(new Uint8Array(decodedTransaction));
|
|
130
|
+
}
|
|
131
|
+
return Transaction.from(decodedTransaction);
|
|
132
|
+
}
|
|
133
|
+
throw new Error('SolanaAdapter:signTransaction - invalid response format');
|
|
134
|
+
} catch (error) {
|
|
135
|
+
if (error instanceof Error) {
|
|
136
|
+
throw new Error(`SolanaAdapter:signTransaction - ${error.message}`);
|
|
137
|
+
}
|
|
138
|
+
throw new Error('SolanaAdapter:signTransaction - unknown error occurred');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
async sendTransaction(data) {
|
|
142
|
+
const {
|
|
143
|
+
fromAddress,
|
|
144
|
+
toAddress,
|
|
145
|
+
amount,
|
|
146
|
+
network,
|
|
147
|
+
rpcUrl,
|
|
148
|
+
tokenMint
|
|
149
|
+
} = data;
|
|
150
|
+
if (!this.connector) {
|
|
151
|
+
throw new Error('SolanaAdapter:sendTransaction - no active connector');
|
|
152
|
+
}
|
|
153
|
+
const provider = this.connector.getProvider('solana');
|
|
154
|
+
if (!provider) {
|
|
155
|
+
throw new Error('SolanaAdapter:sendTransaction - provider is undefined');
|
|
156
|
+
}
|
|
157
|
+
if (!network) {
|
|
158
|
+
throw new Error('SolanaAdapter:sendTransaction - network is undefined');
|
|
159
|
+
}
|
|
160
|
+
if (!fromAddress) {
|
|
161
|
+
throw new Error('SolanaAdapter:sendTransaction - fromAddress is undefined');
|
|
162
|
+
}
|
|
163
|
+
if (!toAddress) {
|
|
164
|
+
throw new Error('SolanaAdapter:sendTransaction - toAddress is undefined');
|
|
165
|
+
}
|
|
166
|
+
if (!amount || amount <= 0) {
|
|
167
|
+
throw new Error('SolanaAdapter:sendTransaction - amount must be greater than 0');
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
// Determine RPC URL
|
|
171
|
+
let connectionRpcUrl = rpcUrl;
|
|
172
|
+
if (!connectionRpcUrl && network) {
|
|
173
|
+
connectionRpcUrl = network.rpcUrls?.default?.http?.[0];
|
|
174
|
+
}
|
|
175
|
+
if (!connectionRpcUrl) {
|
|
176
|
+
throw new Error('SolanaAdapter:sendTransaction - no RPC URL available');
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Create connection
|
|
180
|
+
const connection = new Connection(connectionRpcUrl, 'confirmed');
|
|
181
|
+
const transaction = tokenMint ? await createSPLTokenTransaction({
|
|
182
|
+
connection,
|
|
183
|
+
fromAddress,
|
|
184
|
+
toAddress,
|
|
185
|
+
amount,
|
|
186
|
+
tokenMint
|
|
187
|
+
}) : await createSendTransaction({
|
|
188
|
+
connection,
|
|
189
|
+
fromAddress,
|
|
190
|
+
toAddress,
|
|
191
|
+
amount
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
// Sign the transaction
|
|
195
|
+
const signedTransaction = await this.signTransaction(transaction, network);
|
|
196
|
+
|
|
197
|
+
// Send the signed transaction
|
|
198
|
+
const signature = await connection.sendRawTransaction(signedTransaction.serialize(), {
|
|
199
|
+
skipPreflight: false,
|
|
200
|
+
preflightCommitment: 'confirmed'
|
|
201
|
+
});
|
|
202
|
+
if (!signature) {
|
|
203
|
+
throw new Error('SolanaAdapter:sendTransaction - no signature returned');
|
|
204
|
+
}
|
|
205
|
+
return signature;
|
|
206
|
+
} catch (error) {
|
|
207
|
+
if (error instanceof Error) {
|
|
208
|
+
throw new Error(`SolanaAdapter:sendTransaction - ${error.message}`);
|
|
209
|
+
}
|
|
210
|
+
throw new Error('SolanaAdapter:sendTransaction - unknown error occurred');
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
async signMessage(address, message, chainId) {
|
|
214
|
+
try {
|
|
215
|
+
if (!this.connector) {
|
|
216
|
+
throw new Error('SolanaAdapter:signMessage - no active connector');
|
|
217
|
+
}
|
|
218
|
+
const provider = this.connector.getProvider('solana');
|
|
219
|
+
if (!provider) {
|
|
220
|
+
throw new Error('SolanaAdapter:signMessage - provider is undefined');
|
|
221
|
+
}
|
|
222
|
+
const chain = chainId ? `${this.getSupportedNamespace()}:${chainId}` : undefined;
|
|
223
|
+
const encodedMessage = new TextEncoder().encode(message);
|
|
224
|
+
const params = {
|
|
225
|
+
message: base58.encode(encodedMessage),
|
|
226
|
+
pubkey: address
|
|
227
|
+
// For Phantom, pubkey is not part of signMessage params directly with session
|
|
228
|
+
// For other wallets, it might be needed if they don't infer from session
|
|
229
|
+
};
|
|
230
|
+
const {
|
|
231
|
+
signature
|
|
232
|
+
} = await provider.request({
|
|
233
|
+
method: 'solana_signMessage',
|
|
234
|
+
params
|
|
235
|
+
}, chain);
|
|
236
|
+
return signature;
|
|
237
|
+
} catch (error) {
|
|
238
|
+
throw error;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
async switchNetwork(network) {
|
|
242
|
+
if (!this.connector) throw new Error('No active connector');
|
|
243
|
+
const provider = this.connector.getProvider('solana');
|
|
244
|
+
if (!provider) throw new Error('No active provider');
|
|
245
|
+
try {
|
|
246
|
+
await this.connector.switchNetwork(network);
|
|
247
|
+
return;
|
|
248
|
+
} catch (switchError) {
|
|
249
|
+
throw switchError;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
getAccounts() {
|
|
253
|
+
if (!this.connector) throw new Error('No active connector');
|
|
254
|
+
const namespaces = this.connector.getNamespaces();
|
|
255
|
+
return namespaces[this.getSupportedNamespace()]?.accounts;
|
|
256
|
+
}
|
|
257
|
+
disconnect() {
|
|
258
|
+
if (!this.connector) throw new Error('No active connector');
|
|
259
|
+
return this.connector.disconnect();
|
|
260
|
+
}
|
|
261
|
+
getSupportedNamespace() {
|
|
262
|
+
return SolanaAdapter.supportedNamespace;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SolanaBaseAdapter","getSolanaNativeBalance","getSolanaTokenBalance","Connection","Transaction","VersionedTransaction","base58","createSendTransaction","createSPLTokenTransaction","SolanaAdapter","supportedNamespace","constructor","adapterType","getBalance","params","network","address","tokens","connector","Error","balanceAddress","getAccounts","find","account","includes","id","toString","amount","symbol","rpcUrl","rpcUrls","default","http","base58Address","split","token","caipNetworkId","balance","emit","error","signTransaction","transaction","provider","getProvider","isDeeplinkProvider","type","serializedTransaction","transactionBytes","Uint8Array","serialize","verifySignatures","encode","Buffer","from","result","request","method","pubkey","signature","decoded","decode","feePayer","addSignature","decodedTransaction","decodedBytes","deserialize","message","sendTransaction","data","fromAddress","toAddress","tokenMint","connectionRpcUrl","connection","signedTransaction","sendRawTransaction","skipPreflight","preflightCommitment","signMessage","chainId","chain","getSupportedNamespace","undefined","encodedMessage","TextEncoder","switchNetwork","switchError","namespaces","getNamespaces","accounts","disconnect"],"sourceRoot":"../../src","sources":["adapter.ts"],"mappings":"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","ignoreList":[]}
|