“Ethereum blockchain-д зориулж Solidity ухаалаг гэрээ байгуулах нь” ном. Практик гарын авлага"

“Ethereum blockchain-д зориулж Solidity ухаалаг гэрээ байгуулах нь” ном. Практик гарын авлага"
Би нэг жил гаруй хугацаанд “Ethereum Blockchain-д зориулж бат бөх ухаалаг гэрээ байгуулах нь” ном дээр ажиллаж байна. Практик гарын авлага ", одоо энэ ажил дуусч, ном Литрээр хэвлэгдсэн.

Миний ном танд Ethereum blockchain-д зориулсан Solidity ухаалаг харилцагчид болон түгээсэн DApp-уудыг хурдан бүтээхэд тусална гэж найдаж байна. Энэ нь практик даалгавар бүхий 12 хичээлээс бүрдэнэ. Тэдгээрийг дуусгасны дараа уншигч өөрийн дотоод Ethereum зангилаа үүсгэх, ухаалаг гэрээ нийтлэх, тэдгээрийн аргуудыг дуудах, oracle ашиглан бодит ертөнц болон ухаалаг гэрээний хооронд өгөгдөл солилцох, Rinkeby туршилтын дибаг хийх сүлжээтэй ажиллах боломжтой болно.

Энэхүү ном нь блокчэйний салбарын дэвшилтэт технологийг сонирхож, сонирхолтой, ирээдүйтэй ажилд оролцох боломжийг олгодог мэдлэгийг хурдан олж авахыг хүсдэг хэн бүхэнд зориулагдсан болно.

Доор та номын агуулгын хүснэгт болон эхний бүлгийг (мөн Литр номын хэсгүүд байдаг). Санал хүсэлт, санал хүсэлт, санал хүсэлтийг хүлээн авна гэж найдаж байна. Би номынхоо дараагийн хэвлэлийг бэлтгэхдээ энэ бүхнийг анхаарч үзэхийг хичээх болно.

АгуулгаТанилцуулгаМанай ном нь Ethereum blockchain-ийн зарчмуудыг ойлгох төдийгүй энэ сүлжээнд Solidity програмчлалын хэлээр тархсан DApps үүсгэх практик ур чадвар эзэмшихийг хүсдэг хүмүүст зориулагдсан болно.

Зөвхөн энэ номыг уншаад зогсохгүй хичээл дээр дурдсан практик даалгавруудыг гүйцэтгэж түүнтэй ажиллах нь дээр. Ажиллахын тулд танд Debian эсвэл Ubuntu үйлдлийн систем суулгасан локал компьютер, виртуал эсвэл үүлэн сервер хэрэгтэй болно. Мөн та Raspberry Pi-г ашиглан олон ажлыг гүйцэтгэх боломжтой.

Эхний хичээл дээр Бид Ethereum blockchain-ийн үйл ажиллагааны зарчим, үндсэн нэр томъёог авч үзэхээс гадна энэ блокчейнийг хаана ашиглаж болох талаар ярилцах болно.

Зорилго хоёр дахь хичээл — Ubuntu болон Debian сервер дээр энэ хичээлийн хүрээнд цаашид ажиллах зорилгоор хувийн Ethereum блокчейн зангилаа үүсгэнэ үү. Бид блокчейн зангилааны ажиллагааг хангадаг geth, түүнчлэн бөөгнөрөл төвлөрсөн бус өгөгдөл хадгалах демон гэх мэт үндсэн хэрэгслүүдийг суулгах онцлогуудыг авч үзэх болно.

Гурав дахь хичээл хямд Raspberry Pi микрокомпьютер дээр Ethereum-ийг хэрхэн туршихыг танд заах болно. Та Rasberian үйлдлийн системийг (OS) Raspberry Pi, блокчейн зангилааг идэвхжүүлдэг Geth хэрэгсэл, Swarm төвлөрсөн бус өгөгдөл хадгалах демон дээр суулгах болно.

Дөрөвдүгээр хичээл нь Ethereum сүлжээн дэх дансууд болон криптовалютын нэгжүүдэд зориулагдсан бөгөөд Geth консолоос нэг данснаас нөгөө данс руу мөнгө шилжүүлэх арга замууд юм. Та данс үүсгэх, мөнгө шилжүүлэх гүйлгээг эхлүүлэх, гүйлгээний статус, баримтыг хэрхэн авах талаар суралцах болно.

Тав дахь хичээл дээр Та Ethereum сүлжээн дэх ухаалаг гэрээнүүдтэй танилцаж, Ethereum виртуал машинаар тэдгээрийн гүйцэтгэлийн талаар мэдэх болно.

Та өөрийн анхны ухаалаг гэрээг Ethereum хувийн сүлжээнд үүсгэж, нийтлэх ба түүний функцийг хэрхэн дуудах талаар сурах болно. Үүнийг хийхийн тулд та Remix Solidity IDE ашиглах болно. Мөн та solc багц хөрвүүлэгчийг хэрхэн суулгах, ашиглах талаар сурах болно.
Бид мөн Application Binary Interface (ABI) гэж нэрлэгддэг зүйлийн талаар ярилцаж, хэрхэн ашиглахыг танд заах болно.

Зургаа дахь хичээл нь Node.js-ийг ажиллуулж байгаа JavaScript скриптүүдийг үүсгэх, Solidity ухаалаг гэрээнүүдтэй ажиллахад зориулагдсан.

Та Node.js-ийг Ubuntu, Debian, Rasberian OS дээр суулгаж, Ethereum дотоод сүлжээнд ухаалаг гэрээг нийтлэх скрипт бичиж, функцийг нь дуудах болно.

Нэмж дурдахад та скрипт ашиглан ердийн данс хооронд мөнгө шилжүүлэх, түүнчлэн ухаалаг гэрээний данс руу хэрхэн кредит хийх талаар сурах болно.

Долоо дахь хичээл дээр Та Solidity ухаалаг гэрээ хөгжүүлэгчдийн дунд түгээмэл хэрэглэгддэг Truffle framework-ийг хэрхэн суулгах, ашиглах талаар суралцах болно. Та трюфель-гэрээний модулийг ашиглан гэрээний функцийг дууддаг JavaScript скриптүүдийг хэрхэн үүсгэх, мөн Truffle ашиглан ухаалаг гэрээгээ туршиж үзэх болно.

Найм дахь хичээл Solidity өгөгдлийн төрлүүдэд зориулагдсан. Та гарын үсэг зурсан болон тэмдэггүй бүхэл тоо, гарын үсэг зурсан тоо, мөр, хаяг, цогц хувьсагч, массив, тоолол, бүтэц, толь бичиг зэрэг өгөгдлийн төрлүүдтэй ажиллах ухаалаг гэрээ бичих болно.

Ес дэх хичээл дээр Та Ethereum сүлжээний ухаалаг гэрээ байгуулахад нэг алхам ойртох болно. Та Geth хувийн сүлжээ, түүнчлэн Rinkeby testnet дээр Truffle ашиглан гэрээг хэрхэн нийтлэх талаар сурах болно. Rinkeby сүлжээнд ухаалаг гэрээг дибаг хийх нь үндсэн сүлжээнд нийтлэхээс өмнө маш хэрэгтэй байдаг - тэнд бараг бүх зүйл бодитой, гэхдээ үнэ төлбөргүй байдаг.

Хичээлийн нэг хэсэг болгон та Rinkeby тестийн сүлжээний зангилаа үүсгэж, түүнийг хөрөнгөөр ​​санхүүжүүлж, ухаалаг гэрээг нийтлэх болно.

Хичээл 10 Ethereum Swarm тараагдсан мэдээллийн санд зориулагдсан. Түгээмэл хадгалах санг ашигласнаар та Ethereum блокчейн дээр их хэмжээний өгөгдөл хадгалахад хэмнэлттэй болно.

Энэ зааварт та локал Swarm хадгалах сан үүсгэх, файлууд дээр бичих, унших үйлдлүүд болон файлын лавлахуудыг хийх болно. Дараа нь та нийтийн Swarm гарцтай хэрхэн ажиллах, Node.js-ээс Swarm-д хандах скрипт бичих, мөн Perl Net::Ethereum::Swarm модулийг ашиглах талаар суралцах болно.

Хичээлийн зорилго 11 - алдартай Python програмчлалын хэл болон Web3.py хүрээг ашиглан Solidity ухаалаг гэрээнүүдтэй ажиллах мастер. Та уг хүрээг суулгаж, ухаалаг гэрээг эмхэтгэх, нийтлэхийн тулд скрипт бичиж, функцийг нь дуудах болно. Энэ тохиолдолд Web3.py-г дангаараа болон Truffle-ийн нэгдсэн хөгжүүлэлтийн орчинтой хамт ашиглах болно.

12-р хичээл дээр Та oracle ашиглан ухаалаг гэрээ болон бодит ертөнцийн хооронд өгөгдөл дамжуулахыг сурах болно. Энэ нь танд вэб сайтууд, IoT төхөөрөмж, төрөл бүрийн төхөөрөмж, мэдрэгчээс мэдээлэл хүлээн авах, ухаалаг гэрээнээс өгөгдлийг эдгээр төхөөрөмж рүү илгээхэд тустай. Хичээлийн практик хэсэгт та ОХУ-ын Төв банкны вэбсайтаас ам.доллар ба рублийн одоогийн ханшийг хүлээн авах oracle болон ухаалаг гэрээг бүтээх болно.

Хичээл 1. Блокчэйн болон Ethereum сүлжээний талаар товчхонХичээлийн зорилго: Ethereum блокчейн үйл ажиллагааны зарчим, түүний хэрэглээний талбар, үндсэн нэр томъёотой танилцах.
Практик даалгавар: энэ хичээлд ороогүй болно.

Өнөөдөр блокчэйн технологи (Blockchain), криптовалют (Криптовалют эсвэл крипто валют), Bitcoin (Bitcoin), анхны зоос санал болгох (ICO, Initial coin offering), ухаалаг гэрээ (Ухаалаг гэрээ), түүнчлэн блокчэйнтэй холбоотой бусад ойлголт, нэр томъёо.

Блокчейн технологи нь шинэ зах зээлийг нээж, программистуудын ажлын байрыг бий болгодог. Хэрэв та криптовалютын технологи, ухаалаг гэрээний технологийн бүх нарийн ширийнийг ойлгодог бол энэ мэдлэгийг практикт хэрэгжүүлэхэд асуудал гарах ёсгүй.

Криптовалют болон блокчэйнүүдийн эргэн тойронд маш их таамаглал байдаг гэдгийг хэлэх ёстой. Бид криптовалютын ханшийн өөрчлөлт, пирамидуудыг бий болгох, криптовалютын хууль тогтоомжийн нарийн төвөгтэй байдал гэх мэт хэлэлцүүлгийг орхих болно. Сургалтын явцад бид Ethereum blockchain (Ethereum, Ether)-ийн ухаалаг гэрээг ашиглах техникийн тал дээр голчлон анхаарч, төвлөрсөн бус гэж нэрлэгддэг програмуудыг (Тарааруулсан програм, DApp) хөгжүүлэх болно.

Блокчейн гэж юу вэ

Blockchain (Block Chain) нь тодорхой аргаар хоорондоо холбогдсон өгөгдлийн блокуудын гинж юм. Гинжний эхэнд эхний блок байдаг бөгөөд үүнийг анхдагч блок (генезис блок) эсвэл генезис блок гэж нэрлэдэг. Үүний дараа хоёр дахь, дараа нь гурав дахь гэх мэт.

Эдгээр бүх өгөгдлийн блокууд блокчейн сүлжээний олон тооны зангилаанууд дээр автоматаар хуулбарлагддаг. Энэ нь блокчейн мэдээллийн төвлөрсөн бус хадгалалтыг баталгаажуулдаг.
Та блокчэйн системийг сүлжээнд холбогдсон олон тооны зангилаа (физик эсвэл виртуал сервер) бөгөөд өгөгдлийн блокуудын гинжин хэлхээний бүх өөрчлөлтийг хуулбарладаг гэж төсөөлж болно. Энэ бол асар том олон серверт компьютертэй адил бөгөөд ийм компьютерийн (серверүүдийн) зангилаанууд дэлхий даяар тархаж болно. Мөн та компьютерээ блокчейн сүлжээнд нэмж болно.

Тархсан мэдээллийн сан

Блокчэйн нь блокчэйн сүлжээний бүх зангилаанд хуулбарлагдсан тархсан мэдээллийн сан гэж үзэж болно. Онолын хувьд блокчэйний бүх блокуудыг хадгалах дор хаяж нэг зангилаа ажиллаж байгаа цагт блокчэйн ажиллах болно.

Тархсан мэдээллийн бүртгэл

Блокчэйн нь өгөгдөл, үйл ажиллагааны (гүйлгээний) тархсан дэвтэр гэж ойлгож болно. Ийм бүртгэлийн өөр нэг нэр нь дэвтэр юм.

Өгөгдлийг тараасан дэвтэрт нэмж болох боловч өөрчлөх, устгах боломжгүй. Энэ боломжгүй байдалд, ялангуяа криптографийн алгоритм, гинжин хэлхээнд блок нэмэх тусгай алгоритм, төвлөрсөн бус мэдээллийн хадгалалтын тусламжтайгаар хүрч болно.

Блок нэмэх, үйл ажиллагаа (гүйлгээ) хийхдээ хувийн болон нийтийн түлхүүрүүдийг ашигладаг. Тэд блокчэйн хэрэглэгчдэд зөвхөн өөрсдийн блок өгөгдөлд хандах эрх олгох замаар хязгаарладаг.

Ажил гүйлгээ

Блокчейн нь үйл ажиллагааны (гүйлгээний) талаарх мэдээллийг блок болгон хадгалдаг. Үүний зэрэгцээ хуучин, аль хэдийн дууссан гүйлгээг буцааж эсвэл өөрчлөх боломжгүй. Шинэ гүйлгээг шинээр нэмсэн блокуудад хадгална.

Ийм байдлаар гүйлгээний түүхийг бүхэлд нь блокчейн дээр өөрчлөгдөөгүй бүртгэж болно. Тиймээс блокчэйн нь жишээлбэл, банкны гүйлгээ, зохиогчийн эрхийн мэдээлэл, үл хөдлөх хөрөнгийн өмчлөгчийн өөрчлөлтийн түүх гэх мэт найдвартай хадгалахад ашиглаж болно.

Ethereum блокчлон нь системийн төлөв гэж нэрлэгддэг зүйлийг агуулдаг. Гүйлгээг гүйцэтгэх үед төлөв нь анхны төлөвөөс одоогийн төлөв рүү өөрчлөгддөг. Гүйлгээг блокоор бүртгэдэг.

Төрийн болон хувийн блокчэйн

Аливаа хувь хүн, хуулийн этгээд, төрийн байгууллага, засгийн газар хянах боломжгүй олон нийтийн блокчейн сүлжээ гэж нэрлэгддэг бүх зүйл үнэн гэдгийг энд тэмдэглэх нь зүйтэй.
Хувийн блокчейн сүлжээ гэж нэрлэгддэг сүлжээнүүд нь бүтээгчдийн бүрэн хяналтанд байдаг бөгөөд тэнд бүх зүйл боломжтой, жишээлбэл, гинжин хэлхээний бүх блокуудыг бүрэн солих боломжтой.

Блокчэйний практик хэрэглээ

Блокчейн юунд ашигтай байж болох вэ?

Товчхондоо, блокчэйн нь бие биедээ итгэдэггүй хүмүүс эсвэл компаниудын хооронд гүйлгээ (гүйлгээ) хийх боломжийг танд олгоно. Блокчэйнд бүртгэгдсэн өгөгдлийг (гүйлгээ, хувийн мэдээлэл, баримт бичиг, гэрчилгээ, гэрээ, нэхэмжлэх гэх мэт) бүртгэсний дараа хуурамчаар үйлдэх, солих боломжгүй. Тиймээс блокчейн дээр үндэслэн, жишээлбэл, янз бүрийн төрлийн баримт бичгийн итгэмжлэгдсэн тархсан бүртгэлийг үүсгэх боломжтой.

Мэдээжийн хэрэг, энгийн цаасан мөнгийг орлох зориулалттай блокчейн үндсэн дээр криптовалютны системийг бий болгож байгааг та мэднэ. Цаасан мөнгийг мөн fiat гэж нэрлэдэг (Fiat Money-ээс).
Блокчейн нь блокоор бүртгэгдсэн гүйлгээний хадгалалт, хувиршгүй байдлыг баталгаажуулдаг тул криптовалютын системийг бий болгоход ашиглаж болно. Энэ нь янз бүрийн хэрэглэгчид (дансууд) хооронд крипто мөнгө шилжүүлэх түүхийг бүхэлд нь агуулдаг бөгөөд аливаа үйлдлийг хянах боломжтой.

Хэдийгээр криптовалютын систем дэх гүйлгээ нь нэргүй байж болох ч криптовалютыг эргүүлэн авч, үнэт цаасаар солих нь ихэвчлэн криптовалютын хөрөнгийн эзэмшигчийн хэн болохыг илчилдэг.

Ethereum сүлжээнд ажилладаг программ хангамж болох ухаалаг гэрээ гэж нэрлэгддэг гэрээнүүд нь гүйлгээ хийх үйл явцыг автоматжуулах, хэрэгжилтийг хянах боломжийг олгодог. Энэ нь ялангуяа гүйлгээний төлбөрийг Ether криптовалют ашиглан хийсэн тохиолдолд үр дүнтэй байдаг.

Solidity програмчлалын хэл дээр бичигдсэн Ethereum blockchain болон Ethereum ухаалаг гэрээг жишээ нь дараах чиглэлээр ашиглаж болно.

  • баримт бичгийг нотариатаар баталгаажуулах өөр хувилбар;
  • үл хөдлөх хөрөнгийн объектын бүртгэл, үл хөдлөх хөрөнгийн объекттой хийсэн гүйлгээний талаархи мэдээллийг хадгалах;
  • оюуны өмчийн зохиогчийн эрхийн мэдээллийг хадгалах (ном, зураг, хөгжмийн бүтээл гэх мэт);
  • бие даасан сонгуулийн тогтолцоог бий болгох;
  • санхүү, банк санхүү;
  • олон улсын хэмжээнд логистик, барааны хөдөлгөөнийг хянах;
  • иргэний үнэмлэхний системийн аналог байдлаар хувийн мэдээллийг хадгалах;
  • арилжааны салбарт найдвартай гүйлгээ хийх;
  • эмнэлгийн үзлэгийн үр дүн, түүнчлэн тогтоосон журмын түүхийг хадгалах

Блокчейнтэй холбоотой асуудлууд

Гэхдээ мэдээжийн хэрэг бүх зүйл тийм ч энгийн биш юм шиг санагдаж байна!

Мэдээллийг блокчэйнд нэмэхээс өмнө баталгаажуулахад асуудал гардаг (жишээлбэл, тэдгээр нь хуурамч уу?), блокчэйнтэй ажиллахад ашигладаг систем болон хэрэглээний програм хангамжийн аюулгүй байдлын асуудал, хандалтыг хулгайлахын тулд нийгмийн инженерчлэлийн аргыг ашиглах боломжуудтай холбоотой асуудлууд байдаг. cryptocurrency түрийвч, гэх мэт .P.

Дахин хэлэхэд, зангилаа нь дэлхий даяар тархсан нийтийн блокчэйний тухай биш, харин хувь хүн, байгууллагын хувийн блокчейн тухай ярих юм бол энд итгэх итгэлийн түвшин итгэлийн түвшнээс өндөр байх болно. энэ хүн эсвэл энэ байгууллагад.

Блокчэйнд бүртгэгдсэн өгөгдөл нь хүн бүрт хүртээмжтэй болдог гэдгийг анхаарах хэрэгтэй. Энэ утгаараа блокчэйн (ялангуяа олон нийтийн) нууц мэдээллийг хадгалахад тохиромжгүй. Гэсэн хэдий ч блокчлон дээрх мэдээллийг өөрчлөх боломжгүй байгаа нь янз бүрийн төрлийн залилан мэхлэх үйлдлээс урьдчилан сэргийлэх, шалгахад тусална.

Хэрэв та криптовалют ашиглан төлбөрөө төлвөл Ethereum төвлөрсөн бус програмууд тохиромжтой байх болно. Олон хүн криптовалют эзэмшдэг эсвэл худалдан авах хүсэлтэй байх тусам DApps болон ухаалаг гэрээнүүд илүү алдартай болно.

Блокчейнтэй холбоотой нийтлэг бэрхшээлүүд нь практик хэрэглээнд саад болж байгаа зүйл бол шинэ блок нэмэх хязгаарлагдмал хурд, гүйлгээний харьцангуй өндөр өртөг юм. Гэхдээ энэ чиглэлийн технологи идэвхтэй хөгжиж байгаа бөгөөд техникийн асуудлууд цаг хугацааны явцад шийдэгдэнэ гэж найдаж байна.

Өөр нэг асуудал бол Ethereum blockchain дээрх ухаалаг гэрээнүүд нь виртуал машинуудын тусгаарлагдсан орчинд ажилладаг бөгөөд бодит өгөгдөлд хандах боломжгүй байдаг. Ялангуяа ухаалаг гэрээт програм нь сайтууд эсвэл аливаа физик төхөөрөмжөөс (мэдрэгч, контакт гэх мэт) өгөгдлийг уншиж чадахгүй, мөн гадны ямар ч төхөөрөмж рүү өгөгдөл гаргаж чадахгүй. Бид энэ асуудал, түүнийг шийдвэрлэх арга замуудын талаар Oracles гэж нэрлэгддэг ухаалаг гэрээний мэдээллийн зуучлагчдад зориулсан хичээлээр хэлэлцэх болно.

Мөн хуулийн хязгаарлалтууд байдаг. Жишээлбэл, зарим улс оронд криптовалютыг төлбөрийн хэрэгсэл болгон ашиглахыг хориглодог боловч та үүнийг үнэт цаас гэх мэт дижитал хөрөнгийн нэг төрөл болгон эзэмших боломжтой. Ийм хөрөнгийг бирж дээр худалдах, худалдан авах боломжтой. Ямар ч тохиолдолд криптовалюттай ажиллах төсөл зохиохдоо таны төсөл харьяалагдах улсын хууль тогтоомжтой танилцах хэрэгтэй.

Блокчейн сүлжээ хэрхэн үүсдэг

Өмнө дурьдсанчлан блокчэйн бол өгөгдлийн блокуудын энгийн сүлжээ юм. Нэгдүгээрт, энэ гинжин хэлхээний эхний блок үүсдэг, дараа нь хоёр дахь нь нэмэгддэг гэх мэт. Гүйлгээний өгөгдлийг блокуудад хадгалдаг гэж үздэг бөгөөд хамгийн сүүлийн блок дээр нэмэгддэг.

Зураг дээр. 1.1-д бид эхний блок нь дараагийнхыг хэлдэг блокуудын дарааллын хамгийн энгийн хувилбарыг үзүүлэв.

“Ethereum blockchain-д зориулж Solidity ухаалаг гэрээ байгуулах нь” ном. Практик гарын авлага"
Цагаан будаа. 1.1. Блокуудын энгийн дараалал

Гэхдээ энэ сонголтын тусламжтайгаар блокууд нь өөрчлөлтөөс хамгаалах ямар ч мэдээлэл агуулаагүй тул гинжин хэлхээний аль ч блокийн агуулгыг өөрчлөхөд маш хялбар байдаг. Блокчэйн нь итгэлцэлгүй хүмүүс болон компаниудад ашиглагдах зорилготой гэдгийг харгалзан үзвэл өгөгдөл хадгалах энэ аргыг блокчэйнд тохиромжгүй гэж дүгнэж болно.

Блокуудыг хуурамчаар үйлдэхээс хамгаалж эхэлцгээе. Эхний шатанд бид блок бүрийг хяналтын нийлбэрээр хамгаалахыг хичээх болно (Зураг 1.2).

“Ethereum blockchain-д зориулж Solidity ухаалаг гэрээ байгуулах нь” ном. Практик гарын авлага"
Цагаан будаа. 1.2. Эдгээр блокуудын хамгаалалтыг шалгах нийлбэрээр нэмж байна

Одоо халдагчид блокийн өгөгдлийн хяналтын нийлбэрийг агуулж байгаа тул блокыг зүгээр л өөрчлөх боломжгүй. Шалгах нийлбэрийг шалгах нь өгөгдөл өөрчлөгдсөнийг харуулах болно.

Шалгалтын дүнг тооцоолохын тулд та MD-5, SHA-1, SHA-256 гэх мэт хэш функцүүдийн аль нэгийг ашиглаж болно. Хэш функцууд нь өгөгдлийн блок дээр эргэлт буцалтгүй үйлдлүүд хийж утгыг (жишээлбэл, тогтмол урттай текстийн мөр) тооцоолдог. Үйлдлүүд нь хэш функцийн төрлөөс хамаарна.

Өгөгдлийн блокийн агуулга бага зэрэг өөрчлөгдсөн ч хэш утга мөн өөрчлөгдөх болно. Хэш функцийн утгыг задлан шинжилснээр түүний тооцоолсон өгөгдлийн блокыг дахин бүтээх боломжгүй юм.

Ийм хамгаалалт хангалттай байх болов уу? Харамсалтай нь үгүй.

Энэ схемд шалгах нийлбэр (хэш функц) нь зөвхөн тусдаа блокуудыг хамгаалдаг боловч блокчлоныг бүхэлд нь хамгаалдаггүй. Хэш функцийг тооцоолох алгоритмыг мэддэг тул халдагчид блокийн агуулгыг амархан сольж чаддаг. Түүнчлэн, түүнийг гинжнээс блокуудыг арилгах эсвэл шинээр нэмэхэд юу ч саад болохгүй.

Бүхэл бүтэн гинжийг хамгаалахын тулд та блок бүрт өмнөх блокийн өгөгдлийн хэшийг өгөгдлийн хамт хадгалах боломжтой (Зураг 1.3).

“Ethereum blockchain-д зориулж Solidity ухаалаг гэрээ байгуулах нь” ном. Практик гарын авлага"
Цагаан будаа. 1.3. Өгөгдлийн блок дээр өмнөх блокийн хэшийг нэмнэ

Энэ схемд блокыг өөрчлөхийн тулд та дараагийн бүх блокуудын хэш функцийг дахин тооцоолох хэрэгтэй. Асуудал юу вэ?

Бодит блокчэйнд шинэ блок нэмэхэд зохиомол бэрхшээлүүд бий болдог - маш их тооцоолох нөөц шаарддаг алгоритмуудыг ашигладаг. Блокод өөрчлөлт оруулахын тулд та зөвхөн энэ блокыг төдийгүй дараагийн бүх блокуудыг дахин тооцоолох хэрэгтэй гэдгийг харгалзан үзвэл үүнийг хийхэд маш хэцүү байх болно.

Блокчейн өгөгдөл нь олон тооны сүлжээний зангилаанууд дээр хадгалагддаг (давхарддаг) гэдгийг санаарай. Төвлөрсөн бус хадгалалт ашигладаг. Мөн энэ нь блок хуурамчаар үйлдэх нь илүү хэцүү болгодог, учир нь бүх сүлжээний зангилаанд өөрчлөлт оруулах ёстой.

Блокууд нь өмнөх блокуудын мэдээллийг хадгалдаг тул гинжин хэлхээний бүх блокуудын агуулгыг шалгах боломжтой.

Ethereum блокчейн

Ethereum блокчэйн нь тархсан DApps үүсгэх боломжтой платформ юм. Бусад платформуудаас ялгаатай нь Ethereum нь Solidity програмчлалын хэл дээр бичигдсэн ухаалаг гэрээ гэж нэрлэгддэг (ухаалаг гэрээ) ашиглах боломжийг олгодог.

Энэхүү платформыг Bitcoin сэтгүүлийг үүсгэн байгуулагч Виталик Бутерин 2013 онд бүтээж, 2015 онд эхлүүлсэн. Бидний сургалтын курст суралцах эсвэл хийх бүх зүйл Ethereum blockchain болон Solidity ухаалаг гэрээнүүдтэй холбоотой.

Уул уурхайн олборлолт эсвэл блокууд хэрхэн үүсдэг

Олборлолт нь блокчейн сүлжээнд шинэ блок нэмэх нэлээд төвөгтэй бөгөөд нөөц их шаарддаг үйл явц бөгөөд огт "криптовалютын олборлолт" биш юм. Уул уурхай нь blockchain-ийн ажиллагааг хангадаг, учир нь Энэ процесс нь Ethereum блокчэйнд гүйлгээ нэмэх үүрэгтэй.

Блок нэмэх ажилд оролцсон хүмүүс, байгууллагыг уурхайчид гэдэг.
Уурхайчны зангилаанууд дээр ажиллаж байгаа программ хангамж нь сүлжээнээс заасан тодорхой хэш утгыг авахын тулд сүүлчийн блокийн хувьд Nonce хэмээх хэш параметрийг олохыг оролддог. Ethereum-д хэрэглэгддэг Ethash хэшлэх алгоритм нь зөвхөн дараалсан хайлтаар Nonce утгыг авах боломжийг олгодог.

Хэрэв уурхайчин зангилаа Nonce утгыг зөв олсон бол энэ нь ажлын баталгаа (PoW, Proof-of-work) гэж нэрлэгддэг. Энэ тохиолдолд Ethereum сүлжээнд блок нэмбэл уурхайчин сүлжээний мөнгөн тэмдэгт болох эфирээр тодорхой шагнал авдаг. Бичиж байх үед шагнал нь 5 эфир боловч цаг хугацаа өнгөрөх тусам буурах болно.

Тиймээс Ethereum уурхайчид блокуудыг нэмж сүлжээний ажиллагааг хангаж, үүний төлөө криптовалют мөнгө хүлээн авдаг. Та интернетээс уурхайчид болон уул уурхайн талаар маш их мэдээлэл олж авах болно, гэхдээ бид Ethereum сүлжээнд Solidity гэрээ болон DApps бий болгоход анхаарлаа хандуулах болно.

Хичээлийн хураангуй

Эхний хичээлээр та блокчэйнтэй танилцаж, энэ нь блокуудын тусгайлан бүрдсэн дараалал гэдгийг мэдсэн. Өмнө нь бүртгэгдсэн блокуудын агуулгыг өөрчлөх боломжгүй, учир нь энэ нь олон сүлжээний зангилаанууд дээр дараагийн бүх блокуудыг дахин тооцоолох шаардлагатай бөгөөд энэ нь маш их нөөц, цаг хугацаа шаарддаг.

Гүйлгээний үр дүнг хадгалахад блокчейн ашиглаж болно. Үүний гол зорилго нь харилцан итгэлцэлгүй талууд (хүмүүс, байгууллага) хооронд найдвартай гүйлгээг зохион байгуулах явдал юм. Та Ethereum blockchain болон Solidity ухаалаг гэрээг бизнесийн аль салбарт, аль салбарт ашиглаж болохыг мэдэж авсан. Энэ бол банкны салбар, эд хөрөнгийн эрхийн бүртгэл, бичиг баримт гэх мэт.

Блокчэйн ашиглах үед янз бүрийн асуудал үүсч болохыг та мэдсэн. Эдгээр нь блокчэйнд нэмсэн мэдээллийг шалгах, блокчэйний хурд, гүйлгээний өртөг, ухаалаг гэрээ болон бодит ертөнцийн хооронд өгөгдөл солилцох асуудал, мөн хэрэглэгчийн данснаас криптовалютыг хулгайлах зорилготой халдагчдын халдлага юм. .

Мөн бид блокчэйнд шинэ блок нэмэх үйл явц болох уул уурхайн талаар товч ярилаа. Гүйлгээг дуусгахад уул уурхай зайлшгүй шаардлагатай. Олборлолтод оролцдог хүмүүс блокчейн үйл ажиллагааг хангаж, үүний төлөө криптовалютаар урамшуулал авдаг.

Хичээл 2. Ubuntu болон Debian үйлдлийн систем дээр ажиллах орчинг бэлтгэхҮйлдлийн системийг сонгох
Шаардлагатай хэрэгслүүдийг суурилуулах
Ubuntu дээр Geth and Swarm суулгаж байна
Debian дээр Geth болон Swarm суулгаж байна
Урьдчилсан бэлтгэл
Go түгээлтийг татаж байна
Орчны хувьсагчдыг тохируулах
Go хувилбарыг шалгаж байна
Geth and Swarm суулгаж байна
Хувийн блокчэйн үүсгэх
genesis.json файлыг бэлтгэж байна
Ажлын лавлах үүсгэ
Бүртгэл үүсгэх
Зангилаа эхлүүлж байна
Зангилаа эхлүүлэх сонголтууд
Манай зангилаатай холбогдоно уу
Уул уурхайн менежмент, баланс шалгах
Geth консолыг унтрааж байна
Хичээлийн хураангуй

Хичээл 3. Raspberry Pi 3 дээр ажиллах орчинг бэлтгэхRaspberry Pi 3-г ажилд бэлдэж байна
Rasberian суулгаж байна
Шинэчлэлтүүдийг суулгаж байна
SSH хандалтыг идэвхжүүлж байна
Статик IP хаягийг тохируулах
Шаардлагатай хэрэгслүүдийг суурилуулах
Go суулгаж байна
Go түгээлтийг татаж байна
Орчны хувьсагчдыг тохируулах
Go хувилбарыг шалгаж байна
Geth and Swarm суулгаж байна
Хувийн блокчэйн үүсгэх
Таны данс болон үлдэгдлийг шалгаж байна
Хичээлийн хураангуй

Хичээл 4. Данс, данс хооронд мөнгө шилжүүлэхБүртгэлүүдийг харах, нэмэх
Бүртгэлийн жагсаалтыг харах
Бүртгэл нэмж байна
geth account командын сонголтууд
Бүртгэлийн нууц үг
Ethereum дахь криптовалют
Ethereum валютын нэгж
Бид дансныхаа одоогийн үлдэгдлийг тодорхойлдог
Нэг данснаас нөгөө данс руу мөнгө шилжүүлэх
eth.sendTransaction арга
Гүйлгээний статусыг харах
Гүйлгээний баримт
Хичээлийн хураангуй

Хичээл 5. Анхны гэрээгээ нийтлэх ньEthereum дахь ухаалаг гэрээнүүд
Ухаалаг гэрээний гүйцэтгэл
Ethereum виртуал машин
Хөгжлийн нэгдсэн орчин Remix Solidity IDE
Ажиллаж байгаа эмхэтгэл
Гэрээний функцуудыг дуудах
Гэрээг хувийн сүлжээнд нийтлэх
ABI тодорхойлолт болон гэрээний хоёртын кодыг авч байна
Гэрээг нийтлэх
Гэрээний нийтэлсэн гүйлгээний статусыг шалгаж байна
Гэрээний функцуудыг дуудах
Багц хөрвүүлэгч solc
Ubuntu дээр solc суулгаж байна
Debian дээр solc суулгаж байна
HelloSol гэрээг эмхэтгэж байна
Гэрээг нийтлэх
Rasberian дээр solc суулгаж байна
Хичээлийн хураангуй

Хичээл 6. Ухаалаг гэрээ болон Node.jsNode.js суулгаж байна
Ubuntu дээр суулгах
Debian дээр суулгах
Ganache-cli-г суулгаж ажиллуулж байна
Web3 суулгац
Solc суулгаж байна
Rasberian дээр Node.js суулгаж байна
Консол дахь дансны жагсаалтыг авах скрипт
Ухаалаг гэрээг нийтлэх скрипт
Параметрүүдийг эхлүүлж, авч байна
Эхлүүлэх сонголтуудыг авч байна
Гэрээний эмхэтгэл
Таны бүртгэлийг блокоос гаргаж байна
ABI болон гэрээний хоёртын кодыг ачаалж байна
Шаардлагатай хийн хэмжээг тооцоолох
Объект үүсгэж, гэрээг нийтэлж эхлээрэй
Гэрээг нийтлэх скриптийг ажиллуулж байна
Ухаалаг гэрээний функцуудыг дуудаж байна
Нийтлэгдсэн ухаалаг гэрээг шинэчлэх боломжтой юу?
Web3 1.0.x хувилбартай ажиллах
Бүртгэлийн жагсаалтыг авч байна
Гэрээг нийтлэх
Гэрээний функцуудыг дуудах
Нэг данснаас нөгөө данс руу мөнгө шилжүүлэх
Гэрээний данс руу мөнгө шилжүүлэх
HelloSol ухаалаг гэрээг шинэчилж байна
Дансны үлдэгдлийг харахын тулд скрипт үүсгэ
call_contract_get_promise.js скриптэд getBalance функц руу дуудлага нэмнэ үү
Бид ухаалаг гэрээний дансыг цэнэглэдэг
Хичээлийн хураангуй

Хичээл 7. Трюфельтэй танилцахТрюфель суулгаж байна
HelloSol төсөл үүсгэх
Төслийн лавлах болон файлуудыг үүсгэх
Гэрээний лавлах
Каталогийн шилжилт хөдөлгөөн
Лавлах тест
truffle-config.js файл
HelloSol гэрээг эмхэтгэж байна
Гэрээг нийтэлж эхлээрэй
Truffle Prompt-д HelloSol гэрээний функцуудыг дуудаж байна
Node.js ажиллаж байгаа JavaScript скриптээс HelloSol гэрээний функцуудыг дуудаж байна
Трюфель-гэрээт модулийг суулгаж байна
Гэрээний функцуудыг дуудах нь getValue болон getString
Гэрээний функцуудыг дуудаж байна setValue болон setString
Гэрээнд өөрчлөлт оруулах, дахин хэвлэх
Web3 1.0.x хувилбартай ажиллах
HelloSol ухаалаг гэрээнд өөрчлөлт оруулж байна
Гэрээний аргуудыг дуудах скриптүүд
Трюфель дэх туршилт
Хатуу байдлын туршилт
JavaScript тест
Хичээлийн хураангуй

Хичээл 8. Хатуу байдлын өгөгдлийн төрлүүдӨгөгдлийн төрлийг сурах гэрээ
Булийн өгөгдлийн төрлүүд
Тэмдэггүй бүхэл тоо болон тэмдэгт бүхэл тоо
Тогтмол цэгийн дугаарууд
Хаяг
Нарийн төвөгтэй төрлийн хувьсагчид
Тогтмол хэмжээтэй массивууд
Динамик массивууд
Тооллого
Бүтэц
Толь бичгийн зураглал
Хичээлийн хураангуй

Хичээл 9. Гэрээг хувийн сүлжээ болон Ринкеби сүлжээ рүү шилжүүлэхТрюфлээс хувийн Geth сүлжээнд хийсэн гэрээг нийтэлж байна
Хувийн сүлжээний зангилаа бэлтгэж байна
Ажил гүйцэтгэх гэрээ бэлтгэх
Гэрээг эмхэтгэж, Трюфель сүлжээнд шилжүүлэх
Дотоод сүлжээний шилжилтийг эхлүүлж байна
Трюфель олдвор авах
Truffle-ээс Rinkeby testnet-д гэрээг нийтэлж байна
Ринкебитэй ажиллах Гет зангилаа бэлдэж байна
Зангилааны синхрончлол
Бүртгэл нэмж байна
Rinkeby дансаа эфирээр дүүргэж байна
Rinkeby сүлжээнд гэрээний шилжилтийг эхлүүлж байна
Rinkeby сүлжээн дэх гэрээний мэдээллийг үзэх
Rinkeby сүлжээнд зориулсан трюфель консол
Гэрээний функцуудыг дуудах илүү хялбар арга
Node.js ашиглан гэрээний аргуудыг дуудаж байна
Rinkby-д зориулсан Truffle консол дахь данс хооронд мөнгө шилжүүлэх
Хичээлийн хураангуй

Хичээл 10. Ethereum Swarm төвлөрсөн бус өгөгдөл хадгалахEthereum Swarm хэрхэн ажилладаг вэ?
Swarm-г суулгаж, ажиллуулж байна
Файл, лавлахтай хийх үйлдлүүд
Ethereum Swarm руу файл байршуулж байна
Ethereum Swarm-аас файл уншиж байна
Байршуулсан файлын манифестийг харах
Дэд директоруудтай лавлахуудыг ачаалж байна
Татаж авсан лавлахаас файл уншиж байна
Олон нийтийн Swarm гарцыг ашиглаж байна
Node.js скриптээс Swarm-д хандаж байна
Perl Net :: Ethereum :: Swarm модуль
Net::Ethereum::Swarm модулийг суулгаж байна
Өгөгдөл бичих, унших
Хичээлийн хураангуй

Хичээл 11. Python дээр Ethereum-тай ажиллах Web3.py хүрээWeb3.py суулгаж байна
Шаардлагатай багцуудыг шинэчлэх, суулгах
Easysolc модулийг суулгаж байна
Web3.py ашиглан гэрээг нийтлэх
Гэрээний эмхэтгэл
Үйлчилгээ үзүүлэгчтэй холбогдож байна
Гэрээний хэвлэлийг гүйцэтгэх
Гэрээний хаяг болон abi-г файлд хадгалж байна
Гэрээг нийтлэх скриптийг ажиллуулж байна
Дуудлага хийх гэрээний аргууд
JSON файлаас гэрээний хаяг болон abi-г уншиж байна
Үйлчилгээ үзүүлэгчтэй холбогдож байна
Гэрээний объект үүсгэх
Дуудлага хийх гэрээний аргууд
Трюфель болон Web3.py
Хичээлийн хураангуй

Хичээл 12. OraclesУхаалаг гэрээ нь гадаад ертөнцийн өгөгдөлд итгэж чадах уу?
Oracles нь блокчейн мэдээллийн зуучлагч юм
Мэдээллийн эх үүсвэр
Эх сурвалжаас авсан өгөгдлийг илэрхийлэх код
Blockchain дээр валютын ханшийг бүртгэх Oracle
USDRateOracle гэрээ
Ухаалаг гэрээгээр ханшийг шинэчлэх
Вэб сокет үйлчилгээ үзүүлэгчийг ашиглах
RateUpdate үйл явдлыг хүлээж байна
RateUpdate үйл явдлыг зохицуулж байна
Ухаалаг гэрээнд өгөгдлийн шинэчлэлтийг эхлүүлж байна
Хичээлийн хураангуй

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх