我实现了以下代码,但我对响应感到困惑:
async function getTokenAccounts(wallet: string) {
const filters:GetProgramAccountsFilter[] = [
{
dataSize: 165, // number of bytes
},
{
memcmp: {
offset: 32, // number of bytes
bytes: wallet, // base58 encoded string
},
}];
const accounts = await connection.getParsedProgramAccounts(
TOKEN_PROGRAM_ID, // new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA")
{
filters: filters,
}
);
console.log(`Accounts`+ JSON.stringify(accounts))
回复如下:
{
"account": {
"data": {
"parsed": {
"info": {
"isNative": false,
"mint": "DevGvK5Z7dPJmcFv5WWG6Ezo1qykNRQShgLSqeQieAsq",
"owner": "FY6RKTw4YZmMmP2uB5wp7pjao9HWVXzTc9P7fjRV79JH",
"state": "initialized",
"tokenAmount": {
"amount": "100",
"decimals": 0,
"uiAmount": 100,
"uiAmountString": "100"
}
},
"type": "account"
},
"program": "spl-token",
"space": 165
},
"executable": false,
"lamports": 2039280,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 165
},
"pubkey": "8dYdhrh9i9hfEvVCPL1XE5tPikpWeZDVbM2DDLSVHQgU"
}
我对两个“所有者”属性感到困惑。 SPL代币DevGvK5Z7dPJmcFv5WWG6Ezo1qykNRQShgLSqeQieAsq由钱包FY6RKTw4YZmMmP2uB5wp7pjao9HWVXzTc9P7fjRV79JH持有,但我不明白为什么代币程序也被列为帐户TokenkegQfeZyiNwAJbNbGKPFX的所有者CWuBvf9Ss623VQ5DA?
如有任何建议,我们将不胜感激。
“所有者”一词在 SPL 代币账户的上下文中被过多使用。
一般来说,Solana 区块链上的每个账户都有一个“所有者”,即被允许修改其数据并扣除其内存的程序:https://docs.solana.com/developing/programming-model/accounts#程序的所有权和分配
因此所有 SPL 代币账户均归 SPL 代币计划所有
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
。
然而,在帐户的 data 中,有一个“所有者”字段。 SPL 代币程序将帐户中的这 32 个字节解释为允许扣除 SPL 代币帐户中的资金等的公钥。