10 请问通过token account找到token的实际拥有者账户?

我们都知道,可以根据用户自己的账户信息+程序Id生成代币账户信息。如下图所示:

image.png

我通过如下代码可以得到代币账户(token account):

    rpcClient := rpc.New(RpcMainNet)
    programId := solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA")
    fromPubKey := solana.MustPublicKeyFromBase58("GmKsGRytiVoeMZGmBVCWPcUzJGHVqcvzhP5K9cstdr3E")
    fromTokenAccount, err := rpcClient.GetTokenAccountsByOwner(context.Background(), fromPubKey,
        &rpc.GetTokenAccountsConfig{
            ProgramId: &programId,
        },
        &rpc.GetTokenAccountsOpts{
            Encoding: solana.EncodingBase64Zstd,
        })
    if err != nil {
        fmt.Printf("get from token account failed")
    }
    for index, account := range fromTokenAccount.Value {
        fmt.Printf("get token account %d %v \n", index, account.Pubkey)
    }

但是如何根据token account得到实际的token owner的公钥呢?我尝试了下面的方法,得到的owner是SPL Token的ProgramId:

    rpcClient := rpc.New(RpcMainNet)
    tokenMintPubKey := solana.MPK(TokenMainNetAddress)
    tokenAccountPubKey := solana.MustPublicKeyFromBase58("3XRNhFEXkV7itJEJMDBN8iRHBgwhgk83XB5K3s3re3Ew")

    tokenAccountInfo, err := rpcClient.GetAccountInfo(context.Background(), tokenAccountPubKey)
    if err != nil {
        fmt.Printf("get account info error %v\n", err)
    }
    fmt.Printf("get token account owner %v\n", tokenAccountInfo.Value)

我希望得到的是实际token的拥有者: GmKsGRytiVoeMZGmBVCWPcUzJGHVqcvzhP5K9cstdr3E

image.png

请先 登录 后评论

2 个回答

晓娜
请先 登录 后评论
Wade - Footprint Analytics CTO
  擅长:数据分析,GameFi,NFT
请先 登录 后评论
  • 2 关注
  • 0 收藏,1345 浏览
  • 提出于 2024-05-04 23:39