Zephyrnet Logosu

Akıllı sözleşmeler ve DAO patlaması

Tarih:

Kaçınılmaz hatalar ile değişmez kodun trajik birleşimi

Geçtiğimiz hafta Ethereum ekosisteminde yıkıcı bir olaya tanık olduk. DAOİki aydan kısa bir süre önce yapılmış akıllı bir sözleşme olan , hızla bilinmeyen bir tarafa fon sızdırmaya başladı. Bakıyor mevcut set Kumarhaneler ve kendi beyan ettiği saadet zinciri şemalarıyla dolu Ethereum sözleşmeleri, bu çok da önemli bir şey gibi görünmeyebilir. Ta ki, Ethereum kripto para birimi olan 12 milyon birimin üzerinde eterin yaklaşık 20,000 kişi tarafından DAO'ya yatırıldığını öğrenene kadar. Bu, 15 Haziran'da değeri 250 milyon doların üzerinde olan, mevcut tüm Ethereum'un yaklaşık %17'ine tekabül ediyor.

İki gün sonra DAO'nun varlıkları 100 milyon doların altına düştü. Bu hızlı düşüşe iki şey katkıda bulundu. İlk olarak, fonlarının üçte biri (ether cinsinden) zaten alınmış durumdaydı. İkincisi, ortaya çıkan panik, Ethereum'un piyasa fiyatının 21 doların üzerindeki zirvesinden daha ciddi bir 10.67 dolara düşmesine neden oldu. (Yayınlandığı sırada fiyat yaklaşık 14 dolara ulaşmıştı.) Bu ikinci etki, birincinin doğal bir sonucuydu, çünkü Ethereum'un son zamanlardaki değer artışının büyük bir kısmı, onu DAO'ya yatırım yapmak için satın alan insanlar tarafından yönlendirildi.

DAO, Kickstarter veya Indiegogo gibi, ancak aracı ve düzenleme olmaksızın yeni bir tür merkezi olmayan kitle kaynak aracı olarak hareket etme sözü vermişti. Katılımcıların kripto paralarını bir havuzda toplamasına, fon arayan projelere toplu olarak oy vermesine, ardından yatırım yapıp gelecekteki ödülleri toplamasına olanak sağlamak için tasarlandı. Felaket gelmeden önce, 100'den fazla proje Zaten teklif edilmişti ve bunların çoğu Ethereum'un kendisi ile ilgiliydi. Buna ek olarak DAO, kendisini düşük riskli bir yatırım olarak konumlandırarak katılımcıların yatırım yapmadıkları fonları istedikleri zaman çekmelerine olanak tanıdı.

İronik bir şekilde, DAO'yu boşaltan kişi veya grup bunu, geri çekilme mekanizmasındaki ince hatalardan yararlanarak yaptı. Ethereum'daki tüm akıllı sözleşmeler gibi DAO da blok zincirine "değişmez" (yani kalıcı ve geri döndürülemez şekilde) yerleştirilen ve gelen işlemlere yanıt olarak her düğüm tarafından yürütülen bir bilgisayar kodu parçasıdır. Kendine saygılı herhangi bir akıllı sözleşme gibi DAO da kaynak kodunu çevrimiçi olarak kolayca erişilebilir hale getirerek tam şeffaflık sağlar. Bu, herkesin bağımsız olarak işlevselliğini doğrulayabileceği ve aynı zamanda en önemlisi güvenlik açıklarını arayabileceği anlamına gelir. Ancak yine de blockchainlerin değişmez doğası bu tür sorunların çözülmesini engelliyor.

Mayısın sonu, birkaç kritik konu öne çıkanlar öne çıktı Dağıtılmış Hacking DAO için proje tekliflerine ilişkin bir moratoryum çağrısının yanı sıra blog. Bu, istismarların toplumun iyiliği için rapor edildiği 'beyaz şapka' yaklaşımı diyebileceğimiz bir yaklaşımdır. Bununla birlikte, sorunlar doğrudan hırsızlık riskinden ziyade çarpık ekonomik teşviklerle ilgili olduğundan kimse pek endişeli görünmüyordu. Ancak aynı zamanda, diğerlerinin DAO'nun kodunu daha büyük bir kişisel çıkarla incelediği, yani tonlarca para kazanmanın bir yolunu aradığı görülüyor. Ve 17 Haziran'da birisi başardı.

DAO'yu Boşaltmak

Genel anlamda saldırı, DAO'nun kodundaki güvenlik açıkları ile bunları istismar etmek için tasarlanmış diğer kodlar arasındaki etkileşimden kaynaklandı. Görüyorsunuz, tek başına bakıldığında DAO'da bariz bir hata bulunmuyordu ve gerçekten de ancak kapsamlı bir güvenlik denetiminden sonra yayımlandı. Ancak sonradan edinilen bilgiler ve çok daha fazla bakış açısı sayesinde, o zamandan bu yana önemli sayıda hata bulunmuştur.

Başkaları zaten mükemmel ve ayrıntılı otopsiler yayınlamış olduğundan, burada istismarın mekanizmasının tam bir teknik açıklamasını vermeyeceğim (bkz. okuyun, okuyun ve okuyun). Ancak mevcut olan belirli bir güvenlik açığını açıklayacağım, çünkü bu güvenlik açığı keşfedilmiştir. diğer birçok akıllı sözleşme ve öğretici bir örnek görevi görüyor.

Diyelim ki bir akıllı sözleşme, belirli sayıda kullanıcı adına fon tutuyor ve bu kullanıcıların talep üzerine fonlarını çekmelerine olanak tanıyor. Sürecin mantığı şöyle görünebilir:

  1. Kullanıcının para çekme talebinde bulunmasını bekleyin.
  2. Bu kullanıcının bakiyesinin yeterli olup olmadığını kontrol edin.
  3. Öyle ise talep edilen miktarı kullanıcının adresine gönderin.
  4. Ödemenin başarılı olup olmadığını kontrol edin.
  5. Eğer öyleyse, miktarı kullanıcının bakiyesinden düşürün.

Bunların hepsi son derece mantıklı görünüyor ve daha ziyade size biraz nakit veren ve banka bakiyenizden uygun tutarı kesen bir ATM'ye benziyor.

Peki bu basit süreç nasıl ters gidebilir? Eh, eğer bir Ethereum adresi normal bir kullanıcıya değil de bir sözleşmeye aitse, bu sözleşmenin fon alınmasına yanıt olarak bazı kodları çalıştırabileceği ortaya çıktı. Ve bu kod, Ethereum blok zincirindeki diğer kod parçalarını tetikleyebilir. En önemlisi, ilk etapta ödeme yapılmasına neden olan aynı kod parçasını bile tetikleyebilir.

Bu, yukarıdaki 3. adım sırasında alıcı adresin, önceki süreç tamamlanmadan önce 1. adımda yeni bir süreç başlatarak yeni bir para çekme talebi gönderebileceği anlamına gelir. Kullanıcının bakiyesi yalnızca 5. adımda azaltıldığı için önceki bakiye baz alınarak yeni bir çekim işlemi onaylanacak ve aynı tutar tekrar ödenecektir. Bu ikinci ödemeye yanıt olarak, alıcı sözleşme üçüncüyü, ardından dördüncüyü talep edebilir ve fonlar tükenene veya başka bir limite ulaşılana kadar bu böyle devam eder. Bu noktada kullanıcının bakiyesi irade nihayet uygun miktarda azaltılarak 2. adımın engellemesi gereken negatif bölgeye girilir.

Bunun eşdeğeri, ekrana el sallandığında ücretsiz olarak tekrar para çekme işlemini tetikleyen banknotlar dağıtan bir ATM olabilir. Bunu ilk öğrenen müşteri ATM'yi tamamen boşaltabilir.

Bir kod parçasının kendi kendini çağırma yeteneğine denir. yineleme, ve genel bilgisayar programlamada çok kullanışlı bir tekniktir. Ancak DAO vakasında bu yıkıcı istismarın yolu açıldı. Bununla birlikte, tek sorun bu olsaydı saldırının potansiyeli kontrol altına alınırdı çünkü Ethereum, özyinelemenin ne kadar derinde gerçekleşebileceği konusunda bir sınır uygular. Ne yazık ki, DAO'daki birkaç hata daha etkileri artırdı ve sonuçta on milyonlarca dolarlık kayba yol açtı.

Elbette DAO'nun kodunun sadece birkaç satırı farklı yazılmış olsaydı bunların hiçbiri gerçekleşemezdi. Örneğin yukarıdaki 5 adımlı süreçte kullanıcının bakiyesi azalırsa önce para gönderilirse yinelemeli arama tamamen güvenli olacaktır. Ancak ne yazık ki yaratıcılarının niyeti saf olsa bile DAO'nun gerçek kodu derinden kusurluydu. Ve bilgisayarların kendilerine verilen talimatları körü körüne takip etme gibi kötü bir alışkanlığı var; beş yaşındaki bir çocuk sonuçların anlamsız olduğunu görse bile. Ethereum blok zincirine değişmez bir şekilde yerleştirilmiş olan hatalı DAO'ya, bir grup saf yatırımcı tarafından yüz milyonlarca doların üzerinde yönetim hakkı verildi ve ardından olağanüstü bir şekilde alevler içinde kaldı. DAO'nun tam bir darmadağın olduğu ortaya çıktı ve asla düzeltilemez.

Kodla ilgili sorun

Her ne kadar cazip gelse de, DAO'nun programcılarını teknik konular üzerinde sürüklemek için burada değilim. Bakıyor temel kaynak kodu, iyi işlev ve değişken adları ve anlaşılır dahili belgelerle oldukça iyi tasarlanmış gibi görünüyor. Bunların hiçbiri kodunun kalitesini kanıtlamasa da, kodun nasıl göründüğü ile ne kadar iyi çalıştığı arasında yüksek bir korelasyon olma eğilimindedir; bu, zayıf noktalama işaretlerine sahip CV'lerin özensiz çalışanları uyarmasıyla aynı nedenden dolayıdır. Her halükarda DAO'nun yazarlarının yetkin geliştiriciler olduğundan şüphem yok; aslında, kapsamlı bir kod incelemesinden geçmiş olması, temel mantığın sağlam olduğunu gösteriyor.

Peki sorun bu projede çalışan kişilerde ya da ürettikleri işlerde değilse nedir? Gerçek şu ki Büyük miktarda hatasız kod yazmak imkansız olmasa da son derece zordur. Kariyerim boyunca, ortalama geliştiriciden on kat daha hızlı ve on kat daha az kusurla kod yazabilen gerçekten olağanüstü programcılarla çalıştım. Ancak yine de bu dikkat çekici kişiler bile yazılım arızalarına yol açan hatalar yapmaktadır. Donald knuthMuhtemelen tüm zamanların en büyük bilgisayar programcısı, ünlü bir söz verdi: katlanarak artan mali ödül TeX dizgi yazılımında hata bulan herkese. Ve birkaç çekten fazlasını gönderdi.

Açık olmak gerekirse, "birer birer", "başlatılmamış değişken" ve "operatör önceliği" gibi isimler taşıyan saçma sapan hatalardan bahsetmiyorum. Bunlar genellikle bir program ilk kez çalıştırıldığında gözle görülür bir hataya neden olur ve bulundukları yerel kod parçası incelenerek kolayca tespit edilebilir. Ve bir programın normal kullanımında görünmeyebilecek, ancak yine de her deneyimli geliştiricinin aklında olması gereken “doğrulanmamış girişler”, “SQL enjeksiyonu” ve “arabellek taşmaları” gibi güvenlik açıklarından bahsetmiyorum bile.

Daha ziyade “yarış koşulları” ve “çıkmazlar” gibi daha zorlu sorunlardan bahsediyorum. Bunlar paralel süreçler arasındaki çatışmalardan kaynaklanır ve yalnızca aralıklı olarak ortaya çıkma eğilimindedir, bu da onların tespit edilmesini ve yeniden üretilmesini zorlaştırır. Sonuç olarak bunlar ancak sistemin bir bütün olarak ele alınması ve onu oluşturan parçaların birbirleriyle nasıl etkileşime girdiği dikkate alınarak anlaşılabilir. Bu, normal programlamadan çok daha zordur çünkü geliştiricilerin üzerinde çalıştıkları kod parçasının ötesinde düşünmelerini gerektirir. Kodlayıcıların bu sorunlardan birini çözmek için birkaç gününü "hata ayıklamaya" harcaması alışılmadık bir durum değil. Ve bu tam da DAO'nun nasıl savunmasız olabileceğini öngörmek için gerekli olan bütünsel düşünme türüdür.

Tüm bu zorluklara rağmen, giderek kodların yönlendirdiği dünyamızın neden etrafımızda parçalanmadığını merak etmek haklı olarak mümkün olabilir. Neyse ki çoğu yazılımın kendi lehine çalışan üç kritik faktörü var: kademeli olarak benimsenme, düzenli güncellemeler ve zaman.

İşleyiş şekli şöyle: Yeni bir pazarın ihtiyacını karşılamak için yeni bir yazılım ürünü yaratılıyor. İlk başta pazar küçük olduğundan yalnızca birkaç kişi ürüne ihtiyacı olduğunu biliyor. Ürün yeni olduğu için çok daha az sayıda kişi onu bulacaktır. Bu "erken benimseyenler", ilgili risklere rağmen teknolojik uçta yaşamaktan hoşlanan cesur ve dayanıklı bir gruptur. Böylece yeni ürünü denerler, beğendikleri bazı şeyleri görürler, eksik olan birçok şeyi isterler ve en iyisi de karşılaştıkları sorunları bildirirler. Her iyi yazılım girişimcisi bu insanlara sevgi ve yardım yağdırması gerektiğini ve sağladıkları her geri bildirim için onlara teşekkür etmesi gerektiğini bilir. Çünkü ürününüzdeki bir kusuru duymak berbat olsa da çok daha berbattır değil bunu duymak için.

İdeal olarak, bir ay veya daha kısa bir süre içinde ürünün yeni bir sürümü yayınlanır, bildirilen hatalar giderilir ve istenen bazı özellikler eklenir. İlk benimseyenler mutlu ve en son sürüm denenip tekrar ilerledikçe daha fazla geri bildirim geliyor. Pazar büyüdükçe ürünü kullanan kişi sayısı da artıyor. Ürün istikrarlı bir şekilde geliştikçe, bu insanların giderek daha fazlası başkalarına bundan bahsediyor. Daha da iyisi, ürünü ne kadar çok kişi kullanırsa, birisinin bir yerlerde belirsiz bir hatanın ortaya çıkacağı o kesin ve olası olmayan durumu yaratma olasılığı da o kadar artar. Biraz şansla, size haber verecekler ve siz de inanamayarak başınızı kaşıyacak, daha fazla bilgi isteyecek, sonunda sorunu bulup çözecek ve rahat bir nefes alacaksınız.

Birkaç istisna dışında günümüzün yazılım geliştirme süreci bu şekilde çalışmaktadır, çünkü olağanüstü ürünler yaratmanın en etkili yoludur. Elbette iyi bir yazılım ekibi, mümkün olduğu kadar çok hatayı kullanıcılara ulaşmadan önce yakalamak ve yeni sürümlerin daha önce işe yarayan hiçbir şeyi bozmamasını sağlamak için kapsamlı bir dahili test paketi de geliştirecektir. Ancak yine de çoğumuz kullanıcı tabanlarımıza güveniyoruz çünkü ürünlerimizin kullanılabileceği her türlü yolu hayal edip test etme lüksümüz yok. Ve bunun büyük adamlar için geçerli olmadığını düşünüyorsanız daha fazla yanılıyor olamazsınız. Geçtiğimiz yıl Windows, Mac veya Linux sisteminize kaç tane “otomatik güncelleme” indirildi? Chrome veya Firefox kullanıyorsanız, web tarayıcınız artık ayda ortalama bir kez otomatik olarak ve sessizce kendini günceller.

Bu yinelemeli süreç oldukça zaman alır, yani birkaç yıl veya daha fazlasını kastediyorum. Yine de, bir ürün yeterince uzun süre geliştirildiğinde, kullanıcı tabanı yeterince genişlediğinde ve bu kullanıcılar (farkında olmadan) ürünü yeterince farklı durumlarda test ettiğinde, sihirli bir şey olur. Bu büyüye "olgunluk" denir ve her yazılım ürününün bunu başarmak için çabalaması gerekir. Olgunluk, bir ürünün onu kullanan hemen hemen herkes için gerçekten iyi sonuç verdiği ve bu noktaya ulaşmanın hiçbir kısayolunun olmadığı anlamına gelir. Ancak zamanlamayı doğru yaparsanız, hedef pazarınız birleştiğinde, yani çok sayıda müşterinin gerçekten işe yarayıp bedelini ödemeye istekli olduğu dönemde ürününüz olgunlaşacaktır. Ve sonra, dedikleri gibi, gerçekten kâr edeceksiniz.

Değişmez kodda

İşte burada, DAO'nun çok güçlü bir şekilde gösterdiği gibi, akıllı sözleşmelerle ilgili temel soruna geliyoruz:

Tasarım gereği, akıllı sözleşmeler blok zincirine değişmez bir şekilde yerleştirilmiştir ve bu nedenle güncellenemez. Bu onların olgunluğa ulaşmasını engeller.

Önceki yazılarda akıllı sözleşmelerle ilgili diğer sorunları tartışmıştım. blockchain performansı üzerindeki etkisi ve onların oldukları gerçeği daha az güçlü birçok insanın hayal ettiğinden daha fazla. Bu ve diğer nedenlerden dolayı akıllı sözleşmeleri (henüz) uygulamaya koymadık. Çoklu Zincir Blockchain platformu. Ancak DAO'nun başarısızlığına tanık olana kadar çok daha temel bir konu üzerinde yeterince düşünmemiştim: Önemsiz olmayan herhangi bir akıllı sözleşmenin muhtemelen düzeltilemeyecek kusurlar içermesi muhtemeldir.

Modern yazılım geliştiricisi için düzeltilemeyen kod, çıtayı çoğu kişinin ulaşabileceğinden daha yükseğe çıkaran, tam bir kabustur. Ancak her bilgisayarın ve akıllı telefonun kalbinde yer alan mikroişlemcilerin tasarımı gibi bazı durumlarda bu tür kodlarla karşılaşıyoruz. Bu kod, aşağıdaki gibi dillerde yazılmıştır: Verilog ve VHDL, üretildikten sonra değiştirilemeyen bir silikon çipin fiziksel düzenini tanımlar. Bu gibi durumlarda, çeşitli özellikleri görme eğilimindeyiz: (a) kodun güvenlik göz önünde bulundurularak tasarlanmış bir dilde yazılmış olması, (b) çok sayıda insanın birkaç yıl boyunca kod üzerinde çalışması, (c) kodun kapsamlı otomatik testlere ve resmi doğrulamaya tabi tutulur ve (d) nihai ürün kusurlu olarak gönderilirse, geri çağırmanın maliyeti doğrudan sorumlu tarafın omuzlarına düşer (örneğin bkz. Pentium hatası).

Bunların hiçbirinin DAO'nun yaratıcıları veya başka herhangi bir akıllı sözleşme için geçerli olmadığını söylemeye gerek yok. Ancak akıllı sözleşme geliştiricileri için tek zorluk kodun değişmezliği değildir. Ethereum'u çoğu bilgi işlem ortamından çok daha tehlikeli hale getirmek için bir dizi başka faktör bir araya geliyor:

  • Daha önce tartışıldığı gibi çoğu sözleşme, potansiyel kullanıcıların güvenini kazanmak için kaynak kodlarını açıklar. Bu, hataların bulunmasını ve kullanılmasını kolaylaştırır. Bir sorun bulunduğunda normal kod düzeltilebilirken, değişmez koddan yalnızca saldırganlar faydalanır.
  • Çoğu programlama dilinde olduğu gibi, blockchain üzerindeki bir "işlev" (kod parçası), basamaklı etkiler yaratmak için diğerini "çağrabilir" (tetikleyebilir). Ancak Ethereum, birbirini tanımayan ve çıkarları çatışabilecek tarafların yazdığı kodlar arasında doğrudan işlev çağrılarına izin vermesi alışılmadık bir durum. Bu, düşmanca ve beklenmedik davranışlar için mükemmel bir reçetedir.
  • Daha önce de belirtildiği gibi, bir Ethereum sözleşmesi diğerine fon gönderirse, ikincisi yanıt olarak bazı kodları yürütme fırsatına sahip olur. Bu kod, gönderme işleminin başarısız olmasına neden olacak şekilde kasıtlı olarak tasarlanmış olabilir. potansiyel olarak tetikleyici her türlü ilave tahribat.
  • Bir işlev diğerini çağırdığında ve bu ikinci işlev üçüncüsünü çağırdığında, çağrılardan ve alt çağrılardan oluşan bir "yığın" oluşturulur. Bu yığının izini sürmek bir hesaplama maliyeti taşır, bu nedenle Ethereum, ne kadar derine gidebileceğini kısıtlayan bir "çağrı yığını sınırı" içerir. Bu yeterince adil. Ancak belirli bir işlev çağrısıyla sınıra ulaşılırsa Ethereum ortamı sessizce tüm işlemi güvenli bir şekilde sonlandırmak ve etkilerini ortadan kaldırmak yerine bu çağrıyı atlar. Başka bir deyişle, akıllı sözleşmedeki bazı kodlar idam edilmeyebilirve bu sözleşmenin yerine getirilmemesi, sözleşmenin yeterince derin bir yığından tetiklenmesinden kasıtlı olarak kaynaklanabilir. Bu, her yazılım geliştiricinin alışık olduğu zihinsel modeli bozan, gerçekten berbat bir tasarım tercihi gibi geliyor bana. Bu kararı kim verdiyse muhtemelen meli kömürlerin üzerinden çekilecek, gerçi şükür ki şimdi bir değiştirme önerisi.
  • Ethereum'un ayrıca, işlemlerin tükettikleri hesaplama kaynakları için ödeme yapmasını sağlayarak halka açık blok zincirlerdeki kötüye kullanımı önleyen bir "gas limiti" vardır. Bir işlemi gönderen, ne kadar gas harcamak istediğine karar verir ve eğer bu işlem tamamlanmadan önce biterse, işlem güvenli bir şekilde iptal edilir. Bu muhtemelen zor bir soruna en iyi çözüm olsa da, hoş olmayan sonuçlara da yol açabilir. Bazı sözleşmelerin beklenenden daha fazla gaza ihtiyacı olduğu ortaya çıkarken, diğerleri hiçbir şekilde çalıştırılamaz.
  • Halka açık Ethereum ağının kripto para birimi, akıllı sözleşmelerdeki kusurların, kolay bir kurtarma yöntemi olmaksızın, gerçek parayı yanlış yere göndermesine olanak tanıyor. Ethereum madencileri öyle görünse de lehte oy vermek DAO'dan çekilen fonları dondurmak için bir "yumuşak çatal" yapılması sürdürülebilir bir çözüm değil.

Özetlemek gerekirse, normal merkezi bilgisayar sistemleriyle karşılaştırıldığında Ethereum, güvenli bir şekilde kodlanması çok daha zor bir ortamdır. Yine de değişmezlik ilkesi hatalı yazılımların güncellenmesini engellemeye hizmet ediyor. Yani akıllı sözleşmeler, hataları görülebilen, düzeltilemeyen, gerçek kişilerin parasını doğrudan kontrol eden yazılımlardır. Bu oldukça açık bir şekilde oldukça zehirli bir karışımdır.

Ethereum tarzı akıllı sözleşmelerin savunucuları özel Blockchain'ler DAO'nun ölümünü kutlamak isteyebilir ancak bu tepkinin hak edildiğini düşünmüyorum. Yukarıdaki son iki nokta haricinde, Ethereum ile ilgili tüm sorunlar, hâlâ değişmez akıllı sözleşmelere dayanan izinli blok zincirleri için de aynı şekilde geçerlidir; ancak bu durumda değişmezlik, anonim madenciler yerine bir grup tanımlanmış taraf tarafından garanti edilmektedir. Özel blok zincirlerinin hatalı akıllı sözleşmelerin daha kolay geri sarılmasına, değiştirilmesine veya göz ardı edilmesine izin verdiğini iddia etmek istiyorsanız, o zaman aslında söylemek istediğiniz şey akıllı sözleşmelerin bu blok zincirlerinde hiçbir amaca hizmet etmediğidir. Basitçe söylemek gerekirse, eğer bir şeyin değişmez olması amaçlanmamışsa, bir blockchain'de saklanmamalıdır. Bunun yerine, zinciri aşağıdakiler için kullanarak eski moda yasal belgelere ve merkezi uygulama mantığına bağlı kalın: (a) veri bu mantığın dayandığı nokta ve (b) bunun uygulanmasının nihai mutabakata varılan sonucunun temsil edilmesi. (Bu tasarım desenine şu ad verilmiştir: Basit Sözleşmeler diğerleri.)

Bununla birlikte, halka açık Ethereum ağındaki riskler şüphesiz daha kötüdür, çünkü kötü yazılmış akıllı sözleşmeler, kimliği bilinmeyen kullanıcılara hızlı ve geri dönülemez bir şekilde büyük miktarlarda gerçek değer (kripto para birimi biçiminde) gönderebilir. Aslında kötü bir dehanın öldürmesi için aşağıdakilerden daha iyi bir yol var mı: (a) akıllı bir sözleşme yazmak görünüyor doğru ve adil, (b) birkaç yıl boyunca güvenli ve tutarlı bir şekilde çalışmasına izin vermek, (c) yatırımcılardan büyük miktarda para biriktirmesini beklemek ve sonra (d) bu fonları çekip çekmek için bazı belirsiz kırılganlıkları tetiklemek. Her ne kadar DAO'nun başarısızlığının kasıtlı olduğunu öne sürmüyorsam da, bu kesinlikle başkalarına da benzer "hatalar" yapma konusunda ilham verecektir.

Ethereum'un tasarımının altında yatan faktörleri özetlemem gerekirse "tecrübesiz dahi" tabirini kullanabilirim. Dahi, çünkü bunun gerçekten harika bir buluş olduğuna inanıyorum, daha önce gelen kripto para birimi sistemlerine iki önemli yenilik ekliyor: (a) akıllı sözleşmeleri yürüten Ethereum Sanal Makinesi ve hesaplamaya maliyet atama yöntemi ve (b) kullanımı ile ilgili Patricia ağaçları Bir blok zincirinin durumunun herhangi bir yönüne ilişkin kompakt kanıtları mümkün kılmak için. Ve yine de deneyimsizler, çünkü Ethereum'un sessiz ama şiddetli çağrı yığını sınırı veya ödeme alıcısının ödemeyi yapan kodu yinelemeli olarak tetikleme yeteneği gibi bazı tasarım seçenekleri çok bariz bir şekilde berbat.

Eğer Ethereum bir deney olarak ele alınsaydı, keşfedilmeye değer olsa da çözülmesi gereken kritik sorunlar olsaydı bunların hiçbiri sorun olmazdı. Belki de Bitcoin'in, toplam piyasa değerinin birkaç milyon doları aşmadığı ilk birkaç yılındaki eşdeğeri. Ne yazık ki, spekülasyonların ve şişirilmiş beklentilerin bir sonucu olarak, Ethereum'a meşhur ayaklarını bulması için aynı fırsat verilmedi. Bunun yerine, bir yıldan daha kısa bir sürede, piyasa değeri olarak bir milyar dolar taşıyor. Ethereum, akşam yemeği pişirmeye zorlanan yeni yürümeye başlayan bir çocuğa veya Federal Reserve'e başkanlık eden bir ekonomi birinci sınıf öğrencisine benzer. Bireysel akıllı sözleşmelerin olgunlaşmamışlık sorununun bir bütün olarak Ethereum için de geçerli olduğunu anlamanın zamanının geldiğine inanıyorum.

Ethereum'un ileriye giden yolu

Özel veya izin verilen blok zincirlerde akıllı sözleşmeler için henüz güçlü kullanım durumları görmemiş olsam da, bunların muhtemelen kripto para birimleriyle ilişkili halka açık zincirlerde bir yeri olduğunu düşünüyorum. Yani, mali açıdan dışlananlara ve fidye yazılımı yazarlarına eşit ölçüde yardımcı olan, sansürsüz finansal sistemlerin temel önermesini kabul ederseniz. Bu tartışmayı bir kenara bırakırsak, kesinlikle teknik Bitcoin gibi "birinci nesil" blok zincirlerde uygulanamayacak türden, keyfi mantığı destekleyen bir kripto para biriminde değer. En azından şimdilik Ethereum, arkasında tonlarca para ve ivme bulunan böyle bir sistemi kurmaya yönelik ilk ve tek ikna edici girişimdir.

Bununla birlikte, bir geliştirici ekosistemi olarak Ethereum temelden bozulmuş gibi görünüyor. DAO en maliyetli ve en yüksek profilli başarısızlığı olmasına rağmen, diğer birçok sözleşme de başarısızdır. benzer sorunları yaşayan. Peki Ethereum eylemini nasıl temizleyebilir?

  • En azından önümüzdeki iki yıl boyunca, kendi kendine eğitim adına kaybetmekten memnun olmadıkları sürece hiç kimsenin akıllı sözleşmelere para göndermemesi gerektiğine dair net bir mesaj gönderin.
  • Ethereum Sanal Makinesi (“EVM”) ile ilgili göze çarpan bazı sorunları düzeltin: (a) çağrı yığını sınırının kaldırılması, (b) kodu tetiklemeden eter göndermenin bir yolunun sağlanması ve (c) sözleşmelerin "" olarak işaretlenmesine izin verilmesi. "yeniden girmeyen", yani zaten bir şeyin ortasındayken işlevlerinin çağrılamayacağı anlamına gelir.
  • Hesaplamayı ifade etmek için daha kısıtlayıcı bir yöntem kullanan akıllı sözleşmeler için yeni bir programlama dili geliştirin. Doğruluğun resmi kanıtları. Bu alana onlarca yıldır yatırım yapılmış olduğundan, yararlanılacak çok sayıda mevcut çalışma var. (Seçilen dil yine de normal "bayt kodu" halinde derlenebileceğinden, bu EVM'nin kendisinde değişiklik yapılmasını gerektirmez.)
  • Tamamen hakemlerden geçmiş ve birçok farklı durumda güvenilir olduğu kanıtlanmış, resmi bir dizi güvenli akıllı sözleşme ve işlev oluşturun. Bu şuna benzer standart kütüphaneler birçok olgun programlama dili için mevcuttur. (Gerçi bu noktada şu soruyu sormak cazip gelebilir: Neden bu kitaplıkların işlevselliğini EVM'ye sabit kodlamıyoruz ve sonuç olarak çok daha iyi performansın keyfini çıkarmıyoruz? Cevap: Ethereum özel olarak sabit kodlu blok zincirlerden uzaklaşmak için tasarlandı. özellik setleri. Ama yine de sizi meraklandırıyor.)

Belirli akıllı sözleşmelerin başarısızlığına yanıt olarak manuel müdahalede bulunma şeklindeki mevcut seçenek, Ethereum'un güvenilmez ve merkezi olmayan bir bilgi işlem platformu olarak kimliğini sürdürmesi durumunda daha büyük ölçekte geçerli olmayacaktır. Aslında bazıları, bu tek yargıya dayalı yönetişim eyleminin halihazırda gerçekleştiğine dair inandırıcı bir iddia ortaya koyuyor. Ethereum'un itibarını yok etti. Ve şunu da belirtmeliyiz ki DAO'lar Şartlar ve koşullar hiçbir şeyin "DAO kurallarında belirtilenlerin ötesinde herhangi bir ek yükümlülüğü veya garantiyi değiştiremeyeceğini veya ekleyemeyeceğini" açıkça belirtir. Başka bir deyişle, DAO'yu boşaltan kişi, yayınlanmış şartlarına uygun hareket etmiş ve bu nedenle muhtemelen yasanın doğru tarafındadır.

Ayrıca birkaç yıl daha iyi çalıştıktan sonra Ethereum'un geliştiriciler için güvenli bir şekilde çalışmasının hâlâ çok zor olabileceği ihtimalini de kabul etmeliyiz. Bu durumda, anonim dolandırıcılar ve onların aptalca markaları arasında bir çöpçatanlık hizmeti olarak zayıflayacak. Ancak bu, bunun zaman kaybı olduğu anlamına gelmez; en azından Ethereum, blockchain topluluğunun çok şey öğreneceği büyüleyici bir deneydir.

Bu arada özel blockchain kullanıcıları için daha önce söylediklerimi ancak tekrarlayabilirim:

Uygulamanız akıllı sözleşmeler gerektirmiyorsa daha basit bir blockchain mimarisi kullanın.

Bu tavsiye daha önce performans açısından haklı çıkarken, artık akıllı sözleşmeleri doğru şekilde gerçekleştirmenin görünürdeki zorluğuyla da güçleniyor. Kullanım senaryonuzun akıllı sözleşmeler gerektirip gerektirmediğinden emin değilseniz, çekinmeyin bazı ayrıntıları bize e-postayla gönderinve size bildirmekten mutluluk duyarız.

Lütfen herhangi bir yorum gönderin LinkedIn'de.

Source: https://www.multichain.com/blog/2016/06/smart-contracts-the-dao-implosion/

spot_img

En Son İstihbarat

spot_img