Sözlük / Adresler ve anahtarlar
Bech32
- Bech32 nedir?
- Bech32, bc1q dizelerinin arkasındaki adres kodlamasıdır; küçük harfli bir base32 biçimidir ve altı karakterlik sağlama toplamı, en fazla dört karakteri etkileyen her hatayı tespit eder.
Tanımlandığı belge: BIP-173.
BIP-173, SegWit çıktıları için Base58Check yerine bech32'yi 2017 yılında sundu. Alfabe 32 karakter barındırır ve benzer görünen gliflerin yanlışlıkla birbirinin yerine geçmemesi için "1", "b", "i" ve "o" karakterlerini bilinçli olarak dışarıda bırakır; hiçbir bech32 dizesi 90 karakteri aşmaz. Bir cüzdan, adresi yapıştırmayı bitirdiğiniz anda reddettiğinde hasarı yakalayan şey bech32 sağlama toplamıdır.
Nasıl çalışır
Bir bech32 dizesi sabit sırayla üç parçadan oluşur: insan tarafından okunabilir bir önek, "1" ayırıcısı ve altı sağlama toplamı karakteriyle biten bir veri bölümü. Ana ağ "bc" önekini, testnet ve signet "tb" önekini, regtest ise "bcrt" önekini kullanır; böylece cüzdan başka bir şeyin kodunu çözmeden önce baştaki harfler ağı tanımlar. Ayırıcı, "1" karakterinin alfabede bulunmamasının da nedenidir. Böylece yalnızca bir kez, sınırda görünebilir ve bir ayrıştırıcı bölünme noktasını sağdan tarayarak bulur.
Sağlama toplamı, önek dahil tüm dize üzerinde hesaplanan bir BCH kodudur. BIP-173, en fazla dört karakteri etkileyen her hatanın tespit edilmesini garanti eder ve daha büyük bir hatayı kaçırma olasılığını milyarda birin altına indirir. Base58Check bununla karşılaştırılabilecek bir şey sunmaz: sondaki dört bayt, kısaltılmış bir çift SHA-256 hash'idir ve bir cüzdana bir şeylerin yanlış olduğunu, neyin yanlış olduğunu daraltmadan söyler.
Büyük ve küçük harf farkı bir anlam taşımaz. Bir bech32 adresi tamamen küçük harfle veya tamamen büyük harfle geçerlidir, asla karışık değildir ve cüzdanlar küçük harfli biçimi gösterir. BIP-173, QR kodların içinde büyük harf ister; çünkü büyük harfli alfanümerik karakterler QR alfanümerik modunu açar, bu mod her karakteri bayt modunun gerektirdiği 8 bit yerine 5,5 bite sığdırır ve bir telefon kamerasının daha hızlı kilitlendiği daha kaba bir desen üretir.
Nerede görülür
Her bc1q adresi bech32'dir. 42 karakterlik bir adres, 20 baytlık bir tanık programını kodlar ve tek bir anahtara ödeme yapar; 62 karakterlik bir adres ise 32 baytlık bir programı kodlar ve bir betiğe ödeme yapar. Her ikisi de tanık sürümü 0'dır ve sürüm 0, bech32'nin artık taşımasına izin verilen tek sürümdür.
Kodlama adreslerin dışında da karşımıza çıkar. BOLT11 kapsamındaki Lightning faturaları, "lnbc" gibi öneklerle onu ödünç alır ve bir fatura tek bir kısa program yerine bir ödeme hash'i, bir tutar, bir açıklama ve yönlendirme ipuçları taşıdığı için 90 karakterlik sınırı bilinçli olarak yok sayar.
Asıl sorun bir borsanın para çekme formunda ortaya çıkar. 2017 yılından önce yazılmış bir doğrulayıcı yalnızca Base58 dizelerini tanır ve tamamen geçerli bir bc1q adresine "invalid address" yanıtı verir. Bu, cüzdanınızın değil platformun bir sınırlamasıdır ve çözüm, farklı bir yazılım aramak yerine aynı kurtarma ifadesinden türetilmiş, platformun kabul ettiği bir adres türüne para çekmektir.
Bech32 vs Bech32m
Bech32 ile bech32m tek bir sabitte farklılaşır, başka hiçbir şeyde değil. İkisi de aynı alfabeyi, aynı düzeni ve aynı altı sağlama toplamı karakterini kullanır. Bech32m, sağlama toplamına katılan değeri 1 yerine 0x2bc830a3 yapar ve ayrım tanık sürümüyle belirlenir: sürüm 0 çıktıları bech32'yi korur, 1 ile 16 arasındaki sürümler bech32m kullanır. İkisini birbirinin yerine geçebilir sayan yazılım, reddetmesi gereken dizeleri kabul eder; BIP-350 tam da bu hatayı önlemek için yazılmıştır.
Bech32 vs Base58Check
Bech32 ile Base58Check rakip kodlamalardır, rakip adres türleri değil. Base58Check, bir sürüm baytını ve 20 baytlık bir hash'i dört baytlık bir sağlama toplamıyla sarar ve 1 ve 3 ile başlayan, büyük küçük harfe duyarlı dizeler üretir. Bech32, bir tanık sürümünü bir tanık programıyla birlikte kodlar ve bc1 ile başlayan, büyük küçük harfe duyarsız dizeler üretir. İki kodlamanın hiçbiri, bitcoinlerin neye kilitlendiğine karar vermez. Verdikleri karar, bir insanın dizeyi ne kadar güvenilir kopyalayabileceği, QR kodunun ne kadar büyük olması gerektiği ve bir karakter kaybolduğunda yazılımın ne kadar yüksek sesle şikayet ettiğidir.