Methodology
Kripto metodolojisi
Her yerde BigInt — her Wei, büyüklüğünden bağımsız olarak tam gidiş-dönüş yapar.
By Buğra SözeriPublished
Kripto kümesi, üç Ethereum birimi arasında dönüşüm yapar — Wei (atomik), Gwei (gaz fiyat birimi) ve ETH (kullanıcıya yönelik). Matematik kavram olarak basittir (on kuvvetleri) ve uygulamada karmaşıktır (sayılar JavaScript’in yerel hassasiyetini aşar). Bu sayfa uygulama tercihlerini açıklar.
Birim ilişkileri
1 ETH = 10⁹ Gwei = 10¹⁸ WeiEVM, tüm bakiyeleri ve aritmetiği Wei cinsinden işaretsiz 256 bit tam sayılar olarak depolar. ETH ve Gwei, zincir üstü gösterimi olmayan tamamen insan yüzlü etiketlerdir — görüntüleme için on kuvvetine bölme gelenekleridir.
BigInt neden zorunlu
JavaScript’in Number tipi IEEE 754 çift hassasiyeti kullanır: ~15-17 anlamlı ondalık basamak. Number.MAX_SAFE_INTEGER değeri 2⁵³ − 1 ≈ 9,007 × 10¹⁵’tir. 9 ETH bakiyesi yaklaşık 9 × 10¹⁸ Wei’dir — hassasiyet tabanından üç büyüklük sırası ötede.
Somut olarak: 1,234567890123456789 ETH’i bir Number içinde saklarsanız ve Wei’ye dönüştürürseniz, son birkaç basamak yuvarlanır. Bu dizeyi bir cüzdandan girdi olarak alıp akıllı bir sözleşmeye iletirseniz, sözleşme kullanıcının gönderdiğini düşündüğünden farklı bir sayı alır.
Üretim kripto kütüphaneleri (ethers.js, viem, web3.js) Wei miktarları için BigInt veya BigNumber sarmalayıcı kullanır. Dönüştürücümüz baştan sona yerel BigInt kullanır. Girdiler ondalık dizeleri kabul eder; dönüşüm, erken Number zorlamasından kaçınmak için bunları dikkatli şekilde ayrıştırır.
Ondalık dize ayrıştırma yolu
1.234 ETH gibi bir kullanıcı girişi için:
- Ondalık noktada bölün. Tam kısım:
1; kesirli kısım:234. - Kesirli kısmı 18 basamağa (ETH hassasiyeti) doldurun:
234000000000000000. - Birleştirin:
1234000000000000000. - Sonuçtan bir BigInt oluşturun.
- Gwei’ye dönüştürmek için 10⁹’a bölün (BigInt bölme, tam sayı bölmesidir — Gwei’nin Wei’den 9 daha az ondalık basamağı olduğundan bu doğrudur).
Görüntüleme için ETH’ye dönüşümler işlemi tersine çevirir: tam sayı kısmı için BigInt’i 10¹⁸’e böler, kesirli kısım için 10¹⁸ modülüsünü alır, gerektiğinde baştaki sıfırlarla ondalık dize olarak biçimlendirir. Okunabilirlik için sondaki sıfırlar çıkarılır.
Gidiş-dönüş garantisi
Hesaplayıcımız üzerinden herhangi bir dönüşüm tam gidiş-dönüş yapar. Özellikle:
- ETH → Wei → ETH tüm 18 kesirli basamağı korur.
- Gwei → Wei → Gwei tüm 9 kesirli basamağı korur.
- Wei miktarları tam sayı olduğundan Wei → ETH → Wei kesindir.
Birimin desteklediğinden daha fazla hassasiyete sahip girdiler (örn. “1,5 Wei”) yuvarlanmak yerine kısaltılır — Wei altı miktarlar mevcut değildir.
Algoritma ayrıntıları: uçtan uca BigInt yolu
Dönüştürücü, aynı girdilerin her zaman aynı çıktıları ürettiği saf işlev ardışık düzenidir. ETH’den Wei’ye yönde sözde kod:
function ethToWei(input: string): bigint {
const [intPart, fracPartRaw = ""] = input.split(".");
if (fracPartRaw.length > 18) throw new Error("aşırı hassas");
const fracPart = fracPartRaw.padEnd(18, "0");
return BigInt(intPart) * 10n ** 18n + BigInt(fracPart);
}Her adım BigInt aritmetiği kullanır — Number zorlaması yok. Doldur-ve-birleştir kalıbı, ETH’nin izin verdiği tam 18 kesirli ondalık basamağı korumanın tek yolu olan herhangi bir kayan nokta arasından kaçınır.
Wei’den görüntüleme, ters hileyi kullanır:
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}`;
}Aynı şablon Gwei (10⁹’a böl) ve BTC ↔ satoshi (10⁸’e böl — normal Number’a sığar ancak tutarlılık için kütüphane BigInt kullanır) üretir.
Kaynaklar ve referanslar
Wei / Gwei / ETH birim hiyerarşisi Ethereum Sarı Kağıdı’nda normatiftir. EIP-1559, hesaplayıcımızın yansıttığı temel ücret ve öncelik ücreti görüntüleme geleneklerini standartlaştırdı. JavaScript’in keyfi hassasiyetli tam sayı tipi ECMA-262’de belirtilmiştir; etrafında çalıştığımız hassasiyet tabanı IEEE 754’ten gelmektedir. Bitcoin’in 8 ondalık hassasiyeti orijinal teknik belgeden gelir. Tam alıntılar aşağıdaki Kaynaklar bloğunda.
Varsayımlar ve sınırlamalar
- Saf aritmetik, ağ yok. Hesaplayıcı hiçbir zaman bir zincir RPC veya cüzdan bakiyesi okumaz — girdiler kullanıcı tarafından sağlanan dizeler, çıktılar biçimlendirilmiş dizelerdir.
- Wei altı miktarlar kısaltılır, yuvarlanmaz.
0,5 Weigirişi 0 Wei olarak çözümlenir. Alt atomik birimler Ethereum’da mevcut değildir. - Görüntüleme biçimlendirmesi sondaki sıfırları çıkarır. 1,230000…0 ETH, 1,23 ETH olarak görüntülenir. Akıllı sözleşmeler görüntüleme dizesini değil BigInt’i önemser, bu nedenle bu tamamen kozmetiktir.
- Canlı ETH/USD fiyatı yok. Fiat dönüşümü, döviz kümesinde ayrı önbelleğe alınmış fiyat servisini kullanır — yenileme sıklığı için döviz metodolojisine bakın. Kripto birim dönüştürücüsü fiyattan bağımsızdır.
- Yalnızca EVM zinciri yerel tokenleri. ERC-20 tokenlarının yapılandırılabilir ondalıkları vardır (USDC 6, DAI 18 kullanır); bunlar için ETH 18 değil token sözleşmesinin
decimals()değerini kullanın. - İşlem imzalama, yayımlama veya saklama yok. Herhangi bir hareket için bir cüzdan (Metamask, Rabby) kullanın; dönüştürücü yalnızca sayıları gösterir.
- BigInt yerel biçimlendirmesi isteğe bağlıdır. Çıktılar düz ondalık nokta kullanır; binlik ayırıcılar ETH için kullanıcı arayüzü katmanı tarafından uygulanır ancak ham Wei için değil (virgüllü 50 basamaklı bir sayıyı kopyalamak virgülsüzünden daha zordur).
Yapmadıklarımız
- Canlı ETH fiyatı. Dalga 2’de geliyor (CoinGecko API + ISR önbelleği).
- Diğer zincirler. EVM uyumlu zincirlerin çoğu aynı Wei/Gwei/yerel-token hiyerarşisini kullanır — “ETH” etiketini MATIC, BNB, ARB vb. ile değiştirin ve matematik aynıdır.
- Bitcoin birimleri. 1 BTC = 100.000.000 satoshi 64 bitlik tam sayıya rahatlıkla sığar; BigInt gerekmez. Temel kütüphanemiz BTC ↔ satoshi dönüşümünü destekler; kullanıcı arayüzü aracı daha sonraki bir grupta çıkıyor.
- İşlemler. Herhangi bir ağa hiçbir şey göndermiyoruz.
Frequently asked questions
- Convertitive Wei, Gwei ve ETH arasında nasıl dönüşüm yapar?
- İlişkiler Ethereum Sarı Kağıdı'nda tanım gereği kesindir: 1 ETH = 10⁹ Gwei = 10¹⁸ Wei. Tüm aritmetik, IEEE 754 kayan nokta hassasiyet kaybını önlemek için JavaScript BigInt kullanır. Dönüşüm şudur: Wei = ETH × 10¹⁸ (BigInt çarpımı, kayıpsız). Yuvarlama yok, yaklaşım yok — her Wei tam gidiş-dönüş yapar.
- Ethereum birim dönüşümü için BigInt neden zorunlu?
- JavaScript'in Number tipi, 53 bitlik mantis içeren IEEE 754 çiftidir (64 bit kayan nokta) ve yalnızca 2⁵³ = 9.007.199.254.740.992'ye (yaklaşık 9 × 10¹⁵) kadar tam tam sayı gösterimi sağlar. Tek bir ETH = 10¹⁸ Wei bu değeri 100× aşıyor. BigInt olmadan, küçük ETH değerleri bile Wei düzeyinde hassasiyet kaybeder. Örneğin, 1,5 ETH = 1.500.000.000.000.000.000 Wei — Number'ın sessizce yuvarladığı 19 haneli bir tam sayı.
- Ethereum Sanal Makinesi bakiyeler için gerçekte ne depolar?
- EVM (Ethereum Sarı Kağıdı, §4.1), hesap bakiyelerini Wei biriminde 256 bitlik işaretsiz tam sayılar olarak depolar. Protokol katmanında kayan nokta veya ondalık gösterim yoktur. Gwei, gaz fiyatları için kullanılan insan tarafından okunabilir bir kolaylık birimidir (EIP-1559 temel ücreti Gwei cinsinden); ETH, görüntüleme birimidir. EVM düzeyinde yalnızca Wei vardır.
- Kesirli ETH girdileri için ondalık dize ayrıştırma yolu nasıl çalışır?
- '0.001' gibi kesirli ETH, ondalık dize olarak ayrıştırılır, ondalık noktada bölünür ve kesirli kısım BigInt olarak ayrıştırılmadan önce tam 18 ondalık basamağa doldurulur. Örneğin, '0.001' → tam kısım '0', kesirli '001' + 15 basamak sıfır doldurma = '001000000000000000' → 1.000.000.000.000.000 Wei. Bu, herhangi bir kayan nokta ara gösteriminden kaçınır.
- Wei / Gwei / ETH dönüştürücünün sınırlamaları nelerdir?
- Üç sınırlama: (1) dönüştürücü güncel ETH/USD fiyatını bilmez — birimleri dönüştürür, değerleri değil; (2) gas tahmini (toplam ücret = gas_birimleri × (temel_ücret + öncelik_ücreti) Gwei cinsinden) gerçekleştirilmez; (3) ERC-20 token ondalıkları desteklenmez — birçok token 18 yerine 6 veya 8 ondalık basamak kullanır ve bunları ETH olarak ele almak yanlış sonuçlar verir.
Related
Published May 14, 2026