Token gas DuskEVM adalah DUSK dengan 18 angka desimal. Jangan gunakan kebiasaan USDC 6 desimal

tanggal saya deploy kontrak di testnet, saya menulis sesuai ingatan otot DeFi: meneruskan parameter transfer(addr, 1000000) untuk memindahkan 1 DUSK. Hasilnya node mengembalikan error “insufficient balance” — padahal wallet jelas punya 15 DUSK uji. Baru setelah cek di Blockscout saya sadar: DUSK mainnet dan di DuskEVM semuanya memakai desimal 18 (seperti ETH), bukan desimal 6 milik USDC, dan juga bukan 8 desimal milik beberapa BEP-20. 1 DUSK = 1000000000000000000 unit terkecil.

Lubang ini sangat mudah tersandung saat menulis kode lintas lingkungan: di Solidity, uint amount = 1 * 10**18 itu benar, tapi di front-end JS, jika Anda menyalin pakai ethers.parseUnits("1", 6), itu salah. Skrip Node membaca harga DUSK dari Binance REST (satuan kuotanya 1 DUSK = x U) tidak masalah, tapi saat membangun transaksi DuskEVM, jika nilai gas diperlakukan 1e6 sebagai 1 DUSK, maka gas-nya langsung jadi nol dan transaksi tetap harus bayar base fee.

Yang lebih rumit, perkiraan fee DuskEVM dibagi dua: L2 exec fee dihitung dalam DUSK 18 desimal, dan L1(DA) fee juga dibayar dalam DUSK 18 desimal kepada produsen DuskDS. Saat pertama kali deploy di Remix, setelah saya mengisi gas limit, saya mengisi kolom value secara keliru menjadi 2000000 (seolah-olah 2 DUSK). Padahal nilainya hanya 0.000002 DUSK, lebih kecil dari base fee sehingga ditolak. Baru setelah diubah menjadi 2000000000000000000 (2e18) transaksi berhasil.

Variabel rahasia yang diberi tanda oleh Hedger juga sama: Anda menulis @hedged uint256 shares untuk menyatakan 1000 porsi (shares) obligasi, maka harus menyimpan 1000 * 10**18. Setelah view key didekode, front-end baru memformatnya dengan formatUnits(18) sehingga tampil 1000; jangan mengira pakai formatUnits(6) lalu dianggap 0.001.

Kalian yang pindah dari ERC-20, apakah transaksi pertama kalian juga kena masalah desimal?
@Dusk $DUSK #dusk