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

匿名用户 提出于 2024-05-04 23:39 3974 浏览

我们都知道,可以根据用户自己的账户信息+程序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 2024-05-06 15:32

擅长:数据分析,GameFi,NFT

写回答

你需要登录后才可以回答问题,登录