İçeriğe geçin
buybitcoinsmart

Sözlük / Protokol ve güncellemeler

SIGHASH_ANYPREVOUT

Diğer adları: APO.

SIGHASH_ANYPREVOUT nedir?
SIGHASH_ANYPREVOUT, Taproot scriptleri için önerilen bir imzalama kipidir: tek bir imzanın, eşleşen bir scripte kilitlenmiş herhangi bir coini harcamasına izin verir; imzanın kendisi için üretildiği tek coini değil.

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

BIP-118, tapscript için yeni bir genel anahtar türü tanımlar: sıradan anahtarlara eklenen bir bayrak değil, 0x01 ile başlayan 33 baytlık bir tür. Şubat 2017'de atanmıştır, hiç etkinleştirilmemiştir ve yalnızca script yolundan yapılan harcamalarda çalışır, anahtar yolundan yapılan harcamalarda asla. Cüzdanınızdaki hiçbir şey bu şekilde imza atamaz, dolayısıyla mainnet üzerinde eltoo kanalları vaat eden her ürün bir geleceği anlatıyordur.

Nasıl çalışır

Durum: BIP-118 bir Draft (taslak) durumundadır, 2017-02-28 tarihinde atanmıştır, BIP-340, BIP-341 ve BIP-342 belgelerini gerektirir ve kendi Deployment (devreye alma) bölümü TODO yazar. Hiçbir şeyin yerine bir şey geçmedi, çünkü hiçbir şey yürürlüğe girmedi.

Bir Taproot imzası, harcanan coinin outpoint değerine bağlanır: BIP-118 belgesinin değiştirdiği ANYONECANPAY özetinde txid ve indeksten oluşan 36 bayt, imzayı sonsuza dek tek bir coine sabitler. İmzalanan mesajdan outpoint çıkarıldığında imza artık bir coini değil, bir şekli adlandırmaya başlar; böylece o şekle uyan herhangi bir UTXO sonradan bu imzaya bağlanabilir. BIP belgesi buna dinamik yeniden bağlama (dynamic rebinding) der.

İki varyant tanımlanmıştır ve aralarındaki fark, imzanın hâlâ neye bağlandığıdır.

  • Bit değeri 0x40 olan SIGHASH_ANYPREVOUT, outpoint değerini çıkarır ancak girdinin tutarını (8 bayt), scriptPubKey değerini (burada her zaman 35 bayt) ve tapleaf hash değerini korur. İmza bu durumda aynı script altında aynı değeri taşıyan her coine uyar.
  • Bit değeri 0xc0 olan SIGHASH_ANYPREVOUTANYSCRIPT, tutarı, scriptPubKey değerini ve tapleaf hash değerini de çıkarır. Bu anahtarın scriptini karşılayabildiği her coine uyar.

Bu kipe geçiş, imzalama anında değil, adres oluşturulurken yapılır. Bu anahtarlar yalnızca bir tapscript yaprağı üzerinden çalışır, dolayısıyla adresin merkle ağacında böyle bir yaprak taşıması gerekir ve harcanana kadar diğer herhangi bir Taproot adresinden ayırt edilemez. İki kipi birbirinden ayıran tek bir sabit vardır: key_version, BIP-118 anahtarı için 0x01 iken sıradan bir tapscript anahtarı için 0x00 değerindedir, böylece tek bir özel anahtar iki kural altında da geçerli bir imza üretemez. Altı yeni hash_type baytı geçerli hale gelir: 0x41, 0x42, 0x43, 0xc1, 0xc2 ve 0xc3.

Nerede görülür

SIGHASH_ANYPREVOUT hiçbir mainnet işleminde görülmez ve BIP-118, var olduğunda bile "only be rarely used in practice" (pratikte yalnızca nadiren kullanılacağını) öngörür, çünkü script yolundan yapılan harcamalar daha ağırdır ve daha kolay tanımlanır.

Yazıldığı tasarım eltoo adlı zincir dışı bir güncelleme şemasıdır. Zincir dışı protokoller, karşı tarafın yayımladığı hangi eski durum olursa olsun ona yanıt vermek zorundadır ve sıradan bir imza, yanıt verdiği tam işleme bağlandığı için ortaya çıkabilecek her durum için yeni bir imza gerekir. Eltoo ise imzaları asimetrik yapmak için scripti ve nLockTime değerini kullanır; böylece daha sonraki bir imza taşıyan işlem, daha önceki bir imza taşıyan işlemi harcayabilir ama tersi asla olmaz ve tek bir güncelleme imzası, karşı tarafınızın yayımladığı herhangi bir önceki güncellemenin üzerine uygulanabilir.

Adı bir düzeltmeyi kaydeder. Joseph Poon fikri Şubat 2016'da SIGHASH_NOINPUT olarak önermişti, özgün Lightning makalesi bunu gündeme getirdikten sonra, ve yeniden adlandırma, girdinin gerçekten yok sayılmadığını söyler: nSequence her zaman imzalanır ve SIGHASH_ANYPREVOUT altında script ile tutar da imzalanır.

BIP belgesinin güvenlik bölümü bedelini söyler: tekrar (replay). Bir ANYPREVOUT imzası, aynı script ve aynı değere sahip herhangi bir diğer UTXO karşısında yeniden kullanılabilir; bir ANYPREVOUTANYSCRIPT imzası ise scriptlerinden birinde o anahtarı yeniden kullanan herhangi bir UTXO karşısında, dolayısıyla anahtarın yeniden kullanımı bir gizlilik sıkıntısından para kaybetme yoluna dönüşür. Bu işlemler yabancılar tarafından da değiştirilebilir (malleable): eşleşen bir girdi sağlayabilen herkes, özel anahtar olmadan txid değerini değiştirebilir.

SIGHASH_ANYPREVOUT vs SIGHASH_ANYONECANPAY

SIGHASH_ANYONECANPAY bugün ağda vardır ve imzalanan girdi dışındaki her girdiyi çıkarır; SIGHASH_ANYPREVOUT ise hayatta kalan o girdinin bir kısmını da çıkarır. BIP-118 kendi özetini, outpoint değeri dışarıda bırakılmış ANYONECANPAY özeti olarak tanımlar; tek satırlık bir fark, büyük bir sonuç. Bir ANYONECANPAY imzası yeniden oynatılamaz, çünkü adlandırdığı outpoint yalnızca bir kez harcanabilir. Bu bağlılıktan vazgeçildiğinde tekrar koruması, imzadan değil, üzerine inşa edilen protokolden gelmek zorundadır.

Karıştırılmaması gerekenler

Sık sorulan sorular

SIGHASH_ANYPREVOUT kipini bugün kullanabilir miyim?

Hayır. BIP-118 hâlâ bir Draft (taslak) durumundadır, Deployment bölümü TODO yazar ve hiçbir mainnet düğümü bu kuralları uygulamaz, dolayısıyla bu şekilde imzalanan hiçbir şey mainnet üzerinde harcanamaz.

SIGHASH_ANYPREVOUT, SIGHASH_NOINPUT ile aynı şey mi?

Evet, aynı fikrin yeniden adlandırılmış ve yeniden işlenmiş sürümüdür. Joseph Poon SIGHASH_NOINPUT fikrini Şubat 2016'da önermişti; ANYPREVOUT taslağı yalnızca Taproot script yolundan yapılan harcamaları hedefler ve imzaları hâlâ nSequence değerine, isteğe bağlı olarak da script ile tutara bağlar; yeni adın yansıttığı budur.

BIP-118 neden yalnızca yeni bir bayrak yerine yeni bir genel anahtar türü tanımlar?

Çünkü bu özelliğe bir adres oluşturulurken açıkça katılmak gerekir. Bu imzalar yalnızca bir tapscript yaprağındaki BIP-118 genel anahtarına karşı çalışır; dolayısıyla böyle bir yaprağı olmayan bir adres bu yolla asla harcanamaz ve harcanana kadar diğer tüm Taproot adreslerinden ayırt edilemez kalır.

Sıradaki okuma

İlgili terimler

Daha fazlası: Protokol ve güncellemeler

Bu sayfayı İngilizce okuyun