Home >Backend Development >Golang >solana obtains wallet token balance and optimizes it
In the past few days, I have been practicing using golang to call solana contracts and switching languages. It feels not so easy. When doing evm, some ethereum codes are implemented in go. It feels like golang evm first language.
In the morning, I read the questions asked by the group
Requirements
1. Want to determine whether Solana’s address is legitimate
2. Want to determine whether the legal address holds any one of the three tokens, that is, balance > 1
I just happened to be doing some exercises, so I will write briefly. The idea is as follows:
Use the wallet address and token address to calculate the token's account address, and then call GetTokenAccountBalance
lokey :=solana.MustPublicKeyFromBase58("HgJ5zad5N4pwKpAM8HQDA3g2r2H7EMLVN6S5HvHdiNyR") //钱包地址 tokenmint := solana.MustPublicKeyFromBase58("J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn") //token 地址 tokenacc, _, _ := solana.FindAssociatedTokenAddress(lokey, tokenmint) //算出token账号地址 outtbl, err = client.GetTokenAccountBalance(context.Background(), tokenacc,rpc.CommitmentFinalized)
The following group members proposed a more efficient solution:
You can use rpc getMultipleAccounts to request hundreds of token accounts at a time. A few times in batches should be enough, which reduces the quota consumption of helius rpc and has good performance
Relatively speaking, the method of group friends is better. After all, Helius’s RPCs have quotas. If you can handle one, don’t do three
There is a little difference in this idea. This is the account data obtained, so the code is written like this:
//获取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) } } }
I will just post it and take notes. Welcome to communicate.
The above is the detailed content of solana obtains wallet token balance and optimizes it. For more information, please follow other related articles on the PHP Chinese website!