node.js - كيف يمكنني قراءة بيانات البافر من TypeScript؟ (Solana)


كيف يمكنني قراءة بيانات المخزن المؤقت من TypeScript؟

أريد استخدام المفتاح العام للحصول على جميع قوائم الرموز التي أمتلكها. أحاول الحصول على هذا، لكن يتم إرجاع مصفوفة فارغة من الكائنات.

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

المحطة الطرفية هي

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
  }
}

بيانات كائن accountinfo هي مصفوفة فارغة. كيف يمكنني قراءة المعلومات؟

الإجابة رقم 1

تقوم هذه المكالمة بجلب بيانات الحساب لمحفظتك. محفظتك تحتوي فقط على SOL، ولهذا السبب البيانات فارغة!

إذا كنت تريد الحصول على جميع حسابات الرموز التي تملكها، سيكون من الأفضل استخدام getParsedTokenAccountsByOwner: https://github.com/solana-labs/solana/blob/2a42f8a06edd4d33c6cda4d66add0a2582d37011/web3.js/src/connection.ts#L2310

الإجابة رقم 2

يحتوي المخزن المؤقت على بيانات معلومات الحساب دون أي تنسيق محدد. ومع ذلك، تم اعتماد Borsh مؤخراً كمعيار.

مثال على تسلسل borsh من SPL: https://github.com/solana-labs/solana-program-library/blob/master/token/program/src/state.rs#L128

مثال على فك التسلسل باستخدام borsh لبيانات الميتابليكس: https://github.com/metaplex-foundation/metaplex-program-library/blob/master/token-metadata/program/src/instruction.rs#L77-L78

إذا لم تكن تحاول فك تشفير بيانات التعريف الخاصة بـ Metaplex، يجب أن تبحث في مكان آخر عن المخطط، ولكن اتبع نفس مبادئ الكود. إذا كنت تعرف أن الحساب لا يستخدم Borsh، فالأمر متروك لك لفك تشفيره.

قم بزيارة ديسكورد تكنولوجيا سولانا لمزيد من المعلومات/المساعدة. https://discord.com/channels/428295358100013066/517163444747894795/917412508418068510