Heim >Backend-Entwicklung >Golang >Solana ermittelt das Wallet-Token-Guthaben und optimiert es

Solana ermittelt das Wallet-Token-Guthaben und optimiert es

Barbara Streisand
Barbara StreisandOriginal
2024-12-26 12:39:10924Durchsuche

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

In den letzten Tagen habe ich geübt, Golang zum Aufrufen von Solana-Verträgen zu verwenden und die Sprache zu wechseln. Beim Ausführen von EVM sind einige Ethereum-Codes in Go implementiert. Es fühlt sich an wie Golang evm Muttersprache.
Am Morgen lese ich die Fragen der Gruppe

Anforderungen
1. Sie möchten feststellen, ob Solanas Adresse legitim ist
2. Sie möchten feststellen, ob die legale Adresse einen der drei Token enthält, also einen Saldo > 1

Ich habe gerade ein paar Übungen gemacht, deshalb schreibe ich kurz:
Verwenden Sie die Wallet-Adresse und die Token-Adresse, um die Kontoadresse des Tokens zu berechnen, und rufen Sie dann GetTokenAccountBalance
auf

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

Die folgenden Gruppenmitglieder schlugen eine effizientere Lösung vor:

Sie können rpc getMultipleAccounts verwenden, um Hunderte von Token-Konten gleichzeitig anzufordern. Ein paar Mal in Stapeln sollten ausreichen, was den Kontingentverbrauch von Helius RPC reduziert und eine gute Leistung bietet.

Relativ gesehen ist die Methode der Gruppenfreunde besser. Schließlich haben die RPCs von Helius Quoten. Wenn Sie mit einem klarkommen, machen Sie nicht drei

Es gibt einen kleinen Unterschied in dieser Idee. Dies sind die erhaltenen Kontodaten, daher wird der Code wie folgt geschrieben:


//获取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)
    }
    }
}
Ich werde es einfach posten und mir Notizen machen. Willkommen zur Kommunikation.

Das obige ist der detaillierte Inhalt vonSolana ermittelt das Wallet-Token-Guthaben und optimiert es. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn