ホームページ > バックエンド開発 > Golang > solanaはウォレットトークン残高を取得し最適化します

solanaはウォレットトークン残高を取得し最適化します

Barbara Streisand
リリース: 2024-12-26 12:39:10
オリジナル
916 人が閲覧しました

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

ここ数日、golang を使用して solana コントラクトを呼び出したり、言語を切り替えたりする練習をしてきました。evm を実行すると、いくつかのイーサリアム コードが go で実装されます。 golang evm の第一言語のような感じです。
午前中、グループからの質問を読みました

要件
1. Solana のアドレスが正当なものかどうかを確認したい
2. 正式な住所が 3 つのトークンのいずれかを保持しているかどうか、つまり残高が 1

であるかどうかを確認したい

たまたま演習をしていたので、簡単に書いておきます:
ウォレット アドレスとトークン アドレスを使用してトークンのアカウント アドレスを計算し、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)
ログイン後にコピー

次のグループのメンバーが、より効率的なソリューションを提案しました:

rpc getMultipleAccounts を使用すると、一度に数百のトークン アカウントをリクエストできます。これにより、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)
    }
    }
}
ログイン後にコピー

以上がsolanaはウォレットトークン残高を取得し最適化しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート