Akıllı Sözleşmelere Giriş

Bu yazımızda akıllı sözleşmelerin ne olduğuna, ne olduğuna bakacağız, farklı akıllı sözleşme platformlarını, özelliklerini tanıyacak, ayrıca nasıl çalıştıklarını ve ne gibi avantajlar getirebileceklerini tartışacağız. Bu materyal, akıllı sözleşmeler konusuna pek aşina olmayan ancak konuyu anlamaya yaklaşmak isteyen okuyucular için çok faydalı olacaktır.

Normal sözleşme vs. akıllı sözleşme

Ayrıntılara girmeden önce kağıt üzerinde belirtilen normal sözleşme ile dijital olarak temsil edilen akıllı sözleşme arasındaki farklara bir örnek verelim.

Akıllı Sözleşmelere Giriş

Akıllı sözleşmelerin ortaya çıkmasından önce bu nasıl çalışıyordu? Değerlerin dağıtımına ilişkin belirli kural ve koşulların yanı sıra, bu dağıtımın belirli kural ve koşullara göre uygulanmasını garanti altına alacak belirli bir mekanizma oluşturmak isteyen bir grup insan düşünün. Daha sonra bir araya gelirler, kimlik bilgilerini, terimleri, değerleri yazdıkları bir kağıt hazırlarlar, tarih atarlar ve imzalarlardı. Bu sözleşme aynı zamanda noter gibi güvenilir bir tarafça da onaylanmıştır. Üstelik bu kişiler böyle bir sözleşmenin kağıt kopyasıyla farklı yönlere gittiler ve sözleşmenin kendisine uymayabilecek bazı eylemler gerçekleştirmeye başladılar, yani bir şey yaptılar ama kağıt üzerinde bir şeyler yapmaları gerektiği belgelendi. tamamen farklı. Peki bu durumdan nasıl çıkılır? Aslında grup üyelerinden birinin bu kağıdı alması, bazı delilleri toplaması, mahkemeye götürmesi ve sözleşme ile fiili eylemler arasında uyum sağlaması gerekiyor. Çoğu zaman, bu sözleşmenin adil bir şekilde uygulanmasını sağlamak zordur ve bu da hoş olmayan sonuçlara yol açar.

Akıllı sözleşmeler hakkında ne söylenebilir? Hem sözleşme şartlarını yazma olasılığını hem de bunların sıkı bir şekilde uygulanmasına yönelik mekanizmayı birleştiriyorlar. Koşullar belirlendiyse ve ilgili işlem veya talep imzalandıysa, bu istek veya işlem kabul edildikten sonra koşulları değiştirmek veya bunların uygulanmasını etkilemek artık mümkün değildir.

Bir doğrulayıcı veya tüm bir ağın yanı sıra, yürütülmek üzere gönderilen tüm akıllı sözleşmeleri katı kronolojik sırayla saklayan bir veritabanı vardır. Bu veritabanının akıllı sözleşmeyi yürütmek için tüm tetikleme koşullarını içermesi de önemlidir. Ayrıca sözleşmede dağıtımı açıklanan değerin kendisi de dikkate alınmalıdır. Eğer bu durum bazı dijital para birimleri için geçerliyse, o zaman bu veritabanının bunu dikkate alması gerekir.

Başka bir deyişle, akıllı sözleşme doğrulayıcıları, akıllı sözleşmenin üzerinde çalıştığı tüm verilere erişebilmelidir. Örneğin, dijital para birimlerini, kullanıcı bakiyelerini, kullanıcı işlemlerini ve zaman damgalarını aynı anda hesaba katmak için tek bir veritabanı kullanılmalıdır. O zaman akıllı bir sözleşmede koşul, kullanıcının belirli bir para birimindeki bakiyesi, belirli bir zamanın gelmesi veya belirli bir işlemin gerçekleştirilmiş olması olabilir, ancak daha fazlası olamaz.

Akıllı sözleşmenin tanımı

Genel olarak terminolojinin kendisi araştırmacı Nick Szabo tarafından icat edildi ve ilk kez 1994'te kullanıldı ve 1997'de akıllı sözleşmeler fikrini açıklayan bir makalede belgelendi.

Akıllı sözleşmeler, yalnızca önceden belirlenmiş koşullara bağlı olabilecek bir miktar değer dağıtımı otomasyonunun gerçekleştirildiğini ima eder. En basit haliyle, belirli taraflarca imzalanan, şartları kesin olarak belirlenmiş bir sözleşmeye benziyor.

Akıllı sözleşmeler üçüncü taraflara olan güveni en aza indirecek şekilde tasarlanmıştır. Bazen her şeyin bağlı olduğu karar alma merkezi tamamen dışlanır. Ayrıca bu tür sözleşmelerin denetimi daha kolaydır. Bu, böyle bir sistemin bazı tasarım özelliklerinin bir sonucudur, ancak çoğu zaman akıllı bir sözleşmeden merkezi olmayan bir ortam ve herkesin veritabanını analiz etmesine ve sözleşmelerin uygulanmasına ilişkin tam bir denetim yapmasına olanak tanıyan işlevlerin varlığını anlıyoruz. Bu, sözleşmenin performansında değişiklik gerektirebilecek geriye dönük veri değişikliklerine karşı koruma sağlar. Akıllı bir sözleşme oluştururken ve başlatırken çoğu sürecin dijitalleştirilmesi, çoğu zaman bunların uygulanmasının teknolojisini ve maliyetini basitleştirir.

Basit bir örnek - Emanet hizmeti

Çok basit bir örneğe bakalım. Akıllı sözleşmelerin işlevselliğini daha iyi anlamanıza ve hangi durumlarda kullanılması gerektiğini daha iyi anlamanıza yardımcı olacaktır.

Akıllı Sözleşmelere Giriş

Bitcoin kullanılarak da uygulanabilir, ancak şu anda Bitcoin'in akıllı sözleşmeler için tam teşekküllü bir platform olarak adlandırılması pek mümkün değil. Yani, bir alıcımız var ve bir çevrimiçi mağazamız var. Bir müşteri bu mağazadan monitör satın almak istiyor. En basit durumda, alıcı ödemeyi tamamlayıp gönderir ve çevrimiçi mağaza bunu kabul eder, onaylar ve ardından malları gönderir. Ancak bu durumda büyük bir güvene ihtiyaç vardır - alıcının monitörün tüm maliyeti için çevrimiçi mağazaya güvenmesi gerekir. Bir çevrimiçi mağazanın alıcının gözünde itibarı düşük olabileceğinden, ödemeyi kabul ettikten sonra mağazanın herhangi bir nedenden dolayı hizmeti reddetme ve malları alıcıya göndermeme riski vardır. Bu nedenle alıcı, bu tür riskleri en aza indirmek ve bu tür işlemleri daha güvenilir hale getirmek için bu durumda neyin uygulanabileceği sorusunu sorar (ve buna göre çevrimiçi mağaza bu soruyu sorar).

Bitcoin durumunda, alıcı ve satıcının bağımsız olarak bir arabulucu seçmesine izin vermek mümkündür. Tartışmalı konuların çözümüne katılan birçok insan var. Katılımcılarımız genel arabulucu listesinden güvenecekleri kişiyi seçebilirler. Birlikte, üç anahtarın bulunduğu ve bu adresten para harcamak için herhangi iki anahtarla birlikte iki imzanın gerekli olduğu 2/3 çoklu imza adresi oluştururlar. Anahtarlardan biri alıcıya, ikincisi çevrimiçi mağazaya ve üçüncüsü de arabulucuya ait olacak. Ve böyle bir çoklu imza adresine alıcı, monitör için ödenmesi gereken tutarı gönderecektir. Artık satıcı, kendisine bağlı çoklu imzalı bir adreste paranın bir süreliğine bloke edildiğini gördüğünde monitörü güvenli bir şekilde posta yoluyla gönderebilir.

Daha sonra alıcı paketi teslim alır, malları inceler ve nihai satın alma kararını verir. Çoklu imza adresinden satıcıya coin transferi yaptığında, verilen hizmeti tamamen kabul edip, işlemi anahtarıyla imzalayabilir veya bir şeyden memnun kalmayabilir. İkinci durumda, bu paraları farklı şekilde dağıtacak alternatif bir işlemi bir araya getirmek için bir aracıyla iletişime geçer.

Diyelim ki monitör biraz çizikli geldi ve kitte bilgisayara bağlantı için bir kablo yoktu, ancak çevrimiçi mağaza web sitesi kablonun kite dahil olması gerektiğini söyledi. Daha sonra alıcı, bu durumda aldatıldığını arabulucuya kanıtlamak için gerekli delilleri toplar: Sitenin ekran görüntülerini alır, posta makbuzunun fotoğrafını çeker, monitördeki çiziklerin fotoğrafını çeker ve mührün silindiğini gösterir. kırıldı ve kablo çıkarıldı. Çevrimiçi mağaza da delillerini toplar ve arabulucuya aktarır.

Arabulucu, hem alıcının öfkesini hem de çevrimiçi mağazanın çıkarlarını aynı anda tatmin etmekle ilgilenmektedir (nedenini daha sonra açıklayacaktır). Çoklu imzalı bir adresten gelen paraların, alıcının, çevrimiçi mağazanın ve aracının emeğinin ödülü olarak kendisine bir pay alması nedeniyle belirli bir oranda harcanacağı bir işlemdir. Diyelim ki toplam tutarın %90'ı satıcıya, %5'i arabulucuya, %5'i de alıcıya tazminat olarak gidiyor. Arabulucu bu işlemi anahtarıyla imzalar, ancak henüz uygulanamaz çünkü iki imza gerektirir, ancak yalnızca bir tanesi buna değer. Böyle bir işlemi hem alıcıya hem de satıcıya gönderir. Bunlardan en az biri, madeni paraların yeniden dağıtılmasına ilişkin bu seçenekten memnun kalırsa, işlem önceden imzalanacak ve ağa dağıtılacak. Bunu doğrulamak için, işlemin taraflarından birinin arabulucunun seçeneğini kabul etmesi yeterlidir.

Her iki tarafın da ona güvenmesi için başlangıçta bir arabulucu seçmek önemlidir. Bu durumda birinin veya diğerinin çıkarlarından bağımsız hareket edecek ve durumu objektif olarak değerlendirecektir. Arabulucunun, en az bir katılımcıyı tatmin edecek şekilde madeni para dağıtma seçeneği sunmaması durumunda, hem alıcı hem de çevrimiçi mağaza, birlikte anlaşarak, iki imzasını atarak madeni paraları yeni bir çoklu imza adresine gönderebilir. Yeni çoklu imza adresi, bu konuda daha yetkin olabilecek ve daha iyi bir seçenek sunabilecek farklı bir arabulucu tarafından derlenecektir.

Yatakhane ve buzdolabı örneği

Akıllı sözleşmenin yeteneklerini daha açık bir şekilde gösteren daha karmaşık bir örneğe bakalım.

Akıllı Sözleşmelere Giriş

Diyelim ki yakın zamanda aynı yurt odasına taşınan üç adam var. Üçü, odalarına birlikte kullanabilecekleri bir buzdolabı almakla ilgileniyorlar. İçlerinden biri buzdolabı satın almak ve satıcıyla pazarlık yapmak için gerekli miktarı toplamaya gönüllü oldu. Ancak birbirleriyle daha yeni tanışmışlardır ve aralarında yeterli güven yoktur. Açıkçası ikisi üçüncüye para vererek risk alıyor. Ayrıca satıcı seçiminde de anlaşmaya varmaları gerekiyor.

Emanet hizmetini kullanabilirler, yani işlemin yürütülmesini izleyecek ve ortaya çıkan tartışmalı sorunları çözecek bir arabulucu seçebilirler. Daha sonra anlaştıktan sonra akıllı bir sözleşme hazırlarlar ve bunun içinde belirli koşullar belirlerler.

İlk koşul, belirli bir süreden önce, örneğin bir hafta içinde, ilgili akıllı sözleşme hesabının belirli adreslerden belirli bir tutarda üç ödeme alması gerektiğidir. Bu gerçekleşmezse akıllı sözleşmenin yürütülmesi durdurulur ve paralar tüm katılımcılara iade edilir. Koşul sağlanıyorsa satıcı ve aracı tanımlayıcılarının değerleri belirlenir ve tüm katılımcıların satıcı ve aracı seçimi konusunda hemfikir olup olmadığı kontrol edilir. Tüm koşullar yerine getirildiğinde fonlar belirtilen adreslere aktarılacaktır. Bu yaklaşım, katılımcıları her türlü dolandırıcılıktan koruyabilir ve genel olarak güvenme ihtiyacını ortadan kaldırır.

Bu örnekte, her bir koşulun yerine getirilmesi için parametreleri adım adım ayarlama yeteneğinin, her türlü karmaşıklıkta ve iç içe geçmiş düzey derinliğinde sistemler oluşturmanıza olanak sağladığı ilkesini görüyoruz. Ek olarak, akıllı sözleşmede ilk önce ilk koşulu tanımlayabilirsiniz ve ancak bu koşul yerine getirildikten sonra bir sonraki koşulun parametrelerini ayarlayabilirsiniz. Başka bir deyişle, koşul resmi olarak yazılmıştır ve bunun parametreleri, işlemi sırasında zaten ayarlanabilir.

Akıllı sözleşmelerin sınıflandırılması

Sınıflandırma için farklı kriter grupları belirleyebilirsiniz. Bununla birlikte, teknolojinin gelişmesiyle birlikte bunlardan dördü konuyla ilgilidir.

Akıllı sözleşmeler, merkezi veya merkezi olmayan yürütme ortamlarına göre ayırt edilebilir. Merkezi olmayan yönetim durumunda, akıllı sözleşmeleri yürütürken çok daha fazla bağımsızlığa ve hata toleransına sahip oluyoruz.

Koşulların belirlenmesi ve yerine getirilmesi süreciyle de ayırt edilebilirler: serbestçe programlanabilir, sınırlandırılabilir veya önceden tanımlanmış olabilirler, yani kesin olarak yazılmış olabilirler. Akıllı sözleşme platformunda yalnızca 4 spesifik akıllı sözleşme olduğunda bunlara ilişkin parametreler herhangi bir şekilde ayarlanabilir. Buna göre bunları ayarlamak çok daha basittir: listeden bir sözleşme seçip parametreleri iletiriz.

Başlatma yöntemine göre, otomatik akıllı sözleşmeler yani belirli koşullar oluştuğunda kendi kendini çalıştıran sözleşmeler ve koşulların belirtildiği ancak platformun bunların yerine getirilip getirilmediğini otomatik olarak kontrol etmediği sözleşmeler vardır; bunun için ayrı olarak başlatılması gerekir.

Ayrıca akıllı sözleşmelerin gizlilik seviyeleri de farklılık göstermektedir. Tamamen açık, kısmen veya tamamen gizli olabilirler. İkincisi, üçüncü taraf gözlemcilerin akıllı sözleşmelerin şartlarını görmediği anlamına gelir. Ancak mahremiyet konusu oldukça geniştir ve bu konuyu mevcut makaleden ayrı ele almak daha doğru olacaktır.

Aşağıda, mevcut konunun anlaşılmasına daha fazla açıklık getirmek için ilk üç kritere daha yakından bakacağız.

Çalışma zamanına göre akıllı sözleşmeler

Akıllı Sözleşmelere Giriş

Yürütme ortamına bağlı olarak merkezi ve merkezi olmayan akıllı sözleşme platformları arasında bir ayrım yapılır. Merkezi dijital sözleşmelerde tek bir doğrulayıcının bulunduğu ve yine merkezi olarak yönetilen bir yedekleme ve kurtarma hizmetinin bulunabildiği tek bir hizmet kullanılır. Akıllı sözleşmenin şartlarını belirlemek ve bu hizmet veritabanında dikkate alınan değeri dağıtmak için gerekli tüm bilgileri saklayan bir veritabanı vardır. Böyle merkezi bir hizmetin, belirli taleplerle koşulları belirleyen ve bu tür sözleşmeleri kullanan bir müşterisi vardır. Platformun merkezi yapısı nedeniyle kimlik doğrulama mekanizmaları kripto para birimlerine göre daha az güvenli olabilir.

Örnek olarak mobil iletişim sağlayıcılarını (farklı mobil operatörler) alabiliriz. Diyelim ki belirli bir operatör, sunucularında, örneğin sesli aramalar, SMS iletimi, mobil İnternet trafiği şeklinde ve farklı standartlara göre farklı formatlarda iletilebilen trafiğin merkezi bir kaydını tutuyor ve ayrıca kayıtları tutuyor. kullanıcı bakiyelerindeki fonların miktarı. Buna göre mobil iletişim sağlayıcısı, sunduğu hizmetlerin muhasebeleştirilmesi ve bunların farklı koşullarla ödenmesine ilişkin sözleşmeler düzenleyebilir. Bu durumda “falan numaraya şu kodla SMS gönder, trafik dağıtımı için şu koşulları alacaksın” gibi koşulları ayarlamak kolaydır.

Bir örnek daha verilebilir: İnternet bankacılığının genişletilmiş işlevselliğine sahip geleneksel bankalar ve düzenli ödemeler, gelen ödemelerin otomatik olarak dönüştürülmesi, faizin belirli bir hesaba otomatik olarak kesilmesi vb. gibi çok basit sözleşmeler.

Merkezi olmayan bir yürütme ortamına sahip akıllı sözleşmelerden bahsediyorsak, o zaman bir grup doğrulayıcımız var. İdeal olarak herkes doğrulayıcı olabilir. Veritabanı senkronizasyon protokolü ve fikir birliğine varılması nedeniyle, artık tüm işlemleri, formatları sıklıkla değişen ve açık spesifikasyon bulunmayan bazı koşullu sorgular yerine, kesin olarak tanımlanmış sözleşmelerle saklayacak bazı ortak veritabanımız var. Burada işlemler, sözleşmenin katı bir spesifikasyona göre yürütülmesine yönelik talimatları içerecektir. Bu spesifikasyon açıktır ve bu nedenle platform kullanıcılarının kendisi akıllı sözleşmeleri denetleyip doğrulayabilir. Burada merkezi olmayan platformların, bağımsızlık ve hata toleransı açısından merkezi platformlara göre daha üstün olduğunu ancak tasarım ve bakımlarının çok daha karmaşık olduğunu görüyoruz.

Koşulları belirleme ve yerine getirme yöntemiyle akıllı sözleşmeler

Şimdi akıllı sözleşmelerin koşulları belirleme ve yerine getirme şekillerinde nasıl farklılık gösterebileceğine daha yakından bakalım. Burada dikkatimizi rastgele programlanabilen ve Turing'i tamamlayan akıllı sözleşmelere çeviriyoruz. Turing-complete akıllı sözleşme, sözleşmenin yürütülmesi için hemen hemen her algoritmayı koşul olarak ayarlamanıza olanak tanır: yazma döngüleri, olasılıkları hesaplamak için bazı işlevler ve benzeri - kendi elektronik imza algoritmalarınıza kadar. Bu durumda, gerçekten keyfi bir mantık yazmayı kastediyoruz.

Ayrıca keyfi akıllı sözleşmeler de var, ancak Turing'in eksiksiz olanları değil. Buna kendi komut dosyalarına sahip Bitcoin ve Litecoin de dahildir. Bu, yalnızca belirli işlemleri herhangi bir sırayla kullanabileceğiniz ancak artık döngüler ve kendi algoritmalarınızı yazamayacağınız anlamına gelir.

Ayrıca önceden tanımlanmış akıllı sözleşmeleri uygulayan akıllı sözleşme platformları da bulunmaktadır. Bunlara Bitshares ve Steemit dahildir. Bitshares, ticaret, hesap yönetimi, platformun kendisinin ve parametrelerinin yönetimi için bir dizi akıllı sözleşmeye sahiptir. Steemit de benzer bir platform, ancak artık Bitshares gibi token çıkarmaya ve ticarete değil, blog yazmaya odaklanıyor, yani içeriği merkezi olmayan bir şekilde saklıyor ve işliyor.

Keyfi Turing-tamamlanmış sözleşmeler, Ethereum platformunu ve hala geliştirilme aşamasında olan RootStock'u içerir. Bu nedenle aşağıda Ethereum akıllı sözleşme platformu üzerinde biraz daha detaylı duracağız.

Başlatma yöntemiyle akıllı sözleşmeler

Başlatma yöntemine bağlı olarak akıllı sözleşmeler en az iki gruba da ayrılabilir: otomatik ve manuel (otomatik değil). Otomatik olanlar, bilinen tüm parametreler ve koşullar göz önüne alındığında, akıllı sözleşmenin tamamen otomatik olarak yürütülmesi, yani herhangi bir ek işlem gönderilmesini ve sonraki her yürütme için ek bir komisyon harcanmasını gerektirmemesiyle karakterize edilir. Platformun kendisi, akıllı sözleşmenin nasıl tamamlanacağını hesaplamak için tüm verilere sahiptir. Oradaki mantık keyfi değil, önceden belirlenmiş ve tüm bunlar öngörülebilir. Yani, akıllı bir sözleşmeyi yürütmenin karmaşıklığını önceden tahmin edebilir, bunun için bir tür sabit komisyon kullanabilir ve uygulanmasına yönelik tüm süreçler daha verimli olabilir.

Serbestçe programlanan akıllı sözleşmelerin yürütülmesi otomatik değildir. Böyle bir akıllı sözleşme başlatmak için hemen hemen her adımda, bir sonraki uygulama aşamasını veya bir sonraki akıllı sözleşme yöntemini çağıracak yeni bir işlem oluşturmanız, uygun komisyonu ödemeniz ve işlemin onaylanmasını beklemeniz gerekir. Akıllı sözleşme kodu keyfi olduğundan ve sonsuz döngü, bazı parametre ve argümanların eksikliği, işlenmeyen istisnalar vb. gibi bazı öngörülemeyen anlar ortaya çıkabileceğinden, yürütme başarıyla tamamlanabilir veya tamamlanmayabilir.

Ethereum Hesapları

Ethereum Hesap Türleri

Ethereum platformunda ne tür hesapların olabileceğine bakalım. Burada yalnızca iki tür hesap vardır ve başka seçenek yoktur. Birinci türe kullanıcı hesabı, ikinci türe ise sözleşme hesabı denir. Nasıl farklı olduklarını bulalım.

Kullanıcı hesabı yalnızca elektronik imzanın kişisel anahtarı ile kontrol edilir. Hesap sahibi, ECDSA (Eliptik Eğri Dijital İmza Algoritması) algoritmasını kullanarak elektronik imza için kendi anahtar çiftini oluşturur. Yalnızca bu anahtarla imzalanan işlemler bu hesabın durumunu değiştirebilir.

Akıllı sözleşme hesabı için ayrı bir mantık sağlanmıştır. Yalnızca akıllı sözleşmenin davranışını tamamen belirleyen önceden tanımlanmış yazılım kodu ile kontrol edilebilir: belirli koşullar altında paralarını nasıl yöneteceği, hangi kullanıcının inisiyatifinde ve bu paraların hangi ek koşullar altında dağıtılacağı. Program kodunda geliştiriciler tarafından bazı noktalar belirtilmezse sorunlar ortaya çıkabilir. Örneğin, bir akıllı sözleşme, herhangi bir kullanıcıdan daha fazla yürütme başlatılmasını kabul etmediği belirli bir durumu alabilir. Bu durumda, akıllı sözleşme bu durumdan çıkmayı sağlamadığı için paralar aslında dondurulacaktır.

Ethereum'da hesaplar nasıl oluşturulur?

Bir kullanıcı hesabı söz konusu olduğunda, hesap sahibi bağımsız olarak ECDSA'yı kullanarak bir anahtar çifti oluşturur. Ethereum'un elektronik imzalar için Bitcoin ile tam olarak aynı algoritmayı ve tam olarak aynı eliptik eğriyi kullandığını ancak adresin biraz farklı bir şekilde hesaplandığını belirtmek önemlidir. Burada Bitcoin'de olduğu gibi double hashing sonucu artık kullanılmıyor ancak 256 bit uzunluğunda Keccak fonksiyonu ile tek hashing sağlanıyor. En az anlamlı bitler, yani çıktı karma değerinin en az anlamlı 160 biti, sonuçtaki değerden kesilir. Sonuç olarak Ethereum'da bir adres alıyoruz. Aslında 20 byte yer kaplıyor.

Ethereum'daki hesap tanımlayıcının, adresin bir sağlama toplamı eklenerek 58 tabanlı bir sayı sisteminde kodlandığı Bitcoin ve diğer birçok sistemden farklı olarak, bir sağlama toplamı uygulanmadan hex cinsinden kodlandığını lütfen unutmayın. Bu, Ethereum'da hesap tanımlayıcılarla çalışırken dikkatli olmanız gerektiği anlamına gelir: tanımlayıcıdaki tek bir hatanın bile para kaybına yol açacağı garantidir.

Önemli bir özelliği var ki o da ilk gelen ödemeyi kabul ettiği anda genel veri tabanı düzeyinde bir kullanıcı hesabının oluşturulmasıdır.

Akıllı sözleşme hesabı oluşturmak tamamen farklı bir yaklaşım gerektirir. Başlangıçta kullanıcılardan biri akıllı sözleşmenin kaynak kodunu yazar, ardından kod Ethereum platformuna özel bir derleyiciden geçirilerek kendi Ethereum sanal makinesi için bayt kodu elde edilir. Ortaya çıkan bayt kodu, işlemin özel bir alanına yerleştirilir. Başlatıcının hesabı adına onaylanmıştır. Daha sonra bu işlem ağ boyunca yayılır ve akıllı sözleşme kodunu yerleştirir. İşlem komisyonu ve buna bağlı olarak sözleşmenin yürütülmesi komisyonu, başlatıcının hesabının bakiyesinden çekilir.

Her akıllı sözleşme mutlaka kendi yapıcısını (bu sözleşmenin) içerir. Boş olabilir veya içeriği olabilir. Yapıcı yürütüldükten sonra, para gönderebileceğiniz, belirli akıllı sözleşme yöntemlerini çağırabileceğiniz vb. bir akıllı sözleşme hesap tanımlayıcısı oluşturulur.

Ethereum İşlem Yapısı

Daha açık hale getirmek için Ethereum işleminin yapısına ve örnek bir akıllı sözleşme koduna bakmaya başlayacağız.

Akıllı Sözleşmelere Giriş

Bir Ethereum işlemi çeşitli alanlardan oluşur. Bunlardan ilki, nonce, işlemin dağıtımını yapan ve yazarı olan hesaba ilişkin belirli bir seri numarasıdır. Bu, çifte işlemleri ayırt etmek, yani aynı işlemin iki kez kabul edildiği durumu hariç tutmak için gereklidir. Bir tanımlayıcı kullanıldığında, her işlemin benzersiz bir karma değeri olur.

Sonra şöyle bir alan geliyor gaz fiyatı. Bu, Ethereum temel para biriminin, akıllı sözleşmenin yürütülmesi ve sanal makine kaynağının tahsisi için ödeme yapmak için kullanılan gaza dönüştürüldüğü fiyatı gösterir. Bu ne anlama geliyor?

Bitcoin'de ücretler doğrudan temel para birimi olan Bitcoin'in kendisi tarafından ödenir. Bu, basit bir hesaplama mekanizması sayesinde mümkündür: İşlemin içerdiği veri miktarı için kesinlikle ödeme yaparız. Ethereum'da durum daha karmaşık çünkü işlem verilerinin hacmine güvenmek çok zor. Burada işlem, sanal makine üzerinde yürütülecek program kodunu da içerebilir ve sanal makinenin her işlemi farklı karmaşıklığa sahip olabilir. Değişkenlere bellek ayıran işlemler de vardır. Her operasyonun ödemesinin bağlı olacağı kendi karmaşıklıkları olacak.

Gaz eşdeğeri cinsinden her bir işlemin maliyeti sabit olacaktır. Her operasyonun sabit maliyetini belirlemek için özel olarak tanıtılmıştır. Ağdaki yüke bağlı olarak gaz fiyatı değişecek, yani baz para biriminin komisyonu ödemek için bu yardımcı birime dönüştürüleceği katsayı değişecek.

Ethereum'da bir işlemin bir özelliği daha var: sanal bir makinede yürütülmek üzere içerdiği bayt kodu, bir sonuçla (başarılı veya başarısız) tamamlanana kadar veya komisyonu ödemek için tahsis edilen belirli miktardaki para bitene kadar yürütülecektir. . Herhangi bir hata durumunda, gönderenin hesabındaki tüm paraların komisyon için harcandığı bir durumdan kaçınmak için (örneğin, sanal bir makinede başlatılan bir tür sonsuz döngü), aşağıdaki alan mevcuttur - gazı başlat (genellikle gas limiti olarak adlandırılır) - gönderenin belirli bir işlemi tamamlamak için harcamak istediği maksimum jeton miktarını belirler.

Bir sonraki alan denir varış noktası. Bu, kripto paraların alıcısının adresini veya yöntemleri çağrılacak belirli bir akıllı sözleşmenin adresini içerir. Saha geldikten sonra değerHedef adrese gönderilen coin miktarının girildiği yerdir.

Sırada ilginç bir alan var: veri, tüm yapının uyduğu yer. Bu ayrı bir alan değil, sanal makinenin kodunun tanımlandığı bütün bir yapıdır. Buraya isteğe bağlı veriler yerleştirebilirsiniz - bunun için ayrı kurallar vardır.

Ve son alan denir imza. Aynı anda hem bu işlemin yazarının elektronik imzasını hem de bu imzanın doğrulanacağı genel anahtarı içerir. Açık anahtardan, bu işlemi gönderenin hesap tanımlayıcısını elde edebilirsiniz, yani gönderenin hesabını sistemin kendisinde benzersiz bir şekilde tanımlayabilirsiniz. İşlemin yapısıyla ilgili ana şeyi öğrendik.

Solidity için örnek akıllı sözleşme kodu

Şimdi bir örnek kullanarak en basit akıllı sözleşmeye daha yakından bakalım.

contract Bank {
    address owner;
    mapping(address => uint) balances;
    
    function Bank() {
        owner = msg.sender;
    }

    function deposit() public payable {
        balances[msg.sender] += msg.value;
    }

    function withdraw(uint amount) public {
        if (balances[msg.sender] >= amount) {
            balances[msg.sender] -= amount;
            msg.sender.transfer(amount);
        }
    }

    function getMyBalance() public view returns(uint) {
        return balances[msg.sender];
    }

    function kill() public {
        if (msg.sender == owner)
            selfdestruct(owner);
    }
}

Yukarıda, kullanıcıların paralarını tutabilen ve talep üzerine iade edebilen basitleştirilmiş bir kaynak kodu bulunmaktadır.

Yani, aşağıdaki işlevleri yerine getiren bir Banka akıllı sözleşmesi var: bakiyesinde coin biriktiriyor, yani bir işlem onaylandığında ve böyle bir akıllı sözleşme yerleştirildiğinde, bakiyesinde coin içerebilecek yeni bir hesap oluşturuluyor; kullanıcıları ve aralarındaki coin dağıtımını hatırlar; Bakiyeleri yönetmek için çeşitli yöntemler vardır, yani kullanıcının bakiyesini yenilemek, çekmek ve kontrol etmek mümkündür.

Kaynak kodun her satırını inceleyelim. Bu sözleşmenin sabit alanları vardır. Bunlardan biri adres tipine sahip olana sahip denir. Burada sözleşme, bu akıllı sözleşmeyi oluşturan kullanıcının adresini hatırlar. Ayrıca kullanıcı adresleri ve bakiyeler arasındaki yazışmaları koruyan dinamik bir yapı bulunmaktadır.

Bunu Banka yöntemi takip eder - sözleşmeyle aynı adı taşır. Buna göre bu onun kurucusudur. Burada sahip değişkenine bu akıllı sözleşmeyi ağa yerleştiren kişinin adresi atanır. Bu yapıcıda olan tek şey budur. Yani, bu durumda msj, bu sözleşmenin tüm kodunu içeren işlemle birlikte sanal makineye aktarılan verilerdir. Buna göre msg.sender bu kodu barındıran işlemin yazarıdır. Akıllı sözleşmenin sahibi olacak.

Para yatırma yöntemi, belirli sayıda jetonu işlem yoluyla sözleşme hesabına aktarmanıza olanak tanır. Bu durumda, bu coinleri alan akıllı sözleşme, bunları bilançosunda bırakır ancak kime ait olduklarını bilmek için bu coinleri gönderenin tam olarak kim olduğunu bakiye yapısına kaydeder.

Bir sonraki yönteme para çekme denir ve bir parametre alır; birisinin bu bankadan çekmek istediği para miktarı. Bu, göndermek için bu yöntemi çağıran kullanıcının bakiyesinde yeterli miktarda para olup olmadığını kontrol eder. Yeterli miktarda varsa, akıllı sözleşmenin kendisi bu sayıdaki parayı arayana iade eder.

Daha sonra kullanıcının mevcut bakiyesini kontrol etme yöntemi gelir. Bu yöntemi kim çağırırsa akıllı sözleşmedeki bu bakiyeyi geri almak için kullanılacaktır. Bu yöntemin değiştiricisinin view olduğunu belirtmekte fayda var. Bu, yöntemin kendi sınıfının değişkenlerini hiçbir şekilde değiştirmediği ve aslında yalnızca bir okuma yöntemi olduğu anlamına gelir. Bu yöntemin çağrılması için ayrı bir işlem oluşturulmamakta, herhangi bir ücret ödenmemekte, tüm hesaplamalar local olarak yapılmakta ve sonuç kullanıcıya verilmektedir.

Akıllı sözleşmenin durumunu yok etmek için kill yöntemine ihtiyaç vardır. Ve burada, bu yöntemi arayan kişinin bu sözleşmenin sahibi olup olmadığı ek bir kontrol var. Eğer öyleyse, sözleşme kendi kendini yok eder ve yok etme işlevi bir parametre alır; sözleşmenin bakiyesinde kalan tüm paraları göndereceği hesap tanımlayıcı. Bu durumda kalan coinler otomatik olarak sözleşme sahibinin adresine gidecektir.

Ethereum ağındaki tam düğüm nasıl çalışır?

Bu tür akıllı sözleşmelerin Ethereum platformunda nasıl yürütüldüğüne ve tam ağ düğümünün nasıl çalıştığına şematik olarak bakalım.

Akıllı Sözleşmelere Giriş

Ethereum ağındaki tam bir düğümün en az dört modüle sahip olması gerekir.
Birincisi, herhangi bir merkezi olmayan protokolde olduğu gibi, P2P ağ modülüdür - blokların, işlemlerin ve diğer düğümlerle ilgili bilgilerin değiş tokuş edildiği diğer düğümlerle ağ bağlantısı ve çalışma modülü. Bu, tüm merkezi olmayan kripto para birimleri için geleneksel bir bileşendir.

Daha sonra, blockchain verilerini depolamak, işlemek, öncelik dalını seçmek, blok eklemek, blokların bağlantısını kaldırmak, bu blokları doğrulamak vb. için bir modülümüz var.

Üçüncü modüle EVM (Ethereum sanal makinesi) adı verilir - bu, Ethereum işlemlerinden bayt kodu alan bir sanal makinedir. Bu modül, belirli bir hesabın mevcut durumunu alır ve alınan bayt koduna göre durumunda değişiklikler yapar. Her ağ düğümündeki sanal makine sürümü aynı olmalıdır. Her Ethereum düğümünde gerçekleşen hesaplamalar tamamen aynıdır, ancak bunlar eşzamansız bir şekilde gerçekleşir: Birisi bu işlemi daha önce kontrol eder ve kabul eder, yani içindeki tüm kodu çalıştırır ve biri daha sonra. Buna göre bir işlem oluşturulduğunda ağa dağıtılır, düğümler bunu kabul eder ve doğrulama sırasında Bitcoin Script'inin Bitcoin'de çalıştırıldığı gibi sanal makinenin bayt kodu burada yürütülür.

Bir işlem, içerdiği tüm kodun yürütülmesi, belirli bir hesabın yeni bir durumunun oluşturulması ve bu işlemin uygulanıp uygulanmadığı netleşene kadar kaydedilmesi durumunda doğrulanmış sayılır. İşlem uygulanırsa, bu durum yalnızca tamamlanmış değil aynı zamanda mevcut olarak kabul edilir. Her ağ düğümü için her hesabın durumunu saklayan bir veritabanı vardır. Tüm hesaplamaların aynı şekilde gerçekleşmesi ve blok zincirinin durumunun aynı olması nedeniyle tüm hesapların durumlarını içeren veri tabanı da her düğüm için aynı olacaktır.

Akıllı sözleşmelerin mitleri ve sınırlamaları

Ethereum benzeri akıllı sözleşme platformlarına yönelik mevcut kısıtlamalara gelince:

  • kod yürütme;
  • hafıza tahsis edin;
  • blok zinciri verileri;
  • ödeme göndermek;
  • yeni sözleşme oluşturmak;
  • diğer sözleşmeleri arayın.

Sanal makineye uygulanan kısıtlamalara bakalım ve buna göre akıllı sözleşmelerle ilgili bazı efsaneleri ortadan kaldıralım. Yalnızca Ethereum'da değil, benzer platformlarda da bulunabilen bir sanal makinede, gerçekten rastgele mantıksal işlemler gerçekleştirebilir, yani kod yazabilir ve orada yürütülecek, ayrıca bellek ayırabilirsiniz. Ancak ücret, her işlem ve tahsis edilen her ek bellek birimi için ayrı ayrı ödenir.

Daha sonra sanal makine, bu verileri bir veya başka bir akıllı sözleşme mantığını yürütmek için tetikleyici olarak kullanmak amacıyla blockchain veritabanındaki verileri okuyabilir. Sanal makine, işlemler oluşturabilir ve gönderebilir, yeni sözleşmeler oluşturabilir ve ağda halihazırda yayınlanmış olan diğer akıllı sözleşmelerin çağrı yöntemlerini (mevcut, kullanılabilir vb.) oluşturabilir.

En yaygın efsane, Ethereum akıllı sözleşmelerinin herhangi bir İnternet kaynağından gelen bilgileri kendi şartlarına göre kullanabileceğidir. Gerçek şu ki, bir sanal makine İnternet'teki bazı harici bilgi kaynaklarına bir ağ isteği gönderemez; yani, örneğin dışarıdaki havanın nasıl olduğuna bağlı olarak kullanıcılar arasında değer dağıtacak akıllı bir sözleşme yazmak imkansızdır. ya da kimin şampiyonluk kazandığına ya da dış dünyada meydana gelen başka olaylara dayanarak, bu olaylarla ilgili bilgiler platformun veritabanında yer almıyor. Yani blockchainde bununla ilgili hiçbir şey yok. Orada görünmüyorsa sanal makine bu verileri tetikleyici olarak kullanamaz.

Ethereum'un Dezavantajları

Ana olanları listeleyelim. İlk dezavantaj, Ethereum'da akıllı sözleşmelerin tasarlanması, geliştirilmesi ve test edilmesinde bazı zorlukların olmasıdır (Ethereum, akıllı sözleşmeler yazmak için Solidity dilini kullanır). Aslında uygulama, tüm hataların çok büyük bir yüzdesinin insan faktörüne ait olduğunu göstermektedir. Bu aslında ortalama veya daha yüksek karmaşıklığa sahip, önceden yazılmış Ethereum akıllı sözleşmeleri için geçerlidir. Basit akıllı sözleşmeler için hata olasılığı küçükse, karmaşık akıllı sözleşmelerde sıklıkla fonların çalınmasına, dondurulmasına, akıllı sözleşmelerin beklenmedik bir şekilde imha edilmesine vb. yol açan hatalar meydana gelir. bilinen.

İkinci dezavantaj, sanal makinenin kendisinin de insanlar tarafından yazıldığı için mükemmel olmamasıdır. Rasgele komutlar yürütebilir ve güvenlik açığı da burada yatmaktadır: önceden öngörülemeyen sonuçlara yol açacak bir dizi komut belirli bir şekilde yapılandırılabilir. Bu çok karmaşık bir alan ancak bu güvenlik açıklarının Ethereum ağının mevcut sürümünde mevcut olduğunu ve birçok akıllı sözleşmenin başarısız olmasına yol açabileceğini gösteren birkaç çalışma zaten mevcut.

Bir diğer büyük zorluk ise dezavantaj sayılabilir. Gerçek şu ki, pratik veya teknik olarak, sanal bir makinede yürütülecek bir sözleşmenin bayt kodunu derlerseniz, belirli bir işlem sırasını belirleyebileceğiniz sonucuna varabilirsiniz. Bu işlemler birlikte gerçekleştirildiğinde sanal makineye büyük yük bindirecek ve bu işlemlerin gerçekleştirilmesi için ödenen ücretle orantısız bir şekilde yavaşlayacaktır.

Geçmişte, Ethereum'un geliştirilmesinde, sanal makinenin çalışmasını ayrıntılı olarak anlayan birçok kişinin bu tür güvenlik açıklarını bulduğu bir dönem zaten vardı. Aslında işlemler çok küçük bir ücret ödedi ancak pratik olarak tüm ağı yavaşlattı. Bu sorunları çözmek çok zordur, çünkü öncelikle bunları belirlemek, ikinci olarak bu işlemleri gerçekleştirmek için fiyatı ayarlamak ve üçüncüsü, tüm ağ düğümlerini yeni bir sürüme güncellemek anlamına gelen bir sert çatal gerçekleştirmek gerekir. yazılımın etkinleştirilmesi ve ardından bu değişikliklerin eşzamanlı olarak etkinleştirilmesi.

Ethereum'a gelince, pek çok araştırma yapıldı, pek çok pratik deneyim kazanıldı: hem olumlu hem de olumsuz, ancak yine de hala bir şekilde ele alınması gereken zorluklar ve güvenlik açıkları var.

Böylece makalenin tematik kısmı tamamlandı, sık sık ortaya çıkan sorulara geçelim.

SSS

— Mevcut bir akıllı sözleşmenin tüm tarafları şartları değiştirmek isterse, çoklu imzayı kullanarak bu akıllı sözleşmeyi iptal edebilirler ve ardından güncellenmiş yürütme koşullarına sahip yeni bir akıllı sözleşme oluşturabilirler mi?

Buradaki cevap iki yönlü olacaktır. Neden? Çünkü akıllı sözleşme bir yandan bir kez tanımlanır ve artık herhangi bir değişiklik gerektirmez, diğer yandan bazı koşulların tamamen veya kısmen değiştirilmesini sağlayan önceden yazılmış bir mantığa sahip olabilir. Yani akıllı sözleşmenizde bir şeyi değiştirmek istiyorsanız bu koşulları hangi koşullar altında güncelleyebileceğinizi belirlemeniz gerekir. Buna göre sözleşmenin yenilenmesi ancak bu kadar ihtiyatlı bir şekilde organize edilebilir. Ancak burada da başınız belaya girebilir: bir hata yapın ve buna karşılık gelen bir güvenlik açığına maruz kalın. Dolayısıyla bu tür şeylerin çok detaylı ve dikkatli bir şekilde tasarlanıp test edilmesi gerekiyor.

— Arabulucu katılımcı taraflardan biriyle bir anlaşma yaparsa: emanet veya akıllı sözleşme? Akıllı sözleşmede arabulucu gerekli midir?

Akıllı sözleşmede arabulucuya gerek yoktur. Mevcut olmayabilir. Emanet durumunda arabulucu taraflardan biriyle komploya girerse, o zaman evet, bu plan keskin bir şekilde tüm değerini kaybeder. Bu nedenle arabulucular, bu süreçte yer alan tüm tarafların aynı anda güvenebileceği şekilde seçilmektedir. Buna göre, güvenmediğiniz bir aracıyla çoklu imzalı bir adrese coin aktarmayacaksınız.

— Bir Ethereum işlemiyle birçok farklı tokenı adresinizden farklı hedef adreslere, örneğin bu tokenlerin alınıp satıldığı değişim adreslerine aktarmak mümkün müdür?

Bu iyi bir soru ve Ethereum işlem modeliyle ve bunun Bitcoin modelinden ne kadar farklı olduğuyla ilgili. Ve fark radikaldir. Ethereum işlem modelinde yalnızca para aktarırsanız, bunlar yalnızca bir adresten diğerine aktarılır, değişiklik yapılmaz, yalnızca belirttiğiniz miktar kadar aktarılır. Başka bir deyişle, bu, harcanmamış çıktılar (UTXO) modeli değil, hesaplar ve karşılık gelen bakiyeler modelidir. Kurnazca bir akıllı sözleşme yazarsanız, tek bir işlemde birkaç farklı tokeni aynı anda göndermek teorik olarak mümkündür, ancak yine de birçok işlem yapmanız, bir sözleşme oluşturmanız, ardından tokenleri ve madeni paraları ona aktarmanız ve ardından uygun yöntemi çağırmanız gerekecektir. . Bu, çaba ve zaman gerektirir, dolayısıyla pratikte bu şekilde çalışmaz ve Ethereum'daki tüm ödemeler ayrı işlemlerde yapılır.

— Ethereum platformuyla ilgili efsanelerden biri, harici bir İnternet kaynağının verilerine bağlı olacak koşulları tanımlamanın imkansız olmasıdır, o zaman ne yapmalı?

Çözüm, akıllı sözleşmenin kendisinin, dış dünyadaki durum hakkında veri toplayan ve bunu özel yöntemlerle akıllı sözleşmelere aktaran bir veya daha fazla sözde güvenilir kahin sağlayabilmesidir. Sözleşmenin kendisi, güvenilir taraflardan aldığı verilerin doğru olduğunu kabul eder. Daha fazla güvenilirlik için, geniş bir kehanet grubu seçin ve gizli anlaşma riskini en aza indirin. Sözleşmenin kendisi, çoğunluk ile çelişen kahinlerden gelen verileri dikkate almayabilir.

Blockchain ile ilgili çevrimiçi kursun derslerinden biri bu konuya ayrılmıştır - “Akıllı Sözleşmelere Giriş anlayışının sonucu olarak, buzdolabında iki üç günden fazla durmayan küçük şişeler elinizin altında bulunur.

Kaynak: habr.com

Yorum ekle