Skip to content

Methodology

Méthodologie crypto

BigInt partout — chaque Wei fait l’aller-retour exactement, quelle que soit la magnitude.

By Published

Le cluster Cryptoconvertit entre trois dénominations Ethereum — Wei (atomique), Gwei (unité de prix du gas) et ETH (côté utilisateur). Les mathématiques sont triviales en concept (puissances de dix) et délicates en implémentation (les nombres dépassent la précision native de JavaScript). Cette page explique les choix d’implémentation.

Les relations entre unités

1 ETH = 10⁹ Gwei = 10¹⁸ Wei

L’EVM stocke tous les soldes et toute l’arithmétique en Wei sous forme d’entiers non signés de 256 bits. ETH et Gwei sont des étiquettes purement orientées vers l’humain sans représentation on-chain — ce sont des conventions de division par puissance de dix pour l’affichage.

Pourquoi BigInt est obligatoire

Le type Number de JavaScript utilise la double précision IEEE 754 : ~15-17 chiffres décimaux significatifs. Number.MAX_SAFE_INTEGER est 2⁵³ − 1 ≈ 9,007 × 10¹⁵. Un solde de 9 ETH est approximativement 9 × 10¹⁸ Wei — trois ordres de magnitude au-delà du plancher de précision.

Concrètement : si vous stockez 1,234567890123456789 ETH dans un Number et convertissez en Wei, les derniers chiffres sont arrondis. Si vous acceptez cette chaîne comme entrée d’un portefeuille et la passez à un contrat intelligent, le contrat reçoit un nombre différent de ce que l’utilisateur pensait envoyer.

Les bibliothèques crypto de production (ethers.js, viem, web3.js) utilisent toutes BigInt ou un wrapper BigNumber pour les montants en Wei. Notre convertisseur utilise BigInt natif partout. Les entrées acceptent des chaînes décimales ; la conversion les analyse soigneusement pour éviter une coercition Number prématurée.

Le chemin d’analyse de chaîne décimale

Pour une entrée utilisateur comme 1,234 ETH :

  1. Diviser au point décimal. Partie entière : 1 ; partie fractionnaire : 234.
  2. Rembourrer la partie fractionnaire à 18 chiffres (précision de l’ETH) : 234000000000000000.
  3. Concaténer : 1234000000000000000.
  4. Construire un BigInt à partir du résultat.
  5. Pour convertir en Gwei, diviser par 10⁹ (la division BigInt est une division entière — c’est correct car Gwei a 9 décimales de moins que Wei).

Les conversions vers ETH pour l’affichage inversent le processus : diviser le BigInt par 10¹⁸ pour obtenir la partie entière, modulo 10¹⁸ pour la partie fractionnaire, formater comme une chaîne décimale avec des zéros en tête si nécessaire. Les zéros de fin sont supprimés pour la lisibilité.

Garantie aller-retour

Toute conversion via notre calculateur fait l’aller-retour exactement. Spécifiquement :

  • ETH → Wei → ETH préserve les 18 chiffres fractionnaires.
  • Gwei → Wei → Gwei préserve les 9 chiffres fractionnaires.
  • Wei → ETH → Wei est exact car les montants Wei sont des entiers.

Les entrées avec plus de précision que l’unité ne peut en supporter (par ex. “1,5 Wei”) sont tronquées, pas arrondies — les sous-Wei n’existent pas.

Détails de l’algorithme : le chemin BigInt de bout en bout

Le convertisseur est un pipeline de fonction pure ; les mêmes entrées produisent toujours les mêmes sorties. Pseudocode pour la direction ETH-vers-Wei :

function ethToWei(input: string): bigint {
  const [intPart, fracPartRaw = ""] = input.split(".");
  if (fracPartRaw.length > 18) throw new Error("trop précis");
  const fracPart = fracPartRaw.padEnd(18, "0");
  return BigInt(intPart) * 10n ** 18n + BigInt(fracPart);
}

Chaque étape utilise l’arithmétique BigInt — aucune coercition vers Number. Le pattern rembourrage-puis-concaténation évite tout intermédiaire en virgule flottante, ce qui est le seul moyen de préserver les 18 chiffres décimaux fractionnaires que l’ETH autorise.

Wei-vers-affichage utilise l’astuce inverse :

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}`;
}

Le même modèle génère Gwei (diviser par 10⁹) et BTC ↔ satoshi (diviser par 10⁸ — tient dans un Number régulier mais la bibliothèque utilise BigInt par cohérence).

Sources & références

La hiérarchie d’unités Wei / Gwei / ETH est normative dans le Yellow Paper Ethereum. EIP-1559 a standardisé les conventions d’affichage des frais de base et de priorité que notre calculateur reproduit. Le type entier à précision arbitraire de JavaScript est spécifié dans l’ECMA-262 ; le plancher de précision que nous contournons vient de l’IEEE 754. La précision à 8 décimales du Bitcoin vient du livre blanc original. Citations complètes dans le bloc Sources ci-dessous.

Hypothèses & limites

  • Arithmétique pure, pas de réseau.Le calculateur ne lit jamais un RPC de chaîne ou un solde de portefeuille — les entrées sont des chaînes fournies par l’utilisateur, les sorties sont des chaînes formatées.
  • Les sous-Wei sont tronqués, pas arrondis. Une entrée de 0,5 Weirésout à 0 Wei. Les unités sous-atomiques n’existent pas sur Ethereum.
  • Le formatage d’affichage supprime les zéros de fin. 1,230000…0 ETH s’affiche comme 1,23 ETH. Les contrats intelligents se soucient du BigInt, pas de la chaîne d’affichage, donc c’est purement cosmétique.
  • Pas de prix ETH/USD en direct. La conversion fiat utilise un service de prix mis en cache séparé dans le cluster des devises — voir la méthodologie des devises pour la cadence de rafraîchissement. Le convertisseur d’unités crypto est exempt de prix.
  • Jetons natifs de chaîne EVM uniquement. Les jetons ERC-20 ont des décimales configurables (USDC en a 6, DAI en a 18) ; utilisez la valeur decimals()du contrat du jeton, pas les 18 de l’ETH, pour ceux-là.
  • Aucune signature, diffusion ni garde de transactions. Utilisez un portefeuille (Metamask, Rabby) pour tout mouvement ; le convertisseur ne montre que des chiffres.
  • Le formatage locale BigInt est opt-in. Les sorties utilisent un point décimal simple ; les séparateurs de milliers sont appliqués par la couche UI pour ETH mais pas pour le Wei brut (un nombre de 50 chiffres avec des virgules est plus difficile à copier que sans).

Ce que nous ne faisons pas

  • Prix ETH en direct. À venir dans la vague 2 (API CoinGecko + cache ISR).
  • Autres chaînes. La plupart des chaînes compatibles EVM utilisent la même hiérarchie Wei/Gwei/jeton natif — remplacez l’étiquette “ETH” par MATIC, BNB, ARB, etc., et les mathématiques sont identiques.
  • Dénominations Bitcoin. 1 BTC = 100 000 000 satoshi tient confortablement dans un entier 64 bits ; BigInt n’est pas nécessaire. Notre bibliothèque sous-jacente supporte la conversion BTC ↔ satoshi ; l’outil UI est disponible dans un lot ultérieur.
  • Transactions. Nous ne soumettons rien à aucun réseau.

Frequently asked questions

Comment Convertitive convertit-il entre Wei, Gwei et ETH ?
Les relations sont exactes par définition dans le Yellow Paper Ethereum : 1 ETH = 10⁹ Gwei = 10¹⁸ Wei. Toute l’arithmétique utilise JavaScript BigInt pour éviter la perte de précision en virgule flottante IEEE 754. La conversion est : Wei = ETH × 10¹⁸ (multiplication BigInt, sans perte). Aucun arrondi, aucune approximation — chaque Wei fait l’aller-retour exactement.
Pourquoi BigInt est-il obligatoire pour la conversion d’unités Ethereum ?
Le type Number de JavaScript est un double IEEE 754 (virgule flottante 64 bits) avec une mantisse de 53 bits, donnant une représentation entière exacte uniquement jusqu’à 2⁵³ = 9 007 199 254 740 992 (environ 9 × 10¹⁵). Un seul ETH = 10¹⁸ Wei dépasse déjà cela de 100×. Sans BigInt, même de petites valeurs ETH perdent leur précision au niveau Wei. Par exemple, 1,5 ETH = 1 500 000 000 000 000 000 Wei — un entier de 19 chiffres que Number arrondit silencieusement.
Que stocke réellement l’EVM pour les soldes ?
L’EVM (Yellow Paper Ethereum, §4.1) stocke les soldes de comptes en tant qu’entiers non signés de 256 bits en unités de Wei. Il n’y a pas de représentation en virgule flottante ou décimale au niveau du protocole. Gwei est une dénomination lisible par l’humain utilisée pour les prix du gas (les frais de base EIP-1559 sont libellés en Gwei) ; ETH est la dénomination d’affichage. Seul Wei existe au niveau de l’EVM.
Comment fonctionne le chemin d’analyse de chaîne décimale pour les entrées ETH fractionnaires ?
L’ETH fractionnaire comme ’0,001’ est analysé comme une chaîne décimale, divisé au point décimal, et la partie fractionnaire est rembourée à exactement 18 décimales avant d’être analysée comme BigInt. Par exemple, ’0,001’ → partie entière ’0’, fractionnaire ’001’ + 15 zéros de rembourrage = ’001000000000000000’ → 1 000 000 000 000 000 Wei. Cela évite toute représentation intermédiaire en virgule flottante.
Quelles sont les limites du convertisseur Wei / Gwei / ETH ?
Trois limites : (1) le convertisseur ne connaît pas le prix actuel ETH/USD — il convertit des unités, pas de la valeur ; (2) l’estimation du gas (frais total = unités_gas × (frais_base + frais_priorité) en Gwei) n’est pas effectuée ; (3) les décimales de token ERC-20 ne sont pas supportées — de nombreux tokens utilisent 6 ou 8 décimales plutôt que 18, et les traiter comme ETH donnerait des résultats incorrects.

Related

Published May 14, 2026