Хэрэв бид өмнөх хэдэн жилийн чиг хандлагыг харвал блокчэйний талаар байнга сонсож байсан ч онцлог шинж чанаруудын талаар тийм ч их биш юм.
Bitcoin, Ethereum, Dogecoin, Matic болон бусад криптовалютууд блокчэйн технологид тулгуурладгийг бид бүгд мэднэ. Блокчейн нь 2021 онд олон салбарыг өөрчилсөн чухал үйл явдлуудыг удирдаж, шинэ ололт амжилтад хүрэх замыг зассан.
Блокчэйн нь өгөгдлийг засварлах, хакердах, залилахад хэцүү эсвэл боломжгүй байдлаар хадгалах хэрэгсэл юм. Энэ нь блокчэйний бүхэл бүтэн компьютерийн системийн сүлжээнд тархсан гүйлгээний дижитал дэвтэр юм.
Энэ бол бараг бүх криптовалютыг хүчирхэгжүүлдэг мэдээллийн сангийн шинэ технологи юм. Блокчейн нь мэдээллийн баазын ижил хуулбарыг бүхэл бүтэн сүлжээнд тараах замаар системийг хакердах эсвэл хуурахад үнэхээр хэцүү болгодог.
Биткойн нь одоо блокчэйний хамгийн алдартай хэрэглээ болсон хэдий ч технологи нь маш өргөн хүрээний хэрэглээнд үйлчлэх боломжтой.
Сүүлийн жилүүдэд криптовалют болон блокчэйн улам бүр түгээмэл болж байгаа бөгөөд энэ хандлага цаашид ч үргэлжлэх төлөвтэй байна.
Бид энэ зааварт JavaScript ашиглан энгийн блокчлон бүтээх болно. Энэ нь блокчэйн хэрхэн ажилладаг тухай үндсэн ойлголтыг танд өгөх болно.
Үүнийг MelodyCoin гэж нэрлээд, үйл ажиллагаандаа шууд орцгооё!
Блок үүсгэх
Эхлэхийн тулд бид бүх кодыг байрлуулах шинэ JavaScript файл үүсгэх болно.
Үүнийг main.js гэж нэрлээд блокчэйн болон блокууд хэрхэн харагдах ёстойг тайлбарласнаар эхэлцгээе.
Block класс үүсгээд түүнд Object() { [native code] } функцийг өгөөрэй.
Та шинэ блок үүсгэхдээ огноо, өмнөх блокийн хэшийг өгөх ёстой.
Энд үл хөдлөх хөрөнгө тус бүрийн тодорхойлолтууд байна:
- Цагийн тэмдэг нь блок хэзээ хийгдсэнийг заана. Та ямар ч форматыг ашиглаж болно (энэ тохиолдолд UNIX цагийн тэмдэг).
- Энэ блокт холбогдохыг хүссэн аливаа хэлбэрийн өгөгдлийн параметрийг өгөгдлийн параметрт оруулж болно. Хэрэв та криптовалют үүсгэхийг хүсвэл илгээгч/хүлээн авагч, шилжүүлсэн мөнгөний хэмжээ зэрэг гүйлгээний мэдээллийг хадгалах боломжтой.
- ӨмнөхХаш нь өмнөх блокийн хэшийг агуулсан мөр юм. Энэ нь блокуудын гинжийг үүсгэх зүйл бөгөөд энэ нь хожим бидний блокчейн бүрэн бүтэн байдлыг хангахад чухал үүрэг гүйцэтгэнэ.
Хэш үүсгэх
Блок бүр нь өмнөх блоктой холбогддог (ингэснээр өмнөхHash шинж чанар). Өөрөөр хэлбэл, блок бүр хэш шаарддаг. Хэш нь хурууны хээтэй төстэй. Энэ нь блок бүрийн хувьд ялгаатай.
Блокийн хэшийг түүний бүх агуулгыг хэш функцээр дамжуулж тооцоолж болно.
Тиймээс одоо байгаа блокийн хэшийг тооцоолох функцийг хэрэгжүүлж эхэлцгээе.
Тиймээс, Block классын дагуу бид accountHash функцийг тодорхойлно.
Гэсэн хэдий ч SHA256 хэш нь JavaScript-ээр дэмжигдээгүй бөгөөд гадаад номын сангаас авах ёстой.
Crypto-js бол хэд хэдэн хэш алгоритмын аюулгүй хэрэгжилтийг агуулсан гайхалтай багц юм.
Дараа нь бид үүнийг main.js код руугаа оруулж болно.
Одоо бид accountHash() функцтэй болсон тул үүнийг Блокийн функцэд ашиглая:
Блок ямар харагдахыг тайлбарласны дараа бид блокчейн ямар байх ёстойг тодорхойлж чадна. Тиймээс шинэ анги үүсгэцгээе.
Энэ хувилбарт блокчэйн нь өмчийн хэлхээтэй маш энгийн объект юм. Энэ бол гинжин хэлхээний бүх блокуудыг агуулсан массив юм.
Блок нэмэхийн өмнө бид эхлээд "үүслийн блок" гэж нэрлэгддэг зүйлийг үүсгэх ёстой. Энэ бол гинжин хэлхээний эхний блок бөгөөд өмнөх блок руу зааж чадахгүй гэдгээрээ онцлог юм (энэ нь анхных нь!).
Тиймээс, генезис блокыг бүтээхийн тулд би createGenesisBlock () нэртэй функцийг ангидаа нэмнэ. Манай Blockchain ангийн Object() { [уугуул код] } функц руу буцна.
Бид одоо шинэ Blockchain инстанс бүтээх үедээ генезисын блокыг оруулах боломжтой.
Блокчейн аргууд
Одоо шинэ блок нэмэх, хамгийн сүүлийн блокыг татах гэх мэт зүйлсийг хийх боломжийг бидэнд олгох аргуудыг Blockchain ангидаа нэмье.
getLatestBlock функц нь хамгийн энгийн функц юм. Энэ нь зүгээр л гинжин массивын эцсийн гишүүнийг буцаана:
addBlock техник нь арай илүү оролцдог.
Бид гинжин хэлхээнд шинэ блок нэмэхийн өмнө эхлээд тухайн блокийн өмнөх Hash талбарыг зохих ёсоор тохируулах ёстой.
Үүнийг манай гинжин хэлхээнд хамгийн сүүлд нэмсэн блокийн хэш болгож тохируулах ёстой. Мөн бид шинэ блокийн хэшийг тооцоолох хэрэгтэй:
тест хийх
Манай MelodyCoin хэрхэн гарч ирснийг харцгаая.
Үүнийг хэрэгжүүлэхийн тулд блокчейн жишээг үүсгэ. Өөр хэдэн блок нэмье:
Бид тэнд хоёр шинэ блок хийсэн. Манай блокчейн одоогоор ямар байгааг харцгаая.
MelodyCoin-ийг дөрвөн зайтай мөр болгож форматлана.
Blockchain-ийн бүрэн бүтэн байдлыг шалгана уу
Блокчейн нь гайхалтай, учир нь блок нэмсэн бол гинжин хэлхээний үлдсэн хэсгийг хүчингүй болгохгүйгээр үүнийг өөрчлөх боломжгүй.
Гэсэн хэдий ч, миний хувьд энэ хэрэгжилтээр манай блокчейн бүрэн бүтэн байдлыг шалгах арга байхгүй.
Блокчэйндээ isChainValid функцийг нэвтрүүлцгээе. Хэрэв гинж нь хууль ёсны бол энэ нь үнэнийг буцаана; эс бөгөөс энэ нь худал буцаана:
Шударга байдлыг шалгах
Одоо бид блокчэйны бүрэн бүтэн байдлыг туршиж үзэх боломжтой. Хэрэв бид үүнийг одоо хэрэгжүүлбэл бидний гинж жинхэнэ гэдгийг батлах болно.
Одоо блокчлондоо хөндлөнгөөс оролцохыг хичээцгээе. 2-р блокийг өөрчилж, агуулгыг нь дарж бичье (бид дөрөв биш 100 зоос шилжүүлсэн гэж бодъё).
Үүнийг хэрэгжүүлэх үед програм хангамж нь бидний гинжийг өөрчлөх оролдлогыг хүлээн зөвшөөрч байгааг харж болно.
Гэсэн хэдий ч надад энэ асуудалд оролцох өөр арга бий гэдэгт та итгэж болно. Би блок дахь агуулгыг өөрчилсөн боловч хэшийг дахин тооцоолоогүй. Тиймээс та ухаалаг байж, ижил блокийн хэшийг дахин тооцоолохыг оролдож болно.
Энэ бол бидний жижигхэн блокчейн тохиргоонд байсан бүх зүйл! Энэ нь бидэнд шинэ блок нэмэх, гинжин хэлхээний өгөгдөлд хөндлөнгөөс оролцохыг илрүүлэх боломжийг олгодог.
Бидний шийдвэрлэх ёстой жижиг блокчэйнтэй холбоотой хоёр асуудал байна:
- Орчин үеийн компьютерууд нь маш хурдан бөгөөд хэдхэн секундын дотор бидний хэлхээнд хэдэн мянган блок нэмж чаддаг. Бидний блокчейн спамыг хэн ч хүсэхгүй байгаа нь ойлгомжтой.
- Манай блокчэйн нь хөндлөнгийн оролцоонд өртөмтгий хэвээр байна. Та блокийн агуулгыг шинэчилж, дараа нь дараагийн бүх блокуудын хэшүүдийг (болон өмнөх хэшүүдийг) дахин тооцоолох боломжтой. Та үүнтэй хутгалдсан ч гэсэн та хууль ёсны гинжтэй болно.
Эдгээр асуудлыг шийдвэрлэхийн тулд блокчэйн нь "ажлын баталгаа" гэж нэрлэгддэг техникийг ашигладаг. Та энэ аргыг ашиглан блок үүсгэхийн тулд ихээхэн хэмжээний тооцооллын нөөц ашигласан гэдгээ харуулах ёстой. Үүнийг бас нэрлэдэг уул уурхайн.
Ажлын баталгаа нь блокийн хэш тодорхой тооны тэгээр эхлэхийг шаарддаг. Гэхдээ таны хэш энэ дүрэмд нийцэж байгаа эсэхийг яаж мэдэх вэ?
Блокийн агуулга нь түүний хэшийг тодорхойлдог. Тиймээс бид агуулгыг өөрчлөхгүй бол үргэлж ижил хэшийг авдаг.
Блок бүр шийдэл болгон нэмсэн тодорхой бус утгатай байх ёстой. Энэ нь үндсэндээ бидний блокийн хэш хангалттай тэгээр эхлэх хүртэл шинэчлэх боломжтой зарим санамсаргүй өгөгдөл юм. Та хэш функцийн гаралтыг өөрчлөх боломжгүй учраас олон янзын хослолуудыг туршиж, хамгийн сайн сайхныг найдах хэрэгтэй.
Blockchain-д уул уурхайг нэвтрүүлэх
Блок ангидаа nonce-г оруулаад эхэлцгээе. Nonce нь блокийн хэш-д нөлөөлөхийн тулд өөрчлөх боломжтой бидний блок доторх цорын ганц утга юм.
Бид цагийн тэмдэг эсвэл өгөгдлийг өөрчлөх боломжгүй.
Дараа нь блокийн бодит олборлолтыг хийх mineBlock() функцийг бичье. Энэ функц нь шаардлагатай хүндрэлийг параметр болгон илгээх бөгөөд манай блокийн хэш хангалттай тэгээр эхлэх хүртэл үргэлжлүүлэн ажиллана.
Би зүгээр л үндсэн while давталт хийсэн бөгөөд энэ нь бидний хэш хангалттай тэгээр эхлэх хүртэл ажиллах болно. Хэчнээн тэг хэрэгтэйг тодорхойлохын тулд бид хүндрэлийг ашигладаг. 5-ын хүндрэлтэй бол бидний хэш 5 тэгээр эхлэх ёстой.
Бидний хэш хангалттай тэг агуулаагүй үед бид nonce-г нэгээр өсгөж, хэшийг дахин тооцоолно. Хэрэв бид хүндрэлтэй тохирох хэшийг олвол бид консол руу оруулдаг.
Бидний хийх ёстой бас нэг зүйл байна. Бид accountHash аргадаа nonce хувьсагчийг тооцдоггүй тул энд байна:
Блокчейн ангилал
Энэхүү шинэ хандлагыг блокчэйн ангидаа туршиж үзээд энэ нь хэрхэн явагдаж байгааг харцгаая.
Эхлэхийн тулд би Object() функцэд блокчлонгийн хүндрэлийг тодорхойлох болно. Дараа нь хаа нэгтээ ашиглах боломжтой тул бид үүнийг энд тодорхойлдог.
Дараа нь addBlock функцийг гинжин хэлхээнд нэмэхээсээ өмнө блокыг олборлох байдлаар өөрчлөх ёстой.
Blockchain ашигла
Одоо шинэ блокчлонгоо ажлын нотолгооны алгоритмтай хамт ашиглацгаая. Энд хэд хэдэн console.log мэдэгдлийг нэмнэ үү.
Бид энэ кодыг хэрэгжүүлэхэд олборлолтын үйл явц тийм ч хурдан биш болсныг бид харж болно.
Гурван тэгээр эхэлдэг хэш бүхий блокуудыг алгоритм (хүндрэлээр тохируулсан) үүсгэхийн тулд хэсэг хугацаа шаардагдана.
Ингэснээр бидний үндсэн блокчейн тохиргоо дууссан.
Ажлын баталгааны механизмын ачаар бид блокчэйнд шинэ блокууд хэр хурдан нэмэгдэхийг зохицуулж чадна.
Энэ нь блокчэйн дээрх хамгийн чухал хамгаалалтын функц юм. Одоо та энэ нь хэрхэн ажилладагийг ойлгосон тул өөрийн гараар бүтээгээрэй!
хариу үлдээх