为什么 get getParsedProgamAccounts 响应中有两个所有者 |索拉纳

问题描述 投票:0回答:1

我实现了以下代码,但我对响应感到困惑:

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?

如有任何建议,我们将不胜感激。

token solana solana-web3js
1个回答
0
投票

“所有者”一词在 SPL 代币账户的上下文中被过多使用。

一般来说,Solana 区块链上的每个账户都有一个“所有者”,即被允许修改其数据并扣除其内存的程序:https://docs.solana.com/developing/programming-model/accounts#程序的所有权和分配

因此所有 SPL 代币账户均归 SPL 代币计划所有

TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA

然而,在帐户的

data 中,有一个“所有者”字段。 SPL 代币程序将帐户中的这 32 个字节解释为允许扣除 SPL 代币帐户中的资金等的公钥。

© www.soinside.com 2019 - 2024. All rights reserved.