Blokzincirin Temelleri — 1

Blokzincirin çalışma mekanizmasını anlatacak olduğum yazı dizisinin birincisi, transfer işlemlerinin dağıtık olarak tutulmasıdır.

Faruk Terzioğlu
Blokzincir
6 min readMar 19, 2018

--

Yazılar genel olarak aşağıdaki konuları kapsayacaktır.

Transfer İşlemlerinin Oluşturulması

Yapılan transferlerin kayıtlarının tutulması ve transferi yapanın doğrulanması gerekmektedir. Mevcut sistemlerde bu kontroller bankalar gibi merkezi sistemler tarafından yapılmakta ve yapılan transferlerin kaydı da merkezi olarak tutulmaktadır.

Burada yapılmak istenen, kayıtları dağıtık olarak yani merkezsiz olarak tutulması, transferin geçerliliğinin de bu dağıtık birimler tarafından sağlanmasıdır.

Bu kayıtların tutulduğu defterin (Ledger) kaç kopyasının olduğuna, bu kopyalara kimlerin erişebildiğine ve defteri tutanlar arasında defterin bütünlüğüne dair mutabakatın nasıl sağlandığına göre farklı şekilde sınıflandırılmaktadır. Yaygın olan bankacılık sistemindeki kayıt defteri tek bir merkez tarafından tutulmakta ve defterdeki kayıtların doğruluğu aynı merkez tarafından sağlanmaktadır. Transferi yapanın kimliğinin doğrulanması, yeterli bakiyesinin olduğunun kontrolü, transfer sonucunda tarafların bakiyelerinin güncellenmesi bu merkezi yapı tarafından sağlanmaktadır.

Defterin birden fazla kopyasının olduğu ve bu kopyaların sadece izin verilenlar tarafından tutabildiği sistemlere “İzin gerektiren, gizli paylaşımlı” olarak nitelendirebiliriz.

Defter kopyaları isteyen herkes tarafından tutulabildiği, yani dağıtık olarak tutulduğu sistemlere “Dağıtık Defter Teknolojisi (Distributed Ledger Technology — DLT)” denilmektedir. Dağıtık defter sistemlerinde, defterdeki kayıtların bütünlüğünün nasıl sağlandığına göre de ikiye ayrılır; “İzin gerektiren açık paylaşımlı defter (Permissioned)” ve “İzin gerektirmeyen açık paylaşımlı defter (Permissionless)”. İzin gerektiren dağıtık defterde isteyen herkes defterin bir kopyasının tutabilir, yeni transfer işlemlerin bilgisini alır ve kendi defterine işler. Fakat dağıtık defterlerdeki bilgilerin doğrulanması için gerekli olan mutabakat sadece izin verilenler arasında kurulmaktadır. İzin gerektirmeyen dağıtık defter sisteminde ise isteyen herkes defterin bir kopyasını tutabileceği gibi defterin bütünlüğünü sağlamak adına mutabakata da katılır.

Defterlerde kayıt tutulma ihtiyacı, kişiler arasında varlık transferinin güvenli bir ortamda sağlabilmesi içindir. Defterin dağıtık olarak tutulma ihtiyacı da güvenilir bir aracıya olan ihtiyacı ortadan kaldırmak içindir (Trustless). Kayıt tutanların defterlerde tutacakları ve sürekli olarak güncelleyecekleri bilgi, kişiler arasındaki transfer işlemleridir (Transactions).

Transfer işlemini gerçekleştirmek isteyen iki kişiyi Ahmet ve Mehmet olarak nitelendirirsek, Ahmet Mehmet’e 5 bitcoin transfer etmek istediğini defteri tutan ağdaki düğümlere (node) dağıtır. Transfer mesajını alan düğüm kendi defterini günceller ve mesajı yanındaki düğümlere dağıtmaya devam eder.

Transfer mesajını alan düğümler, kendi defterini güncellemeden önce bazı kontroller yapar. İlk olarak kontrol edilmesi gereken konu, mesajı gönderenin hesabın gerçek sahibinin olduğudur. Mesaj gönderenin doğruluğundan emin olabilmek için mesaj, gönderen tarafından imzalanmalıdır.

Transfer mesajını imzalamak için birbirinden farklı fakat birbirini ile bağlantılı ikili anahtar kullanılır; “Açık anahtar (Public Key)” ve “Özel Anahtar (Private Key)”. Açık anahtar, herkes tarafından bilinen ve aynı zamanda gönderenin adresi olan bir anahtardır. Özel anahtar ise sadece hesap sahibinin bildiği ve mesajları imzalamak için kullanılacak olan anahtardır. Transferin alıcısı da aynı anahtar ikilisine sahiptir ve transfer işlemi alıcının “açık anahtarına” yapılır.

Transfer yapabilmek için, miktarın çıktığı açık anahtarın size ait olduğunu ispatlamanız gerekmektedir. Bunu yapmak için de transfer mesajı ve özel anahtar ile bir imza oluşturulur.

f(işlem mesajı, gönderen özel anah.) = imza 

Oluşturulan imzalı mesaj ağdaki düğümlere dağıtılır ve mesajı alan düğüm imzayı doğrulamak için gönderecinin açık anahtarı ile imzayı ikinci bir fonksiyona sokar. Eğer imza gönderenin özel anahtarı ile oluşturulmuşsa fonksiyondan olumlu cevap gelecektir. Eğer transfer mesajı, mesajda yazan gönderenden başka birinin özel anahtarı ile imzalanmışsa, gönderen olarak belirtilmiş kişinin açık anahtarı ile doğrulanmayacaktır.

v(mesaj, imza, gönderenin açık anah.) = 1/0

Transfer mesajlarının düğümler arasında dağıtılırken müdahale edilmemesi de oluşturulan imza ile sağlanmaktadır. Oluşturulan imza mesajın içeriğine bağlı olduğu için mesajda yapılacak ufak bir değişiklik, doğrulama fonksiyonundan olumsuz çıktı alınmasına sebep olacaktır.

f(A -> B (50), [Öz. Anah.] ) = 4ffrt64566
f(A -> B (15), [Öz. Anah.] ) = 8yh456677
v(A -> B (50), 4ffrt64566, 123133)= 1
v(A -> B (49), 4ffrt64566, 123133)= 0

Düğümlerin kontrol etmesi gereken ikinci bir konu da gönderilen miktarın varlığıdır. 5 BTC gönderen Ahmet gerçekten bu miktara sahip mi? Geliştirilen bu dağıtık defterde kişilerin bakiyeleri tutulmaz, işlem sahipliği tutulur. Yani Ahmet’in 5 BTC si var diyorsak, Ahmet’in isminin yanında 5 sayısı vardır değil, Ahmet’e ait 5 birimlik işlem vardır demektir. Ahmet’in açık anahtarı : 13kjhFg34daz56hyy65674 ise;

Ahmet Mehmet’e 5 BTC transfer ettiğinde Ahmet’in bakiyesinden 5 eksilip Mehmet’in bakiyesine 5 eklenmez; Ahmet’in sahip olduğu 5 birimlik BTC’nin sahipliği Mehmet’e geçer. Ahmet’in sahip olduğu 5 BTC’yi transfer edebilmesi için bu işlemin hash’ini alır, alıcının açık adresi ile beraber imzalar ve yeni oluşan işlemi kendi işlemine ekler.

İşlemin yeni sahibi Mehmet aynı işlemi (5 BTC’lik) başkasına göndermek istediğinde aynı adımları tekrarlar.

Kişi sahip olduğu transfer işleminden farklı bir miktar göndermek istediğinde ne yapması gerekir? Defterlerde bakiyeler tutulmadığını söylemiştik. Eğer göndermek istediği miktar elindeki işlem parçalarından farklı bir miktarsa bir veya daha fazlasını yeni işleme girdi (input) olarak tanımlar. Örneğin Ahmet’in sahip olduğu 2 ve 3 BTC lik işlemleri varsa ve 5 BTC göndermek istiyorsa, bu 2 ve 3 BTC lik işlemlerini yeni işleme girdi olarak tanımlar. Yeni işlemin çıktısı (output) ise Mehmet’e olan 5 BTC lik transferdir.

Eğer sahip olduğu işlemlerden daha küçük bir miktrar transfer etmek isterse ne olur? Yeni oluşturulan transfere girdi olarak kullanılacak işlemler bütün olarak kullanılmalıdır. Eğer 5 BTC’lik transfer yapılmak isteniyor ve elinde 4 ve 2 BTC lik işlemler varsa, bu işlemler yeni işleme girdi olarak tanımlanır. Girdi olarak kullanılan işlemlerin toplamı gönderilmek istenen tutarı geçtiği için işlemde iki tane çıktı olur; biri alıcıya olan 5 BTC lik çıktı, diğeri de gönderene tanımlanmış 1 BTC lik çıktı. Eğer 5 BTC lik transfer için 7 BTC lik bir girdi kullanılsaydı, yeni işlemin bir girdisi fakat iki çıktısı olur. İşlemlerin girdileri bir veya daha çok olabilir fakat en fazla iki çıktısı olur.

Aşağıda 4 farklı işlem için sahipliklerinin nasıl değiştiğini, girdilerinin ve çıktılarının nasıl oluştuğunu inceleyebilirsiniz. 1nci işlemde Ahmet 7 BTC’lik transfer için sahip olduğu 3 ve 4 BTC’lik işlemleri kullanmıştır. Kullanılan işlemlerin toplamı gönderilmek istenen rakama denk olduğu için para üstü olarak bir çıktı oluşmamıştır. 2nci işlemde Ahmet’ten Ayşe’ye yapılacak 10 BTC lik işlem için Ahmet’in sahip olduğu 15 BTC’lik işlem girdi olarak kullanılmış ve iki farklı çıktı oluşmuştur. Bu çıktılardan Ahmet’e tanımlı 5 BTC’lik çıktı 4ncü işlemde kullanılarak “harcanmıştır”. 4ncü işlemde kullanılan Ahmet’in 5 BTC lik işlemi sonucunda 2 BTC’lik bir çıktı oluşmuş ve bu çıktı henüz “harcanmamıştır”. Yine aynı şekilde 3ncü işlemde Ahmet’e yapılan 7 BTC’lik çıktı ve Ayşe’ye tanımlı olan 3 BTC’lik çıktılar da harcanmamıştır. Bu “harcanmamış” işlem çıktıları daha sonra başka transfer işlemlerine girdi olarak kullanılabileceği için, yani harcanabileceği için, bu “harcanmamış işlem çıktılarının (unspent transaction output –utxo)” toplamı kişilerin bakiyesidir.

Defterin kopyalarını tutan tüm düğümler yapılan işlemlerin tamamını tuttukları için hangi işlem çıktıların harcanıp hangisinin harcanmadığı bilgisine sahiptir. Yeni bir transfer işlemi yapılmak istendiğinde kullanılan girdilerin harcanmamış olduğunu kontrol eder ve defterini günceller.

Yapılan tüm işlemler kayıt tutan herhangi bir düğüm aracılığıyla sorgulabilir. Aşağıdaki görselde https://blockexplorer.com sitesi üzerinde yapılmış bir sorgu gözükmektedir. Bu transfer işleminde 6 farklı girdi kullanılmış ve iki farklı çıktı oluşmuştur; biri alıcıya gönderilen 139.6 BTC’lik çıktı ve biri de göndericiye geri gönderilen 0.01 BTC’lik çıktı. Oluşan bu iki çıktı da başka bir işlemde girdi olarak kullanıldığı için, yani harcandiği için, ikisininde yanında “Harcandı (Spent)” kelimesini temsilen “S” harfi bulunmaktadır.

https://blockexplorer.com/tx/a117c441aa5bd3fcb442e3c47a180c584420bcd9f93c68dab9feddd1d26b767e

Bir düğümün yeni bir transfer bilgisi aldığında defteri güncellemeden önce yaptığı kontrolleri aşağıdaki gibi özetleyebiliriz.

Kaynaklar

Bitcoin: A Peer-to-Peer Electronic Cash System
https://bitcoin.org/bitcoin.pdf
How Bitcoin Works Under the Hood?
http://www.imponderablethings.com/
How Does the Blockchain Work?
https://medium.com/@micheledaliessi/how-does-the-blockchain-work-98c8cd01d2ae

--

--