Zum Hauptinhalt springen
Dies ist der grundlegende Ablauf zum Senden von Transaktionen. Dabei wird jeder Sendevorgang einzeln abgerechnet. Er eignet sich am besten, wenn Zuverlässigkeit wichtiger ist als reine Geschwindigkeit, etwa bei Zahlungen, Wallets und Apps. Wenn du handelst und die niedrigste Latenz benötigst, verwende stattdessen Helius Sender.
Eine eigene Logik zum Senden von Transaktionen bietet deiner Anwendung maximale Leistung, Kontrolle und Zuverlässigkeit. Das Helius SDK stellt zwar einen praktischen Wrapper für den Einstieg bereit, für Produktionssysteme solltest du diesen manuellen Workflow jedoch verstehen und selbst implementieren. Diese Anleitung führt dich durch die notwendigen Schritte zum Erstellen deiner eigenen Lösung.

Der manuelle Workflow

Das manuelle Senden einer Transaktion umfasst die folgenden Schritte:
1

Build the Initial Transaction

Stelle deine Anweisungen zusammen und signiere die Transaktion, damit du sie simulieren kannst.
2

Optimize Compute Units

Simuliere die Transaktion, um die genaue Anzahl benötigter CUs zu ermitteln, und füge einen kleinen Puffer hinzu.
3

Add Priority Fees

Rufe eine Gebührenschätzung von der Helius Priority Fee API ab und füge sie deiner Transaktion hinzu.
4

Send and Re-broadcast

Sende die endgültige Transaktion und implementiere eine robuste Polling-Strategie für die Bestätigung.
Die Helius SDKs sind Open Source. Sieh dir den zugrunde liegenden Code für die Methode sendSmartTransaction in unserem TypeScript SDK und Rust SDK an, um eine produktionsreife Implementierung dieses Workflows zu sehen.

1. Erstelle die erste Transaktion

Stelle zuerst alle Anweisungen zusammen, die du in deine Transaktion aufnehmen möchtest. Erstelle dann ein Transaction- oder VersionedTransaction-Objekt. Außerdem musst du einen aktuellen Blockhash abrufen. Dieses Beispiel bereitet eine versionierte Transaktion vor. In dieser Phase musst du sie auch signieren, damit du sie im nächsten Schritt simulieren kannst.

2. Optimiere die Nutzung von Compute Units (CU)

Um keine Gebühren zu verschwenden und ein Fehlschlagen deiner Transaktion zu vermeiden, solltest du das Limit für Compute Units (CU) so genau wie möglich festlegen. Simuliere dazu die Transaktion mit der RPC-Methode simulateTransaction. Es hat sich bewährt, die Transaktion zuerst mit einem hohen CU-Limit zu simulieren, damit die Simulation selbst erfolgreich ist. Verwende anschließend unitsConsumed aus der response, um dein tatsächliches Limit festzulegen.
Jetzt hast du eine Anweisung, die das Compute-Limit genau festlegt. Füge sie deiner endgültigen Transaktion hinzu.

3. Lege die richtige Prioritätsgebühr fest

Ermittle als Nächstes die optimale Prioritätsgebühr für deine Transaktion. Mit der Helius Priority Fee API erhältst du am besten eine Echtzeitschätzung auf Basis der aktuellen Netzwerkbedingungen. Dazu musst du die RPC-Methode getPriorityFeeEstimate aufrufen. Verwende die Option recommended: true, um über die gestakten Verbindungen von Helius die höchste Chance auf Aufnahme zu erzielen.

4. Erstelle, sende und bestätige die Transaktion

Stelle jetzt die endgültige Transaktion mit den neuen Compute-Budget-Anweisungen zusammen, sende sie und implementiere einen robusten Polling-Mechanismus, um ihre Aufnahme zu bestätigen.
Verlasse dich nicht auf die standardmäßige Wiederholungslogik des RPC-Anbieters (maxRetries in sendTransaction). Die gestakten Verbindungen von Helius leiten deine Transaktion zwar direkt an den Leader weiter, sie kann aber trotzdem verworfen werden. Für eine zuverlässige Bestätigung musst du deine eigene Logik für die erneute Übertragung implementieren.
Ein gängiges Muster besteht darin, dieselbe Transaktion regelmäßig erneut zu senden, bis der Blockhash abläuft. Signiere die Transaktion nur erneut, wenn du auch einen neuen Blockhash abrufst. Wenn du sie mit demselben Blockhash erneut signierst, können doppelte Transaktionen bestätigt werden.
Dieses Beispiel enthält eine einfache Polling-Schleife. Eine produktionsreife Anwendung benötigt eine ausgefeiltere Logik, die unter anderem verschiedene Bestätigungsstatus und mögliche timeouts behandelt.

Schutz vor Sandwich-Angriffen

Füge deiner RPC-URL den Abfrageparameter mev-protect=true hinzu, um deine Transaktion an Validatoren vorbeizuleiten, die statistisch mit Sandwich-Angriffen in Verbindung stehen. Deine Transaktionslogik musst du nicht ändern:

MEV Protect

Erfahre, wie MEV Protect funktioniert, welche Methoden es unterstützt und welche Kompromisse damit verbunden sind.

Erhalte Rückvergütungen für deine Transaktionen

Du kannst dich dafür anmelden, einen Anteil an dem MEV zu erhalten, den deine Transaktionen erzeugen. Die Auszahlung erfolgt automatisch in SOL, ohne dass du deine Transaktionslogik ändern musst.

Transaction Rebates

Füge deinen sendTransaction-Aufrufen einen Parameter hinzu, um SOL-Rückvergütungen zu erhalten.

Verwandte Methoden

sendTransaction

Sende eine signierte Transaktion an das Netzwerk

simulateTransaction

Simuliere eine Transaktion, um die benötigten Compute Units zu schätzen

getSignatureStatuses

Prüfe den Bestätigungsstatus von Transaktionen

getLatestBlockhash

Rufe einen aktuellen Blockhash zum Signieren einer Transaktion ab

getBlockHeight

Rufe die aktuelle Blockhöhe für Ablaufprüfungen ab