如何解析SPL令牌帐户中的数据?它包含一个二进制blob,我想得到令牌的类型和数量。
一种可接受的语言是solana-cli、web3.js或solana.py。我在找任何解决办法。
发布于 2022-03-15 03:45:54
RPC提供了一种在默认情况下解析数据的好方法。您可以在web3.js中使用getParsedAccountInfo。
让我们在9xqnnfeonbsEGSPgF5Wd7bf9RqXy4KP22bdaGmZbHGwp使用令牌帐户
import { Connection, PublicKey, ParsedAccountData, clusterApiUrl } from '@solana/web3.js';
(async () => {
const connection = new Connection(clusterApiUrl('mainnet-beta'));
const tokenAccount = await connection.getParsedAccountInfo(new PublicKey('9xqnnfeonbsEGSPgF5Wd7bf9RqXy4KP22bdaGmZbHGwp'));
console.log((tokenAccount.value?.data as ParsedAccountData).parsed);
})();
/**
{
info: {
isNative: false,
mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
owner: 'Ccyrkw1FdRVsfnt7qptyUXqyffq3i59GSPN1EULqZN6i',
state: 'initialized',
tokenAmount: {
amount: '738576212',
decimals: 6,
uiAmount: 738.576212,
uiAmountString: '738.576212'
}
},
type: 'account'
}
**/在这里,我们可以看到tokenAccount的输出有一个EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v薄荷(USDC),由address Ccyrkw1FdRVsfnt7qptyUXqyffq3i59GSPN1EULqZN6i拥有,其数量为738.576212。这就是我们从令牌帐户需要的所有数据。
发布于 2022-10-03 21:48:24
最近我在寻找相同问题的答案,最后我使用了来自@solana/spl-token-v2的@solana/spl-token-v2。
所以就像这样:
import { AccountLayout } from "@solana/spl-token-v2";
...
const tokenAccountInfo = await connection.getAccountInfo(tokenAccount);
const decodedTokenAccountInfo = AccountLayout.decode(tokenAccountInfo!.data);
console.log(decodedTokenAccountInfo);
/*
{
mint: PublicKey {
_bn: <BN: X>
},
owner: PublicKey {
_bn: <BN: X>
},
amount: 0n,
delegateOption: 0,
delegate: PublicKey {
_bn: <BN: X>
},
state: 1,
isNativeOption: 0,
isNative: 0n,
delegatedAmount: 0n,
closeAuthorityOption: 0,
closeAuthority: PublicKey {
_bn: <BN: X>
}
}
*/这里我假设令牌地址是有效的,并且getAccountInfo函数将返回有效的数据。
https://stackoverflow.com/questions/71471948
复制相似问题