İnsanlığın tüm tarihi, zincirlerden kurtulmanın ve yeni, hatta daha güçlü zincirlerin yaratılmasının sürekli bir sürecidir. (Anonim yazar)
Çok sayıda blockchain projesini (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin vb.) analiz ettiğimde, teknik açıdan hepsinin aynı prensipler üzerine inşa edildiğini anlıyorum. Blockchainler, tüm tasarım, dekor ve kullanım amaçlarına rağmen temeli, duvarları, çatısı, pencereleri, kapıları birbirine belirli yollarla bağlanan evleri anımsatıyor. Bina tasarımının temel prensiplerini anlarsanız ve kullanılan malzemelerin özelliklerini biliyorsanız, o zaman belirli bir evin kullanım amacını belirleyebilirsiniz. Şu anda blockchain ile ilgili herkesin duyduğu bir durum ortaya çıktı, ancak çok az kişi mimariyi ve çalışma prensiplerini anlıyor. Dolayısıyla blockchain teknolojilerini kullanmanın neden ve nasıl mantıklı olduğu konusunda bir yanlış anlaşılma mevcut.
Bu yazıda tüm blockchainlerde ortak olan özellikleri ve ilkeleri analiz edeceğiz. Şimdi blockchain kullanılarak çözülebilecek sorunlara bakalım ve materyali güçlendirmek için sanal sitemizde küçük ama gerçek bir blockchain oluşturalım!
Öyleyse blockchain'in başlangıçta hangi sorunları çözdüğünü hatırlayalım.
Eminim birçok kişi dağıtılmış, merkezi olmayan, halka açık ve değişmez bir veritabanı hakkında söyleyecektir. Peki bütün bunlar neden gerekliydi?
İncelenen konuyla ilgili tüm makaleler ve kitaplar bunlara dayandığı için herhangi bir teknolojiyi incelemeye standartları okuyarak başlamayı tercih ediyorum. Ancak şu anda ISO'nun oluşturduğu herhangi bir blockchain standardı yok; onların gelişimi için. Şu anda, her halka açık blockchain projesinin, esasen teknik bir spesifikasyon olan kendi White paper belgesi vardır. Kamuya açık ilk blockchain projesi Bitcoin ağıdır. Ağın resmi web sitesine gidin ve her şeyin başladığı yer.
Blockchain Mücadelesi
Dolayısıyla, blockchain'in Bitcoin öncü ağında çözdüğü görev, dijital varlıkların (varlıkların) mülkiyetinin güvenilir olmayan bir ortamda aracılar olmadan güvenilir bir şekilde aktarılmasını gerçekleştirmektir. Örneğin, Bitcoin ağında bir dijital varlık, bitcoin dijital paralarıdır. Ve Bitcoin ve diğer blockchainlerin tüm teknik çözümleri bu sorunu çözmeye yöneliktir.
Blockchain'in çözdüğü sorunlar
Belirli bir finans kuruluşunun, herhangi bir kişiye para transferinin mümkün olduğu dünya çapında bir ağ kurduğunu söylediğini varsayalım. Ona inanacak mısın? Bu kuruluş Visa veya MasterCard ise büyük olasılıkla buna inanacaksınız, ancak nispeten konuşursak AnonymousWorldMoney ise muhtemelen inanmayacaksınız. Neden? Ama çünkü dağıtık sistemlerin özel şirketler tarafından nasıl, hangi amaçlarla yapıldığını, bunun nelere yol açabileceğini çok iyi biliyoruz. Bu tür sistemlerin sorunlarına ve bunların blockchain teknolojileri kullanılarak nasıl çözülebileceğine daha yakından bakalım.
Diyelim ki koşullu AnonymousWorldMoney'de veritabanlarına sahip sunucular var ve bunlardan birkaçının farklı veri merkezlerinde olması iyi. Gönderen para transfer ettiğinde bir işlem kaydedilir, bu işlem tüm sunuculara kopyalanır ve para alıcıya ulaşır.

İdeal bir dünyada bu şema harika çalışır, ancak bizim dünyamızda aşağıdaki sorunlar ortaya çıkar:
- Bir yanda katılımcıların kimliklerinin belirlenmesi sorunu, diğer yanda işlemlerin anonimleştirilmesi ihtiyacı. Onlar. Parayı belirli bir alıcıya ve işleme katılanlar dışında hiç kimsenin bu işlemden haberi olmayacak şekilde aktarmanız gerekir. Bankaların belirli bir gerçek veya tüzel kişiye bağlı hesap numaraları ve banka kartları vardır ve banka gizliliği, işlem bilgilerini korur. Ve koşullu AnonymousWorldMoney'nin kişisel verileri ve işlem bilgilerini kendi amaçları doğrultusunda kullanmayacağını kim garanti eder?
- Alıcının kendisine aktarılan tutarı tam olarak aldığından nasıl emin olabilirim? Göreceli olarak konuşursak, gönderen 100 $ transfer etti ve alıcı 10 $ aldı. Gönderen, makbuzuyla birlikte AnonymousWorldMoney ofisine gelir ve katip, gönderenin yalnızca 10$ transfer ettiği yazan versiyonunu gösterir.
- Güvenilmeyen bir ortam sorunu, örneğin çift harcama adı verilen bir dolandırıcılık. Vicdansız bir katılımcı, ödeme tüm sunuculara kopyalanana kadar bakiyesini birkaç kez harcayabilir. Elbette kimse iptal edilmedi ve sonuçta anlaşmaya varılacak, ancak sağlanan hizmetler veya mallar için kimse para alamayacak. Bu nedenle, ödeme kuruluşuna veya işlemlere katılanlara tam bir güven yoksa, güvene değil kriptografiye dayalı bir ağ oluşturmak gerekir.
- Koşullu AnonimWorldMoney'nin, kasıtsız olarak veya kötü niyet nedeniyle kullanılamaz hale gelebilecek sınırlı sayıda sunucusu vardır.
- AnonymousWorldMoney kendi somut komisyonunu alacaktır.
- Kontrol imkanı. Bitcoin'in çalışması sırasında, insanların yalnızca birbirlerine para aktarmak değil, aynı zamanda işlem için çeşitli koşulları kontrol etmek, çalışma senaryolarını programlamak, koşullara bağlı olarak eylemleri otomatik olarak gerçekleştirmek vb. istedikleri ortaya çıktı.
Blockchain bu sorunları nasıl çözüyor?
- Katılımcıların tanımlanması, özel ve genel olmak üzere bir çift anahtar kullanılarak gerçekleştirilir ve dijital imza algoritması, göndereni ve alıcıyı benzersiz bir şekilde tanımlayarak kimliklerini anonim bırakır.
- İşlemler bloklar halinde toplanır, bloğun hash'i hesaplanır ve bir sonraki bloğa yazılır. Bloklardaki bu hash kayıt dizisi, blockchain teknolojisine adını verir ve aynı zamanda blokların veya bloklardan bireysel işlemlerin fark edilmeden değiştirilmesini/silinmesini imkansız hale getirir. Böylece, eğer bir işlem blok zincirine dahil edilmişse, verilerinin değişmeden kalacağından emin olabilirsiniz.
- Hangi verilerin geçerli sayılacağı ve hangilerinin atılacağı konusunda bir ağ fikir birliğine varılarak çift harcama dolandırıcılığı önlenir. Bitcoin ağında konsensus, iş kanıtı (PoW) ile sağlanır.
- Ağın güvenilirliği, her katılımcının kendi düğümünü çalıştırabildiği, blok zincirinin tam bir kopyasını alabileceği ve ayrıca işlemlerin doğruluğunu bağımsız olarak kontrol etmeye başlayabileceği blok zincirinin halka açık olmasıyla sağlanır. Modern blok zincirlerinin yalnızca halka açık (açık) değil, aynı zamanda özel (kapalı) blok zincirlerin yanı sıra birleşik şemaların kullanımını da mümkün kıldığına dikkat edilmelidir.
- Blockchain komisyonlardan tamamen kurtulamayacak çünkü... Ağı destekleyen kişilere ödeme yapmanız gerekir, ancak blockchain'de komisyona duyulan ihtiyaç o kadar ikna edici bir şekilde kanıtlanmıştır ki, bunun gerekliliği konusunda hiçbir şüphe yoktur.
- Modern blok zincirleri, blok zincirde Akıllı Sözleşmeler olarak adlandırılan iş mantığını uygulama yeteneğine sahiptir. Akıllı sözleşmelerin mantığı çeşitli üst düzey dillerde uygulanmaktadır.
Daha sonra bu çözümleri daha ayrıntılı olarak ele alacağız.
Blok zinciri mimarisi
Blok Zinciri Bileşenleri
Her katılımcı, blok zincirinin tam bir kopyasıyla (tam düğüm) kendi düğümünü başlatabilir. Blok zincirindeki işlemleri kaydedebilen tam düğümlere denir fikir birliği düğümleri (tanık) veya madenciler (madenci). Yalnızca işlemlerin doğruluğunu kontrol eden tam düğümlere denir denetim düğümleri (denetim). Hafif istemciler (hafif istemciler) blok zincirinin tam kopyalarını saklamaz, ancak tam düğümleri kullanarak ağ ile etkileşime girer.
Çoğu kullanıcı işlem yapmak için hafif istemcileri veya web cüzdanlarını kullanır. Tüm düğümler birbirine bağlıdır. Bu öğeler kümesiyle ağ mimarisi daha kararlı hale gelir:

İşlem yaşam döngüsü
İşlem yaşam döngüsüne bakalım ve onu parça parça inceleyelim:

Blockchain teknolojileri
Teknik çözümler ve bunların birbirleriyle olan bağlantıları üzerinde daha ayrıntılı duralım.
kimlik
Her blockchain işleminin dijital olarak imzalanması gerekir. Bu nedenle, bir işlemi tamamlamak için her katılımcının bir anahtar çiftine sahip olması gerekir: özel / genel. Bazen bir çift anahtara cüzdan denir çünkü anahtarlar, katılımcının benzersiz dijital adresi ve bakiyesiyle benzersiz bir şekilde ilişkilendirilir. Gerçekte anahtarlar ve adresler, farklı sayı sistemlerindeki sayı dizilerinden ibarettir. Anahtar ve cüzdan adreslerine örnekler:
Private key: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
Public key: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Address: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27VBlok zincirlerinde dijital imza oluşturmak için eliptik eğrilere dayalı bir algoritma kullanılır: Eliptik Eğri Dijital İmza Algoritması (ECDSA). Çalışması için özel anahtar (256 bitlik sayı) genellikle rastgele alınır. Anahtar seçeneklerinin sayısı 2 üzeri 256'dır, dolayısıyla özel anahtarların değerlerini eşleştirmenin pratik imkansızlığından bahsedebiliriz.
Daha sonra, değeri eliptik eğri üzerinde bulunan bir noktanın koordinatları ile çarpılarak özel anahtardan genel anahtar elde edilir ve sonuçta aynı eğri üzerinde yeni bir noktanın koordinatları elde edilir. Bu eylem, dijital imzalama işlemlerine uygun bir anahtar çifti almanızı sağlar. Son olarak cüzdan adresi, genel anahtardan benzersiz bir şekilde türetilir.
Blockchain'de kullanılan şifrelemeyle ilgili ayrıntıları içeren birçok makale var, örneğin:
Özel anahtar kesinlikle gizli olmalı ve güvenli tutulmalıdır. Açık anahtar herkes tarafından bilinir. Özel anahtar kaybolursa varlığa (coinlere) erişim tekrar sağlanamaz ve para sonsuza kadar kaybolur. Bu nedenle, özel anahtarların güvenli bir şekilde saklanması görevi son derece önemlidir, çünkü Burası her zaman pasaportunuzla gelip hesabınızı geri alabileceğiniz bir banka değil. Flash sürücülere benzer, soğuk kripto cüzdanların üretimi için koca bir endüstri var:

veya daha güvenilir yöntemler kullanabilirsiniz, örneğin özel anahtarın değerini jetonlara damgalamak:

Işlemler
İşlem yapısı hakkında daha fazla ayrıntıyı makalede bulabilirsiniz. . Her işlemin en azından aşağıdaki verilere sahip olduğunu anlamamız bizim için önemlidir:
From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - цифровой адрес отправителя
To: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - цифровой адрес получателя
Value: 0.0001 - сумма транзакции
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - хэш транзакцииDaha sonra işlem özel bir anahtarla imzalanır ve gönderilir (protokolün işleyişine ilişkin ayrıntılara bakın) ) işlemlerin geçerliliğini kontrol eden blok zincirindeki tüm düğümlere. İşlem doğrulama algoritması önemsiz değildir ve şunları içerir: .
İşlem blokları
İşlemlerin geçerliliği kontrol edildikten sonra düğümler bunlardan bloklar oluşturur. İşlemlere ek olarak önceki bloğun hash'i ve bir sayı (Nonce counter) bloğa yazılır ve mevcut bloğun hash'i SHA-256 algoritması kullanılarak hesaplanır. Hash'in karmaşıklık koşullarını oluşturmuş olması gerekir. Örneğin Bitcoin ağında, hashin zorluğu ağın gücüne bağlı olarak her 2 haftada bir otomatik olarak değiştirilir, böylece yaklaşık her 10 dakikada bir blok oluşturulur. Karmaşıklık aşağıdaki koşulla belirlenir: Bulunan karma önceden belirlenmiş bir sayıdan az olmalıdır. Bu koşul karşılanmazsa Nonce'ye 1 eklenir ve hash hesaplama işi tekrarlanır. Bir karma seçmek için Nonce alanı kullanılır çünkü Blokta değiştirilebilecek tek veri budur; geri kalanı değişmeden kalmalıdır. Geçerli bir karmanın, gerçek karmalardan biri gibi, baştaki belirli sayıda sıfıra sahip olması gerekir:
000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91Başarılı bir hash bulmak, Bitcoin veya Ethereum ağları için yapılan işin (Proof-of-Work, PoW) kanıtıdır. Hash bulma sürecine altın madenciliğine benzer şekilde madencilik adı verilir. İsim, sürecin özünü oldukça doğru bir şekilde tanımlıyor, çünkü basit bir seçenek araması var ve eğer birisi uygun bir karma bulursa, o zaman bu gerçekten şanstır. Tonlarca atık kayanın içinde gerçek bir altın külçesi bulmak gibi. Blok ödülü şu anda 12.5 BTC'dir ve bunu mevcut Bitcoin kuru olan 3900 $ ile çarparsanız, bir kilogramdan fazla saf altın elde edersiniz. Uğruna savaşılacak bir şey var!
Başarılı bir hash bulduktan sonra, blok ve bulunan hash'in kendisi bir sonraki blok olarak blok zincirine yazılır. Blokların yapısı hakkında daha fazla ayrıntıyı makalede bulabilirsiniz. ve aşağıda basitleştirilmiş bir diyagram bulunmaktadır:

Blockchain, henüz önceki bloğun hash'ine sahip olmayan bir blokla başlar. Blockchain'de böyle bir blok vardır ve kendi adı olan Genesis bloğuna sahiptir. Geri kalan bloklar aynı yapıya sahiptir ve yalnızca işlem sayısında farklılık gösterir. Şu anda Bitcoin veya Ethereum'da oluşturulan gerçek işlemler ve bloklar şurada görüntülenebilir: .
Bitcoin'de blokların boyutu 1 MB ile sınırlıdır ve yaklaşık 200 byte'lık bir işlemde minimum bilgi miktarı ile bir bloktaki maksimum işlem sayısı 6000 civarında olabilir. Bu arada, Bitcoin'in herkesin güldüğü performansını takip ediyoruz: yaklaşık olarak her 10 dakikada bir * 60 saniye = 600 saniyede bir blok üretilir, bu da yaklaşık 10 TPS'lik resmi bir performans sağlar. Aslında bu üretkenlik değil, kasıtlı olarak uygulanan bir iş algoritmasıdır. Ethereum'da rekabet için blok oluşturma süresini 15 saniyeye çıkardılar. ve üretkenlik resmen arttı. Bu nedenle PoW'u fikir birliği olarak kullanan blockchainlerde performansı karşılaştırmanın hiçbir anlamı yok çünkü doğrudan herhangi bir değere atanabilecek önbellek hesaplamasının karmaşıklığına bağlıdır.
Çatallar
Örneğin, birkaç düğüm karmaşıklık koşullarını karşılayan ancak değerleri farklı olan karmalar bulursa (başka bir deyişle, farklı fikir birliğine varırlarsa) ve blok zincirine bloklar yazarsa ne olur? Bakalım blockchain bu duruma karşı nasıl koruma sağlıyor. Bu durumda çatal adı verilen bir olay meydana gelir ve blockchain, zincirin iki versiyonuna sahiptir:

Sonra ne olur? Daha sonra ağın bir kısmı bir zincirden, bir kısmı da diğerinden N+2 bloğu üzerinde çalışmaya başlar:

Bu bloklardan biri daha önce bulunup blok zincirine gönderilecek ve ardından kurallara göre blok zincirinin daha uzun bir zincire geçmesi ve alternatif bloktaki tüm işlemleri iptal etmesi gerekecek:

Aynı zamanda, bir katılımcının işleminin iptal edilen çatal bloklarından yalnızca birinde olduğu bir durum ortaya çıkabilir. Bu nedenle, istenen işlemin blok zincirine kaydedildiğinden emin olmak için genel bir öneri var - işleme güvenmeden önce, sonraki birkaç bloğun blok zincirine eklenmesini beklemelisiniz. Farklı blok zincirleri için kaç bloğun bekleneceğine ilişkin öneriler farklılık gösterir. Örneğin Bitcoin ağı için minimum 2 blok, maksimum 6 bloktur.
Blok çatallarıyla aynı tablo, sözde %51 saldırısı sırasında da gözlemlenecek; bu, bir grup madencinin hileli işlemleriyle zinciri iptal etmeye çalışarak alternatif bir blok zinciri oluşturmaya çalıştığı zamandır. Her ne kadar şu anda dolandırıcılık yerine gücünüzü dürüst madenciliğe harcamak daha karlı olsa da.
Uzlaşma
Blok zincirine bir blok kaydetmek için ağın bir fikir birliğine varması gerekir. Bilgisayar iletişim ağlarında fikir birliğine ulaşma görevini hatırlayalım. Sorun Bizans generalleri BFT'nin görevi olarak formüle edilmiştir (). Bizans ordusunun sorunlarının pitoresk tanımını atlayarak, sorun şu şekilde formüle edilebilir: Bazı ağ düğümleri onları kasıtlı olarak çarpıtabilirse, ağ düğümleri nasıl ortak bir sonuca varabilir? BFT sorununu çözmeye yönelik mevcut algoritmalar, dolandırıcıların 1/3'ten az olması durumunda ağın doğru şekilde çalışabileceğini gösteriyor. BFT mutabakatı neden Bitcoin ağına uygulanmadı? PoW kullanmak neden gerekliydi? Birkaç sebep var:
- BFT, küçük ve sabit bir düğüm kümesiyle iyi çalışır, ancak halka açık bir blok zincirde düğümlerin sayısı tahmin edilemez ve dahası, düğümler rastgele açılıp kapatılabilir.
- İnsanları blockchain düğümlerini başlatmaya motive etmek gerekiyor. Bunun için de insanların ödüllendirilmesi gerekiyor. BFT'de resmi olarak ödül alınacak hiçbir şey yok, ancak PoW'da ödülün ne için olduğu sezgisel düzeyde herkes için açıktır: blok karmasını bulma sürecinde işlemci tarafından tüketilen elektrik için.
PoW'a ek olarak modern blockchainlerde kullanılan birkaç başka fikir birliği de vardır, örneğin:
- PoS (Stake Kanıtı) – blockchain üzerinde
- DPoS (Yetkilendirilmiş Hisse Kanıtı) - blockchain üzerinde
- BFT'deki değişiklikler: SBFT (Basitleştirilmiş BFT) ve PBFT (Pratik BFT), örneğin blockchain'de
PoS mutabakatı üzerinde biraz duralım, çünkü... Özel blok zincirlerde en yaygın olanı PoS ve çeşitleridir. Neden özel olarak? Bir yandan PoS'un özellikleri PoW'a kıyasla daha iyidir çünkü Fikir birliğine varmak için daha az bilgi işlem kaynağına ihtiyaç duyulur, bu da blok zincirine veri yazma hızının artması anlamına gelir. Ancak öte yandan PoS'un dolandırıcılık için daha fazla fırsatı var, dolayısıyla bunu etkisiz hale getirmek için blockchaindeki tüm katılımcıların bilinmesi gerekiyor.
PoS konsensüsü, hesaptaki veya daha doğrusu hesaptaki değil teminattaki fon miktarına bağlı olarak blok zincirine işlemler içeren bir blok yazabilen bir düğümün seçimine dayanır. Teminat olarak ne kadar çok paranız varsa, ağın blok yazmak için düğümünüzü seçme olasılığı o kadar artar. Blokenin geçersiz olması durumunda depozito iade edilmeyecektir. Bu dolandırıcılığa karşı koruma sağlar. Aşağıdaki PoS varyasyonları vardır:
- Yetkilendirilmiş PoS (DPoS) fikir birliği, katılımcıları "seçmenler" ve "doğrulayıcılar" olarak ikiye ayırır. Coin sahipleri (oy veren katılımcılar), blockchain üzerindeki işlemleri doğrulama ve kaydetme yetkilerini diğer katılımcılara devreder. Böylece, doğrulayıcılar tüm hesaplama işini yapar ve bunun için bir ödül alır ve oy veren katılımcıların varlığı, doğrulayıcıların dürüstlüğünü garanti eder, çünkü herhangi bir zamanda değiştirilebilirler.
- LPoS (Kiralanan Hisse Kanıtı) fikir birliği, fonlarınızı diğer düğümlere kiralamanıza olanak tanır, böylece blokları doğrulama şansları artar. O. Gerçek işlem doğrulamaya ve blok madenciliğine katılmadan işlemler için komisyon alabilirsiniz.
Henüz yaygın olarak kullanılmayan bir dizi başka fikir birliği de var, bunları burada sadece bilgi amacıyla listeleyeceğim ve fikir birliği algoritmalarının genel bir özetini örneğin makalede bulabilirsiniz: .
- PoET (Geçen Sürenin Kanıtı)
- PoC (Kapasite Kanıtı)
- PoB (Yanma Kanıtı)
- PoWeight (Ağırlık Kanıtı)
- PoA (Etkinlik Kanıtı) – PoW + PoS
- PoI (Önemliliğin Kanıtı)
Blockchainlerin güvenilirliği ve dağıtım modelleri
Herkese açık blok zinciri
Kararlılık Açık Alan veya başka bir isim İzinsiz blok zinciri Bu, herkesin bağlantı kurmasına ve bilgileri görüntülemesine, hatta kendi düğümünü bağlamasına izin verilerek elde edilir ve güven, PoW konsensüsü üzerine kuruludur.
Özel blok zinciri
Özel Etkinlik veya Özel İzinli blockchain. Bu blok zincirlerinde yalnızca belirli bir katılımcı grubu (kurumlar veya kişiler) bilgiye erişebilir. Bu tür blok zincirleri, genel fayda veya verimliliği artırma hedefiyle kuruluşlar tarafından oluşturulur. Güvenilirlikleri, katılımcıların ortak hedefleri ve PoS ve BFT konsensüs algoritmaları ile sağlanmaktadır.
Blockchain Konsorsiyumu
Orada konsorsiyum veya Kamu İzinli blockchain. Bunlar, herkesin görüntülemek için bağlanabileceği blok zincirlerdir, ancak bir katılımcı yalnızca diğer katılımcıların izniyle bilgi ekleyebilir veya düğümüne bağlanabilir. Bu tür blok zincirleri, müşterilerin veya ürün tüketicilerinin veya bir bütün olarak toplumun güvenini artırmak amacıyla kuruluşlar tarafından oluşturulur. Burada güvenilirlik, katılımcılar arasında güvenin varlığı ve aynı PoS ve BFT konsensüs algoritmaları ile de sağlanır.
Akıllı Sözleşmeler
Bitcoin'den sonra uygulanan blok zincirler, bir dereceye kadar akıllı sözleşmeleri yürütme yeteneğini ekledi. Temel olarak akıllı sözleşme, program kodunun yürütülmek üzere yerleştirildiği bir işlemdir. Ethereum ağındaki akıllı sözleşmeler EVM'de (Ethereum Sanal Makinesi) yürütülür. Bir akıllı sözleşmeyi yürütmeye başlamak için, bunun başka bir işlem tarafından açıkça başlatılması veya yürütme ön koşullarının karşılanması gerekir. Akıllı sözleşmenin uygulanmasının sonuçları da blok zincirine kaydedilecektir. Blockchain dışından veri almak mümkündür ancak son derece sınırlıdır.
Akıllı sözleşme kullanılarak hangi iş mantığı uygulanabilir? Aslında blockchain'den gelen verileri kullanarak koşulları kontrol etmek, bu koşullara bağlı olarak dijital varlıkların sahiplerini değiştirmek, verileri blockchain içinde kalıcı bir depoya kaydetmek gibi pek bir şey yok aslında. Mantık özel bir üst düzey dil olan Solidity'de uygulanır.
Akıllı sözleşmeler kullanılarak uygulanan klasik bir işlevsellik örneği, ICO'lar için token verilmesidir. Örneğin, 500 tutarında mütevazı bir AlexToken çıkarmak için akıllı bir sözleşme uyguladım. İle olduğunu
Solidity dilinde akıllı sözleşmenin kaynak kodu
pragma solidity ^0.4.23;
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
**/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
**/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
**/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
**/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
**/
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender account.
**/
constructor() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
**/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
**/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
/**
* @title ERC20Basic interface
* @dev Basic ERC20 interface
**/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
**/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title Basic token
* @dev Basic version of StandardToken, with no allowances.
**/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
/**
* @dev total number of tokens in existence
**/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
**/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
**/
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
}
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
**/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
*
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
**/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
**/
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
**/
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
**/
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
/**
* @title Configurable
* @dev Configurable varriables of the contract
**/
contract Configurable {
uint256 public constant cap = 1000000000*10**18;
uint256 public constant basePrice = 100*10**18; // tokens per 1 ether
uint256 public tokensSold = 0;
uint256 public constant tokenReserve = 500000000*10**18;
uint256 public remainingTokens = 0;
}
/**
* @title CrowdsaleToken
* @dev Contract to preform crowd sale with token
**/
contract CrowdsaleToken is StandardToken, Configurable, Ownable {
/**
* @dev enum of current crowd sale state
**/
enum Stages {
none,
icoStart,
icoEnd
}
Stages currentStage;
/**
* @dev constructor of CrowdsaleToken
**/
constructor() public {
currentStage = Stages.none;
balances[owner] = balances[owner].add(tokenReserve);
totalSupply_ = totalSupply_.add(tokenReserve);
remainingTokens = cap;
emit Transfer(address(this), owner, tokenReserve);
}
/**
* @dev fallback function to send ether to for Crowd sale
**/
function () public payable {
require(currentStage == Stages.icoStart);
require(msg.value > 0);
require(remainingTokens > 0);
uint256 weiAmount = msg.value; // Calculate tokens to sell
uint256 tokens = weiAmount.mul(basePrice).div(1 ether);
uint256 returnWei = 0;
if(tokensSold.add(tokens) > cap){
uint256 newTokens = cap.sub(tokensSold);
uint256 newWei = newTokens.div(basePrice).mul(1 ether);
returnWei = weiAmount.sub(newWei);
weiAmount = newWei;
tokens = newTokens;
}
tokensSold = tokensSold.add(tokens); // Increment raised amount
remainingTokens = cap.sub(tokensSold);
if(returnWei > 0){
msg.sender.transfer(returnWei);
emit Transfer(address(this), msg.sender, returnWei);
}
balances[msg.sender] = balances[msg.sender].add(tokens);
emit Transfer(address(this), msg.sender, tokens);
totalSupply_ = totalSupply_.add(tokens);
owner.transfer(weiAmount);// Send money to owner
}
/**
* @dev startIco starts the public ICO
**/
function startIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
currentStage = Stages.icoStart;
}
/**
* @dev endIco closes down the ICO
**/
function endIco() internal {
currentStage = Stages.icoEnd;
// Transfer any remaining tokens
if(remainingTokens > 0)
balances[owner] = balances[owner].add(remainingTokens);
// transfer any remaining ETH balance in the contract to the owner
owner.transfer(address(this).balance);
}
/**
* @dev finalizeIco closes down the ICO and sets needed varriables
**/
function finalizeIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
endIco();
}
}
/**
* @title LavevelToken
* @dev Contract to create the Lavevel Token
**/
contract AlexToken is CrowdsaleToken {
string public constant name = "AlexToken";
string public constant symbol = "ALT";
uint32 public constant decimals = 18;
}ve ağın gördüğü ikili gösterim
60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029Akıllı sözleşmeler hakkında daha fazla ayrıntıyı makalede bulabilirsiniz: .
Sonuç
Modern blockchainlerin üzerine inşa edildiği teknolojileri ve birbirlerine nasıl bağlandıklarını listeledik. Şimdi hangi sorunların blockchain kullanılarak çözülebileceğini ve hangi çözümlerin en iyi ihtimalle etkisiz olacağını formüle edelim. Dolayısıyla aşağıdaki durumlarda blockchain kullanılması gerekli değildir:
- İşlemler güvenilir bir ortamda gerçekleştirilir;
- Bir aracı komisyonunun varlığı katılımcıların hayatını kötüleştirmez;
- Katılımcıların dijital varlık olarak temsil edilebilecek mülkleri yoktur;
- Dijital varlıklarda herhangi bir dağıtım yoktur; değerin yalnızca bir katılımcıya ait olması veya sağlanması.
Gelecekte blockchain için neler var? Artık blockchain teknolojilerinin geliştirilmesine yönelik olası yollar hakkında yalnızca spekülasyon yapabiliriz:
- Blockchain, belirli bir dizi sorunu çözmek için örneğin SQL veya NoSQL ile aynı ortak veritabanı teknolojisi haline gelecektir;
- Blockchain, HTTP'nin İnternet için olduğu gibi yaygın bir protokol haline gelecek;
- Blockchain gezegendeki yeni finansal ve politik sistemin temeli olacak!
Bir sonraki bölümde şu anda hangi blockchainlerin mevcut olduğuna ve bunların farklı endüstrilerde neden kullanıldığına bakacağız.
Bu sadece başlangıç!
Kaynak: habr.com
