Zum Inhalt springen

TRC20-Gebühren sponsern: TronFuel und Paymaster

Ein TRC20-Transfer ist ein Smart-Contract-Aufruf. TRON berechnet dafür Energy und Bandwidth, und eine Adresse bezahlt diese Ressourcen entweder, indem sie TRX verbrennt, oder indem sie Ressourcen nutzt, die sie gestakt bekommen oder delegiert bekommen hat. Der Token selbst zahlt nie.

Daraus ergibt sich eine Situation, auf die früher oder später jede TRON-Integration stößt. Ein Kunde zahlt USDT auf eine frisch erstellte Adresse ein. Die Adresse hält jetzt Token und sonst nichts. Diese Token weiterzusenden schlägt mit Status 422 und der Meldung balance is not sufficient fehl, weil kein TRX vorhanden ist, um die Ressourcenkosten zu decken. Jede Einzahlungsadresse im Voraus mit TRX auszustatten funktioniert, bindet aber TRX in Adressen, die womöglich nie verwendet werden.

Das Sponsern der Gebühr löst das von der anderen Seite. Ein Dritter bezahlt die Ressourcenkosten, und die Wallet sendet ihre Token, ohne je TRX zu halten.

TronFuel ist, was wir dafür heute empfehlen. Der Dienst mietet Energy in großen Mengen von Stakern, statt TRX zu verbrennen, und daher kommt die Ersparnis gegenüber einem einfachen Burn. Der Hintergrund ist beschrieben unter Bis zu 60 % bei TRON-TRC-20-Transaktionsgebühren sparen.

TronFuel ist ein eigenständiger Dienst. Er hat keinen Endpunkt innerhalb der Chaingateway-API, weshalb diese Dokumentation nicht beschreibt, wie man ihn aufruft. Die eigene Dokumentation finden Sie über den Link oben.

Chaingateways Paymaster erledigte innerhalb der API dieselbe Aufgabe: Er übernahm Bandwidth und Energy, damit eine Wallet vor dem Senden von TRC20-Token kein TRX brauchte, und stellte die Kosten gegen ein Guthaben auf Ihrem Konto in Rechnung.

Der Dienst ist abgekündigt. Integrationen, die die Paymaster-Endpoints bereits nutzen, funktionieren weiterhin, und die Endpoints sind aus diesem Grund unten dokumentiert. Bauen Sie keine neuen Integrationen darauf auf.

EndpunktZweck
POST /v2/tron/paymasterEine gesponserte Transaktionsanfrage erstellen
GET /v2/tron/paymasterIhre Anfragen und deren Status auflisten
GET /v2/tron/paymaster/{id}Eine Anfrage lesen
POST /v2/tron/paymaster/estimateEnergy, Bandwidth und Gebühr schätzen
GET /v2/tron/paymaster/balanceIhr verbleibendes Guthaben lesen

Wie viel Energy und Bandwidth eine Transaktion braucht, hängt vom Transaktionstyp und vom aufgerufenen Contract ab, der Betrag ist also nicht fix. POST /v2/tron/paymaster/estimate nimmt denselben Body wie die eigentliche Anfrage entgegen und liefert zurück, was die Transaktion kosten würde.

Terminal-Fenster
curl --request POST\
--url https://api.chaingateway.io/v2/tron/paymaster/estimate\
--header 'Accept: application/json'\
--header 'content-type: application/json'\
--header 'Authorization: YOUR_API_TOKEN'\
--data '{
"type": "TRC20",
"from": "TLkkCeNdJKPNUwucdro84WjswkzM62LCTH",
"to": "TUwmZghA7u2GxGxKaxM1mkCmsTF4wHs4vp",
"contractaddress": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"amount": "1"
}'
{
"status": 200,
"ok": true,
"message": "Successfully estimated the fees",
"data": {
"energy_consumption": 32000,
"bandwidth_consumption": 368,
"paymaster_fee": 0.15
}
}

Die Gebühr wird vom Guthaben abgezogen, sobald die Anfrage abgewickelt ist. Ein Guthaben, das nicht ausreicht, lässt die Anfrage fehlschlagen. GET /v2/tron/paymaster/balance liefert, was übrig ist.

type akzeptiert TRX, TRC10, TRC20 und TRC721. Zusammen mit from, to und amount ist es erforderlich. Für TRC20 und TRC721 geben Sie zusätzlich contractaddress an, für TRC721 und TRC10 die tokenid. Das Signieren funktioniert wie überall sonst in der API: password für eine passwortgeschützte Chaingateway-Adresse, sonst privatekey. Eine optionale callback_url erhält das Ergebnis.

Terminal-Fenster
curl --request POST\
--url https://api.chaingateway.io/v2/tron/paymaster\
--header 'Accept: application/json'\
--header 'content-type: application/json'\
--header 'Authorization: YOUR_API_TOKEN'\
--data '{
"type": "TRC20",
"from": "TLkkCeNdJKPNUwucdro84WjswkzM62LCTH",
"to": "TUwmZghA7u2GxGxKaxM1mkCmsTF4wHs4vp",
"contractaddress": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"amount": "1",
"password": "test123",
"callback_url": "https://example.com/callback"
}'

Die Antwort ist kein Transaktions-Hash, sondern die ID der Anfrage:

{
"status": 200,
"ok": true,
"message": "Successfully created paymaster request",
"data": {
"id": "9c72d676-8180-4cd2-a406-f0f1cd097506"
}
}

Pollen Sie GET /v2/tron/paymaster/{id} mit dieser ID, oder listen Sie alle Anfragen mit GET /v2/tron/paymaster auf. Das Feld status durchläuft pending, während die Anfrage wartet, processing, während die Transaktion unterwegs ist, und completed, sobald sie abgewickelt wurde. Ein Fehlschlag liest sich als failed - [reason], wobei der Grund nach dem Bindestrich ausgeschrieben ist. Der resultierende Transaktions-Hash erscheint im Datensatz, sobald die Transaktion abgeschlossen ist.

{
"id": "9cfbfcaf-68b2-47e9-bf55-5b6b4875e84d",
"type": "TRC20",
"from": "THG9nncwASg3ub5rvVquocAHwwQbnKZxpH",
"to": "TPUjdnMrS7XDUFp5W6zgh4QDCW34nXa2x1",
"contract_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"amount": "200",
"token_id": null,
"transaction_hash": "80a223e0cb20ef692fbd23d3cbaf3cc1dfa2b9667aaef70c7da8ca8f707ec28b",
"status": "success",
"used_credits": "2.178413",
"callback_url": "https://api.chaingateway.io/receiver/webhooks/tron",
"created_at": "2024-09-11T15:28:57.000000Z"
}

Wenn das TRX ohnehin Ihnen gehört, können Sie es einmal staken und die Ressourcen wiederverwenden, statt pro Transaktion zu zahlen. POST /v2/tron/freeze stakt TRX für Energy oder Bandwidth, POST /v2/tron/delegate gibt diese Ressourcen an eine andere Adresse weiter, und POST /v2/tron/undelegate sowie POST /v2/tron/unfreeze machen beide Schritte rückgängig. Eine einzelne gestakte Adresse kann die dahinterliegenden Einzahlungsadressen versorgen, was zu einem Zahlungsfluss mit vielen empfangenden Adressen passt.

Wie Sie den Transfer selbst senden, steht unter TRC20-Token-Transaktionen erstellen.