İçeriğe geçin
buybitcoinsmart

Sözlük / Düğümler ve yazılım

Kompakt blok filtresi

Kompakt blok filtresi nedir?
Kompakt blok filtresi, bir bloğun oluşturduğu ve harcadığı çıktı betiklerinin Golomb kodlamalı küçük bir özetidir; tam düğümler tarafından yayımlanır, böylece hafif bir cüzdan elindekileri açığa vurmadan blokları sınayabilir.

Tanımlandığı belge: BIP-158.

Bir filtre bir bloğu kapsar ve adresleri, tutarları ya da işlem kimliklerini değil, çıktı betiklerini listeler. BIP-158 temel türü 0x00 olarak, P değerini 19 ve M değerini 784.931 olarak sabitler, böylece blokta bulunmayan bir öğe yine de yaklaşık her 784.931 denemede bir eşleşir. Eşleştirme sizin cihazınızda çalıştığı için filtreyi sunan düğüm hangi bitcoinlerin sizin olduğunu asla öğrenmez.

Nasıl çalışır

Kompakt blok filtresi, bir bloğun oluşturduğu ve harcadığı çıktı betiklerinin her birini tek bir sayısal aralığa hash'leyerek, sonuçları sıralayarak ve yalnızca aralarındaki boşlukları yazarak oluşturulur.

Öğe listesi şartname tarafından sabitlendiği için iki dürüst düğüm aynı blok için bayt bayt aynı filtreleri üretir. Filtre, her işlem için her girdinin harcadığı önceki çıktı betiğini (coinbase işlemi hariç) ve her çıktının scriptPubKey değerini alır. Bir kategori bilerek dışarıda bırakılır: OP_RETURN ile başlayan çıktılar. BIP-158 bunları, tanık taahhüdünde zaten olduğu gibi, filtrelerin ileride bir coinbase OP_RETURN çıktısının içine taahhüt edilebilmesi için dışlar, taahhüdün kendisini kapsamak zorunda kalmadan.

Hash'leme, c değeri 2 ve d değeri 4 olan SipHash ile yapılır ve anahtar, blok hash'inin standart little-endian biçimindeki ilk 16 baytıdır. Bu anahtar her blokla değişir, böylece aynı betik her blokta farklı bir yere düşer ve kimse zincir genelinde işleyen bir arama tablosu kuramaz. Ardından her 64 bitlik çıktı, bölme yerine bir çarpma ve kaydırma ile sıfırdan N çarpı M'ye kadar olan aralığa eşlenir.

Sıkıştırma, adın işaret ettiği şeydir: sıralanmış değerler ardışık farklarıyla değiştirilir ve her fark, tekli (unary) biçimde bir bölüm ve ardından 19 kalan biti olarak yazılır, bu da Golomb-Rice kodlamasıdır. Çıktı N çarpı 20 bitten küçük olamaz ve önünde CompactSize olarak öğe sayısı N ile birlikte gönderilir; filtresinde hiç öğe bulunmayan bir blok tek bir sıfır baytı olarak saklanır. Bu filtreleri sunmaya istekli bir düğüm, 1 değerinin 6 bit sola kaydırılmasıyla tanımlanan NODE_COMPACT_FILTERS hizmet bitini duyurur.

Nerede görürsünüz

Kompakt blok filtreleri, bir adres listesini birinin sunucusuna vermek yerine bant genişliği harcamayı yeğleyen cüzdanların seçtiği eşitleme yöntemidir.

Wasabi Wallet, bu sitenin kendi incelemelerindeki örnektir: yalnızca masaüstü, yalnızca Bitcoin, varsayılan olarak her bağlantı Tor üzerinden ve hiçbir sunucunun hangi adreslerin size ait olduğunu öğrenmemesi için filtrelerden eşitleme. İncelememizde 3,6 puan alır ve dikkat olarak işaretlenir; bunun eşitlemeyle hiçbir ilgisi yoktur. 4,4 puan alan Electrum ise diğer yolu seçer: herkesin çalıştırabileceği bir dizin sunucusuna karşı SPV ile doğrular ve o sunucu sonunda sahip olduğunuz adreslerin listesini elinde tutar.

Filtrelere güvenmeden önce bilinmeye değer iki sınır vardır. Bir filtre betikler üzerine anahtarlanır, bu yüzden içinde bir işlem kimliği arayamazsınız: yalnızca bir txid ile yine de bir düğüme ya da bir blok gezginine ihtiyacınız olur. OP_RETURN çıktıları da yapısı gereği yoktur, bu yüzden veri taşıyan çıktıları izleyen yazılım bu mekanizma üzerinde hiç kurulamaz.

Kompakt blok filtresi vs kompakt blok aktarımı

Kompakt blok filtresi bir cüzdana bir bloğun indirilmeye değer olup olmadığını söyler; BIP152'de tanımlanan kompakt blok aktarımı ise iki tam düğüm arasında zaten yolda olan bir bloğu küçültür.

Hedef kitleler farklıdır. Filtreler blok başına, belirlenimci, blok hash'inin ilk 16 baytı üzerine anahtarlanmıştır ve kendi zinciri olmayan istemciler tarafından indirilir. Aktarım, bir bloğun işlemlerinin çoğunu, blok başlığının göndericinin seçtiği bir nonce ile birlikte hash'lenmesinden türetilen 48 bitlik tanımlayıcılarla değiştirir ve mempool'unda bu işlemler zaten bulunmayan bir alıcı için hiçbir şey kazandırmaz. Biri bir telefonu ihtiyaç duymadığı blokları indirmekten kurtarır; diğeri bir düğümü işlemleri iki kez almaktan kurtarır. Ortak "kompakt" sözcüğü benzerliğin tamamıdır.

Karıştırılmaması gerekenler

Sık sorulan sorular

Kompakt blok filtresi birine cüzdanımın hangi adresleri izlediğini söyleyebilir mi?

Hayır. Filtreyi düğüm, bloğun kendi içeriğinden oluşturur ve herkese yayımlar, böylece cüzdanınızla ilgili hiçbir şey cihazınızdan çıkmaz. Size eşleşen bir bloğu sunan eş düğüm, o belirli bloğu istediğinizi öğrenir; bu da bir adres listesinden çok daha zayıf bir işarettir.

Cüzdanım neden bazen benimle hiçbir ilgisi olmayan bir bloğu indiriyor?

Çünkü filtreler olasılıksaldır. Sınadığınız ve blokta bulunmayan bir öğe yine de kabaca her 784.931 denemede bir eşleşir, bu yüzden çok sayıda betiği izleyen bir cüzdan birkaç yanlış pozitif toplar, o blokları indirir ve içinde kendine ait bir şey bulamaz.

Kompakt blok filtresinde bir işlem kimliği arayabilir miyim?

Hayır. BIP-158 temel filtresi yalnızca çıktı betiklerini barındırır: OP_RETURN çıktıları dışındaki her çıktının scriptPubKey'i ve coinbase olmayan her girdinin harcadığı önceki çıktı betiği. İşlem kimliği bunun içinde yoktur, bu yüzden yine de bir düğüme veya blok gezginine ihtiyacınız olur.

Sıradaki okuma

İlgili terimler

Daha fazlası: Düğümler ve yazılım

Bu sayfayı İngilizce okuyun