USDT-Auszahlungen vor dem Mainnet testen: was Nile ändert und was eine Sandbox simuliert
Eine Auszahlungsintegration sollte ihren ersten Fehlschlag an einem Ort erleben, der billiger ist als das Mainnet, und auf TRON gibt es zwei solche Orte. Nile ist ein öffentliches Testnetz: eine echte Kette, auf der Transaktionen signiert werden und in Blöcken landen, mit eigenen Parametern. Eine Sandbox wie unsere kopiert die API über eine simulierte Kette, was das echte Netz aufgibt und die Ergebnisse gewinnt, die ein echtes Netz auf Anforderung nicht liefert. Wir haben die Kettenparameter von Mainnet und Nile am 3. September 2026 gelesen und am Tag darauf Transaktionen auf Nile signiert.
Was Nile mit dem Mainnet gemeinsam hat
Nile beantwortet denselben Aufruf getchainparameters wie das Mainnet, und die Parameter, die einen Transfer bepreisen, kamen identisch zurück. Energie kostet in beiden Netzen 100 sun je Einheit, ein Transfer, dem die Energie ausgeht, verbrennt TRX also in beiden zum selben Satz. Freie Bandbreite, die Gebühr für das Anlegen eines Kontos, die Memo-Gebühr und die drei Parameter der dynamischen Energie stimmen ebenfalls überein.
| Kettenparameter, gelesen am 3. September 2026 | Mainnet | Nile |
|---|---|---|
Energiegebühr in sun je Einheit, getEnergyFee | 100 | 100 |
Freie Bandbreite je Konto, getFreeNetLimit | 600 | 600 |
Gebühr für das Anlegen eines Kontos in sun, getCreateAccountFee | 100,000 | 100,000 |
Memo-Gebühr in sun, getMemoFee | 1,000,000 | 1,000,000 |
Schwelle der dynamischen Energie, getDynamicEnergyThreshold | 5,000,000,000 | 5,000,000,000 |
Steigerungsfaktor der dynamischen Energie, getDynamicEnergyIncreaseFactor | 2,000 | 2,000 |
Höchstfaktor der dynamischen Energie, getDynamicEnergyMaxFactor | 34,000 | 34,000 |
Unstaking-Verzögerung in Tagen, getUnfreezeDelayDays | 14 | 1 |
Längste Delegationssperre in Blöcken, getMaxDelegateLockPeriod | 864,000 | 144,000 |
Wartungsintervall, getMaintenanceTimeInterval | 21,600,000 | 1,800,000 |
CPU-Zeit-Obergrenze einer Transaktion, getMaxCpuTimeOfOneTx | 80 | 160 |
Was Nile ändert
Für jeden, der mit Energie umgeht, ist der erste Unterschied das Unstaken: Es dauert auf Nile einen Tag gegen vierzehn im Mainnet, ein Test, der TRX einfriert und dann abhebt, ist also dreizehn Tage früher fertig als dieselbe Abfolge in der Produktion. Die längste Sperre, die eine Delegation tragen kann, beträgt auf Nile 144,000 Blöcke, fünf Tage bei drei Sekunden je Block, gegen 864,000 Blöcke, dreißig Tage, im Mainnet. Eine Sperre von mehr als fünf Tagen lässt sich auf Nile überhaupt nicht proben; was eine Sperre verweigert ist in beiden Netzen gleich.
Acht der Parameter, die das Mainnet zurückgab, tragen auf Nile einen anderen Wert. Außer jenen zwei sind es das Wartungsintervall, die CPU-Obergrenze in der Tabelle und vier, die Blockproduzenten, Vorschläge und Vertragsfunktionen regeln. Wir haben keinen dieser sechs in einen Auszahlungsablauf zurückverfolgt.
Staken liefert auch eine andere Energiemenge, weil jedes Netz dasselbe Energielimit auf seinen eigenen Gesamtstake aufteilt und der Stake von Nile weit kleiner ist. In beiden unserer Läufe auf Nile am 4. September erschien der Stake, den wir delegierten, auf dem empfangenden Konto als 7,376 Einheiten Energie. Derselbe Stake im Mainnet kommt beim Gesamtwert, der einen Tag früher gelesen wurde, auf 958 Einheiten, Nile gibt also fast achtmal so viel aus. Ein gegen Nile bemessener Stake ließe eine Mainnet-Wallet zu kurz kommen.
| Energie aus Staking | Mainnet, 3. September 2026 | Nile, 4. September 2026 |
|---|---|---|
Energielimit des ganzen Netzes, TotalEnergyLimit | 180,000,000,000 | 180,000,000,000 |
Gesamtstake für Energie, TotalEnergyWeight | 18,770,236,993 | 2,440,088,105 |
| Energie beim Empfänger aus 100 TRX delegiert | 958 Einheiten, berechnet | 7,376 Einheiten, gemessen |
Test-USDT ist ein anderer Vertrag
Auszahlungscode trägt die Adresse des USDT-Vertrags, den er aufruft. Am 27. Oktober 2026 haben wir eine Nile-Node nach dem Vertrag an der Mainnet-USDT-Adresse TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t gefragt, und die Antwort war ein leeres Objekt, {}: kein Vertrag an dieser Adresse im Testnetz. Test-Tokens auf Nile stammen aus einem anderen Vertrag an einer anderen Adresse, die Vertragsadresse gehört also in die Konfiguration neben die Node-URL, und ein Build, der sie fest einkodiert, ruft in einem der beiden Netze die falsche Adresse auf.
Wir haben nicht gemessen, was ein Transfer eines Nile-Test-Tokens an Energie kostet. Nile berechnet dieselbe Gebühr je Einheit, aber das Token ist ein anderer Vertrag, nichts auf Nile bestätigt also die Mainnet-Zahlen von rund 65,000 Einheiten an einen Halter und rund 131,000 Einheiten an eine Adresse ohne USDT. Test-TRX kommt aus Faucets, und sie rationieren es: Der Faucet, den wir im September genutzt haben, erlaubte eine Anfrage je Wallet und je IP alle 24 Stunden.
Eine signierte Transaktion bleibt außerdem in dem Netz, für das sie gebaut wurde. Jede TRON-Transaktion trägt einen Verweis auf einen jüngeren Block ihrer eigenen Kette, und unsere API prüft diesen Verweis gegen das Mainnet, bevor sie Energie kauft. Eine Transaktion für mode B, die gegen Nile gebaut wurde, wird mit einem 400 und details.reason auf ref_block_unknown abgelehnt. Antwortet die Kette auf unsere Prüfung nicht, wird die Bestellung ungeprüft angenommen und die Ablehnung der Node nach der Lieferung berechnet, bauen Sie also jede Transaktion gegen den aktuellen Mainnet-Block, bevor Sie sie senden.
Was die Sandbox simuliert
Unsere Sandbox antwortet unter https://sandbox.nrg.market/v1 und führt denselben Code wie die Produktion aus, über Testgeld, eine simulierte Kette und simulierte Energieverkäufer. Schlüssel dort beginnen mit nrg_test_ und kommen aus dem Sandbox-Dashboard, wo man sich selbst registriert. Die beiden Umgebungen teilen nichts: getrennte Datenbanken, Guthaben, Webhooks und Secrets. Funktioniert die Integration dort, ändern Sie die Basis-URL und den Schlüssel; der API-Ablauf ist in beiden derselbe.
Testgeld kommt ohne Faucet an. Die Bestätigung der E-Mail schreibt ein Startguthaben gut, und POST /v1/sandbox/deposit schreibt mehr gut, auf demselben Weg, den eine echte Einzahlung nimmt: eine deposit-Zeile in den Kontobewegungen mit einer txid, die mit sandbox- beginnt, und ein echter Webhook deposit.credited. In der Produktion existiert dieser Weg nicht und antwortet mit 404.
| Testgeld in der Sandbox | Laut API-Vertrag |
|---|---|
| Bei der Bestätigung der E-Mail oder der ersten Anmeldung mit Google | 10000 TRX |
Ein Aufruf von POST /v1/sandbox/deposit | bis zu 100000 TRX |
| Einzahlungsaufrufe je Kunde und UTC-Tag | 10 |
Ein Testnetz erzeugt auf Anforderung kein bestimmtes Ergebnis. Die Sandbox verdrahtet einige Adressen mit festem Verhalten, so wie Testkartennummern funktionieren: gültige TRON-Adressen ohne privaten Schlüssel dahinter. Der Empfänger bestimmt die Energieart und was nach ready geschieht; der Absender bestimmt, wie der Kauf und die Delegation ablaufen.
| Adresse | Rolle | Was die Sandbox tut |
|---|---|---|
TLLmUhBYgU125KkPpeTdP1vz1zqhoZwn9v | Empfänger | Hält kein USDT, also kind: double. Sie ist auch nicht aktiviert und bleibt leer, wie viele Transfers auch auf ihr landen. |
TDUvBqzR3cYY6zYopYdJ9jWrxQRs9QmvQM | Empfänger | Nie erscheint ein Transfer. Die Position wartet bei ready, wird zu expired, sobald send_before erreicht ist, und wird berechnet, wie in der Produktion. |
TKLeQhXSUba1GG1wdznyMc49oqModZ8Fbm | Empfänger | Auf der USDT-Blacklist: Die Bestellung wird mit 422 blacklisted_recipient abgelehnt. |
TQ6ey8qT87bnzBJXj7gVTGCkrU4wUJ1EWQ | Absender | Der Kauf scheitert bei jedem Verkäufer. Die Position endet als failed mit purchase_failed, und die Reservierung wird freigegeben. |
TYWZsWdM9u8QKJTi6XEmenpvCPwg1xmPCC | Absender | Der erste Verkäufer ist nicht verfügbar und der Failover gelingt. Nichts in der Antwort sagt es. |
TNhq25t5XTEuk3mC9cTcAGB5rr3xuCkGyr | Absender | Die Delegation bestätigt sich nach etwa 25 Sekunden, für den Code, der warten muss. |
| Jede andere gültige Adresse | Beides | Ein Empfänger, der USDT hält, und eine Delegation, die sich in 2 bis 8 Sekunden bestätigt. |
Die beiden Seiten kombinieren sich, ein Stapel, der den scheiternden Absender mit gewöhnlichen mischt, endet also als partially_completed, ohne dass etwas Besonderes verlangt wurde (was dieser Status für die Rechnung bedeutet). Die Szenario-Absender werden von jedem Kunden der Umgebung geteilt, wenn also das Timing das Testobjekt ist, nehmen Sie eine frische eigene Absenderadresse: Sie bekommt die gewöhnlichen 2 bis 8 Sekunden, und ihre Delegationen sind privat.
Die Preise in der Umgebung sind die Live-Preise. Der Sandbox-Tarif folgt dem der Produktion mit etwa zwei Minuten Abstand, im schlimmsten Fall drei, eine dort geprobte Schätzung liefert also den Preis, den die Produktion zwei oder drei Minuten früher nannte. Mode B braucht keinen echten Schlüssel: Die simulierte Kette prüft keine Signaturen, eine mit einem beliebigen Wegwerfschlüssel signierte Transaktion wird also so geparst, wie die Produktion sie parst, und durchläuft broadcasting, broadcasted und confirmed, wobei sich die Übertragung in etwa drei Sekunden bestätigt.
Was nur das Mainnet zeigt
Die Sandbox kann den Teil nicht beweisen, den die Kette erledigt: Auf ihr kommt Energie nie wirklich irgendwo an, und eine dort bestätigte Delegation ist eine Tatsache über unseren Simulator. Auch Nile kann es für unseren Dienst nicht klären, weil wir auf keinem Testnetz Energie verkaufen. Ob echte Energie auf einer echten Wallet landet und ob der Transfer dann ohne Verbrennen von TRX durchgeht, erfahren Sie in der Produktion.
Einige Zweige lassen sich in keiner der beiden Umgebungen durch irgendeine Anfrage erzeugen: 503 capacity_unavailable und die Positionsfehler broadcast_failed, transaction_reverted und broadcast_window_missed. Jeder hängt vom Energieangebot ab, von der Kette oder davon, dass der Dienst von uns pausiert wird. Schreiben Sie diese Behandlung nach dem Vertrag und den Webhook-Bodys, und prüfen Sie sie als Code, der nie gelaufen ist.
Ein guter Teil der Produktion kostet nichts beim Üben. POST /v1/estimate nimmt bis zu 500 Empfänger und liefert dieselben kind, energy_units und warnings, die eine Bestellung berechnen würde, und POST /v1/webhooks/{webhook_id}/test schickt Ihrem Empfänger eine echte signierte Zustellung. POST /v1/orders kostet in jedem Modus echtes TRX, was eine erste Live-Bestellung mit einem Transfer zur letzten Probe macht und zur einzigen, die das Eintreffen der Energie zeigt.
Jede Szenario-Adresse in diesem Beitrag antwortet in der Umgebung, über Testgeld und Ihren eigenen nrg_test_-Schlüssel: öffnen Sie das Sandbox-Dashboard und stellen Sie einen aus →