node.js - Bagaimana saya bisa membaca data buffer dari TypeScript? (Solana)


Bagaimana saya bisa membaca data buffer dari TypeScript?

Saya ingin menggunakan kunci publik untuk mendapatkan semua daftar token yang saya miliki. Saya mencoba mendapatkan ini, tetapi sebuah array kosong dari objek dikembalikan.

import {Connection, Keypair} from "@solana/web3.js";

const Solana = new Connection("https://api.testnet.solana.com/","confirmed")
const getInfo = async () => {
    const recentInfo = await Solana.getEpochInfo()
    const DEMO_FROM_SECRET_KEY = new Uint8Array([
       223, 119, 171,   5, 237, 138,  42, 140, 176, 163,  74,
      107,  25, 143,  90,  97, 250, 158, 203, 102, 238,  19,
       77, 228, 211, 238, 147, 149,  40,  50, 211, 155,  51,
      207,  14,  53,  86, 230, 164,  27,  14, 202,  78, 181,
      185, 250,  16,  52, 134, 242,  96,  16,  12,  67,   2,
      178, 106, 241, 156, 212,  11, 150, 114,  72])
    const keypair = Keypair.fromSecretKey(DEMO_FROM_SECRET_KEY)

    console.log("=============get account info==============")
    async function fetchaccountdata() {
        const accountinfo = await Solana.getParsedAccountInfo(keypair.publicKey,"max")
        const accountinfodata =  JSON.stringify(accountinfo)
        const accountinfodata2 = JSON.parse(accountinfodata)
        console.log(accountinfo)
        console.log("=============get account info==============")
        console.log(accountinfodata)
        console.log(accountinfodata2)
    }
    fetchaccountdata()
}
getInfo()

Terminal adalah

accountinfodata = {"context":{"slot":94636033},"value":{"data":{"type":"Buffer","data":[]},"executable":false,"lamports":42784111360,"owner":{"_bn":"00"},"rentEpoch":231}}

accountinfodata2 = {
  context: { slot: 94636033 },
  value: {
    data: { type: 'Buffer', data: [] },
    executable: false,
    lamports: 42784111360,
    owner: { _bn: '00' },
    rentEpoch: 231
  }
}

Data dari objek accountinfo adalah array kosong. Bagaimana saya bisa membaca informasinya?

Jawaban #1

Panggilan ini sedang mengambil data akun untuk dompet Anda. Dompet Anda hanya menyimpan SOL, itulah mengapa datanya kosong!

Jika Anda ingin mendapatkan semua akun token yang Anda miliki, Anda akan lebih baik menggunakan getParsedTokenAccountsByOwner: https://github.com/solana-labs/solana/blob/2a42f8a06edd4d33c6cda4d66add0a2582d37011/web3.js/src/connection.ts#L2310

Jawaban #2

Buffer berisi data informasi akun dalam format yang tidak tertentu. Namun, Borsh baru-baru ini telah ditetapkan sebagai standar.

Contoh serialisasi borsh dari SPL: https://github.com/solana-labs/solana-program-library/blob/master/token/program/src/state.rs#L128

Contoh deserialisasi borsh untuk metadata metaplex: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/token-metadata/program/src/instruction.rs#L77-L78

Jika Anda tidak mencoba untuk mendekode metadata metaplex, Anda sebaiknya mencari skema di tempat lain, tetapi ikuti prinsip kode yang sama. Jika Anda tahu akun tersebut tidak menggunakan borsh, maka terserah Anda untuk mendekodenya.

Kunjungi Discord Solana Tech untuk informasi/bantuan lebih lanjut. https://discord.com/channels/428295358100013066/517163444747894795/917412508418068510