簡體   English   中英

獲取 Solana 賬戶的代幣賬戶

[英]Getting Token Account of Solana Account

我有以下帳戶Solana Explorer 帳戶

我可以看到有一個 Mint 帳戶(存儲我的令牌的帳戶)我如何獲得具有我的公鑰的 mint 帳戶是否有任何關系或這東西一般如何工作

確保我們在同一頁面上的一些術語:

  • “錢包”是擁有其他帳戶的系統帳戶,您鏈接的CGP6sKHyrZGPJRoUAy8XbyzmX7YD4tVBQG9SEe9ekZM6的“Solana Explorer 帳戶”
  • mint account定義了代幣,不持有任何代幣,為Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr
  • 持有你的代幣的賬戶實際上是G6ogFW6YzBpYKhwZrckZJa4yejcjNTfHLE2mUAQFv3ichttps ://explorer.solana.com/address/G6ogFW6YzBpYKhwZrckZJa4yejcjNTfHLE2mUAQFv3ic?cluster=devnet——這是一個“關聯代幣賬戶”,其地址來自你的錢包。 在處理Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr令牌時,工具和瀏覽器默認使用該帳戶。 要獲得此帳戶,您可以使用getAssociatedTokenAccount ,歸結為:
import { PublicKey } from '@solana/web3.js';

const TOKEN_PROGRAM_ID = new PublicKey('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA');
const ASSOCIATED_TOKEN_PROGRAM_ID = new PublicKey('ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL');
const owner = new PublicKey('CGP6sKHyrZGPJRoUAy8XbyzmX7YD4tVBQG9SEe9ekZM6');
const mint = new PublicKey('Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr');

const [address] = await PublicKey.findProgramAddress(
    [owner.toBuffer(), TOKEN_PROGRAM_ID.toBuffer(), mint.toBuffer()],
    ASSOCIATED_TOKEN_PROGRAM_ID
);

真正的代碼在: https ://github.com/solana-labs/solana-program-library/blob/5611ad8bd595d9e3666f8b115cd28f8116038645/token/js/src/state/mint.ts#L146

const connection = new Connection("https://api.devnet.solana.com");
  let response = await connection.getTokenAccountsByOwner(
    new PublicKey("27kVX7JpPZ1bsrSckbR76mV6GeRqtrjoddubfg2zBpHZ"), // owner here
    {
      programId: TOKEN_PROGRAM_ID,
    }
  );

這是為了獲取特定錢包地址擁有的所有令牌帳戶。 如果您使用的是主網或測試網或本地主機,請不要忘記調整連接 url。 您也可以將其過濾到特定的鑄幣廠地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM