Aslında “Write a Story” tuşuna basarken aklımda “Dunbar Sayısı” ile ilgili bir şeyler karalama düşüncesi vardı, ama masamda üzerinde “Tangle!” yazan bir post-it görünce “La Danse Des Pirates” eşliğinde aniden dümeni çevirmeye karar verdim :)
Genel olarak Nesnelerin Internet’i (Internet of Things — IoT) ekosistemi için bir kripto para çözümü olarak ortaya çıkarak popülerleşen IOTA’nın arkasındaki teknoloji olarak bilinen Tangle, özellikle mikro ödemeler akışı içerisinde blockchain teknolojisine alternatif bir DLT (Distributed Ledger Technology) yaklaşımıdır.
Tangle’i incelediğimizde Blockchain teknolojisindeki bir zincir yapısı içerisinde birbiri ile ilişkili bloklar yerine işlemlerin Yönlü Çevrimsiz Çizge (Directed Acyclic Graph — DAG) yapısı içerisinde tutulduğunu görürüz.
DAG yapısı içerisindeki düğümler (node) birbirleri ile tek yönlü olarak ilişkide bulunurlar (grafik üzerindeki ok işareti ilişkinin yönünü göstermektedir, örneğin aşağıdaki yapıda 1 → 2 gösterimi ile 1 ve 2 arasında bir ilişki olduğu ve bu ilişkinin yönünün 1'den 2'ye doğru olduğu ifade edilmektedir). Ayrıca çevrimsiz (acyclic) yapıda olması nedeni ile bir düğümden başka düğüme giden bir yol varsa aksi yönde bir yol olmaması gerekmektedir (örneğin aşağıdaki yapıda 1'den başlayıp 5'de biten bir yol bulunmaktadır, çevrimsiz yapıdan dolayı bunun tersi yani 5'den başlayıp 1'de biten bir yol olamaz).
Bu yapıyı en basit şekilde bir ağaç yapısı olarak değerlendirebiliriz (Aslında her DAG için bir ağaç yapısı benzetmesi yapmak doğru değil, ama Tangle içerisindeki kök yani “genesis” işlem varlığı ve her işlemin direk yada dolaylı — directed/indirected — bu işlem ile ilişkili olması bu benzetmeyi doğru kılmaktadır).
Tangle yapısındaki her işlem DAG yapısı içerisinde bir düğüm olarak gösterilmektedir (işlemleri basit bir şekilde “A kişisinden B kişisine X birim IOTA gönderimi” olarak düşünebilirsiniz). Yeni bir işlem Tangle’a dahil olurken daha önceki işlemlerden iki tanesini “onayladığını” (approval) belirtmelidir (bu onaylama ilişkisi DAG yapısında yeni eklenen işlemden onaylanan işlemlere doğru yönlü gösterilir). aşağıdaki örnekte A işlemi (düğümü) Tangle’a dahil olurken B ve D işlemlerini onaylamaktadır. İki işlem arasındaki yönlü bir ilişki bulunmuyorsa ama en az iki birim uzunluğunda yönlü bir yol (directed path) bulunuyorsa bu durum “dolaylı onaylama” (indirected approval) olarak adlandırılır, aşağıdaki örnekte A → B ve B → F ilişkilerinden dolayı “A işlemi F işlemini dolaylı olarak onaylamaktadır” denilir.
Tangle kapsamında “genesis” yani “başlangıç” işleminin varlığından bahsetmiştik, bu işlem direk yada dolaylı bir şekilde diğer tüm işlemler tarafından onaylanmaktadır. Genesis işlemi, sistem içerisindeki tüm tokenlerin kurucu hesaplara dağıtımını içeren işlemdir.
Tangle kapsamında Bitcoin blockchain’i benzeri bir şekilde platform yaşam döngüsü içerisinde tekrardan bir token üretimi yapılması, “madenci” adı verilen sistemlerin parasal ödül kazanmaları gibi bir durum söz konusu değildir. Bitcoin blockchain’i içerisindeki madencilik ile yapılan işlemlerin doğrulanarak sisteme eklenmesi yaklaşımı Tangle kapsamında işlemi yayınlayan sistemin doğrulama akışını üstlenmesi ve doğrulamak için seçtiği işlemleri kontrol edip sadece Tangle geçmişi ile çelişkiye düşmeyen işlemleri doğrulaması şeklinde evrimleşmiştir (işlemi yayınlayan sistem aynı zamanda doğrulama maliyetini üstlenmiş olduğundan ayrıca “işlem/transfer ücreti” diye bir maliyet söz konusu değildir).
Bu noktada aklımıza gelmesi en muhtemel soru, yeni bir işlemin önceki işlemlerden hangi ikisini onaylayacağına nasıl karar verdiği olacaktır.
Bu yapıyı (ve Tangle’ı) daha iyi anlamak için bazı kavramları belirtmemiz gerekiyor:
- Ağırlık (Weight): Bir işlemin “ağırlığı” o işlemi yayınlamak isteyen sistemin işlem için harcadığı kaynağı ifade eder. Bitcoin blockchain’deki yapıya benzer bir şekilde (Proof of Work) kriptografik bir problem çözümüne dayanır, sistem problemin zorluk derecesini değiştirerek işlemin “ağırlık” değerini belirli bir pozitif değer aralığında değiştirebilir — IOTA platformunda ağırlıklar 3'ün katları şeklinde belirlenmiştir. Aşağıdaki örnekte basitleştirme amaçlı “ağırlık” değerinin her işlem için “1” olduğu varsayılmıştır.
- Kümülatif Ağırlık (Cumulative Weight): Bir işlemin kendi ağırlığı ile kendisini direk yada dolaylı bir şekilde onaylayan tüm işlemlerin ağırlıklarının toplamıdır; aşağıdaki örnekte F için (F’yi direk yada dolaylı onaylayan işlemler : A, B, C, D, E) 6 değeridir.
- Puan (Score): Bir işlemin kendi ağırlığı ile kendisinin direk yada dolaylı bir şekilde onayladığı tüm işlemlerin ağırlıklarının toplamıdır; aşağıdaki örnekte A için (A tarafından direk ve dolaylı onaylanmış işlemler : B, D, F, G) 5 değeridir.
- Uç (Tip): Onaylanmamış işlemlere verilen isimdir, aşağıdaki örnekte A ve C işlemleri uç işlemlerdir.
- Derinlik (Depth): Herhangi bir uç’tan bir işleme gelen en uzun yolun uzunluk değerini ifade eder; aşağıdaki örnekte G için 4 (G-F-D-B-A), D için 2 (D-B-A) değeridir.
- Yükseklik (Height): İşlemden “genesis” işlemine giden en uzun yolun uzunluk değerini ifade eder; aşağıdaki örnekte G için 1 (G-Genesis), D için 3 (D-F-G-Genesis) değeridir.
Sadece yukarıda belirttiğimiz onaylama akışı tanımını baz alarak ilerlediğimizde yeni işlemlerin çoğunun onaylamak için eski işlemleri tercih edeceğini düşünebiliriz (tembel uç problemi — lazy tip problem), bu işlemlerin Tangle geçmişi ile çelişkiye düşmediklerini kontrol etmek çok daha az kaynak gerektirecektir. Bu yaklaşım ise yeni işlemlerin onaylanmaması (yada çok geç onaylanması) ve sonuç olarak Tangle’ın işlevsiz bir yapıya dönüşmesine neden olacaktır. Tangle bu noktada katılımcılarını sadece yeni işlemleri onaylamaya zorlamak gibi merkezi yapılarda görünen bir yaklaşım yerine katılımcılarını belirli kurallar eşliğinde yönlendirmeyi hedefleyen bir yaklaşımı tercih etmiştir.
Tangle yapısında bir işlem onaylamak için iki işlem seçerken (ortamda uygun iki işlem olmadığı durumlarda tek bir işlem seçilebilir, örneğin genesis işleminden hemen sonra gelen işlemler) yukarıda tanımlanan değerlerin (özellikle kümülatif ağırlık değerinin) yönlendirme yaptığı bir rastlantısallık yapısı içerisinde ilerlemektedir. Bu yaklaşımla “tembel” davranış sergileyen uçların onaylanma ihtimali düşmekte ve sistem içerisindeki aktörlerin bu davranıştan uzaklaşması sağlanmaktadır.
Bildiğiniz gibi Bitcoin Blockchain’i kendisinden önceki dijital para çözümlerinden ayıran özelliklerden en önemlilerinden bir tanesi “çift harcama” (double spending) problemine getirdiği çözümdü. Tangle’ın dallanmış yapısı aynı çözümün uygulanmasına izin vermemektedir, bir kullanıcı bu ağaç yapısının farklı dalları içerisinde hesabındaki parayı tekrar harcayan işlemler tetikleyebilirler ve onaylamak için uç arayan işlemler diğer dallardaki işlemleri bilmediklerin dolayı bu işlemleri onaylayabilirler.
Yukarıda belirttiğimiz işlem onay seçim çözümü, yapısı itibari ile (işlemin kendi ve DAG içerisideki yerine bağlı özelliklerine bağlı rastlantısal seçim) zaman içerisinde bir dal yapısının sistemin geneline göre daha büyümesi, ağırlaşması ile sonuçlanır, daha hafif dallar göz ardı edilmeye başlanır. Bunu Tangle içerisindeki geçerli işlemler konusunda “mutabakat” (consensus) olarak adlandırabiliriz (bu durumu Bitcoin blockchain’i üzerindeki “en uzun zincir” kavramına benzetebiliriz).
Ancak “A kişisinden B kişisine para gönderimi” işleminde B’nin ne zaman paranın gerçek sahibi olduğunu anlaması için bu yeterli değildir (bunu Bitcoin blockchain’i üzerinde işlemin gerçekleşmesini kabul etmek için karşı tarafın işlemin olduğu bloktan sonra “n” blok beklemesi yaklaşımına benzetebiliriz).
Tangle burada “güven onayı” (confidence confirmation) olarak adlandırılan yaklaşımı kullanmaktadır. Temel olarak bir işlemin direk veya dolaylı olarak onay alıyor olması, sistem tarafından daha yüksek bir “güven onayı” ile kabul edildiğini göstermektedir. Tangle bu değeri uç seçim algoritmasını çoklu bir şekilde çalıştırarak yüzdelik bir oranda hesaplar. Bir işlem yüksek bir güven onayı değerine sahipse mutabakat dışına çıkarılıyor olması oldukça düşük bir ihtimaldir, işlem kapsamında alıcı taraf paranın gerçek sahibi olduğu düşüncesi ile hareket edebilir.
Ancak yukarıda belirtildiği gibi “oldukça düşük” bir ihtimal olması, belirtilen durumun olamayacağı anlamına gelmemektedir, kötü niyetli bir katılımcı yeterli işlem gücüne sahip ise çift harcama yapmayı deneyebilir. Bunun için ilk işlemin gerçekleşmesini bekleyip (bir alışveriş akışından eline aldığı ürünün geçmesi gibi) sonrasında kural dışı işlemi onaylayacak çok yüksek sayıda yeni işlem üretip kural dışı işlemi direk ve dolaylı olarak onaylayarak kural dışı işlemin olduğu dal yapısının kümülatif ağırlığını arttırabilir ve tüm sistemi bu yeni dal yapısının doğruluğuna ikna edebilir.
Bu durumun gerçekleşebilmesi için kötü niyetli katılımcının diğer tüm katılımcılardan daha fazla işlem yaratabilmesi gerekmektedir. Büyük bir ağ yapısı için bu risk gözardı edilebilsede günümüzdeki IOTA yapısı için bu risk varlığını korumaktadır. Bu durumu engellemek için geçici olarak “koordinatör” (coordinator) adı verilen ek bir mutabakat yapısı eklenmiştir. Bu yapıda belirli aralıklarla (her iki dakikada bir gibi) IOTA platformu tarafından yaratılan bir referans işlemi oluşturulur ve bu işlem tarafından onaylanan diğer tüm işlemler otomatik olarak %100 güvenlik onayına sahip olurlar. Merkezi olmayan sistemler düşüncesine aykırı olan bu yaklaşım, IOTA ağının olgunlaşması ve yeterli büyüklüğe ulaşması ile birlikte devre dışı bırakılacaktır.
Tangle yapı itibari ile kuantum dirençli kriptografik algoritmalar kullandığından dolayı günümüz blockchain platformlarına kıyasla ileride kuantum bilgisayarlarının ortaya çıkması ile gerçekleşebilecek saldırılara karşı çok daha dayanıklıdır.
Bu yazıyı girişe uygun bir şekilde “Les Mystérieuses Cités D’or” ile ulu önder Gazi Mustafa Kemal Atatürk tarafından tüm dünya çocuklarına armağan edilen 23 Nisan Ulusal Egemenlik ve Çocuk Bayramı’nızı kutlayarak kapatalım, bir sonraki yazıda görüşmek üzere :)
