Kitob “Ethereum blockchain uchun mustahkamlik aqlli shartnomalarini yaratish. Amaliy qo'llanma"

Kitob “Ethereum blockchain uchun mustahkamlik aqlli shartnomalarini yaratish. Amaliy qo'llanma"
Bir yildan ko'proq vaqt davomida men "Ethereum blokcheyn uchun mustahkamlik aqlli kontraktlarini yaratish" kitobi ustida ishlayapman. Amaliy qo'llanma" va endi bu ish tugallandi va kitob Litrlarda chop etilgan va mavjud.

Umid qilamanki, mening kitobim sizga Ethereum blokcheyni uchun Solidity smart kontaktlari va tarqatilgan DApps yaratishni tezda boshlashingizga yordam beradi. U amaliy topshiriqlar bilan 12 ta darsdan iborat. Ularni tugatgandan so'ng, o'quvchi o'zining mahalliy Ethereum tugunlarini yaratishi, aqlli shartnomalarni nashr etishi va ularning usullarini chaqirishi, oracle yordamida real dunyo va aqlli kontraktlar o'rtasida ma'lumot almashishi va Rinkeby test disk raskadrovka tarmog'i bilan ishlashi mumkin bo'ladi.

Kitob blokcheyn sohasidagi ilg‘or texnologiyalarga qiziqqan va qiziqarli va istiqbolli ish bilan shug‘ullanish imkonini beruvchi bilimlarni tezda egallashni istagan har bir kishi uchun mo‘ljallangan.

Quyida siz kitobning mazmuni va birinchi bobini topasiz (shuningdek Litr kitobdan parchalar mavjud). Fikr, mulohazalar va takliflarni qabul qilaman degan umiddaman. Kitobning keyingi nashrini tayyorlashda bularning barchasini hisobga olishga harakat qilaman.

MundarijakirishBizning kitobimiz nafaqat Ethereum blokcheynining tamoyillarini tushunishni, balki ushbu tarmoq uchun Solidity dasturlash tilida tarqatilgan DApps yaratish bo'yicha amaliy ko'nikmalarga ega bo'lishni istaganlar uchun mo'ljallangan.

Bu kitobni shunchaki o'qibgina qolmay, balki darslarda tasvirlangan amaliy topshiriqlarni bajarib, u bilan ishlash yaxshiroqdir. Ishlash uchun sizga Debian yoki Ubuntu OS o'rnatilgan mahalliy kompyuter, virtual yoki bulutli server kerak bo'ladi. Ko'p vazifalarni bajarish uchun Raspberry Pi-dan ham foydalanishingiz mumkin.

Birinchi darsda Biz Ethereum blokcheynining ishlash tamoyillari va asosiy terminologiyasini ko‘rib chiqamiz, shuningdek, ushbu blokcheyndan qayerda foydalanish mumkinligi haqida gaplashamiz.

Maqsad ikkinchi dars — Ubuntu va Debian serverlarida ushbu kurs doirasida keyingi ishlash uchun shaxsiy Ethereum blokcheyn tugunini yarating. Biz blokcheyn tugunimizning ishlashini ta'minlaydigan geth kabi asosiy yordamchi dasturlarni, shuningdek, markazlashtirilmagan ma'lumotlarni saqlash demonini o'rnatish xususiyatlarini ko'rib chiqamiz.

Uchinchi dars sizga arzon Raspberry Pi mikrokompyuterida Ethereum bilan tajriba o'tkazishni o'rgatadi. Siz Rasberian operatsion tizimini (OS) Raspberry Pi, blokcheyn tugunini quvvatlovchi Geth yordam dasturi va Swarm markazlashtirilmagan ma'lumotlarni saqlash demoniga o'rnatasiz.

To'rtinchi dars Ethereum tarmog'idagi hisoblar va kriptovalyuta birliklariga, shuningdek, Geth konsolidan pul mablag'larini bir hisobdan ikkinchisiga o'tkazish usullariga bag'ishlangan. Siz hisob qaydnomalarini yaratish, pul o'tkazmalarini boshlash, tranzaksiya holati va kvitansiyani olishni o'rganasiz.

Beshinchi darsda Siz Ethereum tarmog'idagi aqlli shartnomalar bilan tanishasiz va ularning Ethereum virtual mashinasi tomonidan bajarilishi haqida bilib olasiz.

Siz o'zingizning birinchi aqlli shartnomangizni Ethereum xususiy tarmog'ida yaratasiz va nashr qilasiz va uning funktsiyalarini qanday chaqirishni o'rganasiz. Buning uchun siz Remix Solidity IDE dan foydalanasiz. Shuningdek, siz solc ommaviy kompilyatorini qanday o'rnatish va undan foydalanishni o'rganasiz.
Shuningdek, biz Application Binary Interface (ABI) deb ataladigan narsa haqida gapiramiz va undan qanday foydalanishni o'rgatamiz.

Oltinchi dars Node.js bilan ishlaydigan JavaScript skriptlarini yaratish va Solidity aqlli shartnomalari bilan operatsiyalarni bajarishga bag'ishlangan.

Node.js-ni Ubuntu, Debian va Rasberian OS-ga o'rnatasiz, Ethereum mahalliy tarmog'ida aqlli shartnomani nashr qilish uchun skriptlarni yozasiz va uning funktsiyalarini chaqirasiz.

Bundan tashqari, siz skriptlar yordamida oddiy hisoblar o'rtasida pul mablag'larini qanday o'tkazishni, shuningdek, ularni aqlli shartnoma hisoblariga kreditlashni o'rganasiz.

Ettinchi darsda Siz Solidity aqlli kontrakt ishlab chiquvchilari orasida mashhur bo'lgan Truffle ramkasini qanday o'rnatish va undan foydalanishni o'rganasiz. Siz truffle-kontrakt moduli yordamida shartnoma funktsiyalarini chaqiruvchi JavaScript skriptlarini qanday yaratishni o'rganasiz va Truffle yordamida aqlli shartnomangizni sinab ko'rasiz.

Sakkizinchi dars Solidity ma'lumotlar turlariga bag'ishlangan. Imzolangan va imzolanmagan butun sonlar, imzolangan raqamlar, satrlar, manzillar, murakkab o'zgaruvchilar, massivlar, ro'yxatlar, tuzilmalar va lug'atlar kabi ma'lumotlar turlari bilan ishlaydigan aqlli shartnomalar yozasiz.

To'qqizinchi darsda Siz Ethereum asosiy tarmog'i uchun aqlli shartnomalar yaratishga bir qadam yaqinroq bo'lasiz. Siz Geth xususiy tarmog'ida, shuningdek, Rinkeby testnet tarmog'ida Truffle yordamida shartnomalarni qanday nashr qilishni o'rganasiz. Rinkeby tarmog'ida aqlli shartnomani disk raskadrovka qilish uni asosiy tarmoqda nashr etishdan oldin juda foydali - u erda deyarli hamma narsa haqiqiy, lekin bepul.

Darsning bir qismi sifatida siz Rinkeby test tarmog'i tugunini yaratasiz, uni mablag' bilan moliyalashtirasiz va aqlli shartnomani nashr etasiz.

dars 10 Ethereum Swarm tarqatilgan ma'lumotlarni saqlashga bag'ishlangan. Taqsimlangan xotiradan foydalanib, siz Ethereum blokcheynida katta hajmdagi ma'lumotlarni saqlashni tejaysiz.

Ushbu qo'llanmada siz mahalliy Swarm xotirasini yaratasiz, fayllar va fayl kataloglarida yozish va o'qish operatsiyalarini bajarasiz. Keyinchalik, siz ommaviy Swarm shlyuzi bilan qanday ishlashni, Node.js dan Swarm-ga kirish uchun skriptlarni yozishni, shuningdek Perl Net::Ethereum::Swarm modulidan foydalanishni o'rganasiz.

Dars maqsadi 11 — mashhur Python dasturlash tili va Web3.py ramkasidan foydalangan holda Solidity aqlli shartnomalari bilan ishlash ustasi. Siz ramkani o'rnatasiz, aqlli shartnomani kompilyatsiya qilish va nashr qilish uchun skriptlarni yozasiz va uning funktsiyalarini chaqirasiz. Bunday holda, Web3.py o'z-o'zidan va Truffle integratsiyalashgan ishlab chiqish muhiti bilan birgalikda ishlatiladi.

12-darsda Oracle yordamida aqlli shartnomalar va haqiqiy dunyo o'rtasida ma'lumotlarni uzatishni o'rganasiz. Bu veb-saytlar, IoT qurilmalari, turli qurilmalar va sensorlardan ma'lumotlarni qabul qilish va aqlli shartnomalardan ma'lumotlarni ushbu qurilmalarga yuborish uchun foydali bo'ladi. Darsning amaliy qismida siz Rossiya Federatsiyasi Markaziy bankining veb-saytidan AQSh dollari va rubl o'rtasidagi joriy kursni oladigan oracle va aqlli shartnoma tuzasiz.

Dars 1. Blokcheyn va Ethereum tarmog'i haqida qisqachaDarsning maqsadi: Ethereum blokcheynining ishlash tamoyillari, uni qo'llash sohalari va asosiy terminologiyasi bilan tanishish.
Amaliy vazifalar: bu darsda yoritilmagan.

Bugungi kunda blokcheyn texnologiyasi (Blockchain), kriptovalyutalar (Cryptocurrency yoki Crypto Currency), Bitcoin (Bitcoin), dastlabki tanga taklifi (ICO, Initial coin offering), aqlli shartnomalar (Smart Contract) haqida hech narsa eshitmagan dasturiy ta'minot ishlab chiqaruvchisi bo'lmasa kerak. shuningdek, blokcheyn bilan bog'liq boshqa tushunchalar va atamalar.

Blokcheyn texnologiyasi yangi bozorlarni ochadi va dasturchilar uchun ish o‘rinlarini yaratadi. Agar siz kriptovalyuta texnologiyalari va aqlli kontrakt texnologiyalarining barcha nozik tomonlarini tushunsangiz, bu bilimlarni amalda qo'llashda muammolarga duch kelmasligingiz kerak.

Aytish kerakki, kriptovalyutalar va blokcheynlar atrofida juda ko'p mish-mishlar mavjud. Biz kriptovalyuta kurslarining o'zgarishi, piramidalarning yaratilishi, kriptovalyuta qonunchiligining nozik jihatlari va boshqalar haqida munozaralarni chetga surib qo'yamiz. O'quv kursimizda biz asosan Ethereum blokcheynining (Ethereum, Ether) aqlli shartnomalarini qo'llashning texnik jihatlariga va markazlashtirilmagan dasturlarni (Distributed Application, DApp) ishlab chiqishga e'tibor qaratamiz.

Blockchain nima

Blokcheyn (Blok zanjiri) - ma'lum bir tarzda bir-biriga bog'langan ma'lumotlar bloklari zanjiri. Zanjirning boshida birinchi blok mavjud bo'lib, u birlamchi blok (genezis bloki) yoki genezis bloki deb ataladi. Undan keyin ikkinchi, keyin uchinchi va hokazo.

Ushbu ma'lumotlar bloklarining barchasi blokcheyn tarmog'ining ko'plab tugunlarida avtomatik ravishda takrorlanadi. Bu blokcheyn ma'lumotlarini markazlashmagan holda saqlashni ta'minlaydi.
Siz blokcheyn tizimini tarmoqqa ulangan va ma'lumotlar bloklari zanjiridagi barcha o'zgarishlarni takrorlaydigan ko'p sonli tugunlar (jismoniy yoki virtual serverlar) deb o'ylashingiz mumkin. Bu ulkan ko'p serverli kompyuterga o'xshaydi va bunday kompyuterning (serverlarning) tugunlari butun dunyo bo'ylab tarqalib ketishi mumkin. Va siz ham kompyuteringizni blokcheyn tarmog'iga qo'shishingiz mumkin.

Tarqalgan ma'lumotlar bazasi

Blokcheynni blokcheyn tarmog'ining barcha tugunlarida takrorlanadigan taqsimlangan ma'lumotlar bazasi sifatida ko'rish mumkin. Nazariy jihatdan, blokcheyn kamida bitta tugun ishlayotgan ekan, blokcheynning barcha bloklarini saqlaguncha ishlaydi.

Tarqatilgan ma'lumotlar reestri

Blokcheynni ma'lumotlar va operatsiyalarning (tranzaksiyalarning) taqsimlangan kitobi deb hisoblash mumkin. Bunday registrning yana bir nomi buxgalteriya kitobidir.

Ma'lumotlarni taqsimlangan daftarga qo'shish mumkin, lekin uni o'zgartirish yoki o'chirish mumkin emas. Bunday imkonsizlikka, xususan, kriptografik algoritmlar, zanjirga bloklar qo'shish va markazlashtirilmagan ma'lumotlarni saqlash uchun maxsus algoritmlardan foydalanish orqali erishiladi.

Bloklarni qo'shish va operatsiyalarni (operatsiyalarni) amalga oshirishda shaxsiy va ochiq kalitlardan foydalaniladi. Ular blokcheyn foydalanuvchilariga faqat o'zlarining ma'lumotlar bloklariga kirish huquqini berish orqali cheklashadi.

Jurnallar

Blockchain bloklardagi operatsiyalar (operatsiyalar) haqidagi ma'lumotlarni saqlaydi. Shu bilan birga, eski, allaqachon tugallangan tranzaktsiyalarni orqaga qaytarish yoki o'zgartirish mumkin emas. Yangi tranzaktsiyalar yangi, qo'shilgan bloklarda saqlanadi.

Shunday qilib, butun tranzaksiya tarixi blokcheynda o'zgarmagan holda qayd etilishi mumkin. Shuning uchun, blokcheyn, masalan, bank operatsiyalarini, mualliflik huquqi ma'lumotlarini, mulk egalaridagi o'zgarishlar tarixini va hokazolarni xavfsiz saqlash uchun ishlatilishi mumkin.

Ethereum blokcheyni tizim holatlari deb ataladigan narsalarni o'z ichiga oladi. Tranzaktsiyalar amalga oshirilganda, holat dastlabki holatdan hozirgi holatga o'zgaradi. Bitimlar bloklarda qayd etiladi.

Davlat va xususiy blokcheynlar

Shuni ta'kidlash kerakki, aytilganlarning barchasi faqat ommaviy blokcheyn tarmoqlari uchun to'g'ri keladi, ularni hech qanday jismoniy yoki yuridik shaxs, davlat organi yoki hukumat nazorat qila olmaydi.
Xususiy blokcheyn deb ataladigan tarmoqlar o'z yaratuvchilarining to'liq nazorati ostida va u erda hamma narsa mumkin, masalan, zanjirning barcha bloklarini to'liq almashtirish.

Blockchainning amaliy qo'llanilishi

Blockchain nima uchun foydali bo'lishi mumkin?

Muxtasar qilib aytganda, blokcheyn bir-biriga ishonmaydigan odamlar yoki kompaniyalar o'rtasidagi tranzaktsiyalarni (operatsiyalarni) xavfsiz amalga oshirish imkonini beradi. Blokcheyn-da qayd etilgan ma'lumotlar (tranzaksiyalar, shaxsiy ma'lumotlar, hujjatlar, sertifikatlar, shartnomalar, schyot-fakturalar va boshqalar) yozib olingandan so'ng qalbakilashtirilishi yoki almashtirilishi mumkin emas. Shuning uchun, blokcheyn asosida, masalan, har xil turdagi hujjatlarning ishonchli taqsimlangan registrlarini yaratish mumkin.

Albatta, siz bilasizki, kriptovalyuta tizimlari oddiy qog'oz pullarni almashtirish uchun mo'ljallangan blokcheynlar asosida yaratilmoqda. Qog'oz pullar fiat deb ham ataladi (Fiat Moneydan).
Blokcheyn bloklarda qayd etilgan tranzaktsiyalarning saqlanishi va o'zgarmasligini ta'minlaydi, shuning uchun uni kriptovalyuta tizimlarini yaratish uchun ishlatish mumkin. U turli foydalanuvchilar (hisoblar) o'rtasida kripto mablag'larini o'tkazishning butun tarixini o'z ichiga oladi va har qanday operatsiyani kuzatish mumkin.

Kriptovalyuta tizimlari ichidagi tranzaktsiyalar anonim bo'lishi mumkin bo'lsa-da, kriptovalyutani olib qo'yish va uni fiat pulga almashtirish odatda kriptovalyuta aktivi egasining shaxsini aniqlashga olib keladi.

Ethereum tarmog'ida ishlaydigan dasturiy ta'minot bo'lgan aqlli shartnomalar tranzaktsiyalarni tuzish va ularning bajarilishini nazorat qilish jarayonini avtomatlashtirishga imkon beradi. Bu, ayniqsa, agar tranzaksiya uchun to'lov Eter kriptovalyutasi yordamida amalga oshirilsa samarali bo'ladi.

Solidity dasturlash tilida yozilgan Ethereum blokcheyn va Ethereum aqlli kontraktlaridan, masalan, quyidagi sohalarda foydalanish mumkin:

  • hujjatlarni notarial tasdiqlashga muqobil;
  • ko'chmas mulk ob'ektlari reestrini va ko'chmas mulk ob'ektlari bilan tuzilgan bitimlar to'g'risidagi ma'lumotlarni saqlash;
  • intellektual mulk (kitoblar, tasvirlar, musiqa asarlari va boshqalar) bo'yicha mualliflik huquqi ma'lumotlarini saqlash;
  • mustaqil ovoz berish tizimini yaratish;
  • moliya va bank ishi;
  • xalqaro miqyosdagi logistika, tovarlar harakatini kuzatish;
  • shaxsiy ma'lumotlarni shaxsiy guvohnoma tizimiga o'xshash tarzda saqlash;
  • tijorat sohasida xavfsiz bitimlar;
  • tibbiy ko'riklar natijalarini, shuningdek, belgilangan protseduralar tarixini saqlash

Blokcheyn bilan bog'liq muammolar

Lekin, albatta, hamma narsa ko'rinadigan darajada oddiy emas!

Ma'lumotlarni blokcheynga qo'shishdan oldin tekshirish bilan bog'liq muammolar mavjud (masalan, ular soxtami?), blokcheyn bilan ishlashda foydalaniladigan tizim va amaliy dasturlarning xavfsizligi bilan bog'liq muammolar, kirishni o'g'irlash uchun ijtimoiy muhandislik usullaridan foydalanish imkoniyati bilan bog'liq muammolar mavjud. Cryptocurrency hamyonlariga va hokazo .P.

Yana, agar gap tugunlari butun dunyo bo‘ylab tarqalgan ommaviy blokcheyn haqida emas, balki shaxs yoki tashkilotga tegishli xususiy blokcheyn haqida ketayotgan bo‘lsa, bu yerda ishonch darajasi ishonch darajasidan yuqori bo‘lmaydi. bu shaxsda yoki tashkilotda.

Shuni ham hisobga olish kerakki, blokcheynda qayd etilgan ma'lumotlar hamma uchun mavjud bo'ladi. Shu ma'noda, blokcheyn (ayniqsa, ommaviy) maxfiy ma'lumotlarni saqlash uchun mos emas. Biroq, blokcheyn haqidagi ma'lumotni o'zgartirish mumkin emasligi turli xil firibgarlik turlarining oldini olish yoki tekshirishga yordam beradi.

Ethereum markazlashtirilmagan ilovalar, agar siz ulardan foydalanish uchun kriptovalyuta bilan to'lasangiz, qulay bo'ladi. Qanchalik ko'p odamlar kriptovalyutaga ega bo'lsa yoki uni sotib olishga tayyor bo'lsa, DApps va aqlli shartnomalar shunchalik mashhur bo'ladi.

Blockchain bilan uning amaliy qo'llanilishiga xalaqit beradigan umumiy muammolar qatoriga yangi bloklarni qo'shishning cheklangan tezligi va tranzaktsiyalarning nisbatan yuqori narxi kiradi. Ammo bu sohada texnologiya faol rivojlanmoqda va texnik muammolar vaqt o'tishi bilan hal qilinishiga umid bor.

Yana bir muammo shundaki, Ethereum blokcheynidagi aqlli kontraktlar virtual mashinalarning izolyatsiya qilingan muhitida ishlaydi va real dunyo ma'lumotlariga kirish imkoniga ega emas. Xususan, aqlli kontrakt dasturi saytlardan yoki har qanday jismoniy qurilmalardan (sensorlar, kontaktlar va boshqalar) ma'lumotlarni o'qiy olmaydi, shuningdek, ma'lumotlarni har qanday tashqi qurilmalarga chiqara olmaydi. Biz ushbu muammoni va uni hal qilish yo'llarini Oracles deb ataladigan darsda muhokama qilamiz - aqlli shartnomalarning axborot vositachilari.

Qonuniy cheklovlar ham mavjud. Ba'zi mamlakatlarda, masalan, to'lov vositasi sifatida kriptovalyutadan foydalanish taqiqlanadi, lekin siz uni qimmatli qog'ozlar kabi raqamli aktivning bir turi sifatida egalik qilishingiz mumkin. Bunday aktivlarni birjada sotib olish va sotish mumkin. Har qanday holatda, kriptovalyutalar bilan ishlaydigan loyihani yaratishda siz loyihangiz yurisdiktsiyasiga tegishli bo'lgan mamlakat qonunchiligi bilan tanishishingiz kerak.

Blockchain zanjiri qanday hosil bo'ladi

Yuqorida aytib o'tganimizdek, blokcheyn - bu ma'lumotlar bloklarining oddiy zanjiri. Birinchidan, bu zanjirning birinchi bloki hosil bo'ladi, keyin ikkinchisi unga qo'shiladi va hokazo. Tranzaksiya ma'lumotlari bloklarda saqlanadi va eng so'nggi blokga qo'shiladi deb taxmin qilinadi.

Shaklda. 1.1. Biz bloklar ketma-ketligining eng oddiy versiyasini ko'rsatdik, bu erda birinchi blok keyingi blokga tegishli.

Kitob “Ethereum blockchain uchun mustahkamlik aqlli shartnomalarini yaratish. Amaliy qo'llanma"
Guruch. 1.1. Bloklarning oddiy ketma-ketligi

Biroq, ushbu parametr yordamida zanjirdagi har qanday blokning mazmunini buzish juda oson, chunki bloklarda o'zgarishlardan himoya qilish uchun hech qanday ma'lumot yo'q. Blockchain o'rtasida ishonch bo'lmagan odamlar va kompaniyalar tomonidan foydalanish uchun mo'ljallanganligini hisobga olsak, ma'lumotlarni saqlashning ushbu usuli blokcheyn uchun mos emas degan xulosaga kelishimiz mumkin.

Keling, bloklarni qalbakilashtirishdan himoya qilishni boshlaylik. Birinchi bosqichda biz har bir blokni nazorat summasi bilan himoya qilishga harakat qilamiz (1.2-rasm).

Kitob “Ethereum blockchain uchun mustahkamlik aqlli shartnomalarini yaratish. Amaliy qo'llanma"
Guruch. 1.2. Ushbu bloklar uchun nazorat summasi bilan himoya qo'shiladi

Endi tajovuzkor blokni oddiygina o'zgartira olmaydi, chunki u blok ma'lumotlarining nazorat summasini o'z ichiga oladi. Tekshirish summasini tekshirish ma'lumotlar o'zgartirilganligini ko'rsatadi.

Tekshirish summasini hisoblash uchun siz MD-5, SHA-1, SHA-256 va boshqalar kabi xeshlash funktsiyalaridan birini ishlatishingiz mumkin. Xesh-funksiyalar ma'lumotlar blokida qaytarilmas operatsiyalarni bajarish orqali qiymatni (masalan, doimiy uzunlikdagi matn qatori) hisoblaydi. Amallar xesh funktsiyasi turiga bog'liq.

Ma'lumotlar blokining mazmuni biroz o'zgargan taqdirda ham, xesh qiymati ham o'zgaradi. Xesh funktsiyasi qiymatini tahlil qilib, u hisoblangan ma'lumotlar blokini qayta qurish mumkin emas.

Bunday himoya etarli bo'ladimi? Afsuski yo'q.

Ushbu sxemada nazorat summasi (xesh funktsiyasi) faqat alohida bloklarni himoya qiladi, lekin butun blokcheynni emas. Xesh funktsiyasini hisoblash algoritmini bilgan holda, tajovuzkor blok tarkibini osongina almashtirishi mumkin. Bundan tashqari, unga zanjirdan bloklarni olib tashlash yoki yangilarini qo'shishga hech narsa to'sqinlik qilmaydi.

Butun zanjirni bir butun sifatida himoya qilish uchun siz har bir blokda ma'lumotlar bilan birga oldingi blokdagi ma'lumotlarning xeshini ham saqlashingiz mumkin (1.3-rasm).

Kitob “Ethereum blockchain uchun mustahkamlik aqlli shartnomalarini yaratish. Amaliy qo'llanma"
Guruch. 1.3. Ma'lumotlar blokiga oldingi blokning xeshini qo'shing

Ushbu sxemada blokni o'zgartirish uchun siz barcha keyingi bloklarning xesh funktsiyalarini qayta hisoblashingiz kerak. Ko'rinib turibdiki, muammo nimada?

Haqiqiy blokcheynlarda yangi bloklarni qo'shish uchun qo'shimcha ravishda sun'iy qiyinchiliklar yaratiladi - ko'p hisoblash resurslarini talab qiladigan algoritmlar qo'llaniladi. Blokka o'zgartirishlar kiritish uchun siz nafaqat ushbu blokni, balki undan keyingi barcha bloklarni qayta hisoblashingiz kerakligini hisobga olsak, buni qilish juda qiyin bo'ladi.

Shuni ham eslaylikki, blokcheyn ma'lumotlari ko'plab tarmoq tugunlarida saqlanadi (ko'paytiriladi), ya'ni. Markazlashtirilmagan saqlash ishlatiladi. Va bu blokni soxtalashtirishni ancha qiyinlashtiradi, chunki barcha tarmoq tugunlariga o'zgartirishlar kiritilishi kerak.

Bloklar oldingi blok haqidagi ma'lumotlarni saqlaganligi sababli, zanjirdagi barcha bloklarning tarkibini tekshirish mumkin.

Ethereum blokcheyn

Ethereum blokcheyn - bu tarqatilgan DApp-larni yaratish mumkin bo'lgan platforma. Boshqa platformalardan farqli o'laroq, Ethereum Solidity dasturlash tilida yozilgan aqlli kontraktlardan (aqlli kontraktlar) foydalanishga imkon beradi.

Ushbu platforma 2013 yilda Bitcoin jurnali asoschisi Vitalik Buterin tomonidan yaratilgan va 2015 yilda ishga tushirilgan. O'quv kursimizda o'rganadigan yoki qiladigan hamma narsa Ethereum blockchain va Solidity aqlli shartnomalariga tegishli.

Kon yoki bloklar qanday yaratilgan

Mining bu blokcheyn zanjiriga yangi bloklarni qo'shishning ancha murakkab va resurs talab qiladigan jarayoni bo'lib, umuman "kriptovalyutani qazib olish" emas. Mining blokcheyn funksionalligini ta'minlaydi, chunki bu Ethereum blokcheyniga tranzaktsiyalarni qo'shish uchun mas'ul bo'lgan bu jarayon.

Bloklarni qo'shish bilan shug'ullanadigan odamlar va tashkilotlar konchilar deb ataladi.
Miner tugunlarida ishlaydigan dastur tarmoq tomonidan belgilangan ma'lum bir xesh qiymatini olish uchun oxirgi blok uchun Nonce deb nomlangan xeshlash parametrini topishga harakat qiladi. Ethereum-da ishlatiladigan Ethash xesh algoritmi Nonce qiymatini faqat ketma-ket qidiruv orqali olish imkonini beradi.

Agar konchi tugun to'g'ri Nonce qiymatini topsa, bu ish isboti (PoW, Proof-of-work) deb ataladi. Bunday holda, agar Ethereum tarmog'iga blok qo'shilsa, konchi tarmoq valyutasida - Eterda ma'lum bir mukofot oladi. Yozish vaqtida mukofot 5 Eterni tashkil qiladi, ammo vaqt o'tishi bilan bu kamayadi.

Shunday qilib, Ethereum konchilari bloklarni qo'shish orqali tarmoqning ishlashini ta'minlaydi va buning uchun kriptovalyuta pul oladi. Internetda konchilar va konchilik haqida juda ko'p ma'lumotlar mavjud, ammo biz Ethereum tarmog'ida Solidity shartnomalari va DApps yaratishga e'tibor qaratamiz.

Darsning qisqacha mazmuni

Birinchi darsda siz blokcheyn bilan tanishdingiz va bu bloklarning maxsus tuzilgan ketma-ketligi ekanligini bilib oldingiz. Oldin qayd etilgan bloklarning mazmunini o'zgartirish mumkin emas, chunki bu ko'plab tarmoq tugunlarida keyingi barcha bloklarni qayta hisoblashni talab qiladi, bu juda ko'p resurslar va vaqtni talab qiladi.

Blockchain tranzaktsiyalar natijalarini saqlash uchun ishlatilishi mumkin. Uning asosiy maqsadi o'rtasida ishonch bo'lmagan tomonlar (shaxslar va tashkilotlar) o'rtasida xavfsiz bitimlarni tashkil etishdir. Siz biznesning qaysi sohalarida va qaysi sohalarda Ethereum blockchain va Solidity smart-kontraktlaridan foydalanish mumkinligini bilib oldingiz. Bu bank sektori, mulk huquqini ro'yxatdan o'tkazish, hujjatlar va boshqalar.

Shuningdek, siz blokcheyndan foydalanganda turli muammolar paydo bo'lishi mumkinligini bilib oldingiz. Bular blokcheynga qo‘shilgan ma’lumotlarni tekshirish muammolari, blokcheyn tezligi, tranzaktsiyalar narxi, aqlli shartnomalar va real dunyo o‘rtasida ma’lumotlar almashinuvi muammosi, shuningdek, foydalanuvchi hisoblaridan kriptovalyuta mablag‘larini o‘g‘irlashga qaratilgan hujumchilarning ehtimoliy hujumlari. .

Shuningdek, biz blokcheynga yangi bloklarni qo'shish jarayoni sifatida qazib olish haqida qisqacha gaplashdik. Tranzaktsiyalarni bajarish uchun qazib olish kerak. Konchilik bilan shug'ullanuvchilar blokcheynning ishlashini ta'minlaydi va buning uchun kriptovalyutada mukofot oladi.

2-dars. Ubuntu va Debian OS da ish muhitini tayyorlashOperatsion tizimni tanlash
Kerakli yordamchi dasturlarni o'rnatish
Ubuntu-da Geth va Swarm-ni o'rnatish
Debian-da Geth va Swarm-ni o'rnatish
Dastlabki tayyorgarlik
Go tarqatish yuklab olinmoqda
Atrof-muhit o'zgaruvchilarini sozlash
Go versiyasi tekshirilmoqda
Geth va Swarm-ni o'rnatish
Shaxsiy blokcheyn yaratish
genesis.json faylini tayyorlash
Ish uchun katalog yarating
Hisob ochish
Tugunni ishga tushirishni boshlash
Tugunni ishga tushirish parametrlari
Bizning tugunimizga ulaning
Konchilikni boshqarish va balansni tekshirish
Geth konsolini o'chirish
Darsning qisqacha mazmuni

Dars 3. Raspberry Pi 3 da ish muhitini tayyorlashRaspberry Pi 3 ni ishga tayyorlash
Rasberian o'rnatish
Yangilanishlar o'rnatilmoqda
SSH kirishni yoqish
Statik IP manzilni o'rnatish
Kerakli yordamchi dasturlarni o'rnatish
Go o'rnatilmoqda
Go tarqatish yuklab olinmoqda
Atrof-muhit o'zgaruvchilarini sozlash
Go versiyasi tekshirilmoqda
Geth va Swarm-ni o'rnatish
Shaxsiy blokcheyn yaratish
Hisobingiz va balansingizni tekshirish
Darsning qisqacha mazmuni

Dars 4. Hisoblar va hisobvaraqlar o'rtasida pul mablag'larini o'tkazishHisoblarni ko'rish va qo'shish
Hisoblar ro'yxatini ko'ring
Hisob qo'shish
geth hisobi buyrug'i parametrlari
Hisob parollari
Ethereumdagi kriptovalyuta
Ethereum valyuta birliklari
Hisoblarimizning joriy qoldig'ini aniqlaymiz
Pul mablag'larini bir hisobdan boshqasiga o'tkazish
eth.sendTransaction usuli
Tranzaksiya holatini ko'rish
Tranzaksiya kvitansiyasi
Darsning qisqacha mazmuni

5-dars. Birinchi shartnomangizni nashr qilishEthereum-da aqlli shartnomalar
Aqlli shartnomani bajarish
Ethereum virtual mashinasi
Integratsiyalashgan ishlab chiqish muhiti Remix Solidity IDE
Ishlayotgan kompilyatsiya
Shartnoma funktsiyalarini chaqirish
Shartnomani xususiy tarmoqda nashr qilish
ABI ta'rifi va shartnoma ikkilik kodini olish
Shartnomani nashr etish
Shartnomani nashr qilish tranzaksiya holatini tekshirish
Shartnoma funktsiyalarini chaqirish
Ommaviy kompilyator solc
Ubuntu-da solc-ni o'rnatish
Debian-ga solc o'rnatilmoqda
HelloSol shartnomasini tuzish
Shartnomani nashr etish
Rasberian-ga solc o'rnatilmoqda
Darsning qisqacha mazmuni

Dars 6. Aqlli kontraktlar va Node.jsNode.js o'rnatilmoqda
Ubuntu-da o'rnatish
Debian-ga o'rnatish
Ganache-cli-ni o'rnatish va ishga tushirish
Web3 o'rnatish
Solc o'rnatilmoqda
Rasberian-ga Node.js-ni o'rnatish
Konsolda hisoblar ro'yxatini olish uchun skript
Aqlli shartnomani nashr qilish uchun skript
Parametrlarni ishga tushiring va oling
Ishga tushirish imkoniyatlari
Shartnoma tuzish
Hisobingiz blokdan chiqarilmoqda
ABI va shartnoma ikkilik kodi yuklanmoqda
Gazning kerakli miqdorini hisoblash
Ob'ekt yarating va shartnomani nashr qilishni boshlang
Shartnomani nashr qilish skriptini ishga tushirish
Smart kontrakt funktsiyalarini chaqirish
Chop etilgan aqlli shartnomani yangilash mumkinmi?
Web3 1.0.x versiyasi bilan ishlash
Hisoblar ro'yxatini olish
Shartnomani nashr etish
Shartnoma funktsiyalarini chaqirish
Pul mablag'larini bir hisobdan boshqasiga o'tkazish
Pul mablag'larini shartnoma hisobiga o'tkazish
HelloSol aqlli shartnomasi yangilanmoqda
Hisobingiz balansini ko'rish uchun skript yarating
call_contract_get_promise.js skriptiga getBalance funksiyasiga qo'ng'iroq qo'shing
Biz aqlli kontrakt hisobini to'ldiramiz
Darsning qisqacha mazmuni

Dars 7. Truffle bilan tanishishTruffle o'rnatish
HelloSol loyihasini yarating
Loyiha katalogi va fayllarini yaratish
Shartnomalar katalogi
Katalog migratsiyalari
Katalog testi
truffle-config.js fayli
HelloSol shartnomasini tuzish
Shartnomani nashr qilishni boshlang
Truffle so'rovida HelloSol kontrakt funksiyalarini chaqirish
Node.js bilan ishlaydigan JavaScript skriptidan HelloSol shartnoma funksiyalarini chaqirish
Truffle-kontrakt modulini o'rnatish
Shartnoma funksiyalarini chaqirish getValue va getString
Shartnoma funksiyalarini chaqirish setValue va setString
Shartnomani o'zgartirish va qayta nashr etish
Web3 1.0.x versiyasi bilan ishlash
HelloSol aqlli shartnomasiga o'zgartirishlar kiritish
Shartnoma usullarini chaqirish uchun skriptlar
Truffle'da sinov
Qattiqlik testi
JavaScript testi
Darsning qisqacha mazmuni

Dars 8. Mustahkamlik ma'lumotlarining turlariMa'lumotlar turlarini o'rganish uchun shartnoma
Mantiqiy ma'lumotlar turlari
Belgisiz butun va imzolangan butun sonlar
Ruxsat etilgan nuqta raqamlari
Manzil
Murakkab tipdagi o'zgaruvchilar
Ruxsat etilgan o'lchamli massivlar
Dinamik massivlar
Hisoblash
Tuzilmalar
Lug'atlar xaritalash
Darsning qisqacha mazmuni

9-dars. Shartnomalarning xususiy tarmoqqa va Rinkeby tarmog'iga ko'chishiTruffle'dan shaxsiy Geth tarmog'iga shartnomani nashr qilish
Shaxsiy tarmoq tugunini tayyorlash
Ish uchun shartnoma tayyorlash
Truffle tarmog'iga shartnoma tuzish va ko'chirish
Mahalliy tarmoq migratsiyasini boshlash geth
Truffle artefaktlarini olish
Truffle'dan Rinkeby testnetiga shartnomani nashr qilish
Rinkeby bilan ishlash uchun Geth tugunini tayyorlash
Tugun sinxronizatsiyasi
Hisoblarni qo'shish
Rinkeby hisobingizni efir bilan to'ldirish
Rinkeby tarmog'iga kontrakt migratsiyasini ishga tushirish
Rinkeby tarmog'ida shartnoma ma'lumotlarini ko'rish
Rinkeby Network uchun Truffle konsoli
Shartnoma funktsiyalarini chaqirishning osonroq yo'li
Node.js yordamida shartnoma usullarini chaqirish
Rinkby uchun Truffle konsolidagi hisoblar o'rtasida pul o'tkazing
Darsning qisqacha mazmuni

Dars 10. Ethereum Swarm markazlashtirilmagan ma'lumotlarni saqlashEthereum Swarm qanday ishlaydi?
Swarm-ni o'rnatish va ishga tushirish
Fayllar va kataloglar bilan operatsiyalar
Faylni Ethereum Swarm-ga yuklash
Ethereum Swarm-dan faylni o'qish
Yuklangan faylning manifestini ko'ring
Kataloglarni pastki kataloglari bilan yuklash
Yuklab olingan katalogdan faylni o'qish
Umumiy Swarm shlyuzidan foydalanish
Node.js skriptlaridan Swarm-ga kirish
Perl Net::Ethereum::Swarm moduli
Net::Ethereum::Swarm modulini o'rnatish
Ma'lumotlarni yozish va o'qish
Darsning qisqacha mazmuni

Dars 11. Pythonda Ethereum bilan ishlash uchun Web3.py ramkasiWeb3.py o'rnatilmoqda
Kerakli paketlarni yangilash va o'rnatish
Easysolc modulini o'rnatish
Web3.py yordamida shartnomani nashr qilish
Shartnoma tuzish
Provayderga ulanish
Shartnomani nashr qilish
Shartnoma manzili va abi faylga saqlanishi
Shartnomani nashr qilish skriptini ishga tushirish
Shartnomani chaqirish usullari
JSON faylidan shartnoma manzili va abi-ni o'qish
Provayderga ulanish
Shartnoma ob'ektini yaratish
Shartnomani chaqirish usullari
Truffle va Web3.py
Darsning qisqacha mazmuni

12-dars. OraclesAqlli shartnoma tashqi dunyo ma'lumotlariga ishonishi mumkinmi?
Oracles blockchain axborot vositachilari sifatida
Ma'lumotlar manbai
Manbadan olingan ma'lumotlarni ko'rsatish uchun kod
Blockchain-da valyuta kursini qayd etish uchun Oracle
USDRateOracle shartnomasi
Aqlli shartnomada valyuta kursini yangilash
Veb-rozetka provayderidan foydalanish
RateUpdate hodisasi kutilmoqda
RateUpdate hodisasini boshqarish
Aqlli shartnomada ma'lumotlarni yangilashni boshlash
Darsning qisqacha mazmuni

Manba: www.habr.com

a Izoh qo'shish