Получите баланс и весь пользовательский список токенов Solana в кошельке

На самом деле я застрял на первом этапе подключения к фантомному кошельку. Я пытаюсь выполнить следующий шаг.

  1. Подключиться к фантомному кошельку
  2. Получить открытый ключ
  3. Получить Баланс всех токенов
  4. Выполнить покупку/продажу

Я могу подключиться к фантомному кошельку с помощью приведенного ниже кода. Я не уверен, что следующим шагом в этом процессе будет получение открытого ключа, чтобы я мог найти баланс всех токенов в рамках учетной записи.

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()

веселиться

Другие вопросы по тегам