Ces derniers jours, je me suis entraîné à utiliser Golang pour appeler des contrats Solana et changer de langue. Lorsque je fais evm, certains codes Ethereum sont implémentés en go. Cela ressemble à la première langue de Golang Evm.
Le matin, je lis les questions posées par le groupe
Exigences
1. Vous voulez déterminer si l’adresse de Solana est légitime
2. Vous souhaitez déterminer si l'adresse légale contient l'un des trois jetons, c'est-à-dire un solde > 1
Il se trouve que je faisais quelques exercices, je vais donc écrire brièvement. L'idée est la suivante :
Utilisez l'adresse du portefeuille et l'adresse du jeton pour calculer l'adresse du compte du jeton, puis appelez 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)
Les membres du groupe suivants ont proposé une solution plus efficace :
Vous pouvez utiliser rpc getMultipleAccounts pour demander des centaines de comptes de jetons à la fois Quelques fois par lots devraient suffire, ce qui réduit la consommation de quota d'helius rpc et offre de bonnes performances
Relativement parlant, la méthode des groupes d'amis est meilleure. Après tout, les RPC d'Helius ont des quotas. Si vous pouvez en gérer un, n'en faites pas trois
.Il y a une petite différence dans cette idée. Ce sont les données du compte obtenues, donc le code est écrit comme ceci :
//获取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) } } }
Je vais juste le poster et prendre des notes Bienvenue pour communiquer.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!