Zephyrnet Logosu

Akıllı sözleşmeler: İyi, kötü ve tembel

Tarih:

Neden özel blok zincirleri kod çalıştırmaya istekli olmamalı?

“Akıllı sözleşmeler” teriminin hayranı değilim. Başlangıç ​​olarak, o kadar çok insan tarafından o kadar çok farklı şey için kullanıldı ki muhtemelen onu tamamen yasaklamalıyız. Örneğin, bilinen ilk referans, Nick Szabo'nun bunu fiziksel nesneleri tanımlamak için kullandığı 1997 yılına aittir. davranışlarını değiştirmek bazı verilere dayanmaktadır. Daha yakın zamanlarda bu terim tam tersi anlamda kullanıldı: Blockchain üzerindeki hesaplamayı tanımlamak için. hangisi etkilenir hava durumu gibi dış olaylarla. Şimdilik bu iki anlamı bir kenara bırakalım.

Burada, bir blockchain üzerinde gerçekleşen genel amaçlı hesaplama anlamında “akıllı sözleşmelere” odaklanmak istiyorum. Bu anlam popüler hale getirildi Ethereumkimin kimliği Beyaz kağıt “Yeni Nesil Akıllı Sözleşme ve Merkezi Olmayan Uygulama Platformu” alt başlığıdır. Ethereum'un gördüğü ilginin bir sonucu olarak, bankaların (ve diğerlerinin) akıllı sözleşme kavram kanıtları üzerinde çalışmasıyla bu anlam baskın hale geldi. Tabii ki, düzenlemeye tabi finansal kurumlardan bahsettiğimiz için, bu çoğunlukla sınırlı sayıda tanımlanmış katılımcıya sahip olan özel veya izinli blok zincirler bağlamındadır. Şimdiki nedenlerden dolayı İyice anlaşıldıHalka açık blockchainler, tüm dehalarına rağmen henüz kurumsal amaçlara uygun değil.

Peki özel blockchainlerdeki akıllı sözleşmelerin geleceği parlak mı? Bir bakıma öyle ama aslında değil. Görüyorsunuz, sorun şu:

Özel blockchainlerde akıllı sözleşmeler dört iyi fikri bir kötü fikirle birleştirir.

Peki iyi fikirler nelerdir? (a) iş mantığını bir bilgisayar programı olarak ifade etmek, (b) bu ​​mantığı tetikleyen olayları programa mesaj olarak temsil etmek, (c) mesajları kimin gönderdiğini kanıtlamak için dijital imzaları kullanmak ve (d) yukarıdakilerin tümünü bir blok zinciri.

Peki ya kötü olan? Her blockchain düğümündeki her mesaj için her programı yürütmek. Başka bir deyişle, bunu yapmak infaz tüm programların blok zincirinin işi olduğunu, onu sadece bir şey olarak kullanmak yerine hafızası programlar ve mesajlar için. Ve yine de bu küresel uygulama, Ethereum'un geliştirilmesinin tek nedenidir.

Eğer farkındaysanız hesaplamanın deterministik doğası, hakkında bilgi sahibi olmak durma problemive nasıl olduğunu anlayın veri bağımlılıkları eşzamanlılığı önlerseniz zaten ikna olmuş olabilirsiniz. Ama değilsen kendine bir kahve yap, derin bir nefes al ve tavşan deliğine doğru beni takip et…

Ethereum'u Anlamak

Ethereum tarzı akıllı sözleşmeleri anlamak için ilk (ve hala en popüler) halka açık blok zinciri olan bitcoin ile başlamamız gerekiyor. Bitcoin blok zinciri başlangıçta yalnızca tek bir şey için tasarlandı: Bitcoin para birimini bir sahipten diğerine taşımak. Ancak sistem çalışır hale geldikten sonra insanlar başka amaçlara hizmet etmek için işlemlere "meta veriler" yerleştirmeye başladı. Dijital varlıklar ve belge noter onayı. Bazı bitcoinciler mücadele bu uygulamalar, bir resmi mekanizma meta veriler için Mart 2014'te kullanıma sunuldu. katlanarak büyüyen o zamandan beri.

Bitcoin blok zinciri üzerine inşa edilen projelerin yanı sıra, birçok yeni nesil halka açık blok zinciri de geliştirildi ve piyasaya sürüldü. Nxt, Bit paylaşımları, Ripple ve Stellar. Bunlar, kullanıcı tarafından oluşturulan varlıklar, merkezi olmayan borsa ve teminatlı borçlanma gibi daha geniş bir faaliyet yelpazesini desteklemek üzere sıfırdan tasarlandı. Bu blok zincirlerinin her biri, geliştiricileri tarafından kararlaştırılan farklı özelliklere sahiptir ve yeni bir özellik eklendiğinde her birinin tüm kullanıcılar tarafından yükseltilmesi gerekir. İşler iyice karışmaya başladı.

Bu projelerin bazılarında yer almış, Vitalik Butterin basit ama harika bir soru sordu: Çok sayıda uygulamaya özel blok zinciri yerine neden bunu yapacak şekilde programlanabilen tek bir halka açık blok zinciri olmasın? ne istersek? Bu süper blockchain sonsuza kadar genişletilebilir ve yalnızca onu kullananların hayal gücüyle sınırlı olacaktır. Kripto meraklılarının dünyası neredeyse oybirliğiyle bu güçlü fikre ikna olmuştu. Ve böylece Kitlesel fonlamada 18 milyon dolar ve büyük bir heyecanla Ethereum doğdu.

Ethereum, "eter" adı verilen ilişkili bir kripto para birimine sahip yeni bir halka açık blok zinciridir. yüzlerce ki ondan önce geldi. Ancak diğer blok zincirlerden farklı olarak Ethereum, herkesin blok zinciri içinde bir "sözleşme" oluşturmasına olanak tanır. Sözleşme, ilgili minyatür veri tabanına sahip bir bilgisayar programıdır. yalnızca ona sahip olan program tarafından değiştirilebilir. Bir blockchain kullanıcısı bir veritabanını değiştirmek isterse, sözleşmesine dijital olarak imzalanmış bir mesaj göndermesi gerekir. Sözleşmedeki kod, tepki verip vermeyeceğine ve nasıl tepki vereceğine karar vermek için bu mesajı inceler. (Bu "kapsüllemeKod ve veri aynı zamanda bir temeldir nesne odaklı programlama.)

Ethereum sözleşmeleri aşağıdaki gibi birkaç yeni programlama dilinden birinde yazılabilir: katılık ve Yılan. Çoğu programlama dili gibi bunlar da Tur tamamlama, herhangi bir genel amaçlı hesaplamayı ifade edebilecekleri anlamına gelir. Turing tam dillerinin önemli bir özelliği, döngü yapısıBir koşul yerine getirilene kadar bir işlemi tekrar tekrar gerçekleştiren. Örneğin, bir milyon satırlık kod gerektirmeden, birden milyona kadar olan sayıları yazdırmak için bir döngü kullanılabilir. Verimlilik adına Ethereum için yazılan programlar derlenmiş (yani dönüştürülmüş) daha kompakt hale getirilmiş baytkodu zincirde saklanmadan önce. Ethereum düğümleri daha sonra bu bayt kodunu bir süre içinde yürütür. Sanal makine, aslında gerçek bir bilgisayarın içinde çalışan simüle edilmiş bir bilgisayardır.

Blockchain üzerinde bir Ethereum sözleşmesi oluşturulduğunda, veritabanının başlangıç ​​durumunu ayarlar. Sonra durur ve çağrılana kadar kibarca bekler. Blockchain'in (veya başka bir sözleşmenin) kullanıcısı bir işlemde ona bir mesaj gönderdiğinde, sözleşme harekete geçer. İçerisindeki koda bağlı olarak mesajın kaynağını belirleyebilir, diğer sözleşmeleri tetikleyebilir, veritabanını değiştirebilir ve/veya arayana bir yanıt gönderebilir. Bu adımların tümü bağımsız olarak gerçekleştirilir ağdaki her düğümde, aynı sonuçlarla.

Örnek vermek gerekirse basit bir Ethereum alt para birimi sözleşmesi belirli bir varlık için kullanıcı bakiyelerinin bir veritabanını tutar. Alice'ten Bob'a para transferi yapılmasına yönelik bir mesaj alırsa, (a) mesajın Alice tarafından imzalanıp imzalanmadığını kontrol edecek, (b) Alice'in yeterli paraya sahip olup olmadığını kontrol edecek, (c) parayı Alice'in hesabından Bob'un veri tabanındaki hesabına aktaracak ve (d) operasyonun başarılı olduğunu belirten yanıt. Elbette bunun için Ethereum'a ihtiyacımız yok çünkü Bitcoin tarzı basit bir blockchain yerel varlık desteği aynı şeyi yapabilir. Ethereum, kitle fonlaması, merkezi olmayan borsalar ve hiyerarşik yönetim yapıları gibi karmaşık çok aşamalı iş mantığı konusunda gerçekten kendine geliyor. Ya da en azından, söz gidiyor.

Aşağı Breaking

Artık Ethereum akıllı sözleşmelerinin nasıl çalıştığını bildiğimize göre bunları beş bileşene ayırabiliriz:

  1. İş mantığını bilgisayar programları olarak ifade etmek.
  2. Bu mantığı tetikleyen olayları programlara mesaj olarak temsil etmek.
  3. Mesajları kimin gönderdiğini kanıtlamak için dijital imzaların kullanılması.
  4. Programları, mesajları ve imzaları bir blok zincirine koymak.
  5. Her düğümdeki her mesaj için her programı yürütmek.

Başlangıçta söylediklerimi tekrarlamak gerekirse, 1'den 4'e kadar olan bölümlerin çok iyi fikirler olduğuna inanıyorum. İlk ikisiyle başlayalım (bu arada, yeni değil). Yasal sözleşmelerden farklı olarak yorum farklılıkları, bilgisayar programları açıktır. İyi tanımlanmış bir programlama dilindeki herhangi bir program için aynı girdi her zaman aynı çıktıya yol açar. Dolayısıyla, eğer bir iş mantığı bir bilgisayar programı olarak ifade edilirse ve olaylar bu programa gönderilen mesajlar olarak temsil edilirse, o zaman iş sonucu kesinleşmiş olur. Aslında hesaplamanın bu deterministik özelliği, rasgelelik bilgisayar bilimlerinde zorlu bir sorundur ve Google'daki meraklılar bile bunu yapabilir yanlış anlamak.

Peki ya dijital imzalar ve blok zincirler? Bunlar, hangi mesajların, hangi sırayla ve kim tarafından gönderildiğini belirlemek için merkezi bir otoriteye duyulan ihtiyacı ortadan kaldırır. Bunun yerine her katılımcı bir çift oluşturur. özel ve genel anahtarlarve genel anahtarını dağıtır bir Zamanlar diğer katılımcılara. Bunu takiben onlar işaret her mesajı ağ üzerinden dağıtmadan önce kendi özel anahtarıyla. Diğer katılımcılar daha sonra yalnızca gönderenin genel anahtarını kullanarak mesajın kaynağını doğrulayabilirler. Akıllıca kriptografik bir şey. Son olarak, programı ve imzalı mesajları bir blok zincirine yerleştirerek, her katılımcının kimin neyi, ne zaman yaptığına dair aynı görüşe sahip olmasını sağlayabiliriz. Deterministik hesaplamayla birleştirildiğinde bu şu anlama gelir: katılımcılar işin nihai sonucu konusunda anlaşamazlar.

Peki ya her düğümün her mesaj için her programı yürütmesiyle ilgili son fikir? İşte tartışmalı kısma geliyoruz. Çünkü bu küresel uygulamaya sahip olmak güzel olsa da gerekli de değil. Hesaplama deterministik olduğundan, bir programın tek bir düğüm tarafından mı, her düğüm tarafından mı yoksa bazı harici işlemler tarafından mı yürütüldüğü fark etmez. Ayrıca bunun gerçek zamanlı olarak mı, talep üzerine mi yoksa 10 yıl sonra mı gerçekleştiği önemli değil. Hesaplamanın sonucu her zaman aynı olacaktır. Ve herhangi bir nedenle durum böyle değilse, bu yalnızca bir nedenden dolayı olabilir. blockchain yazılımında veya ağda sorun.

Hesaplamadaki sorun

Eğer hesaplamanın nerede yapıldığı önemli değilse neden değil her yerde mi yapılıyor? Peki, öyle görünüyor ki bilgisayar programları tahmin edilemez. Ne kadar masum görünseler de kaçmaları uzun zaman alabilir. Ve bazen sonsuza kadar koşmaya devam ederler. Aşağıdaki klasik örneği düşünün (bir LCG):

  1. set x seçtiğiniz tek haneli bir sayıya
  2. set y için 123*x+567
  3. set x son iki rakamına kadar yÖrneğin, y modulo 100
  4. If x fazla 2 sonra 2. adıma geri dönün
  5. Aksi halde durdurun ve değerini çıkarın. x

Yeterince basit, değil mi? İşte size bir soru: Bu program bitecek mi? Yoksa bir yere mi sıkışacak sonsuz döngü? Pek emin değilim? Peki, seni sefaletinden kurtarayım: x'in başlangıç ​​değerine bağlıdır.

If x is 0, 1, 2, 5, 6, 7 or 8, program oldukça hızlı bir şekilde durur. Ama eğer x is 3, 4 or 9, süresiz olarak devam eder. Bana inanmıyor musun? Excel'i açın ve kendiniz deneyin (“MOD” işlevine ihtiyacınız olacak).

Eğer bunu sadece koda bakarak tahmin edemiyorsanız, kendinizi çok da kötü hissetmeyin. Çünkü bu sadece insanlar için zor olmakla kalmıyor, bilgisayarlar için imkansızdır. Belirli bir programın yürütmeyi bitirip bitirmeyeceğini belirleme problemine denir. durma problemi. 1936'da, Alan Turing, “Turing tamamlandı” ve İmitasyon Oyunu şöhret, genel durum için çözülemeyeceğini kanıtladı. Önemsiz istisnalar dışında, bir programın çalışmasının bitip bitmeyeceğini öğrenmenin tek yolu onu gerektiği kadar çalıştırmaktırve bu sonsuza kadar sürebilir.

Onsuz yaşamayı tercih edenlerimiz için mavi ölüm ekranları ve dönen plaj topları, hepsi oldukça sakıncalı. Ancak bununla yaşıyoruz ve dikkat çekici bir şekilde çoğu yazılım çoğu zaman sorunsuz çalışıyor. Değilse, Windows gibi modern işletim sistemleri programları manuel olarak sonlandırmamıza izin vererek bizi kaçak kodlara karşı korur. Ancak aynı şey Ethereum gibi bir blockchain üzerinde yapılamaz. Bireysel düğümlerin hesaplamaları kendi istekleriyle sonlandırmasına izin verseydik, farklı düğümlerin bu hesaplamaların sonuçları hakkında farklı görüşleri olurdu. Başka bir deyişle, ağ konsensüsü bozulur. Peki blockchain ne yapmalı?

Ethereum'un cevabı işlem ücretlerine dayanıyor. gaz. Her işlemin göndereni öder tetiklediği hesaplamalar için ve bu ödeme, bunu bir blok halinde onaylayan madenci tarafından tahsil edilir. Daha kesin olmak gerekirse, her Ethereum işlemi, gönderenin "etherinin" ne kadarının bu işlemi gerçekleştirmek için harcanabileceğini önceden belirtir. Ücret, sözleşme Ethereum Sanal Makinesinde adım adım yürütüldükçe kademeli olarak harcanır. Bir işlemin yürütülmesi tamamlanmadan önce ücretleri biterse, tüm veritabanı değişiklikleri geri alınır ve ücret iade edilmez. İşlem başarıyla tamamlanırsa kalan ücret gönderene iade edilir. Bu şekilde, işlemler ağa ancak ödemeye razı oldukları ölçüde yük getirebilir. Kuşkusuz temiz bir ekonomik çözüm, ancak çalışabilmesi için yerel bir blockchain para birimi gerektirir.

Akıllı sözleşmeler ve eşzamanlılık

Gaz kontrolden çıkan hesaplamaları önleyebiliyorsa akıllı sözleşmelere yeşil ışık yanacak mı? O kadar hızlı değil çünkü akıllı sözleşmelerle ilgili konuşmamız gereken başka bir sorun daha var:

Akıllı sözleşmeler yüksek işlem hacmi için yetersiz çalışıyor.

eşzamanlılık bilgisayar mimarisinin en temel konularından biridir. Bir sistem, birden fazla işlemin aynı anda ve herhangi bir sırada gerçekleşmesine izin veriyorsa iyi bir eşzamanlılığa sahiptir. Eşzamanlı sistemler, aşağıdaki gibi teknolojilerden en iyi şekilde yararlanarak gecikmeleri azaltır ve genel olarak çok daha yüksek verim sağlar: süreç planlama, paralel işleme ve veri bölümleme. Google bu şekilde arama yapıyor 30 trilyon web sayfaları neredeyse 100,000 kez her saniye.

Herhangi bir bilgisayar sisteminde, bir dizi işlem yalnızca birbirlerine bağlı olmadıkları veya birbirlerine müdahale etmedikleri sürece aynı anda gerçekleştirilebilir. Aksi takdirde, farklı işleme emirleri tamamen farklı sonuçlara yol açabilir. Şimdi akıllı sözleşmenin ilişkili bir veritabanına sahip olduğunu ve döngüler de dahil olmak üzere genel amaçlı hesaplamalar gerçekleştirdiğini hatırlayın. Bu, belirli bir mesaja yanıt olarak akıllı sözleşmenin veritabanındaki her bir bilgiyi okuyabileceği veya yazabileceği anlamına gelir. Örneğin, bir alt para birimini yönetiyorsa, o para birimini elinde bulunduran herkese bir miktar faiz ödemeye karar verebilir. Elbette bu her zaman böyle olmayacaktır. Ancak sorun şu: Belirli bir mesaj için sözleşmenin programını çalıştırmadan önce, bir blockchain düğümü tahmin edemiyorum sözleşme veritabanının hangi alt kümesini kullanacağını. Ayrıca bu alt kümenin farklı koşullar altında farklı olup olmayacağını da söyleyemez. Ve eğer bir sözleşme diğerini tetikleyebilirse, bu sorun aşağıdakilere kadar uzanır: her sözleşmenin her veri tabanının tüm içeriği. Bu nedenle her işleme, sanki birbirini etkileyebilecekmiş gibi davranılmalıdır. Veritabanı açısından her işlem genel bir kilit gerektirir.

Şimdi bir blockchain düğümünün yaşadığı dünyayı düşünün. Merkezi olarak yönetilen bir sıra olmadığından işlemler farklı eşlerden belirli bir sıraya göre gelir. Ek olarak, ortalama 12 saniye (Ethereum) ile 10 dakika (Bitcoin) arasındaki aralıklarla, bir dizi işlemi belirli bir sırayla onaylayan yeni bir blok gelir. Bir düğüm muhtemelen bir bloğun işlemlerinin çoğunu zaten görmüş olacaktır, ancak bazıları yeni olabilir. Her iki durumda da bloktaki işlemlerin sırasının, tek tek geldikleri sırayı yansıtması pek mümkün değildir. İşlemlerin sırası sonucu etkileyebileceğinden bu şu anlama gelir: Blockchain'deki siparişleri onaylanana kadar işlemler gerçekleştirilemez.

Onaylanmamış bir Bitcoin işleminin bir nedenden dolayı geri alınmasının gerekebileceği doğru. çifte harcama. Ancak onaylanmamış bir Ethereum işlemi hiçbir şekilde öngörülebilir bir sonucu yok. Aslında, Ethereum'un mevcut uygulamaları onaylanmamış işlemleri bile işlememektedir. Ancak eğer bir Ethereum düğümü oldu İşlemleri hemen işleme koymak için, bir blok geldiğinde yine de bunları geri sarması ve doğru sırada yeniden oynatması gerekir. Bu yeniden işleme büyük bir çaba israfıdır ve harici süreçlerin işlemesini engeller. eş zamanlı olarak devam ederken Ethereum veritabanını okuyor. (Adil olmak gerekirse, Bitcoin'in referans uygulaması ayrıca bir blok geldiğinde işlemleri geri sarar ve tekrar oynatır, ancak bunun nedeni yalnızca optimizasyon eksikliğidir.)

Peki Bitcoin'in işlem modelinin sıra dışı yürütmeyi mümkün kılan özelliği nedir? Bitcoin'de her işlem açıkça belirtiyor diğer işlemlerle ilişkisi. Her bir girdinin, "harcadığı" önceki bir işlemin çıktısına bağlandığı bir dizi girdi ve çıktıya sahiptir. Endişelenecek başka bağımlılık yok. (a) iki bitcoin işlemi aynı çıktıyı harcamaya çalışmadığı ve (b) birinin çıktısı diğerinin girdisine yol açmadığı sürece, bir bitcoin düğümü işlemlerin bağımsız olduğundan emin olabilir ve bunları herhangi bir sırayla işleyebilir. Blockchain'deki son konumları hiç önemli değil.

Resmi bilgisayar bilimi terminolojisini kullanmak için Ethereum işlemlerinin kesinlikle tamamen sipariş edildiBu, her işlem çifti arasındaki göreceli sıranın tanımlanması gerektiği anlamına gelir. Buna karşılık, bitcoin işlemleri bir Yönlendirilmiş asiklik grafiği hangisi sadece kısmen sipariş edilmişBu, işlem sıralamasında bazı belirsizliğe izin verildiği anlamına gelir. Eşzamanlılık söz konusu olduğunda, bu dünyadaki tüm farkı yaratır.

Pratik açıdan bakacak olursak, şirketlerde özel blockchain'ler hakkında çok fazla konuşma yapılıyor. Ancak özel bir blockchain sadece bazı ek özelliklere sahip dağıtılmış veritabanı. Bugün eşzamanlılığı desteklemeyen kurumsal sınıf bir veritabanı satmayı denediyseniz, odanın dışında gülünürdün. Bireysel bir düğümün kendi işlemlerinin sonucunu görmeden önce 12 saniye beklemesi gerektiği iddiası da aynı derecede gülünç olacaktır. Vitalik'in kendisi olarak geçenlerde tweetledi:

Coin Sciences olarak bizim için bu sadece akademik bir konu değil çünkü akıllı sözleşmelerin sisteme dahil edilip edilmeyeceğine ve nasıl dahil edileceğine karar vermemiz gerekiyor. Çoklu Zincir. Yüzlerce özellik isteğine rağmen yeterince garip ve sorular Şu ana kadar sadece ikisinin akıllı sözleşmelerle ilgili olduğunu ve o zaman bile Ethereum'un sağladığından daha zayıf bir formda olduğunu aldık. Dolayısıyla açık fikirli olsak da akıllı sözleşmelerin kullanıcılarımız için gerçek sorunları çözmediği ortaya çıkabilir.

Ethereum lehine

Tartışmanın yalnızca bir tarafıyla ilgileniyorsanız, okumayı burada bırakabilirsiniz. Ancak şunu merak ediyor olabilirsiniz: Ethereum'un yaratıcıları aptal mı? Her düğüm hangi programları çalıştırmayı önemsediğini kolayca seçebiliyorsa, neden halka açık bir veritabanında küresel yürütmeye ihtiyaç duysunlar ki? Ethereum yolunun iyi nedenleri var mı?

Aslında halka açık blockchainlerden bahsediyorsak, öyle olduğuna inanıyorum. Ancak bu nedenleri anlamak için Ethereum ağının dinamiklerini düşünmemiz gerekiyor.

İşlem spam'ını önleme

Bir blockchain, her bir düğümün diğer düğümlerin rastgele bir alt kümesine bağlandığı eşler arası bir ağ tarafından korunur. Bir düğümde yeni bir işlem oluşturulduğunda, "aktarma" adı verilen bir süreçle hızla ve gelişigüzel bir şekilde diğerlerine yayılır. Açık bir halka açık ağda herkes işlem oluşturabilir, bu nedenle kendimizi bunlara karşı korumanın bir yoluna ihtiyacımız var. işlem spam'ı bu da sistemi bunaltabilir. Ağ merkezi olmayan bir yapıya sahip olduğundan, bu yalnızca bireysel düğümlerin yeni işlemleri geldikçe değerlendirip bunları aktarıp aktarmayacağına karar vermesiyle başarılabilir. Bu mekanizma bir spam göndericinin ezici Bireysel bir düğüm, ağı bir bütün olarak korur.

Kamuya açık bir ağda, bir düğüm yeni bir işlemi aktarıp aktarmayacağına karar verdiğinde, temel kriterlerden biri, ücreti ile ağ maliyeti arasındaki orandır. Bitcoin durumunda bu maliyet esas olarak işlemin bayt cinsinden ham boyutuna bağlıdır. Ethereum'da bir daha karmaşık formül işlemin tüketeceği hesaplama çabasına dayalı olarak kullanılır. Her iki durumda da ücretler, işlem spam'inin önlenmesine yönelik piyasaya dayalı bir mekanizma görevi görür.

Ancak bir düğüm, gönderenin teklif ettiği ücreti karşılamaya yetecek paraya sahip olup olmadığını nasıl bilebilir? Ethereum durumunda, her kullanıcının “ether” bakiyesi önceki işlemlerin sonucundan etkilenir, çünkü sözleşmeler eteri hem harcayabilir hem de ödeyebilir. Dolayısıyla, önceki mesajların tümü için tüm programları fiilen çalıştırmadan, bir Ethereum düğümünün kullanıcının güncel bakiyesini bilmesinin hiçbir yolu yoktur. Bu nedenle bir işlemin diğer düğümlere iletilmesi gerekip gerekmediğini değerlendiremez. Ve bu olmadan açık bir ağ önemsiz bir şekilde yok edilebilir.

Kompakt veri kanıtları

Bir blockchainde bloklar çoğunlukla onayladıkları işlemlerle doldurulur. Ancak her bloğun ayrıca zaman damgası ve önceki bloğa bağlantı gibi önemli bilgileri içeren kompakt bir “başlığı” vardır. Kamuya açık blok zincirleri için iş karma işleminin kanıtıkarma algoritmasının girişi yalnızca bu blok başlığıdır. Bu, bir zincirin otoritesinin, içeriğinin çoğunu indirmeden "hafif bir müşteri" tarafından değerlendirilebileceği anlamına gelir. Örneğin, Kasım 2015 itibarıyla, Bitcoin başlıklarının tamamı 30 MB boyutundadır. 45 GB tüm zincir için. Bu 1500:1 oranıdır ve sınırlı bant genişliği ve depolama alanına sahip mobil cihazlar için çok önemli bir fark yaratır.

Her Ethereum bloğunun başlığı, o bloktaki işlemleri işledikten sonra zincirin durumunun parmak izini alan bir "durum kökü" içerir. Diğer şeylerin yanı sıra, bu durum her sözleşmenin veri tabanının içeriğini kapsar ve parmak izi, bir tek yönlü karma fonksiyonları ağacı. Herhangi bir sözleşmenin veritabanındaki en ufak bir değişiklik, tamamen farklı bir durum köküne yol açacaktır, dolayısıyla kök, veritabanının içeriğini "bağlar". (Bitcoin için eşdeğer bir “UTXO taahhütleri” kavramı tartışılan ancak henüz uygulanmadı.)

Durum köklerini hesaplamanın ağaç benzeri yönteminin önemli bir özelliği vardır: Bilinen bir durum kökü göz önüne alındığında, bir sözleşme veritabanındaki belirli bir girişin değeri verimli bir şekilde kanıtlanabilir. Bu kanıtın boyutu derinliği ile orantılıdır. ikili ağaç yaprakları bireysel veritabanı girişleridir, yani günlük2 toplam veritabanı boyutu. Bu, bireysel bir giriş için yalnızca kanıtın olduğu anlamına gelir çiftler veritabanı boyutu olduğunda uzunluk karesi – bilgisayar bilimcilerinin uğruna can attığı türden bir ölçeklenebilirlik. Şimdi, her bloğun durum kökünün, hafif istemcinin doğrulayabileceği başlıkta bulunduğunu hatırlayın. Sonuç olarak, hafif istemciler ağdaki herhangi bir tam düğümü bireysel veritabanı girişleri için güvenli ve verimli bir şekilde sorgulayabilir ve tam düğümler yalan söyleyemez.

Ancak blockchain başlıklarımız bir durum kökü içeriyorsa ve durum kökü veritabanının içeriğine bağlıysa, o zaman Her düğüm blok zincirinin veritabanını güncel tutmalıdır. Bu da şu ana kadar aldığı her mesaj için her sözleşmeyi yürütmek anlamına geliyor. Bu olmadan, bir madencilik düğümü bir blok başlığına yerleştirilecek durum kökünü bilemez ve diğer düğümler aldıkları blokları doğrulayamaz. Sonuç olarak şu: Hafif istemcilerin ağdan kompakt veri kanıtlarını güvenli bir şekilde almasını istiyorsak, tam düğümlerin zincirdeki veriler tarafından açıklanan tüm hesaplamaları gerçekleştirmesi gerekir.

Özel blockchainler için karar

Bu iki argümanı özel blockchainler bağlamında tekrar gözden geçirelim. Özel zincirlerle ilgili dikkat edilmesi gereken ilk şey, bunların yerel bir token veya kripto para birimine sahip olmama eğiliminde olmalarıdır. Bunun birkaç nedeni var:

  • Özel zincirlerle ilgilenen kuruluşlar yeni bir varlık sınıfıyla uğraşmak istemiyor.
  • Özel zincirlere yönelik fikir birliği modeli, iş kanıtı yerine bir dizi kapalı madenci arasındaki anlaşmaya dayanıyor. Yani madenciliğin maliyeti minimum düzeydedir ve madencilerin çok fazla ödüle ihtiyacı yoktur.
  • Özel bir zincirdeki tüm katılımcılar incelendiğinden spam ve kötüye kullanım konusunda daha az endişe vardır.

Küresel yürütme için ilk argümanın, her Ethereum düğümünün, sunduğu ücrete bağlı olarak gelen bir işlemi aktarıp aktarmayacağına karar vermesini sağlamak olduğunu hatırlayın. Yerel bir tokenın olmayışı bu nedeni önemsiz kılıyor çünkü eğer bir blockchain'in yerel tokenı yoksa, işlemlerde ücret ödenemez. Herhangi bir nedenle spam sorun olmaya devam ederse, bunun başka bir yolla, örneğin gönderenin izinlerinin iptal edilmesiyle kontrol edilmesi gerekir.

Şimdi kompakt veri kanıtlarını mümkün kılmak için ikinci argümanı ele alalım. Halka açık bir blockchain'in mobil veya diğer hafif cüzdanlarda son kullanıcılara sahip olması muhtemeldir. Ancak bu, birincil işlevi olan özel zincirlerde daha az olasıdır. veritabanı paylaşımı daha büyük şirketler arasında. Ve eğer blockchain is Bir mobil cihazdan erişilen mobil kullanıcı muhtemelen bu şirketlerden birinin müşterisi olacaktır ve o şirketin kendisine söylediklerine güvenebilecektir.

Bunun yerine, özel blok zincirlerde, sorunlar küresel infazın etkileri özellikle şiddetlidir. Özel bir blok zincirinin yerel tokenı yoksa, kaçak kodu önleyecek gaz benzeri bir piyasa mekanizmamız yoktur. Bunun yerine, işlem başına hesaplama adımları açısından bir tür sabit limit getirmemiz gerekir. Ancak işlemlerin kasıtlı olarak çok fazla işlem gerçekleştirmesine izin vermek için bu sınırın yüksek olması gerekir. Sonuç olarak ağ, istenmeyen döngüleri kapatmadan önce yine de çok fazla enerji israfına neden olabilir.

Eşzamanlılığa gelince, özel blok zincirlerin eşzamanlılığı gerekli kılan işlem hacimlerini görme olasılığı çok daha yüksektir. Kamuya açık blockchainlerin kapasitesi, anlamlı bir şekilde merkezsizleşebilmeleri için, sınırlı bütçelere sahip meraklılar tarafından yönetilen binlerce düğüme ihtiyaç duymaları gerçeğiyle sınırlıdır. Buna karşılık, özel zincirlerin yalnızca birkaç düzine işletmeyi birbirine bağlama olasılığı çok daha yüksektir; bu durumda kapasite ve hız hayati öneme sahiptir.

Çift katlı blockchainler

Peki, küresel uygulama dışında akıllı sözleşmelerle ilgili her şey özel zincirlerde anlamlıysa bu bizi nereye bırakır? Ne tür bir blockchain bize ihtiyacımız olan performansı ve esnekliği sağlayacak? Dürüst olmak gerekirse hâlâ bunu düşünüyorum. Ancak bir cevap şu olabilir: iki katmanlı bir blockchain.

Alt katman, anında ve eş zamanlı olarak işlenen ve blok onaylarını beklemeye gerek olmayan Bitcoin tarzı işlemler üzerine inşa edilecek. Bu işlemler, kasa dahil olmak üzere varlıkların basit hareketlerini gerçekleştirebilir. atom değişimleri, akıllı sözleşmelere başvurmadan. Ancak bu alt katman aynı zamanda bir araç olarak da kullanılacaktır. kör depolama katmanı işlem meta verileri olarak gömülü, daha karmaşık iş süreçlerini temsil eden programlar ve mesajlar için.

Üst kademeye gelince, her ağ katılımcısı seçecektir. hangi programları çalıştırmak istiyorlar. Bazıları, yalnızca basit varlık hareketleriyle ilgilendikleri için hiçbirini çalıştırmamayı tercih edebilir. Diğerleri, kendi iç süreçleriyle ilgili küçük bir program grubunu çalıştırabilir (bu grubun dışarıdaki programlarla mesaj alışverişinde bulunmadığının bilincinde olarak). Hatta birkaçı, tıpkı Ethereum gibi, her program için her mesajı işleyerek küresel yürütmeyi tercih edebilir. Ama önemli olan şu olurdu her düğüm yalnızca ihtiyaç duyduğu kodu çalıştırır. Bilgisayar bilimlerinde bu tekniğe denir tembel değerlendirmeÇünkü bu, çok önemli hiçbir şeyi atlamadan, mümkün olduğu kadar az iş yapmayı gerektirir. Tembel değerlendirmeyle, eğer bir blockchain hesaplaması ters giderse, yalnızca o programı gerçekten yürüten düğümler bunu fark edecektir. Ağın kendisi hiçbir şey hissetmeyecek.

MultiChain'e gelince, eğer Turing'in tam hesaplamasını desteklersek, küresel uygulamayı uygulayacağımızdan şüpheliyim. Belki bu tür tembel, iki katmanlı bir yaklaşımı tercih edeceğiz veya belki daha iyi bir şey düşüneceğiz.

Halka açık blockchainlerde akıllı sözleşmeler

Daha önce de tartıştığım gibi, halka açık Ethereum gibi eksiksiz blok zincirleri Turing, orada vardır küresel uygulama için iyi nedenler. Ama işte başka bir soru: nedir? girişim bu zincirler için kullanım durumu? İşletmelerin halka açık blok zincirlerine, onları gerçek iş süreçlerinde kullanmak için yeterli güvene sahip oldukları bir gelecek zaman hayal edelim. Bir grup şirket, halka açık bir blok zincirine bazı hesaplama mantığını yerleştirmek istiyorsa, iki seçenekleri vardır: (1) küresel yürütme ile Ethereum tarzı bir blok zinciri kullanmak veya (2) herhangi basit bir depolama katmanı olarak blockchain ve kodun kendisinin çalıştırılması. Ve bu seçenekler göz önüne alındığında, neden (1)’i seçsinler?

Akılcı seçim, (a) depolama baytı başına en ucuz fiyata ve/veya (b) toplam madencilik gücüne dayalı en yüksek güvenlik seviyesine sahip halka açık blok zinciri olacaktır. Hesaplama belirleyici olduğundan, şirketlerin yalnızca ağa ödeme yapması yeterlidir. mağaza sözleşmeleri ve mesajları, aslında süreç onlara. Ek olarak, blockchain'i yalnızca depolama amaçlı kullanarak şunları kullanabilirler: istedikleri programlama dili. Bu Ethereum bayt kodu olabilir, JavaScript/ECMAScript okunabilirlik için veya hatta makine kodu yüksek performans için. Aslında Ethereum sözleşmeleri zaten saklanabilir Bitcoin blok zincirindeki meta verileri kullanma. Bu tam olarak önerdiğim iki aşamalı yaklaşımdır.

Bu tartışma şu kavramla ilgilidir: soyutlama katmanlarıtarafından ünlü hale getirildi OSI ağ modeli. Optimum güvenilirlik ve esneklik için, bir sistemin her katmanının diğer katmanlardan mümkün olduğu kadar soyutlanmış (yani bağımsız) olması gerekir. Örneğin, sabit disk denetleyicilerimizin JPEG görüntüleri oluşturmaya yönelik kod içermesini istemeyiz. Peki neden bir blockchain'in sakladığı programları yürütmesini isteyelim? Kullanım durumlarının çoğunda bundan hiçbir fayda elde edemiyoruz ve bunun önemli bir maliyeti var.

Sonuç bölümü

Özel blockchainlerde küresel uygulama mantıklı değilse neden herkes bu konu üzerinde çalışıyor? Bunun, en azından kısmen, blockchain'lerin neler yapabileceği konusundaki yanlış anlaşılmayla açıklanabileceğini düşünüyorum. gerçek dünyada. Görüyorsunuz, bitcoin gibi halka açık blok zincirleri bunu yapabilir gerçek bir varlığı doğrudan taşıyın (yani kendi yerel para birimleri), çünkü blockchain tanımlar o para biriminin mülkiyeti. Bu, varlıkların genellikle farklı olan iki yönünü birleştirir: (a) varlığın kime ait olduğunu kaydeden bir defter ve (b) varlığın gerçek fiziksel konumu. Bu, kripto para birimlerini nihai hale getirir taşıyıcı enstrümanKime sorduğunuza bağlı olarak cesur yeni bir dünya ya da kara para aklayıcılar cenneti yaratmak.

Ancak bir blockchainden bağımsız olarak var olan diğer varlıklar için bir zincirin yapabileceği tek şey bir varlık tutmaktır. kayıt onlar kimden meli ait olmak. Biz görene kadar bu böyle devam edecek birincil ihraç Varlıkların bir blockchain'e aktarılması ve söz konusu varlığın yasal sahipliğinin, zincirin veritabanına göre tanımlanması. Kurumsal finans sektörü için, özellikle gerekli düzenleyici değişiklikler nedeniyle bu günün hâlâ çok uzakta olduğuna inanıyorum. O zamana kadar, her zaman fazladan bir adım olacaksözleşmeye dayalı ve usule ilişkinBlockchain'in söyledikleri ile gerçek dünyada olanlar arasında. Bu adım, mümkün olan en son anda tembelce yürütülen bazı Turing kodlarını da içerebilir.

Bu sorun, hakkında çok şey duyduğumuz “akıllı bağlar” örneğinde vurgulanıyor. Akıllı bir tahvil doğrudan bir blok zincirine verilir ve blok zinciri, kupon ödemelerinin tahvil sahiplerine uygun zamanlarda yapılmasını sağlar. Her şey yolunda ve güzel. Peki tahvil ihraççısının blockchain hesabında vadesi gelen bir ödemeyi karşılamak için yeterli fon yoksa ne olur? Blockchain kesinlikle bir şeylerin ters gittiğini belirten bir işaret koyabilir. ama başka bir şey yapamaz. Saç kesimi, borçların yeniden yapılandırılması, müsadere veya doğrudan iflas yoluyla tüm bu karışıklığı çözecek bir avukat ve muhasebeci ordusuna hâlâ ihtiyacımız var. Kısacası:

Akıllı sözleşmeler vaatlerini yerine getiremiyorsa neden bedelini ödüyoruz?

Okuduğunuz için teşekkürler.

Kaynak: https://www.multichain.com/blog/2015/11/smart-contracts-good-bad-lazy/

spot_img

En Son İstihbarat

spot_img