Sözlük / Protokol ve güncellemeler
Medyan geçmiş zaman
Diğer adları: MTP.
- Medyan geçmiş zaman nedir?
- Medyan geçmiş zaman, Bitcoin'in konsensüs saati: önceki on bir bloğun zaman damgalarının medyanı ve zamana dayalı her kilitleme süresinin (locktime) karşılaştırıldığı değer.
Tanımlandığı belge: BIP-113.
Düğümler, doğruladıkları bloktan önceki on bir bloğun zaman damgalarını alır, sıralar ve orta değeri mevcut zaman olarak kullanır. Bu medyan yaklaşık altı blok geride kalır, dolayısıyla duvar saatinden kabaca bir saat geridedir. Bu nedenle öğlene kadar kilitlediğiniz bir Bitcoin, öğleden sonra bir civarında harcanabilir hale gelir.
Nasıl çalışır
Medyan geçmiş zaman, GetMedianTimePast adlı bir fonksiyondan çıkar; bu fonksiyon on bir blok kaydında geriye doğru ilerler, her zaman damgasını bir diziye kopyalar, diziyi sıralar ve ortadaki öğeyi döndürür.
BIP-113'ün tanımladığı sabit nMedianTimeSpan = 11 olduğundan, sonuç her zaman on bir sayının altıncı en küçüğüdür. Sonucu güvenilir kılan şey sıralamadır. Bir bloğun zaman damgası ebeveynininkinden daha erken olabilir, ancak konsensüs kuralları her yeni zaman damgasını kendinden önceki on birin medyanının üstünde olmaya zaten zorlar, dolayısıyla medyan yalnızca ileri gidebilir. Bu yüzden tek bir zaman damgasını saptırmak bir madenciye neredeyse hiçbir şey kazandırmaz.
BIP-113'ün çözdüğü sorun bir hata değil, bir teşvikti. Eski kuralda bir işlemin uygunluğu, onu içeren bloğun zaman damgasına göre değerlendiriliyordu; bu, madencinin yazdığı bir sayıdır ve BIP'nin gerekçe bölümü bunu "a perverse incentive for miners to lie about the time of their blocks in order to collect more fees" (madencilerin daha fazla ücret toplamak için bloklarının zamanı hakkında yalan söylemesine yönelik sapkın bir teşvik) diye adlandırır. Çözüm tek bir değişiklikti: IsFinalTx'e yapılan konsensüs çağrıları, bloğun kendi zamanı yerine önceki bloğun GetMedianTimePast değerini alır ve kural, coinbase işlemi dahil her işlemi kapsar.
BIP9 sürüm bitlerine dayalı bir soft fork olarak 0 biti üzerinde yayımlandı; ana ağda sinyalleşme 1 Mayıs 2016 gece yarısı UTC'de açıldı ve bir yıl sonra zaman aşımına uğradı. Üç kilitleme süresi kuralının tek bir paket olarak gelmesi için BIP68 ve BIP112 ile birlikte devreye alındı.
Nerede görülür
Medyan geçmiş zaman, Bitcoin Core RPC çıktısında mediantime adlı bir alan olarak, doğrudan ham time alanının yanında yer alır.
getblock herhangi bir blok için ikisini de döndürür ve getblockchaininfo zincir ucunun medyan zamanını zincir ucunun zaman damgasının yanında bildirir; çalışan bir düğümde bir saatlik gecikmeyi izlemenin en hızlı yolu budur. getchaintxstats daha ileri gider ve penceresinin süresini iki bloğun başlık zamanları yerine medyan zamanları arasındaki fark olarak ölçer, böylece iki uçtan birindeki tek bir sapmış zaman damgası sonucu neredeyse hiç etkilemez.
Bunun sorun yarattığı yer mempool'dur. Bitcoin Core yazılımının CheckFinalTxAtTip fonksiyonu bir aday işlemi, geçerli zincir ucunun medyan geçmiş zamanına ve onun bir üstündeki yüksekliğe göre değerlendirir; bu yüzden bir son tarih geçtiği anda işlemi yayan cüzdan, iletim yerine ret alır ve medyan duvar saatinize yetişene kadar yeniden denemeye devam etmek zorunda kalır.
Göreli kilitleme süreleri aynı saati her iki uçta da devralır. BIP-68, 512 saniye birimleriyle sayılan zamana dayalı bir dizi kilidini, coinin çıkarıldığı bloktan önceki bloğun medyan geçmiş zamanından harcamanın yapıldığı bloktan önceki bloğun medyan geçmiş zamanına kadar ölçer; böylece gecikme iki kez ortaya çıkar ve büyük ölçüde birbirini götürür.
Medyan geçmiş zaman vs blok başlığı zaman damgası
Medyan geçmiş zaman on bir başlık zaman damgasından hesaplanır ama hiçbir blokta saklanmaz; bir başlık zaman damgası ise madencinin yazdığı ve her düğümün sonsuza kadar tuttuğu bir alandır.
Bitcoin ikisini de farklı işler için kullanır. Kilitleme süreleri medyanı kullanır, çünkü medyan tekdüze biçimde ilerler ve ücret geliri için ileri çekilemez. Zorluk yeniden hedeflemesi hâlâ ham başlık zamanlarını okur: Bitcoin Core, 14 günlük penceredeki son bloğun blok zamanını alır, ilk bloğun blok zamanını çıkarır ve hedefi bu farka göre yeniden ölçekler. Tek bir zincirde iki saatin bulunması düzensiz görünür ve bu bilinçli bir tercihtir. Bir yeniden hedefleme iki haftalık bloklar boyunca gerçek geçen süreyi isterken, bir kilitleme süresi hiçbir madenci tek başına oynatamayacağı bir sayı ister.