GTokenTool全网最好的代币发行工具平台
当前位置:首页 >> solana教程 >> solana 获取钱包token余额,及优化

solana 获取钱包token余额,及优化

admin solana教程 73

用钱包地址和token地址算token的账号地址,再调用GetTokenAccountBalance

solana 获取钱包token余额,及优化
lokey :=solana.MustPublicKeyFromBase58("HgJ5zad5N4pwKpAM8HQDA3g2r2H7EMLVN6S5HvHdiNyR") //钱包地址tokenmint := solana.MustPublicKeyFromBase58("J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn") //token 地址tokenacc, _, _ := solana.FindAssociatedTokenAddress(lokey, tokenmint) //算出token账号地址outtbl, err = client.GetTokenAccountBalance(context.Background(), tokenacc,rpc.CommitmentFinalized)

后面群友提出更高效的方案:

可以用 rpc getMultipleAccounts 一次请求几百个token账户,批量拿几次应该就够了,降低helius rpc的额度消耗,同时性能也好

相对来说群友这个方法更好,毕竟helius的rpc都是有限额的,一条能搞定,就不要搞3条

这个思路上有一点点差异,这个是获取的账号数据,所以代码这么写:

//获取token 账号代码和前面一样out, _ := client.GetMultipleAccounts(context.Background(), lokey, tokenacc, tokenacc2, tokenacc3, tokenacc4)for _, ov := range out.Value {    if ov != nil {	if ov.Owner.String() == "11111111111111111111111111111111" { 
            log.Debugf("acc %s,bl %d", ov.Owner.String(), ov.Lamports)
	} else {            var ta token.Account
            err = bin.NewBinDecoder(ov.Data.GetBinary()).Decode(&ta)
            log.Debugf("acc %s,bl %d", ta.Owner.String(), ta.Amount)
	}
    }
}


作者:GTokenTool一键发币平台

交流群:https://t.me/+Kz4u3xoDpFo3ZWY1

同类推荐