Simplified Payment Verification (SPV) Nedir?
SPV (Basitleştirilmiş Ödeme Doğrulaması); blok zinciri işlemlerini doğrulayan, yalnızca block header’larını (blok başlıkları) indiren ve Merkle Ağacı’nda (Merkle Tree) işlemlerin blok zincirine dahil edildiğine dair kanıt istemek için kullanılan bir istemcidir.
Şimdi hep birlikte teknolojinin detaylarına inerek bilgi birikimimizi artıralım.
İlginizi çekebilir: Sui Blok Zinciri Nedir? Nasıl Çalışır? Airdrop Gelecek mi?
Merkle Ağacı
Merkle Ağacı, adından da anlaşılacağı üzere bilgisayar biliminde yerini almış ağaç veri yapısının bir örneğidir. Bloktaki tüm işlemlerin hash’leri Merkle ağacında yaprak şekillerinde bulunur.
Light Node
Light Node; doğrudan cüzdan hesabına bağımlı çalışan ve Full Node’lar ile birlikte çalışarak işlemlerin gerçekleşip gerçekleşmediğinin oldukça hızlı bir şekilde doğrulanmasını sağlayan Node’dur. “Light Node, cüzdan uygulamasının görünmez kısmıdır” da diyebiliriz.
Light Node’lar blok zincirin, Full Node’da olduğu gibi tam bir kopyasını saklamadıkları için ağın güvenliğine katkıda bulunmazlar. Bütün verileri tutarak merkeziyetsizliğe katkı sağlayan yapı Full Node’dur.
Light Node, Full Node ya da Super Node’lardan farklı olarak yalnızca block header’larını tutar.
SPV’yi anlamak adına Light Node kavramını, Full Node ve Super Node’dan farklarını öğrenmemiz gerekiyor. Light Node’ların sadece block hearder’ları tuttuğunu söyledik, iyi ama neden? Sadece block header’ların tutulması için çalıştırılan bir client (istemci) tam olarak ne işe yarar? Satoshi neden buna ihtiyaç duydu? Light Node’un işlevini Full Node yapsa olmaz mıydı? Gelin hep birlikte bu soruları bir örnek üzerinden cevaplayalım:
Ali’nin Veli’ye 5 BTC gönderdiği senaryoyu düşünelim. İşlemimiz oluştu, Light Node tarafından hash’lendi, Full Node’lar tarafından da işlemin yapılabilirliği onaylandı; geriye madenci tarafından bir bloka eklenmesi kaldı. Bu, işlemimizin bir blokun Merkle ağacında yer almayı beklemesi anlamına gelir. Varsayalım ki biz işlemi başlattık ve ardından bir blok eklendi. Ali’nin cüzdan uygulamasının tam olarak bu anda yapması gereken şey şu; gerçekten Ali’nin işlemi bu blokta işlem gördü mü? Yoksa hala başka bir blokta bulunmak üzere sırada mı bekliyor?
Light Node tam da bu anda devreye girer ve tam olarak görevi, eklenen yeni blokta Ali’nin işleminin gerçekten var olup olmadığını kontrol etmesidir.
Light Node’un içerisinde sadece header’ların olduğundan bahsemiştik; bu içerisinde az bir veri olduğu anlamına gelir. Merkle ağacı dediğimiz yapı Full Node içerisinde tutulur. Light Node Merkle ağacını içinde barındırmıyorsa nasıl oluyor da bir cüzdan uygulaması gibi görev yapıp bakiyeleri kontrol edebiliyor?
Light Node bu bilgiyi kendi kendine edinebilmek için yeterli bilgiye sahip değildir. O yüzden bilgiyi Full Node’lardan talep etmektedir. Full Node, Light Node’a “istediğin işlem ağaçta mevcut” ya da “istediğin işlem ağaçta mevcut değil” şeklinde bir cevap gönderir.
Peki bu cevap yeterli ve güvenilir bulunabilir mi? Full Node kötü niyetli (imposter) bir Node ise? Blokta işlemimiz yokken Light Node’a var dediyse?
İşte tam da bu noktada Simple Payment Verification (SPV) devreye giriyor.
Simple Payment Verification (SPV)
Aşağıdaki görsele bakarak SPV algoritmasının nasıl çalıştığını ve Full Node’dan hangi hash’leri isteyeceğimizi tartışalım.
Herhangi bir Full Node’a gittiğimizde bize şu cevabı verdiğini düşünüyoruz; “senin işlemin (Transaction D) bu blokta var”. Bizim Light Node olarak bu cevabı doğrulamamız için istememiz gereken hash’ler şu şekilde bulunuyor; her zaman kendi işlemimizin eşi olan hash’i isteyerek Merkle Root’a ulaşmaya çalışıyoruz. Gelin bu doğrulama algoritmasının mekanizmasını beraber inceleyelim.
Zaten Hd’yi biliyoruz çünkü Hd bizim işlemimizin kendisini ifade ediyor. Eğer biz Hc’yi istersek Hcd’ye ulaşabiliriz. O zaman yukarıya çıkabilmek için bize lazım olan Hab’yi bilmeliyiz ki Habcd’ye ulaşabilelim. Son olarak Hefgh’yi istiyoruz ve Habcd-Hefgh’yi kullanarak Habcdefgh’ye yani Merkle Root’a ulaşıyoruz.
Merkle Root’un Light Node’da tutulduğunu biliyoruz. O zaman Full Node’dan aldığımız bilgiler ile bulmuş olduğumuz Merkle Root’u kendi blokumuzda tuttuğumuz Merkle Root ile kıyaslayabiliriz. Eğer Merkle Root’lar birbiri ile 1’e 1 uyuşuyorsa artık işlemimizin gerçekten o blokta olduğuna emin olabiliriz ve başka bir Full Node ile iletişime geçmeden “Pending” statüsünde olan işlemi “Completed” şeklinde değiştirebiliriz.
Peki ya Merkle Root’ların birbirinden farklı olduğu senaryoda ne yapacağız? Full Node’u “Imposter” olarak adlandıracağız ve bizim için güvenilmez olacak, başka bir Full Node’dan bilgileri tekrar isteyeceğiz ve doğrulamaları tekrar yapacağız. İyi niyetli bir Full Node hiçbir zaman bize yanlış bir bilgi vermeyecektir yani işlemin blokta bulunmaması durumunda “işlem blokta yoktur” ibaresi döndürecektir. Tabi biz yine de farklı Full Node’lardan aynı teyidi almalıyız ki bu durum da netliğe kavuşsun. Sadece buradan şunu rahatlıkla söyleyebiliriz ki bir blok zincirinde ne kadar çok full node çalıştıran bilgisayar varsa, o blok zinciri o kadar merkeziyetsizdir.
Bir blok zincirinde full node sayısının fazla olmasını sağlayan temel faktör sistem gereksinimlerinin düşük tutulmasından geçer. Düşük maliyet ile herkesin dahil olabileceği bu sistem dünyanın farklı yerlerinden birçok insanın ağa katılmasını teşvik eder ve bu blok zincirler için oldukça önemlidir. Merkeziyetsizlik ve full node konumuz olmadığı için burada bırakalım.
Şunu diyebiliriz ki; Satoshi’nin de belirtmiş olduğu gibi SPV hızlılık açısından gayet iyi ama güvenlik konusunda da bir o kadar zayıf bir sistemdir. O halde neden Light Node kurulumu yapıp tersten gittiğimiz bir yol izliyoruz? Full Node kurup ödemelerimizin yeni eklenen blokta var olup olmadığına kendimiz baksak, daha güvenli olmaz mıydı?
Cüzdan uygulaması sahibi olduğumuzu düşünelim ve yüzlerce node’a ihtiyacımız var. Çünkü cüzdan uygulamasında yapılan her bir işlemi blokta arayıp gerçekten orada olduğunu teyit etmemiz gerek. Eğer bunu Full Node ile yapacak olursak bizim yüzlerce Full Node kurmamız gerekecek ve bu oldukça maliyetli olacak. Onun yerine veriyi, kurulu Full Node’lardan talep edip doğrulamasını kendimiz yapmamız bizim için en karlısı olacaktır. Ayrıca tüm SPV Node’ları, farklı Full Node’lar ile uyumlu çalışacağından iş yükünü de dengelemiş olurlar.
Son Olarak
Light Node; bildiğimiz cüzdan uygulamasıdır, bakiyeleri izlemek için büyük bir maliyetten kurtarır ve az veri tutarak sadece bu işe odaklanır. Merkle ağacının verilerini tutmak yerine Full Node’dan Merkle Root’u çekerek sadece doğrulamaya odaklanır. Buna Simple Payment Verification (SPV) denir.
Bitcoin’in %51’ini barındıran bir grup veya birey tarafından SPV manipüle edilip gayri meşru işlemleri onaylayabilir. %51 saldırısı birçok kripto para birimi için büyük bir tehdit olmakla birlikte özellikle Bitcoin için %51 saldırısı pek de mümkün gözükmemektedir.
Twitter’dan anlık ve hızlı haber akışı için: https://twitter.com/Muhabbitcom
Daha fazla Nedir haberi için: Nedir Haberleri
Daha fazla Blockchain haberi için: Blockchain Haberleri
Gelişmelerden ve son dakikalardan haberdar olmak, kripto para dünyasında aktif bir yer edinmek istiyorsanız Telegram kanalımıza bekliyoruz.