Bitcoin Script'e Giri┼č
Ana sayfa
Makaleler
Bitcoin Script'e Giri┼č

Bitcoin Script'e Giri┼č

─░leri Seviye
Yay─▒nlanma: Jul 10, 2020G├╝ncellenme: Jan 18, 2022
13m

Giri┼č

Bitcoin'den kimi zaman┬áprogramlanabilir para olarak bahsedilir. Bitcoin, dijital do─čas─▒ sayesinde, fonlar─▒n nas─▒l harcanabilece─čine y├Ânelik ko┼čullar─▒n belirlenmesi konusunda kullan─▒c─▒lara b├╝y├╝k bir esneklik sunar.┬á
Bitcoin hakk─▒nda konu┼čurken┬ác├╝zdanlardan ve┬ácoinlerden bahsederiz. Fakat, c├╝zdanlar─▒ anahtarlar, coinleri ├žekler ve┬áblockchaini de kilitli kasalardan olu┼čan s─▒ralar olarak da d├╝┼č├╝nebiliriz. Her kasada, herhangi birinin bir ├žek yat─▒rabilece─či ya da bu kasada ne kadar de─čer sakland─▒─č─▒n─▒ inceleyebilece─či ince bir aral─▒k bulunur. Fakat, kasan─▒n i├žindekilere yaln─▒zca anahtar─▒n sahibi olan ki┼či eri┼čebilir.

Anahtar sahibi, ba┼čka bir ki┼čiye para ├Âdemek istedi─činde kutunun kilidini a├žar. Eski ├žeke referans veren yeni bir ├žek haz─▒rlar (daha sonra eski ├žek yok edilir) ve bu ├žeki al─▒c─▒n─▒n a├žabilece─či bir kutuya kilitler. Yeni al─▒c─▒, bu ├žeki harcayabilmek i├žin s├╝reci tekrar eder.

Bu makalede, Bitcoin a─č─▒ndaki┬ánode'lar taraf─▒ndan kullan─▒lan programlama dili olan Script'i yak─▒ndan inceleyece─čiz. Kasalar ├Ârne─činde bahsetti─čimiz kilitleme/kilit a├žma mekanizmalar─▒ Script taraf─▒ndan y├Ânetilir.


Bitcoin nas─▒l ├žal─▒┼č─▒r?

Yukar─▒daki benzetmemiz ├╝zerinden devam edersek her bir i┼člemin iki b├Âl├╝mden olu┼čtu─čunu s├Âyleyebiliriz ÔÇô bir anahtar (kutunun kilidini a├žmak i├žin) ve bir kilit. Harcamak istedi─činiz ├žekin bulundu─ču kutuyu a├žarken anahtar─▒n─▒z─▒ kullan─▒rs─▒n─▒z ve daha sonra farkl─▒ bir kilide sahip yeni bir kutuya ba┼čka bir ├žek eklersiniz. Yeni kutudan harcama yapmak i├žin ba┼čka bir anahtara ihtiyac─▒n─▒z olur.
Olduk├ža basit de─čil mi? Sistemdeki kilitler de farkl─▒ t├╝rlerde olabilir. Baz─▒ kasalar┬ábirden fazla anahtar─▒ gerekli k─▒larken di─čerleri gizli bir bilgiyi bildi─činizi ispat etmenizi gerektirebilir. Kasalar─▒n nas─▒l a├ž─▒laca─č─▒na y├Ânelik bir├žok farkl─▒ ko┼čul belirlenebilir.┬á
Anahtar─▒m─▒za, scriptSig (betik imzas─▒) ad─▒ verilir. Kilidimiz ise scriptPubKey'imizdir (betik a├ž─▒k anahtar─▒). Birazdan bunlar─▒ daha ayr─▒nt─▒l─▒ inceledi─čimizde bu ├Â─čelerin asl─▒nda veri par├žalar─▒ndan ve kod bloklar─▒ndan olu┼čtuklar─▒n─▒ g├Ârece─čiz. Birle┼čtiklerinde ise k├╝├ž├╝k bir program olu┼čtururlar.

Bir i┼člem yapt─▒─č─▒n─▒zda, bu kombinasyonu a─ča yay─▒nlam─▒┼č olursunuz. Bu bilgiyi alan her bir node, i┼člemin ge├žerli olup olmad─▒─č─▒n─▒ s├Âyleyen program─▒ kontrol eder. Ge├žerli de─čilse i┼člem g├Âz ard─▒ edilir ve kilitlenmi┼č fonlar─▒ harcaman─▒z m├╝mk├╝n olmaz.

Elinizdeki ├žeklere (coinler)┬áharcanmam─▒┼č i┼člem ├ž─▒kt─▒s─▒ (UTXO) ad─▒ verilir. Fonlar, kilide uygun anahtar─▒ sunan herhangi biri taraf─▒ndan harcanabilir. Burada anahtar scriptSig ve kilit de scriptPubKey'dir.
UTXO'lar c├╝zdan─▒n─▒zdaysa muhtemelen,┬áfonlar yaln─▒zca bu a├ž─▒k anahtar─▒n sahibi oldu─čunu ispat edebilen ki┼či taraf─▒ndan harcanabilir diyen bir ko┼čula sahip olacakt─▒r. Kilidi a├žmak i├žin, scriptPubKey'de belirtilen a├ž─▒k anahtarla e┼čle┼čtirilmi┼č┬á├Âzel anahtar─▒ kullanarak┬ádijital imza i├žeren bir scriptSig sunman─▒z gerekir. Birazdan bu bahsettiklerimiz ├žok daha a├ž─▒k hale gelecek.


Bitcoin y─▒─č─▒n─▒n─▒ anlamak

Script, y─▒─č─▒n bazl─▒ bir dildir. Yani, bir grup y├Ânerge okudu─čumuzda bunlar─▒ dikey bir kolon ┼čeklinde d├╝┼č├╝nebilece─čimiz bir yap─▒ya yerle┼čtiririz. ├ľrne─čin A, B ve C listesi, A'n─▒n en altta C'nin ise en ├╝stte oldu─ču bir y─▒─č─▒n olu┼čturabilir. Y├Ânergeler bizi bir ┼čey yapmaya y├Ânlendirdi─činde, y─▒─č─▒n─▒n en ├╝st├╝nden ba┼člayarak bir ya da daha fazla ├Â─čeyle i┼člem yapar─▒z.


A, B ve C ├Â─čeleri ekleniyor ve y─▒─č─▒ndan ÔÇťd─▒┼čar─▒ ├ž─▒kar─▒l─▒yorÔÇŁ.


Verileri (imzalar, hash'ler ve a├ž─▒k anahtarlar gibi ┼čeyler) ve y├Ânergeleri (ya da i┼člem kodlar─▒n─▒) birbirinden ay─▒rabiliriz. Y├Ânergeler veriyi ├ž─▒kar─▒r ve bu veriyle i┼člem yapar. Bir beti─čin (script) nas─▒l g├Âz├╝kebilece─činin ├žok basit bir ├Ârne─či ┼ču ┼čekildedir:
<xyz> <md5 hasher> <d16fb36f0911f878998c136191af705e> <check if equal>
K─▒rm─▒z─▒lar veri ve maviler de i┼člem kodlar─▒d─▒r (opcode). Betik soldan sa─ča okunur, bu nedenle y─▒─č─▒na ilk olarak <xyz> dizisini ekleriz. S─▒rada <md5 hasher> i┼člem kodu vard─▒r. Bitcoin'de i┼člem kodu bulunmaz, fakat i┼člem kodu y─▒─č─▒n─▒n en ├╝st├╝nde yer alan ├Â─čeyi (<xyz>) ├ž─▒kar─▒r ve MD5 algoritmas─▒n─▒ kullanarak hash eder. Daha sonra ├ž─▒kt─▒ tekrardan y─▒─č─▒na eklenir. Burada ├ž─▒kt─▒ d16fb36f0911f878998c136191af705e'dir.
Tesad├╝fe bak─▒n! Eklenecek bir sonraki ├Â─če <d16fb36f0911f878998c136191af705e>'dir, b├Âylece y─▒─č─▒n─▒m─▒zda birbirinin ayn─▒s─▒ iki ├Â─če olur. Son olarak, <check if equal> en ├╝stteki iki ├Â─čeyi ├ž─▒kar─▒r ve bunlar─▒n ayn─▒ olup olmad─▒─č─▒n─▒ kontrol eder. Ayn─▒larsa, y─▒─č─▒na <1> ekler. Ayn─▒ de─čillerse, <0> ekler.┬á
Y├Ânerge listemizin sonuna ula┼čm─▒┼č olduk. Beti─čimiz iki ┼čekilde ba┼čar─▒s─▒z olabilirdi ÔÇô kalan ├Â─če s─▒f─▒r olsayd─▒ ya da baz─▒ ko┼čullar─▒n yerine getirilmemesi durumunda operat├Ârlerden biri beti─čin ba┼čar─▒s─▒z olmas─▒na neden olsayd─▒. Bu ├Ârnekte b├Âyle bir operat├Âr├╝m├╝z yoktu ve s─▒f─▒r olmayan bir ├Â─če elde ettik (<1>), dolay─▒s─▒yla beti─čimiz ge├žerliydi. Bu kurallar ger├žek Bitcoin i┼člemleri i├žin de ge├žerlidir.

Bu hayali bir programd─▒. ┼×imdi ger├žek programlardan baz─▒lar─▒na g├Âz atal─▒m.


Pay-to-Pubkey (P2PK - A├ž─▒k Anahtara ├ľdeme)

Pay-to-Pubkey (P2PK - A├ž─▒k Anahtara ├ľdeme) son derece do─črudand─▒r. Fonlar─▒ belirli bir a├ž─▒k anahtara kilitlemeyi i├žerir. Fonlar─▒ bu ┼čekilde almak isterseniz, g├Ândericiyle bir Bitcoin adresi yerine a├ž─▒k anahtar─▒n─▒z─▒ payla┼čman─▒z gerekir.┬á

2009'da┬áSatoshi Nakamoto ve Hal Finney aras─▒ndaki┬áilk i┼člem bir P2PK'd─▒r. Bu yap─▒ Bitcoin'in ilk g├╝nlerinde yo─čun olarak kullan─▒lm─▒┼čt─▒r, fakat g├╝n├╝m├╝zde yap─▒n─▒n yerini Pay-to-Pubkey-Hash (P2PKH) alm─▒┼čt─▒r.┬á
P2PK i┼čleminin kilitleme beti─či <public key>┬áOP_CHECKSIG format─▒n─▒ kullan─▒r. Olduk├ža basittir. OP_CHECKSIG sunulan a├ž─▒k anahtar─▒ imzayla kar┼č─▒la┼čt─▒rarak kontrol eder. Dolay─▒s─▒yla, scriptSig'imiz de olduk├ža basit bir <signature> (imza) olacakt─▒r. scriptSig'in kilidin anahtar─▒ oldu─ču unutulmamal─▒d─▒r.



Bundan daha basit olamazd─▒. Bir imza y─▒─č─▒na eklenir ve bunu bir a├ž─▒k anahtar takip eder. OP_CHECKSIG, her ikisini de d─▒┼čar─▒ ├ž─▒kar─▒r ve a├ž─▒k anahtarla kar┼č─▒la┼čt─▒rarak imzay─▒ kontrol eder. E┼čle┼čiyorlarsa y─▒─č─▒na <1> ekler. Aksi takdirde <0> ekler.

Bir sonraki b├Âl├╝mde bahsedece─čimiz nedenlerden ├Ât├╝r├╝ P2PK art─▒k pek kullan─▒lmamaktad─▒r.


Pay-to-Pubkey-Hash (P2PKH - A├ž─▒k Anahtar ├ľzetine ├ľdeme)

Pay-to-Pubkey-Hash (P2PKH - A├ž─▒k Anahtar ├ľzetine ├ľdeme) art─▒k en yayg─▒n i┼člem t├╝r├╝d├╝r. ├çok eski bir yaz─▒l─▒m y├╝klemedi─činiz takdirde muhtemelen c├╝zdan─▒n─▒z─▒n varsay─▒lan ayarlar─▒ bunu i├žerecektir.

P2PKH'deki scriptPubKey ┼ču ┼čekildedir:

OP_DUP OP_HASH160 <public key hash> OP_EQUALVERIFY OP_CHECKSIG

scriptSig'den bahsetmeden ├Ânce yeni i┼člem kodlar─▒n─▒n ne yapaca─č─▒ndan bahsedelim:


OP_DUP

OP_DUP, ilk ├Â─čeyi ├ž─▒kar─▒r ve bunun bir┬ákopyas─▒n─▒ olu┼čturur.┬áDaha sonra her ikisini de y─▒─č─▒na geri y├╝kler. Genellikle bu i┼člem, orijinali ├╝zerinde bir etki yaratmadan kopyan─▒n ├╝zerinde i┼člem yapabilmemiz i├žin ger├žekle┼čtirilir.


OP_HASH160

OP_HASH160, ilk ├Â─čeyi ├ž─▒kar─▒r ve bunu iki kere hash eder. ─░lk turda SHA-256 algoritmas─▒yla hash edilir. SHA-256 ├ž─▒kt─▒s─▒ daha sonra RIPEMD-160 algoritmas─▒yla hash edilir. Ortaya ├ž─▒kan ├ž─▒kt─▒ y─▒─č─▒na tekrar eklenir.


OP_EQUALVERIFY

OP_EQUALVERIFY, ba┼čka iki operat├Âr├╝ birle┼čtirir ÔÇô OP_EQUAL ve OP_VERIFY. OP_EQUAL, iki ├Â─če ├ž─▒kar─▒r ve bunlar─▒n ayn─▒ olup olmad─▒─č─▒n─▒ kontrol eder. Ayn─▒larsa, y─▒─č─▒na 1 ekler. Ayn─▒ de─čillerse, 0 ekler. OP_VERIFY, en ├╝stteki ├Â─čeyi ├ž─▒kar─▒r ve bunun Do─čru (yani s─▒f─▒r-d─▒┼č─▒) olup olmad─▒─č─▒n─▒ kontrol eder. Do─čru de─čilse i┼člem ba┼čar─▒s─▒z olur. Bununla birlikte OP_EQUALVERIFY, en ├╝stteki iki ├Â─čenin ayn─▒ olmamas─▒ durumunda i┼člemin ba┼čar─▒s─▒z olmas─▒na neden olur.

Bu sefer, scriptSig ┼ču ┼čekilde g├Âz├╝k├╝r:

<signature> <public key>

P2PKH ├ž─▒kt─▒lar─▒n─▒n kilidini a├žmak i├žin bir imza ve kar┼č─▒l─▒k gelen a├ž─▒k anahtar─▒ sunman─▒z gerekir.



S├╝reci yukar─▒daki GIF'ten inceleyebilirsiniz. P2PK komut dizininden ├žok da farkl─▒ de─čildir. Yaln─▒zca, a├ž─▒k anahtar─▒n betikteki hash'le ayn─▒ olup olmad─▒─č─▒n─▒ kontrol etmek i├žin ekstra bir ad─▒m daha eklenir.

Fakat, dikkat edilmesi gereken bir nokta vard─▒r. P2PKH kilitleme beti─činde a├ž─▒k anahtar g├Âr├╝n├╝r de─čildir ÔÇô yaln─▒zca a├ž─▒k anahtar─▒n hash'ini g├Ârebiliriz. Bir┬áblockchain taray─▒c─▒s─▒na gider ve harcanmam─▒┼č bir P2PKH ├ž─▒kt─▒s─▒na bakarsak a├ž─▒k anahtar─▒ belirleyemeyiz. A├ž─▒k anahtar yaln─▒zca al─▒c─▒n─▒n fonlar─▒ transfer etmeye karar vermesi durumunda g├Âz├╝k├╝r hale gelir.
Bunun ├že┼čitli avantajlar─▒ vard─▒r. Birincisi, tam bir a├ž─▒k anahtara k─▒yasla a├ž─▒k anahtar─▒n hash'inin payla┼č─▒lmas─▒ daha kolayd─▒r. Zaten Satoshi de bunu 2009 y─▒l─▒nda bu ama├žla kullan─▒ma sunmu┼čtur.┬áG├╝n├╝m├╝zde Bitcoin adresi olarak bildi─čimiz ┼čey bir a├ž─▒k anahtar hash'idir.
─░kinci avantaj, a├ž─▒k anahtar hash'lerinin kuantum hesaplama kar┼č─▒s─▒nda ek bir g├╝venlik katman─▒ sunabilmesidir. A├ž─▒k anahtar─▒m─▒z, fonlar─▒m─▒z─▒ harcayana kadar g├Âr├╝nmez olaca─č─▒ndan, ├Âzel anahtar─▒n ba┼čka ki┼čiler taraf─▒ndan hesaplanmas─▒ daha da zor hale gelir. ├ľzel anahtara ula┼čmak i├žin hash alma i┼čleminin iki turunun da (RIPEMD-160 ve SHA-256) tersine ├ževrilmesi gerekir.



Pay-to-Script-Hash (P2SH - Betik ├ľzetine ├ľdeme)

Pay-to-Script-Hash (P2SH - Betik ├ľzetine ├ľdeme),┬áBitcoin i├žin ├žok ilgin├ž bir geli┼čtirmedir. G├Ândericinin fonlar─▒ bir beti─čin hash'ine kilitlemesine imkan tan─▒r ÔÇô beti─čin asl─▒nda ne yapt─▒─č─▒n─▒n bilinmesine gerek kalmaz. A┼ča─č─▒da bir SHA-256 hash'ini g├Ârebilirsiniz:

e145fe9ed5c23aa71fdb443de00c7d9b4a69f8a27a2e4fbb1fe1d0dbfb6583f1

Fonlar─▒ hash'e kilitlemeniz i├žin hash'in girdisini bilmenize gerek yoktur. Fakat, fonlar─▒ harcayacak ki┼činin hash al─▒rken kullan─▒lan beti─či sunmas─▒ ve bu beti─čin ko┼čullar─▒n─▒ yerine getirmesi gerekir.

Yukar─▒daki hash ┼ču betikten yarat─▒lm─▒┼čt─▒r:

<multiply by 2> <4> <check if equal>

Bu scriptPubKey'e ba─članm─▒┼č coinleri harcamak isterseniz, bu komutlar─▒ sunman─▒z yeterli olmaz. Tamamlanm─▒┼č beti─čin Do─čru sonucunu vermesini sa─člayan bir scriptSig de sunman─▒z gerekir. ├ľrne─čimiz ├╝zerinde bu,┬á<4> sonucuna ula┼čmak i├žin┬á<multiply by 2> (2 ile ├žarpt─▒─č─▒n─▒z) bir ├Â─čedir. Tabi ki bu da scriptSig'imizin┬á<2> oldu─ču anlam─▒na gelir.

Ger├žek hayatta, bir P2SH ├ž─▒kt─▒s─▒ i├žin scriptPubKey ┼čudur:

OP_HASH160 <redeemScript hash> OP_EQUAL

Burada yeni operat├Âr yoktur. Fakat, yeni bir ├Â─če olarak┬á<redeemScript hash>┬á(├Âdeme beti─či hash'i) vard─▒r. ─░sminden de anla┼č─▒labilece─či gibi bu ├Â─če fonlar─▒ ├žekebilmemiz i├žin sunmam─▒z gereken betik hash'idir (buna┬áredeemScript ad─▒ verilir). redeemScript'te (├Âdeme beti─či) ne oldu─čuna ba─čl─▒ olarak scriptSig de─či┼čecektir. Fakat genellikle, imzalar─▒n ve eklenmi┼č a├ž─▒k anahtarlar─▒n bir kombinasyonudur ve onu bir (zorunlu) redeemScript takip eder:

<signature> <public key> <redeemScript>

De─čerlendirmemiz, ┼ču ana kadar bahsetti─čimiz y─▒─č─▒n y├╝r├╝tmesinden biraz farkl─▒d─▒r. ─░ki a┼čamada ger├žekle┼čir. ─░lk a┼čama, do─čru hash'i sunup sunmad─▒─č─▒m─▒z─▒ kontrol eder.┬á



redeemScript'ten ├Ânce gelen ├Â─čelerle bir ┼čey yapmad─▒─č─▒m─▒z─▒ g├Ârebilirsiniz. Bu a┼čamada o ├Â─čeler kullan─▒lmaz. Bu mini program─▒n sonuna geldik ve en ├╝stteki ├Â─če s─▒f─▒r-de─čil. Bu da i┼člemin ge├žerli oldu─ču anlam─▒na gelir.

Fakat hen├╝z i┼čimiz bitmedi. A─č┬ánode'lar─▒ bu yap─▒y─▒ P2SH olarak tan─▒r, dolay─▒s─▒yla scriptSig'in ├Â─čeleri ba┼čka bir y─▒─č─▒nda beklemektedir. ─░mza ve a├ž─▒k anahtar─▒n kullan─▒ld─▒─č─▒ yer buras─▒d─▒r.

┼×imdiye kadar redeemScript'e bir ├Â─če olarak muamele ettik. Ama ┼čimdi onu, herhangi bir ┼čey olabilecek bir y├Ânerge olarak de─čerlendirece─čiz.┬á<redeemScript>'in i├žindeki bir <public key hash> ile (a├ž─▒k anahtar hash'i) e┼čle┼čen <public key> (a├ž─▒k anahtar) ve <signature>'─▒ (imza) sunmam─▒z─▒ gerektiren bir P2PKH kilitleme beti─či ├Ârne─čini inceleyelim.



redeemScript'inizi geni┼čletti─činizde standart bir P2PKH i┼člemiyle birebir ayn─▒ g├Âr├╝nen bir durumla kar┼č─▒ kar┼č─▒ya oldu─čunuzu g├Ârebilirsiniz. Bu a┼čamada redeemScript, normal bir betik gibi ├žal─▒┼čt─▒r─▒l─▒r.

Burada bir P2SH (P2PKH) beti─činin nas─▒l ├žal─▒┼čt─▒r─▒laca─č─▒n─▒ g├Âsterdik, fakat bunlardan bir tanesine rastlaman─▒z pek olas─▒ de─čildir. ─░sterseniz bir P2SH yaratabilirsiniz, ama herhangi bir ekstra avantaj sunmad─▒─č─▒ gibi bir blok i├žinde kaplad─▒─č─▒ yer de daha fazlad─▒r (ve dolay─▒s─▒yla daha fazla masraf yarat─▒r).

P2SH genellikle,┬á├žoklu imzalar ya da┬áSegWit'le uyumlu i┼člemler gibi konularda kullan─▒┼čl─▒d─▒r. ├çoklu imza i┼člemleri, birden fazla anahtar gerektirdi─či i├žin ├žok b├╝y├╝k boyutta olabilir. Pay-to-Script-Hash uygulanmaya konmadan ├Ânce bir g├Ândericinin kilitleme beti─čindeki olas─▒ t├╝m a├ž─▒k anahtarlar─▒n listesini ├ž─▒karmas─▒ gerekirdi.┬á

Fakat P2SH ile harcama ko┼čullar─▒n─▒n ne kadar karma┼č─▒k oldu─ču ├Ânemli de─čildir. redeemScript'in hash'i her zaman sabit bir b├╝y├╝kl├╝ktedir. Dolay─▒s─▒yla masraflar, kilitleme beti─činin kilidini a├žmak isteyen kullan─▒c─▒ ya da kullan─▒c─▒lara ge├žer.

P2SH'nin kullan─▒┼čl─▒ oldu─ču bir di─čer konu da SegWit uyumlulu─čudur (i┼člem yap─▒s─▒n─▒n nas─▒l farkl─▒l─▒k g├Âsterdi─činden bir sonraki b├Âl├╝mde bahsedece─čiz). SegWit, blok/i┼člem formatlar─▒nda de─či┼čikli─če yol a├žan bir soft fork'tur (yumu┼čak ├žatallanma). Tercihe ba─čl─▒ bir y├╝kseltme oldu─ču i├žin de─či┼čiklikler t├╝m c├╝zdan yaz─▒l─▒mlar─▒ taraf─▒ndan tan─▒nmaz.

─░stemcilerin SegWit betik hash'ini P2SH ile sarmas─▒ bir sorun yaratmaz. Bu t├╝rdeki t├╝m i┼člemlerde oldu─ču gibi kilidi a├žacak redeemScript'in ne oldu─čunun bilinmesine gerek yoktur.┬á


SegWit ─░┼člemleri (P2WPKH ve P2WSH)

SegWit hakk─▒nda daha fazla bilgi i├žin┬áYeni Ba┼člayanlar ─░├žin Ayr─▒lm─▒┼č Tan─▒k (Segregated Witness) Rehberi makalemizi okuyabilirsiniz.
SegWit'teki i┼člem format─▒n─▒ anlamak i├žin art─▒k yaln─▒zca bir scriptSig ve bir scriptPubKey'in olmad─▒─č─▒n─▒ bilmeniz yeterlidir. Burada┬átan─▒k (witness) ad─▒nda yeni bir alan daha vard─▒r. Eskiden scriptSig'de tuttu─čumuz veri tan─▒─ča ge├žirilir, b├Âylece scriptSig bo┼č kal─▒r.

ÔÇśbc1ÔÇÖ ile ba┼člayan adreslere denk geldiyseniz bunlara┬áyerel (native) SegWit┬áad─▒ verilir (ÔÇś3ÔÇÖle ba┼člayanlar ise yaln─▒zca SegWit uyumludur ├ž├╝nk├╝ bunlar asl─▒nda P2SH adresleridir).


Pay-to-Witness-Pubkey-Hash (P2WPKH - Tan─▒k A├ž─▒k Anahtar ├ľzetine ├ľdeme)

Pay-to-Witness-Pubkey-Hash (P2WPKH - Tan─▒k A├ž─▒k Anahtar ├ľzetine ├ľdeme), P2PKH'nin SegWit versiyonudur. Tan─▒─č─▒m─▒z ┼ču ┼čekilde g├Âz├╝k├╝r:

<signature> <public key>

Bunun P2PKH'deki scriptSig'le ayn─▒ ┼čekilde g├Âz├╝kt├╝─č├╝n├╝ fark edebilirsiniz. Burada, scriptSig bo┼čtur. Bununla birlikte, scriptPubKey ┼ču ┼čekildedir:

<OP_0> <public key hash>

Biraz ilgin├ž g├Âz├╝k├╝yor de─čil mi? ─░mza, a├ž─▒k anahtar ve hash'ini kar┼č─▒la┼čt─▒rmam─▒za imkan tan─▒yan i┼člem kodlar─▒ nerede?

Burada ek operat├Ârleri g├Âstermiyoruz, ├ž├╝nk├╝ i┼člemi alan node'lar bu i┼člemle ne yapacaklar─▒n─▒ <public key hash>'in (a├ž─▒k anahtar hash'i) uzunlu─čuna ba─čl─▒ olarak bilecektir. Node'lar uzunlu─ču hesaplayacak ve bildi─čimiz eski tip P2PKH i┼člemiyle ayn─▒ ┼čekilde ├žal─▒┼čt─▒r─▒lmas─▒ gerekti─čini anlayacakt─▒r.
Y├╝kseltme yapmam─▒┼č node'lar i┼člemleri bu ┼čekilde nas─▒l yorumlayaca─č─▒n─▒ bilemez, ama bunun bir ├Ânemi yoktur. Eski kurallara g├Âre tan─▒k yoktur, dolay─▒s─▒yla bo┼č bir scriptSig ve baz─▒ verileri okumu┼č olurlar. Bunu de─čerlendirir ve ge├žerli olarak i┼čaretlerler ÔÇô onlara g├Âre herhangi biri ├ž─▒kt─▒y─▒ harcayabilir. SegWit'in geriye uyumlu bir┬ásoft fork (yumu┼čak ├žatallanma) olmas─▒n─▒n nedeni budur.


Pay-to-Witness-Script-Hash (P2WSH - Tan─▒k Betik ├ľzetine ├ľdeme)

Pay-to-Witness-Script-Hash (P2WSH - Tan─▒k Betik ├ľzetine ├ľdeme), yeni P2SH'dir. Buraya kadar okuduysan─▒z nas─▒l g├Âz├╝kece─čini muhtemelen tahmin edebilirsiniz, fakat yine de burada bir ├Ârne─činden bahsedece─čiz. Normalde scriptSig'e koyaca─č─▒m─▒z ┼čey burada tan─▒─č─▒m─▒zd─▒r. ├ľrne─čin, bir P2PKH i┼člemini saran P2WSH ┼čuna benzer ┼čekilde g├Âz├╝kebilir:

<signature 1> <public key>

scriptPubKey'imiz ┼čudur:

<OP_0> <script hash>

Ayn─▒ kurallar ge├žerlidir. SegWit node'lar─▒ betik hash'inin uzunlu─čunu okur ve bunun bir P2WSH ├ž─▒kt─▒s─▒ oldu─čunu belirler. P2WSH ├ž─▒kt─▒s─▒ da P2SH'ye benzer ┼čekilde de─čerlendirilir. Bununla birlikte eski node'lar bu hash'i, ├ž─▒kt─▒n─▒n herhangi biri taraf─▒ndan harcanabilece─či ┼čeklinde g├Âr├╝r.


Son d├╝┼č├╝nceler

Bu makalede, Bitcoin'in yap─▒ ta┼člar─▒ hakk─▒nda baz─▒ temel bilgiler edindik. Bu bilgileri k─▒saca ├Âzetleyecek olursak:


Betik t├╝r├╝Tan─▒m

Pay-to-Pubkey (P2PK)

Fonlar─▒ belirli bir a├ž─▒k anahtara kilitler

Pay-to-Pubkey-Hash (P2PKH)

Fonlar─▒ belirli bir a├ž─▒k anahtar hash'ine (yani bir adrese) kilitler

Pay-to-Script-Hash (P2SH)

Fonlar─▒, al─▒c─▒n─▒n sunabilece─či bir betik hash'ine kilitler

Pay-to-Witness-Pubkey-Hash (P2WPKH)

P2PK'nin SegWit versiyonu

Pay-to-Witness-Script-Hash (P2WSH)

P2SH'nin SegWit versiyonu


Bitcoin'in daha derinden incelemeye ba┼člad─▒─č─▒n─▒zda neden bu kadar b├╝y├╝k bir potansiyele sahip oldu─čunu anlayabilirsiniz. ─░┼člemler, bir├žok farkl─▒ ├Â─čeden olu┼čabilir. Kullan─▒c─▒lar, bu yap─▒ ta┼člar─▒n─▒ manip├╝le ederek fonlar─▒n nas─▒l ve ne zaman harcanabilece─čine y├Ânelik ko┼čullar belirleme konusunda b├╝y├╝k bir esnekli─če sahip olabilir.