Heim >Backend-Entwicklung >Golang >Solana ermittelt das Wallet-Token-Guthaben und optimiert es
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!