Methodology
Metodologia delle criptovalute
BigInt ovunque — ogni Wei fa round-trip esattamente, indipendentemente dalla grandezza.
By Buğra SözeriPublished
Il cluster Cryptoconverte tra tre denominazioni Ethereum — Wei (atomica), Gwei (unità del prezzo del gas) ed ETH (rivolto all’utente). La matematica è banale nel concetto (potenze di dieci) e complicata nell’implementazione (i numeri superano la precisione nativa di JavaScript). Questa pagina spiega le scelte di implementazione.
Le relazioni tra unità
1 ETH = 10⁹ Gwei = 10¹⁸ WeiL’EVM memorizza tutti i saldi e l’aritmetica in Wei come interi a 256 bit senza segno. ETH e Gwei sono etichette puramente rivolte all’uomo senza rappresentazione on-chain — sono convenzioni di divisione per potenze di dieci per la visualizzazione.
Perché BigInt è obbligatorio
Il tipo Number di JavaScript usa la doppia precisione IEEE 754: ~15-17 cifre decimali significative. Number.MAX_SAFE_INTEGER è 2⁵³ − 1 ≈ 9,007 × 10¹⁵. Un saldo di 9 ETH è approssimativamente 9 × 10¹⁸ Wei— tre ordini di grandezza oltre il limite di precisione.
Concretamente: se memorizzi 1,234567890123456789 ETH in un Number e converti in Wei, le ultime cifre vengono arrotondate. Se accetti quella stringa come input da un wallet e la passi a uno smart contract, il contratto riceve un numero diverso da quello che l’utente pensava di aver inviato.
Le librerie crypto di produzione (ethers.js, viem, web3.js) usano tutte BigInt o un wrapper BigNumber per gli importi in Wei. Il nostro convertitore usa BigInt nativo ovunque. Gli input accettano stringhe decimali; la conversione le analizza attentamente per evitare la coercizione prematura a Number.
Il percorso di parsing delle stringhe decimali
Per un input utente come 1,234 ETH:
- Dividi al punto decimale. Parte intera:
1; parte frazionaria:234. - Imbottisci la parte frazionaria a 18 cifre (la precisione di ETH):
234000000000000000. - Concatena:
1234000000000000000. - Costruisci un BigInt dal risultato.
- Per convertire in Gwei, dividi per 10⁹ (la divisione BigInt è una divisione intera — questo è corretto perché Gwei ha 9 cifre decimali in meno rispetto a Wei).
Le conversioni in ETH per la visualizzazione invertono il processo: dividi il BigInt per 10¹⁸ per ottenere la parte intera, modulo 10¹⁸ per la parte frazionaria, formatta come stringa decimale con zeri iniziali dove necessario. Gli zeri finali vengono rimossi per la leggibilità.
Garanzia di round-trip
Qualsiasi conversione attraverso il nostro calcolatore fa round-trip esattamente. Nello specifico:
- ETH → Wei → ETH preserva tutte le 18 cifre frazionarie.
- Gwei → Wei → Gwei preserva tutte le 9 cifre frazionarie.
- Wei → ETH → Wei è esatto perché gli importi Wei sono interi.
Gli input con più precisione di quanto l’unità supporta (es. “1,5 Wei”) vengono troncati, non arrotondati — gli importi sub-Wei non esistono.
Dettagli dell’algoritmo: il percorso BigInt dall’inizio alla fine
Il convertitore è una pipeline di funzioni pure; gli stessi input producono sempre gli stessi output. Pseudocodice per la direzione ETH-to-Wei:
function ethToWei(input: string): bigint {
const [intPart, fracPartRaw = ""] = input.split(".");
if (fracPartRaw.length > 18) throw new Error("over-precise");
const fracPart = fracPartRaw.padEnd(18, "0");
return BigInt(intPart) * 10n ** 18n + BigInt(fracPart);
}Ogni passaggio usa l’aritmetica BigInt — nessuna coercizione a Number. Il pattern padding-poi-concatenazione evita qualsiasi intermedio in virgola mobile, che è l’unico modo per preservare le 18 cifre decimali frazionarie che ETH consente.
Wei-to-display usa il trucco inverso:
function weiToEth(wei: bigint): string {
const intPart = wei / 10n ** 18n;
const fracPart = wei % 10n ** 18n;
const fracStr = fracPart.toString().padStart(18, "0").replace(/0+$/, "");
return fracStr.length === 0 ? intPart.toString() : `${intPart}.${fracStr}`;
}Lo stesso template genera Gwei (dividi per 10⁹) e BTC ↔ satoshi (dividi per 10⁸ — rientra in un Number regolare ma la libreria usa BigInt per coerenza).
Fonti e riferimenti
La gerarchia delle unità Wei / Gwei / ETH è normativa nell’Ethereum Yellow Paper. EIP-1559 ha standardizzato le convenzioni di visualizzazione della tariffa base e della tariffa prioritaria che il nostro calcolatore rispecchia. Il tipo intero a precisione arbitraria di JavaScript è specificato in ECMA-262; il limite di precisione che aggiriamo è da IEEE 754. La precisione a 8 decimali di Bitcoin proviene dal whitepaper originale. Citazioni complete nel blocco Fonti qui sotto.
Presupposti e limitazioni
- Aritmetica pura, nessuna rete.Il calcolatore non legge mai un RPC di chain o il saldo di un wallet — gli input sono stringhe fornite dall’utente, gli output sono stringhe formattate.
- Gli importi sub-Wei vengono troncati, non arrotondati. Un input di
0,5 Weisi risolve a 0 Wei. Le unità sub-atomiche non esistono su Ethereum. - La formattazione della visualizzazione rimuove gli zeri finali. 1,230000…0 ETH viene visualizzato come 1,23 ETH. Gli smart contract si preoccupano del BigInt, non della stringa di visualizzazione, quindi questo è puramente cosmetico.
- Nessun prezzo ETH/USD in tempo reale.La conversione fiat usa un servizio di prezzo memorizzato nella cache separato nel cluster valuta — vedi la metodologia valuta per la cadenza di aggiornamento. Il convertitore di unità crypto è privo di prezzi.
- Solo token nativi delle chain EVM. I token ERC-20 hanno decimali configurabili (USDC ha 6, DAI ha 18); usa il valore
decimals()del contratto token, non il 18 di ETH, per quelli. - Nessuna firma, trasmissione o custodia di transazioni. Usa un wallet (Metamask, Rabby) per qualsiasi movimento; il convertitore mostra solo numeri.
- La formattazione locale BigInt è opt-in. Gli output usano un punto decimale normale; i separatori delle migliaia vengono applicati dal livello UI per ETH ma non per Wei grezzo (un numero a 50 cifre con virgole è più difficile da copiare di uno senza).
Cosa non facciamo
- Prezzo ETH in tempo reale. In arrivo nella Wave 2 (API CoinGecko + cache ISR).
- Altre chain. La maggior parte delle chain compatibili con EVM usa la stessa gerarchia Wei/Gwei/token-nativo — sostituisci l’etichetta “ETH” con MATIC, BNB, ARB, ecc., e la matematica è identica.
- Denominazioni Bitcoin. 1 BTC = 100.000.000 satoshi rientra comodamente in un intero a 64 bit; BigInt non è necessario. La nostra libreria sottostante supporta la conversione BTC ↔ satoshi; lo strumento UI arriva in un lotto successivo.
- Transazioni. Non inviamo nulla a nessuna rete.
Frequently asked questions
- Come converte Convertitive tra Wei, Gwei ed ETH?
- Le relazioni sono esatte per definizione nell'Ethereum Yellow Paper: 1 ETH = 10⁹ Gwei = 10¹⁸ Wei. Tutta l'aritmetica usa JavaScript BigInt per evitare la perdita di precisione in virgola mobile IEEE 754. La conversione è: Wei = ETH × 10¹⁸ (moltiplicazione BigInt, senza perdite). Nessun arrotondamento, nessuna approssimazione — ogni Wei fa round-trip esattamente.
- Perché BigInt è obbligatorio per la conversione delle unità Ethereum?
- Il tipo Number di JavaScript è un double IEEE 754 (virgola mobile a 64 bit) con una mantissa a 53 bit, che dà una rappresentazione intera esatta solo fino a 2⁵³ = 9.007.199.254.740.992 (circa 9 × 10¹⁵). Un solo ETH = 10¹⁸ Wei supera già questo di 100×. Senza BigInt, anche piccoli valori ETH perdono la precisione a livello di Wei. Per esempio, 1,5 ETH = 1.500.000.000.000.000.000 Wei — un intero a 19 cifre che Number arrotonda silenziosamente.
- Cosa memorizza effettivamente la EVM (Ethereum Virtual Machine) per i saldi?
- L'EVM (Ethereum Yellow Paper, §4.1) memorizza i saldi dei conti come interi a 256 bit senza segno in unità di Wei. Non esiste rappresentazione in virgola mobile o decimale a livello di protocollo. Gwei è una denominazione leggibile dall'uomo usata per i prezzi del gas (la tariffa base EIP-1559 è denominata in Gwei); ETH è la denominazione di visualizzazione. Solo Wei esiste a livello EVM.
- Come funziona il percorso di parsing delle stringhe decimali per input ETH frazionari?
- L'ETH frazionario come '0.001' viene analizzato come stringa decimale, diviso al punto decimale, e la parte frazionaria viene imbottita a esattamente 18 cifre decimali prima di essere analizzata come BigInt. Per esempio, '0.001' → parte intera '0', frazionaria '001' + 15 zeri di padding = '001000000000000000' → 1.000.000.000.000.000 Wei. Questo evita qualsiasi rappresentazione intermedia in virgola mobile.
- Quali sono le limitazioni del convertitore Wei / Gwei / ETH?
- Tre limitazioni: (1) il convertitore non conosce il prezzo attuale ETH/USD — converte unità, non valore; (2) la stima del gas (tariffa totale = unità_gas × (tariffa_base + tariffa_priorità) in Gwei) non viene eseguita; (3) i decimali dei token ERC-20 non sono supportati — molti token usano 6 o 8 cifre decimali piuttosto che 18, e trattarli come ETH darebbe risultati sbagliati.
Related
Published May 14, 2026