Energi untuk approve TRC-20 dan panggilan kontrak TRON lainnya
Energi adalah apa yang dikenakan TRON untuk menjalankan kode kontrak, dan transfer USDT hanyalah satu panggilan kontrak di antara banyak. approve juga memakainya, begitu pula transferFrom yang kemudian memindahkan dana yang disetujui. Pada 28 Oktober 2026 kami menjalankan dry-run atas keduanya pada kontrak USDT: approve memakai 99,764 unit energi ketika allowance bernilai nol dan 33,764 ketika allowance sudah ditetapkan, dan transferFrom memakai 65,123 terhadap allowance tak terbatas dan 89,325 terhadap yang terbatas. Panggilan ke kontrak lain punya angkanya sendiri, dan energi sewaan membayar setiap panggilan itu dengan cara yang sama seperti membayar transfer.
Sebuah delegasi menaikkan batas energi akun yang ia tuju, dan setiap panggilan kontrak yang ditandatangani akun itu memakai dari batas tersebut sebelum TRX apa pun dibakar (apa itu energi TRON). Tidak ada di dalam delegasi yang menyebut kontrak atau fungsi yang dituju. Panggilan selain transfer berbeda dalam berapa banyak yang dipakainya, yang bergantung pada kontrak dan fungsi yang dipanggilnya serta keadaan yang ditemukannya di sana, dan pada sebagian kontrak, dalam berapa banyak dari itu yang dibayar penanda tangan.
Apa yang dipakai panggilan USDT dalam dry-run
Dry-run adalah panggilan konstan: sebuah node mengeksekusi panggilan terhadap salinan rantainya sendiri, melaporkan energi yang dipakainya dan membuang hasilnya. Tidak ada yang ditandatangani atau disiarkan, dan ia tidak berbiaya. Kami membuatnya lewat sebuah full node publik antara pukul 08:29 dan 08:34 UTC pada 28 Oktober 2026. Para pemilik adalah akun sungguhan, diambil dari blok-blok terbaru tepat setelah masing-masing menyetujui sebuah spender, dan penarikan di-dry-run dari spender-spender itu. approve dari nol dikirim ke alamat yang kami buat untuk pengukuran September kami, yang tidak pernah disetujui pemilik mana pun. Kami membaca setiap allowance dan saldo sesaat sebelum panggilan. Setiap angka di bawah kembali dari panggilan yang akan berhasil. Transfer dan kedua penarikan memindahkan satu unit, sepersejuta USDT, ke alamat yang sama, yang memegang USDT.
| Panggilan USDT, 28 Oktober 2026 | Energi terpakai | Di antaranya, dilaporkan sebagai energy_penalty | Dibakar pada 100 sun per unit |
|---|---|---|---|
transfer ke alamat yang memegang USDT | 64,285 | 49,635 | 6.4285 TRX |
approve, allowance nol | 99,764 | 77,076 | 9.9764 TRX |
approve, allowance sudah ditetapkan | 33,764 | 26,076 | 3.3764 TRX |
transferFrom oleh spender, terhadap allowance tak terbatas | 65,123 | 50,281 | 6.5123 TRX |
transferFrom oleh spender lain, terhadap allowance terbatas | 89,325 | 68,976 | 8.9325 TRX |
Kedua jenis approve berasal dari pemilik yang sama untuk jumlah baru yang sama. Satu spender belum punya allowance dan yang lain sudah punya, dan panggilan untuk yang pertama berbiaya 66,000 unit lebih banyak. Itu selisih yang sama dengan antara transfer ke alamat tanpa USDT dan ke pemegang, yang kami ukur pada September di 130,285 dan 64,285 (kedua angka transfer). Pada kedua pasangan, panggilan yang lebih murah menimpa angka yang sudah ada dan yang lebih mahal menulis di atas nol.
Kecuali deployer kontrak telah setuju menanggung sebagian darinya, seperti milik JustLend DAO (di bawah), siapa pun yang menandatangani sebuah panggilan membayar energinya. Dalam alur ketika pelanggan menyetujui kontrak seorang pedagang dan pedagang itu kemudian menarik dananya, pelanggan membayar setiap approve, dan siapa pun yang menandatangani panggilan penarikan membayarnya: transferFrom di tabel, ditambah kode milik kontrak pedagang itu sendiri ketika penarikan berjalan di dalamnya. Kedua penarikan yang bisa kami dry-run berbeda pada allowance-nya. Dengan yang tak terbatas, transferFrom milik spender berjumlah 838 unit lebih banyak daripada transfer biasa dengan jumlah yang sama ke alamat yang sama, dan dengan yang terbatas ia berbiaya 24,202 di atas itu. Itu satu pasang masing-masing, dan pasangan-pasangan itu juga punya pemilik dan spender yang berbeda.
Sedikit di atas tiga perempat dari setiap angka berada di field yang disebut node energy_penalty, dan porsinya sama untuk kelima panggilan, approve sama seperti transfer.
Kontrak pinjaman: dua panggilan JustLend DAO
Menyewa energi dari JustLend DAO sendiri adalah sepasang panggilan kontrak, satu yang membuka posisi dan satu yang mengembalikannya (berapa biaya penyewaan itu). Kami memasangkan 30 sewa dengan pengembaliannya dari catatan publik kontrak untuk 24 jam yang berakhir pada malam 2 September 2026, dan membaca apa yang dipakai tiap panggilan, secara total, dari receipt-nya.
| Panggilan JustLend DAO, 2 September 2026 | Paling sedikit | Median | Paling banyak |
|---|---|---|---|
Sewa, rentResource | 52,672 | 69,306 | 84,290 |
Pengembalian, returnResource | 67,195 | 74,135 | 74,135 |
Tabel itu memberi total karena penanda tangan tidak selalu membayar seluruhnya. Kontrak ini diatur untuk membebankan sepersepuluh energi kepada pemanggilnya dan menutup sisanya dari energi milik deployer-nya sendiri, hingga 90,000 unit per panggilan, selama energi itu bertahan. Sewa kami sendiri malam itu memakai 84,290 unit dan penanda tangannya membayar 8,429 di antaranya. Kurang dari tiga jam sebelumnya, sewa pihak ketiga membayar seluruh 52,672 sendiri, karena energi deployer sudah habis, dan pengembaliannya dua belas detik kemudian membayar 62,200 dari 74,135. Dry-run melaporkan apa yang dipakai sebuah panggilan, sedangkan penanda tangan membayar apa pun dari sepersepuluh yang dibebankan kontrak kepada pemanggilnya sampai seluruhnya, tergantung pada energi deployer pada detik itu, jadi takar panggilan itu untuk seluruhnya.
Menakar panggilan yang belum diukur siapa pun untuk Anda
Tidak ada tabel yang mencakup setiap kontrak, dan angka di atas bergerak mengikuti keadaan yang ditemukan sebuah panggilan. Angka yang bisa dipercaya adalah dry-run dari panggilan yang persis sama itu, dari akun yang akan menandatanganinya, dibuat sesaat sebelum ia dikirim. Full node mana pun menjawabnya:
POST /wallet/triggerconstantcontract
{"owner_address": "T… (akun yang akan menandatangani)",
"contract_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
"function_selector": "approve(address,uint256)",
"parameter": "… (argumen, dikodekan ABI)",
"visible": true}
Periksa jawabannya sebelum Anda mengambil angkanya, karena panggilan yang akan revert tetap melaporkan energi. Dua dari percobaan transferFrom pertama kami mengenai pasangan yang tidak lagi sanggup membayar: satu allowance sudah terpakai dalam detik-detik sebelum kami bertanya, dan satu pemilik sama sekali tidak memegang USDT. Keduanya kembali dengan 5,947 dan 4,845 unit untuk pekerjaan yang berakhir dengan kegagalan. result.result-nya tetap terbaca true. Yang membedakannya adalah FAILED di transaction.ret, tempat panggilan yang berhasil meninggalkan entri kosong.
Sisakan ruang di atas angka itu, karena sebuah allowance bisa dihabiskan dan sebuah penerima dikosongkan di antara dry-run dan blok. Kami juga menyisakan ruang di pihak kami: angka transfer standar kami, 65,000 dan 131,000, berada 715 unit di atas apa yang diukur kedua transfer, dan ketika dry-run sebuah transfer USDT bertanda tangan yang diserahkan kepada kami di mode B menunjukkan angka di atas apa yang diukur untuk transfer ke alamat kosong, kami membeli ukuran itu ditambah margin dan menilai pengiriman terhadap ukuran itu sendiri.
Atur fee_limit transaksi agar menutup seluruh angka itu pada harga jaringan 100 sun per unit, bahkan ketika energinya disewa. Sebuah node membatasi panggilan pada fee_limit-nya dibagi harga energi dan menghitung energi yang didelegasikan di dalam batas itu, jadi batas yang rendah menghentikan panggilan yang punya setiap unit yang dibutuhkannya di akun. Bandwidth adalah meteran terpisah: setiap panggilan juga membayar byte-nya, dan energi tidak menutupnya (energi dan bandwidth).
Swap lewat kontrak bursa adalah aritmetika yang sama dengan satu kontrak lagi di dalamnya: approve yang membolehkan bursa memindahkan token, lalu panggilan ke dalam bursa. Kami tidak menjalankan dry-run untuk satu pun.
Menyewa energi untuk sebuah panggilan per unit
Mode A dan B kami dibangun di sekitar transfer USDT, dan mode B menerima transfer USDT yang sudah ditandatangani dan tidak ada yang lain. Di mode A, ketika penerima sebuah transfer ternyata sebuah kontrak, kami menjalankan dry-run untuk Anda: item kembali sebagai kind: custom, energy_units-nya adalah ukurannya, dan peringatan contract_recipient menjelaskan alasannya (item custom, sebelum apa pun ditandatangani).
Untuk setiap panggilan lain ada mode C. Anda menyebut dompet dan volumenya, dan kami mendelegasikan energi ke dompet itu tanpa penerima yang terlibat (mode C dalam penelusuran API). Volumenya bisa berupa energy_units, bilangan bulat mana pun dari 65,000 sampai 50,000,000 per dompet, dan item kembali sebagai kind: bulk. Mode C tidak menerima custom, karena tidak ada penerima yang bisa kami dry-run, jadi pengukurannya urusan Anda. Dompetnya harus sudah diaktifkan di rantai, dan pesanan untuk yang belum diaktifkan kembali ditolak dengan inactive_wallet.
Masa sewa lima menit menerima volume hingga 131,000. Apa pun yang lebih besar harus memakai masa sewa satu jam, dan kami menolaknya pada yang lebih pendek dengan bulk_needs_longer_lease: volume besar dirakit dari beberapa sumber dan mendarat dalam potongan yang berselang beberapa detik. approve dari nol muat di bawah garis itu sendirian, dengan ruang untuk margin. Ikuti dengan transfer ke pemegang dan pasangan itu melewati garis, jadi ia masuk ke satu jam. Volume terkecil yang kami jual menutup sebuah approve pada allowance yang sudah ada dengan sisa hampir sebanyak itu lagi.
POST /v1/estimate dengan energy_units yang sama menjawab berapa yang akan ditagihkan untuk volume itu saat ini dan, di coverage, apakah pasar memilikinya sekarang. Begitu terkirim, item tetap ready sampai send_before lalu terbaca expired, yang di sini berarti masa sewa habis: akhir yang normal. Tagihannya untuk pengiriman, dan energi yang tidak dipakai dompet kembali bersama delegasinya.
Apa yang tidak kami ukur: sebuah swap, panggilan ke kontrak mana pun selain USDT dan JustLend DAO, transferFrom ke alamat tanpa USDT, dan apakah angka-angka ini bertahan selama berminggu-minggu. Setiap angka USDT di sini adalah satu panggilan konstan yang dijawab satu node; kami tidak mengirim transaksi apa pun, jadi tak satu pun dari angka itu telah dicocokkan dengan receipt.
Jalankan dry-run atas panggilan itu, lalu taruh volume itu pada dompet yang akan menandatanganinya: mode c dan energy_units pada POST /v1/orders →