Rumah > pembangunan bahagian belakang > Golang > solana memperoleh baki token dompet dan mengoptimumkannya

solana memperoleh baki token dompet dan mengoptimumkannya

Barbara Streisand
Lepaskan: 2024-12-26 12:39:10
asal
921 orang telah melayarinya

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

Sejak beberapa hari lalu, saya telah berlatih menggunakan golang untuk memanggil kontrak solana dan menukar bahasa Rasanya tidak begitu mudah apabila melakukan evm, beberapa kod ethereum dilaksanakan. Rasa macam golang evm bahasa pertama.
Pada waktu pagi, saya membaca soalan yang ditanya oleh kumpulan

Keperluan
1. Ingin menentukan sama ada alamat Solana adalah sah
2. Ingin menentukan sama ada alamat sah memegang mana-mana satu daripada tiga token, iaitu baki > 1

Saya kebetulan sedang melakukan beberapa latihan, jadi saya akan menulis secara ringkas ideanya seperti berikut:
Gunakan alamat dompet dan alamat token untuk mengira alamat akaun token, dan kemudian hubungi 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)
Salin selepas log masuk

Ahli kumpulan berikut mencadangkan penyelesaian yang lebih cekap:

Anda boleh menggunakan rpc getMultipleAccounts untuk meminta ratusan akaun token pada satu masa Beberapa kali dalam kelompok sepatutnya mencukupi, yang mengurangkan penggunaan kuota helius rpc dan mempunyai prestasi yang baik

Secara relatifnya, kaedah rakan kumpulan adalah lebih baik, RPC Helius mempunyai kuota Jika anda boleh mengendalikan satu, jangan lakukan tiga

Ada sedikit perbezaan dalam idea ini Ini adalah data akaun yang diperolehi, jadi kodnya ditulis seperti ini:

//获取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)
    }
    }
}
Salin selepas log masuk

Saya hanya akan menyiarkannya dan mengambil nota Selamat datang untuk berkomunikasi.

Atas ialah kandungan terperinci solana memperoleh baki token dompet dan mengoptimumkannya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan