Получите баланс и весь пользовательский список токенов Solana в кошельке
На самом деле я застрял на первом этапе подключения к фантомному кошельку. Я пытаюсь выполнить следующий шаг.
- Подключиться к фантомному кошельку
- Получить открытый ключ
- Получить Баланс всех токенов
- Выполнить покупку/продажу
Я могу подключиться к фантомному кошельку с помощью приведенного ниже кода. Я не уверен, что следующим шагом в этом процессе будет получение открытого ключа, чтобы я мог найти баланс всех токенов в рамках учетной записи.
const balance = connection.getBalance(publicKey);
Вышеупомянутый метод — это то, что я нашел в документации, но я не уверен, как мне получить открытый ключ конечного пользователя, который подключил свой кошелек к веб-сайту.
const connection = new solanaWeb3.Connection(solanaWeb3.clusterApiUrl("mainnet-beta")) console.log(connection);
1 ответ
предположим, что у вас есть приложение для интеграции с кошельками solana, прежде всего установите эти пакеты:
yarn add @solana/wallet-adapter-base \
@solana/wallet-adapter-react \
@solana/wallet-adapter-react-ui \
@solana/wallet-adapter-wallets \
@solana/web3.js \
react
вы также можете использовать интерфейс next, vue, angular, svelte и material.
далее у нас есть эта установка:
import React, { FC, useMemo } from 'react';
import { ConnectionProvider, WalletProvider } from '@solana/wallet-adapter-react';
import { WalletAdapterNetwork } from '@solana/wallet-adapter-base';
import {
//LedgerWalletAdapter,
PhantomWalletAdapter,
SolflareWalletAdapter,
//SlopeWalletAdapter,
//SolletExtensionWalletAdapter,
//SolletWalletAdapter,
//TorusWalletAdapter,
} from '@solana/wallet-adapter-wallets';
import {
WalletModalProvider,
WalletDisconnectButton,
WalletMultiButton
} from '@solana/wallet-adapter-react-ui';
import { clusterApiUrl } from '@solana/web3.js';
// Default styles that can be overridden by your app
require('@solana/wallet-adapter-react-ui/styles.css');
export const Wallet: FC = () => {
// The network can be set to 'devnet', 'testnet', or 'mainnet-beta'.
const network = WalletAdapterNetwork.Devnet;
// You can also provide a custom RPC endpoint.
const endpoint = useMemo(() => clusterApiUrl(network), [network]);
// @solana/wallet-adapter-wallets includes all the adapters but supports tree shaking and lazy loading --
// Only the wallets you configure here will be compiled into your application, and only the dependencies
// of wallets that your users connect to will be loaded.
const wallets = useMemo(
() => [
new PhantomWalletAdapter(),
new SlopeWalletAdapter(),
new SolflareWalletAdapter(),
new TorusWalletAdapter(),
new LedgerWalletAdapter(),
new SolletWalletAdapter({ network }),
new SolletExtensionWalletAdapter({ network }),
],
[network]
);
return (
<ConnectionProvider endpoint={endpoint}>
<WalletProvider wallets={wallets} autoConnect>
<WalletModalProvider>
<WalletMultiButton />
<WalletDisconnectButton />
{ /* Your app's components go here, nested within the context providers. */ }
</WalletModalProvider>
</WalletProvider>
</ConnectionProvider>
);
};
- после модулей импорта я прокомментировал некоторые адаптеры кошелька, кроме phantom и solfare
также этот блок кода так важен:
<ConnectionProvider endpoint={endpoint}>
<WalletProvider wallets={wallets} autoConnect>
<WalletModalProvider>
<WalletMultiButton />
<WalletDisconnectButton />
{ /* Your app's components go here, nested within the context
providers. */ }
</WalletModalProvider>
</WalletProvider>
</ConnectionProvider>
модальные окна с функциональными кнопками, окруженными
- ConnectionProvider: подготовьте конечную точку для кошельков для подключения и запроса токенов кошелька.
- WalletProvider: подготовьте, какие кошельки должны быть загружены в модальных окнах и готовы к подключению.
и, наконец, использование:
import { WalletNotConnectedError } from '@solana/wallet-adapter-base';
import { useConnection, useWallet } from '@solana/wallet-adapter-react';
import { Keypair, SystemProgram, Transaction } from '@solana/web3.js';
import React, { FC, useCallback } from 'react';
export const SendOneLamportToRandomAddress: FC = () => {
const { connection } = useConnection();
const { publicKey, sendTransaction } = useWallet();
const onClick = useCallback(async () => {
if (!publicKey) throw new WalletNotConnectedError();
const transaction = new Transaction().add(
SystemProgram.transfer({
fromPubkey: publicKey,
toPubkey: Keypair.generate().publicKey,
lamports: 1,
})
);
const signature = await sendTransaction(transaction, connection);
await connection.confirmTransaction(signature, 'processed');
}, [publicKey, sendTransaction, connection]);
return (
<button onClick={onClick} disabled={!publicKey}>
Send 1 lamport to a random address!
</button>
);
};
так что, как вы можете видеть над этой частью
const { connection } = useConnection();
const { publicKey, sendTransaction } = useWallet();
был подготовлен для установления соединения и предоставления вам открытого ключа подключенного кошелька, а также использования функции sendTransaction подключенного кошелька, звучит хорошо!
другие части кода, я думаю, очевидны.
Итак, сколько функций у нас есть с адаптерами кошелька, такими как фантом? и какие функции? мы можем получить открытый ключ, подключение (логическое значение), подключение (логическое значение), состояние готовности.
также у нас есть некоторые другие основные функции, такие как:
- соединять
- Отключить
- отправитьтранзакцию
- подписатьтранзакцию
- знакВсетранзакции
- знакСообщение
вы можете увидеть их все в этой ссылке на репозиторий github
другой момент: если вы используете платформу Anchor, вы должны знать, что Anchor использует свой собственный объект «Кошелек» для взаимодействия с подключенным кошельком и подписания транзакций от его имени. поэтому, чтобы получить объект, совместимый с определением кошелька Anchor, мы можем использовать еще один компонуемый объект под названием useAnchorWallet. Это вернет объект кошелька, который может подписывать транзакции.
const wallet = useAnchorWallet()
веселиться