Zum Hauptinhalt springen
Best Practices und empfohlene Muster für Agenten, die das Helius Rust SDK verwenden. Informationen zur Installation und zu den ersten Schritten findest du in der Übersicht.

Empfehlungen für Agenten

Verwende get_transactions_for_address statt einer zweistufigen Abfrage

get_transactions_for_address kombiniert die Signatursuche und den Abruf von Transaktionen in einem einzigen Aufruf mit serverseitiger Filterung.

Verwende send_smart_transaction für normale Sendevorgänge

Die Methode simuliert automatisch, schätzt Recheneinheiten, ruft Prioritätsgebühren ab und bestätigt. Erstelle ComputeBudget-Anweisungen nicht manuell — das SDK fügt sie automatisch hinzu.

Verwende Helius Sender für extrem niedrige Latenz

Verwende für zeitkritische Transaktionen wie Arbitrage, Sniping und Liquidationen send_smart_transaction_with_sender. Die Methode leitet sie über die Multi-Region-Infrastruktur von Helius und Jito weiter.

Verwende get_asset_batch für mehrere Assets

Fasse den Abruf mehrerer Assets zu einem Batch zusammen. Rufe get_asset nicht in einer Schleife auf.

Verwende webhooks statt Polling

Frage get_transactions_for_address nicht in einer Schleife ab. Verwende webhooks für Benachrichtigungen zwischen Servern.

Paginierung

Token-/Cursor-basiert (RPC-V2-Methoden)

Seitenbasiert (DAS API)

token_accounts-Filter

Bei einer Abfrage von get_transactions_for_address steuert der Filter token_accounts, ob Aktivitäten von Token-Konten enthalten sind:

changed_since_slot — Inkrementeller Abruf von Konten

changed_since_slot gibt nur Konten zurück, die nach einem bestimmten slot geändert wurden. Das ist für Synchronisierungs- oder Indizierungsabläufe nützlich. Unterstützt von get_program_accounts_v2, get_token_accounts_by_owner_v2, get_account_info, get_multiple_accounts, get_program_accounts und get_token_accounts_by_owner.

Häufige Fehler

  1. transaction_details: Some(TransactionDetails::Full) ist nicht der Standardwert — Standardmäßig gibt get_transactions_for_address nur Signaturen zurück. Setze TransactionDetails::Full, um vollständige Transaktionsdaten zu erhalten.
  2. Füge bei send_smart_transaction keine ComputeBudget-Anweisungen hinzu — Das SDK fügt sie automatisch hinzu. Wenn du eigene Anweisungen hinzufügst, tritt der Fehler HeliusError::InvalidInput auf.
  3. Prioritätsgebühren werden in Mikrolamports pro Recheneinheit angegeben — Nicht in Lamports. Werte von get_priority_fee_estimate haben bereits die richtige Einheit.
  4. Die DAS-Paginierung beginnt bei 1 — page: 1 ist die erste Seite, nicht page: 0.
  5. async_connection() erfordert new_async oder HeliusBuilder — Wenn du helius.async_connection() auf einem mit Helius::new() erstellten Client aufrufst, wird Err(HeliusError::ClientNotInitialized) zurückgegeben.
  6. get_asset gibt Option<Asset> zurück — Eine erfolgreiche response kann dennoch None sein, wenn das Asset nicht existiert. Behandle Option ausdrücklich.
  7. Tips für Sender sind obligatorisch — send_smart_transaction_with_sender ermittelt Tips automatisch und hängt sie an. Mindestens 0,0002 SOL im Dual-Modus oder 0,000005 SOL, wenn nur SWQOS verwendet wird.
  8. TLS-Feature-Flags — Die Crate verwendet standardmäßig native-tls. Verwende features = ["rustls"] und default-features = false für TLS in reinem Rust, wenn OpenSSL nicht verfügbar ist.
  9. Setze beim Abrufen von Transaktionen die maximal unterstützte Transaktionsversion auf 1. Andernfalls schlagen get_transaction, get_block und get_transactions_for_address mit TransactionDetails::Full bei v1-Transaktionen mit dem Fehler -32015 fehl. Bei v1-Transaktionen entspricht die Prioritätsgebühr dem transactionConfig.priorityFee der Nachricht, also einem Gesamtbetrag in Lamports. Es gibt keine ComputeBudget-Anweisungen, die durchsucht werden können. Siehe Unterstützung für Transaktion v1.

Fehlerbehandlung und Wiederholungsversuche

Das SDK stellt über das Enum HeliusError typisierte Fehlervarianten bereit, sodass du sie direkt abgleichen kannst:

Wiederholungsstrategie

Wiederhole den Versuch bei RateLimitExceeded und InternalError mit exponentiellem Backoff: