Java bilan birinchi blokcheyningizni yaratish. 1-qism.

Ushbu o'quv qo'llanmaning maqsadi sizga blockchain texnologiyasini qanday rivojlantirish mumkinligi haqida rasm yaratishda yordam berishdir.

Ushbu darsda biz:

  • Birinchi (juda) asosiy "blockchain" ni yarating.
  • Ishning oddiy isbotini (konchilik) amalga oshiring.
  • Imkoniyatlardan hayratda.

(Ob'ektga yo'naltirilgan dasturlash haqida asosiy tushunchangiz bor deb taxmin qilaman)

Ta'kidlash joizki, bu to'liq ishlaydigan va ishlab chiqarish blok zanjiri uchun tayyor. Buning o'rniga bu kelajak darslari uchun blockchain nima ekanligini tushunishga yordam beradigan kontseptsiyani amalga oshirishning isbotidir.

Siz va kelajak darslarini qo'llab-quvvatlashingiz mumkin :)
btc: 17svYzRv4XJ1Sfi1TSThp3NBFnh7Xsi6fu

Shuningdek, agar siz bizning rivojlanish xizmatimizga qiziqsangiz: axiomtech.io

Sozlash

Biz Java-dan foydalanamiz, ammo har qanday OOP tilida harakat qilishingiz kerak. Men Eclipse-dan foydalanaman, lekin siz istalgan yangi matn muharriridan foydalanishingiz mumkin.

Sizga kerak bo'ladi:

  • Java va JDK o'rnatilgan. (dux).
  • Eclipse (yoki boshqa IDE / matn muharriri).
Tutilishingiz mennikidan farq qiladigan bo'lsa, tashvishlanmang. Men tutilishda qorong'i mavzuni ishlataman, chunki ^

Ixtiyoriy ravishda, siz GSON kutubxonasini google-dan olishingiz mumkin (ular kimlar ???). Bu bizga ob'ektni Json \ o / ga aylantirishga imkon beradi. Bu juda foydali kutubxona, bundan tashqari biz peer2peer uchun satrdan pastroqda foydalanamiz, ammo boshqa usuldan foydalanishdan xursandmiz.

Eclipse-da Java (fayl> yangi>) loyihasini yarating. Men o'z loyihamni "noobchain" deb atayman va shu nom bilan yangi sinf yarataman (NoobChain).

Hozir mening loyiham nomidan nusxa ko'chirilmasin (͠ ° ͟ ͜ʖ ͡ °)

Endi borishingiz yaxshi :)

Blockchain qilish.

Blokchain - bu shunchaki zanjir / bloklarning ro'yxati. Blokchaindagi har bir blok o'zining raqamli barmoq iziga ega bo'ladi, oldingi blokning raqamli barmoq izini o'z ichiga oladi va ba'zi ma'lumotlarga ega bo'ladi (masalan, bu ma'lumotlar operatsiyalar bo'lishi mumkin).

Ishonchim komilki, Nakamoto buni hech qachon ko'rmaydi.
Xesh = Raqamli barmoq izi.

Har bir blok nafaqat oldingi blokning xeshini o'z ichiga olmaydi, balki avvalgi xeshdan hisoblab chiqilgan o'zining hash qismi. Agar oldingi blok ma'lumotlari o'zgartirilsa, oldingi blokning xeshi o'zgaradi (chunki u ma'lumotlar bo'yicha qisman hisoblab chiqilgan) va o'z navbatida blokdagi barcha aralashmalarga ta'sir qiladi. Heshlarni hisoblash va taqqoslash bizga blockchain yaroqsiz yoki yo'qligini aniqlashga imkon beradi.

Nima degani bu ? … Ushbu ro'yxatdagi har qanday ma'lumotlarni o'zgartirish imzoni o'zgartiradi va zanjirni buzadi.

Shunday qilib, Firsts blockchainni tashkil etuvchi sinf blokini yaratishga imkon beradi:

Ko'rib turganimizdek, bizning asosiy blokimizda raqamli imzoni ushlab turadigan String xeshi mavjud. Oldingi blokning xeshini ushlab turadigan oldHash o'zgaruvchisi va bizning blok ma'lumotimizni ushlab turish uchunString ma'lumot.

Keyinchalik biz raqamli barmoq izini yaratish usuliga muhtojmiz,

siz tanlashingiz mumkin bo'lgan ko'plab kriptografik algoritmlar mavjud, ammo SHA256 bu misol uchun juda mos keladi. Biz java.security.MessageDigest-ni import qila olamiz; SHA256 algoritmiga kirish uchun.

Keyingi qatorda biz SHA256-dan foydalanishimiz kerak, shunda yangi StringUtil 'yordam dasturi' sinfida yordamchi usulni yaratamiz:

Agar ushbu yordamchi usulning mazmunini tushunmasangiz, haddan tashqari tashvishlanmang, shunchaki bilishingiz kerakki, u sim oladi va unga SHA256 algoritmini qo'llaydi va hosil bo'lgan imzoni sim sifatida qaytaradi.

Endi xeshni hisoblash uchun Blok sinfidagi yangi usulda bizning applySha256 yordamchimizdan foydalanishimiz mumkin. O'zgartirishni xohlamagan blokning barcha qismlaridan chiqindilarni hisoblashimiz kerak. Shunday qilib, bizning blokimiz uchun avvalgiHash, ma'lumotlar va timeStampni kiritamiz.

va Block konstruktoriga ushbu usulni qo'shish imkonini beradi ...

Sinov vaqti keldi ...

Bizning asosiy NoobChain-da hamma narsa ishchi holatda ekanligini ko'rish uchun ba'zi bloklarni yaratishga va ekranga chiqindilarni chop etishga imkon beradi.

Buni sinab ko'rishga ruxsat bering ...

Birinchi blok genezis bloki deb nomlanadi va oldingi blok mavjud bo'lmaganligi sababli biz oldingi xesh kabi "0" kiritamiz.

Chiqish shunga o'xshash ko'rinishi kerak:

Sizning qadriyatlaringiz boshqacha bo'ladi, chunki vaqt belgisi boshqacha bo'ladi.

Endi har bir blok o'z ma'lumotiga va oldingi blokning imzosiga asoslangan holda o'z raqamli imzosiga ega.

Hozirda bu blockchainning ko‘p qismi emas, shuning uchun bloklarni ArrayList-da saqlash va Json sifatida ko‘rish uchun gsonni import qilish. (gson kutubxonasini qanday import qilishni bilish uchun bu erni bosing)

Endi bizning chiqishimiz blockchain qanday ko'rinishini kutayotganimizga yaqinroq ko'rinishi kerak.

Endi bizning blockchainning yaxlitligini tekshirish uchun usul kerak.

NoobChain sinfida isChainValid () boolean usulini yaratishga imkon beradi, u zanjirning barcha bloklari bo'ylab aylanib chiqadi va axlatlarni taqqoslaydi. Ushbu usulda hash o'zgaruvchisini hisoblash kerak bo'lgan hashga to'g'ri kelishini tekshirish kerak va oldingi blokning xeshi oldingiHash o'zgaruvchisiga teng.

Blockchain-ning har qanday o'zgarishi bu usulning noto'g'ri qaytarilishiga olib keladi.

Bitcoin tarmoq tugunlarida ularning blokchainlari baham ko'riladi va eng uzun zanjir tarmoq tomonidan qabul qilinadi. Eski blokdagi ma'lumotni buzib, so'ngra butunlay yangi blockchainni yaratib, uni tarmoqqa taqdim etishga xalaqit beradigan nima? Ishning isboti. Ish tizimining hashcash isboti yangi bloklarni yaratish uchun ko'p vaqt va hisoblash kuchini talab qiladi. Demak, tajovuzkorga boshqa tengdoshlari birlashtirilganidan ko'ra ko'proq hisoblash kuchi kerak bo'ladi.

hashkash, juda ko'p voy.

Kon bloklarini ishga tushirishga imkon bering !!!

Biz konchilar har xil o'zgaruvchan qiymatlarni xesh ma'lum bir 0 dan boshlanmaguncha blokda turli xil qiymatlarni sinab ko'rish orqali tasdiqlashlarini talab qilamiz.

Bizning hisoblashHash () usuliga va juda zarur bo'lgan mineBlock () usuliga kiritish uchun nonce deb nomlangan int qo'shamiz.

MineBlock () usuli qiyinchilikni talab qiladi, bu hal qilinishi kerak bo'lgan 0 soni. 1 yoki 2 kabi kam qiyinchilikni deyarli ko'pgina kompyuterlarda darhol hal qilish mumkin, men sinov uchun 4-6 atrofida biror narsani taklif qilaman. Litecoin-ni yozish paytida qiyinchilik 442,592 atrofida.

NoobChain sinfiga qiyinchilikni statik o'zgaruvchi sifatida qo'shish imkonini beradi:

public static int qiyinchilik = 5;

Har bir yangi blok uchun mineBlock () usulini ishga tushirish uchun NoobChain sinfini yangilashimiz kerak. IsChainValid () Boolean shuningdek, har bir blokda (tog'-kon orqali) echilgan hesh borligini tekshirish kerak.

Buni bajarishda sizning natijalaringiz quyidagicha ko'rinishi kerak.

Har bir blokni qazib olish biroz vaqt talab qildi! (taxminan 3 soniya) Har bir blokni qazib olish vaqtiga qanday ta'sir qilishini ko'rish uchun siz qiyinchilik qiymati bilan chalkashishingiz kerak;)

Agar kimdir sizning blockchain tizimingizdagi ma'lumotlarni buzib ko'rsatsa:

  • Ularning blockchain yaroqsiz bo‘ladi.
  • Ular uzoqroq blockchainni yaratolmaydilar.
  • Tarmog'ingizdagi halol blockchainlar eng uzun zanjirda vaqt afzalliklariga ega bo'ladi.

Tugatilgan blokchain uzoqroq va haqiqiy zanjirni qo'lga kirita olmaydi. *

* agar ularda sizning tarmog'ingizdagi barcha boshqa tugunlarga qaraganda ancha yuqori hisoblash tezligi bo'lsa. Kelajakdagi kvant kompyuteri yoki boshqa narsalar.

Siz barchangizni asosiy blockchainingiz bilan bordingiz!

O'zingizni orqa tomondan silang.

Sizning blockchain:
> Ma'lumotlar saqlanadigan bloklardan iborat.
> Sizning bloklaringizni bir-biriga zanjirlaydigan raqamli imzoga ega.
> Yangi bloklarni tekshirish uchun ishchi konining dalillarini talab qiladi.
> Undagi ma'lumotlar haqiqiyligini va o'zgarishsizligini tekshirish mumkin.

Ushbu loyiha fayllarini Github-da yuklab olishingiz mumkin.

Keyingi darsliklar va boshqa blockchain dasturlari haqida xabarlar joylashtirilganida sizga xabar berilishi kerak. Har qanday fikr-mulohaza ham juda minnatdor. Rahmat.

Java bilan birinchi blokcheyningizni yaratish. 2-qism:

Biz Tranzaktsiyalar, Imzolar va Hamyonlarni qamrab olamiz.

aloqa: kasscrypto@gmail.com | nizo: https://discord.gg/ZsyQqyk

(Agar siz blockchain sohasida ishlashga qiziqsangiz, men ajoyib Ishlar Kengashini yaratdim: https://workthechain.com/)