Skip to main content
Mit dem Flag 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 mit accountInclude: [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, signature und 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. matchMints fügt niemals Transaktionen ohne Token-Aktivität hinzu.
  • matchMints allein 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üge matchMints: true zu einem Transaktionsfilter in deinem SubscribeRequest hinzu und trage den Mint in accountInclude ein. Dieses Beispiel streamt jede USDC-Transaktion im mainnet:
Erfordert helius-laserstream 0.8.5 oder höher. Das Feld wird auch als match_mints akzeptiert.
Wenn du statt des SDK einen direkten gRPC- oder Yellowstone-Client verwendest, generiere ihn erneut aus dem Helius-Proto. Verwende 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 in meta.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, accountExclude und accountRequired wie 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 matchMints neben den Account-Keys auch die Mint-Menge dagegen.
  • matchMints ist 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-laserstream 0.8.5, Rust helius-laserstream 0.6.4, Go go/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 matchMints

Historical Replay

Führe mit demselben Filter ein backfill für bis zu 24 Stunden Token-Aktivität aus