matchMints kann eine gRPC-Transaktions-Subscription von LaserStream zusätzlich zu den Account-Keys auch mit den Token-Mints in den Token-Salden vor und nach einer Transaktion abgeglichen werden.
Füge einen Mint zu accountInclude hinzu und aktiviere matchMints: true. Du empfängst dann jede Transaktion, die dieses Token berührt: Übertragungen, Swaps, Mint-to- und Burn-Vorgänge sowie Kontoschließungen.
matchMints ist nur für LaserStream gRPC verfügbar. Für LaserStream WebSocket ist es noch nicht verfügbar.Das Problem: Einfache Kontofilter übersehen die meisten Token-Übertragungen
Wenn du ein Token mitaccountInclude: [mint] überwachst, werden nur Transaktionen gefunden, bei denen der Mint-pubkey in den Account-Keys der Transaktion vorkommt.
Eine klassische SPL-Anweisung vom Typ Transfer verweist nie auf den Mint. Sie nennt nur das Quell-Token-Konto, das Ziel-Token-Konto und den Eigentümer. Deshalb übersieht ein einfacher Kontofilter den häufigsten Vorgang für jedes Token.
Nur Anweisungen, die den Mint direkt übergeben, werden gefunden. Dazu gehören MintTo, Burn, TransferChecked und Swaps, deren Programmkonten den Mint enthalten. Bisher bestand die einzige Alternative darin, alle Transaktionen zu streamen und die Token-Salden jeder Transaktion selbst zu prüfen.
So funktioniert matchMints
Aktiviere matchMints: true für einen Transaktionsfilter. LaserStream erstellt dann aus preTokenBalances und postTokenBalances der Transaktion eine Menge von Mints.
Deine Listen accountInclude, accountExclude und accountRequired werden anschließend mit sowohl den Account-Keys als auch dieser Mint-Menge abgeglichen. Ein Mint erfüllt den Filter, wenn ein beliebiges zugehöriges Token-Konto in einer der beiden Saldenlisten erscheint. Dabei spielt es keine Rolle, ob sich der Saldo geändert hat.
Das Flag ist optional. Filter ohne dieses Flag verhalten sich exakt wie zuvor. Du kannst es daher zu einer bestehenden Subscription hinzufügen, ohne zu ändern, was diese bereits empfängt. SPL- und Token-2022-Mints funktionieren, weil beide Programme die Token-Salden vor und nach der Transaktion bereitstellen.
Semantik
Die übrige Filterlogik bleibt unverändert:
- Prädikate innerhalb eines benannten Filters werden weiterhin mit AND verknüpft (
vote,failed,signatureund die Kontolisten). - Mehrere benannte Filter werden weiterhin mit OR verknüpft.
- Werte innerhalb einer Liste werden mit OR verknüpft. Eine Ausnahme ist
accountRequired, bei dem alle übereinstimmen müssen. - Bei einer Transaktion ohne Token-Salden erfolgt der Abgleich nur anhand der Keys.
matchMintsfügt niemals Transaktionen ohne Token-Aktivität hinzu. matchMintsallein schränkt den stream nicht ein. Damit der Filter akzeptiert wird, muss eine Kontoliste weiterhin mindestens einen Key oder Mint enthalten. Alternativ kannst du ein anderes einschränkendes Prädikat verwenden.
LaserStream gleicht Mints anhand des exakten pubkey ab. Anders als bei
tokenAccounts: "balanceChanged" gibt es für Mints keinen Modus, der nur geänderte Salden berücksichtigt.Verwendung in LaserStream gRPC
FügematchMints: true zu einem Transaktionsfilter in deinem SubscribeRequest hinzu und trage den Mint in accountInclude ein. Dieses Beispiel streamt jede USDC-Transaktion im mainnet:
- TypeScript
- Rust
- Go
Erfordert
helius-laserstream 0.8.5 oder höher. Das Feld wird auch als match_mints akzeptiert.laserstream-core-proto 11.3.0 oder höher oder die im SDK-Repository enthaltene Datei .proto.
match_mints ist Feld 32 von SubscribeRequestFilterTransactions. Clients, die aus dem Upstream-Proto von Triton generiert wurden, verwerfen das unbekannte Feld ohne Meldung. Das Flag hat daher erst nach einer erneuten Generierung eine Wirkung.
Alle Felder des Transaktionsfilters findest du in der Referenz zum Subscribe Request.
Mit tokenAccounts kombinieren, um ein Token für eine Wallet zu überwachen
matchMints lässt sich mit der Erweiterung tokenAccounts kombinieren. So kann ein einzelner Filter gleichzeitig Wallet-Eigentümer und Mints abgleichen.
Dieses Beispiel streamt jede Änderung am USDC-Saldo einer Wallet:
accountInclude zusammen mit tokenAccounts findet Transaktionen, bei denen sich die Token-Salden der Wallet geändert haben. accountRequired zusammen mit matchMints beschränkt diese auf Transaktionen mit USDC.
Ermitteln, was übereingestimmt hat
Wenn eine Transaktion aufgrund eines Mint übereinstimmt, suche den Mint inmeta.preTokenBalances[].mint und meta.postTokenBalances[].mint. Bei einfachen Übertragungen fehlt der Mint normalerweise in den Account-Keys. Suche dort also nicht danach.
Vergleiche preTokenBalances und postTokenBalances für denselben accountIndex. So erkennst du, wie viele Token zwischen welchen Eigentümern übertragen wurden.
Der Leitfaden zur Transaktionsüberwachung beschreibt die Transaktionsstruktur ausführlich.
Limits und Hinweise
- Mints werden in dieselben Listen
accountInclude,accountExcludeundaccountRequiredwie Account-Keys eingetragen. Daher gelten für sie dieselben listenbezogenen Limits des Tarifs. Es gibt kein separates Mint-Limit. - Der Aufwand für den Abgleich wächst nicht mit der Anzahl der aufgeführten Mints. 100 Mints und 100.000 Mints bieten dieselbe Leistung. Für Abonnenten, die das Flag nicht aktivieren, entsteht kein zusätzlicher Aufwand.
- Die historische Wiedergabe berücksichtigt
matchMints. Eine Wiedergabe-Subscription gibt daher dieselben Transaktionen zurück wie der Live-stream. - Wenn du einer Transaktions-Subscription einen komprimierten Cuckoo-Filter hinzufügst, prüft
matchMintsneben den Account-Keys auch die Mint-Menge dagegen. matchMintsist in allen LaserStream gRPC-Regionen sowie im mainnet und devnet aktiv. Für LaserStream WebSocket ist es derzeit nicht verfügbar.- SDK-Mindestversionen: JavaScript/TypeScript
helius-laserstream0.8.5, Rusthelius-laserstream0.6.4, Gogo/v0.3.0.
Verwandte Themen
Token Account (ATA) Filtering
Finde Transaktionen, die Token-Konten einer Wallet berühren
Transaction Monitoring
Vollständige Filterstrategien und ausführbare Beispiele für gRPC
Subscribe Request Reference
Alle Felder des Transaktionsfilters einschließlich
matchMintsHistorical Replay
Führe mit demselben Filter ein backfill für bis zu 24 Stunden Token-Aktivität aus