Kung titingnan natin ang mga uso ng nakaraang ilang taon, naririnig natin ang tungkol sa blockchain sa lahat ng oras, ngunit hindi gaanong tungkol sa mga detalye.
Alam nating lahat na ang mga cryptocurrencies tulad ng Bitcoin, Ethereum, Dogecoin, Matic, at iba pa ay umaasa sa teknolohiyang blockchain. Pinangunahan ng Blockchain ang mahahalagang kaganapan na nagpabago ng maraming industriya noong 2021 at nagbigay daan para sa mga bagong tagumpay.
Ang Blockchain ay isang paraan ng pag-iimbak ng data sa paraang mahirap o imposibleng i-edit, i-hack, o i-swindle. Ito ay isang digital ledger ng mga transaksyon na nadoble at kumakalat sa buong network ng mga computer system ng blockchain.
Ito ang ground-breaking database technology na nagpapagana sa halos lahat ng cryptocurrencies. Pinapahirap ng Blockchain na i-hack o dayain ang system sa pamamagitan ng pagpapakalat ng magkakaparehong mga kopya ng isang database sa buong network.
Habang ang Bitcoin ay ngayon ang pinakakilalang paggamit para sa blockchain, ang teknolohiya ay maaaring maghatid ng napakalawak na iba't ibang mga aplikasyon.
Ang mga cryptocurrency at blockchain ay lalong naging popular sa mga nakaraang taon, at ang trend na ito ay inaasahang magpapatuloy.
Gagawa kami ng simpleng blockchain gamit ang JavaScript sa tutorial na ito. Magbibigay ito sa iyo ng pangunahing pag-unawa sa kung paano gumagana ang isang blockchain.
Tawagan natin itong MelodyCoin at makiisa sa aksyon!
Paglikha ng isang Block
Upang magsimula, gagawa kami ng bagong JavaScript file kung saan ilalagay namin ang lahat ng aming code.
Tawagin natin itong main.js at magsimula sa isang paglalarawan kung paano dapat magmukhang isang blockchain at blocks.
Gumawa ng Block class at bigyan ito ng function na Object() { [native code] } para magsimula.
Dapat kang magbigay ng petsa, at ang hash ng nakaraang block kapag gumagawa ng bagong block:
Narito ang mga kahulugan para sa bawat property:
- Ipinapahiwatig ng timestamp kung kailan ginawa ang bloke. Maaari mong gamitin ang anumang format na pipiliin mo (sa kasong ito, isang UNIX timestamp).
- Ang anumang anyo ng data na nais mong ikonekta sa block na ito ay maaaring isama sa parameter ng data. Kung nais mong lumikha ng isang cryptocurrency, maaari mong panatilihin ang data ng transaksyon tulad ng nagpadala/tagatanggap at ang halaga ng pera na inilipat dito.
- Ang previousHash ay isang string na nagtataglay ng hash ng naunang block. Ito ang bubuo ng chain of blocks, na magiging kritikal sa pagbibigay ng integridad ng ating blockchain mamaya.
Paglikha ng Hashes
Ang bawat bloke ay nagli-link sa naunang bloke (kaya ang previousHash property). Iyon ay, ang bawat bloke ay nangangailangan ng hash. Ang hash ay katulad ng fingerprint. Ito ay naiiba para sa bawat bloke.
Maaaring kalkulahin ang hash ng block sa pamamagitan ng pagpasa ng lahat ng nilalaman nito sa pamamagitan ng hash function.
Kaya, magsimula tayo sa pamamagitan ng pagpapatupad ng isang function na kumukwenta sa hash ng kasalukuyang block.
Kaya, sa ilalim ng klase ng Block, tinukoy namin ang function na kalkulahinHash:
Gayunpaman, ang SHA256 hash ay hindi sinusuportahan ng JavaScript at dapat makuha mula sa isang panlabas na library.
Ang Crypto-js ay isang kamangha-manghang pakete na kinabibilangan ng mga secure na pagpapatupad ng ilang hash algorithm.
Pagkatapos ay maaari naming i-import ito sa aming main.js code.
Ngayon na mayroon na tayong function na kalkulaHash(), gamitin natin ito sa function ng ating Block:
Pagkatapos ilarawan kung ano ang hitsura ng isang Block, maaari naming tukuyin kung ano ang dapat na hitsura ng isang Blockchain. Kaya gumawa tayo ng bagong klase.
Sa sitwasyong ito, ang blockchain ay isang napakasimpleng bagay na mayroong chain ng ari-arian. Ito ay isang array na may hawak ng lahat ng mga bloke sa chain.
Bago tayo makapagdagdag ng mga block, kailangan muna nating gumawa ng tinatawag na "genesis block." Ito ang unang bloke sa chain, at ito ay natatangi dahil hindi ito maaaring tumuro sa isang naunang bloke (ito ang una!).
Kaya, para bumuo ng genesis block, magdaragdag ako ng function sa aming klase na pinangalanang createGenesisBlock (). Bumalik sa function na Object() { [native code] } ng aming Blockchain class.
Maaari na naming isama ang genesis block anumang oras na bumuo kami ng isang bagong halimbawa ng Blockchain:
Mga Paraan ng Blockchain
Ngayon, magdagdag tayo ng mga pamamaraan sa aming klase sa Blockchain na magbibigay-daan sa amin na gumawa ng mga bagay tulad ng magdagdag ng mga bagong block at makuha ang pinakabagong block.
Ang getLatestBlock function ay ang pinakapangunahing. Ibinabalik lamang nito ang huling miyembro ng chain array:
Ang pamamaraan ng addBlock ay medyo mas kasangkot.
Bago tayo makapagdagdag ng bagong block sa ating chain, kailangan muna nating itakda nang naaangkop ang field ng previousHash ng block na iyon.
Dapat itong itakda sa hash ng pinakakamakailang idinagdag na block sa aming chain. Kailangan din nating kalkulahin ang hash ng bagong block:
Pagsubok
Tingnan natin kung paano lumabas ang ating MelodyCoin.
Lumikha ng isang halimbawa ng blockchain upang magawa ito. Magdagdag pa tayo ng ilang bloke:
Nakagawa kami ng dalawang bagong bloke doon. Tingnan natin kung ano ang hitsura ng ating blockchain sa kasalukuyan.
Ang MelodyCoin ay i-stringify at ipo-format na may apat na puwang:
I-verify ang Integridad ng Blockchain
Ang mga blockchain ay hindi kapani-paniwala dahil kapag naidagdag na ang isang bloke, hindi ito mababago nang hindi pinapawalang-bisa ang natitirang bahagi ng chain.
Gayunpaman, walang paraan para masuri ko ang integridad ng aming blockchain sa pagpapatupad na ito.
Ipakilala natin ang isang isChainValid function sa ating blockchain. Kung lehitimo ang kadena, babalik itong totoo; kung hindi, ito ay magbabalik ng false:
Pagsubok sa Integridad
Maaari na nating subukan ang integridad ng ating blockchain. Kung ipapatupad natin ito ngayon, ito ay magkukumpirma na ang ating kadena ay tunay.
Subukan natin ngayon na pakialaman ang ating blockchain. Baguhin natin ang block 2 at i-overwrite ang mga nilalaman nito (ipagpalagay natin na naglipat tayo ng 100 barya sa halip na apat).
Kapag ginawa namin ito, makikita namin na kinikilala ng software ang aming pagsisikap na pakialaman ang chain.
Gayunpaman, maaari kang maniwala na may isa pang paraan para makialam ako dito. Binago ko ang mga nilalaman sa block ngunit hindi ko muling kinakalkula ang hash. Kaya maaari mong subukan na maging matalino at muling kalkulahin ang hash ng parehong bloke.
Iyon lang ang naroon sa aming munting blockchain setup! Nagbibigay-daan ito sa amin na magdagdag ng mga bagong block at makakita ng pakikialam sa data sa loob ng chain.
Mayroong dalawang isyu sa aming maliit na blockchain na dapat naming tugunan:
- Ang mga modernong computer ay napakabilis at maaaring magdagdag ng libu-libong mga bloke sa aming chain sa ilang segundo. Malinaw na ayaw namin ng sinuman na nag-spam sa aming blockchain.
- Ang ating blockchain ay mahina pa rin sa pakikialam. Maaari mong i-update ang mga nilalaman ng isang bloke at pagkatapos ay kalkulahin lamang ang mga hash (at mga naunang hashes) para sa lahat ng mga sumusunod na bloke. Kahit na guluhin mo ito, mapupunta ka sa isang lehitimong kadena.
Upang matugunan ang mga alalahaning ito, ang mga blockchain ay gumagamit ng isang pamamaraan na kilala bilang "patunay ng trabaho." Dapat mong ipakita na gumamit ka ng malaking halaga ng computational resources para gumawa ng block gamit ang diskarteng ito. Ito ay tinatawag ding pagmimina.
Ang proof-of-work ay nangangailangan na ang hash ng block ay magsimula sa isang partikular na halaga ng mga zero. Ngunit paano mo malalaman kung ang iyong hash ay umaangkop sa panuntunang ito?
Tinutukoy ng mga nilalaman ng isang block ang hash nito. Kaya palagi kaming nakakakuha ng parehong hash, basta't hindi namin babaguhin ang mga nilalaman.
Ang bawat bloke ay dapat magkaroon ng isang nonce value na idinagdag dito bilang isang solusyon. Ito ay mahalagang ilang random na data na maaari naming i-update hanggang sa magsimula ang hash ng aming block na may sapat na mga zero. Dahil hindi mo mababago ang output ng hash function, kailangan mong subukan ang maraming iba't ibang kumbinasyon at umaasa para sa pinakamahusay.
Ipakilala ang Pagmimina sa Blockchain
Magsimula tayo sa pamamagitan ng pagsasama ng isang nonce sa ating Block class. Ang nonce ay ang nag-iisang halaga sa loob ng aming block na maaari naming baguhin upang makaapekto sa hash ng block.
Hindi namin magawang baguhin ang timestamp o ang data.
Susunod, magsulat tayo ng mineBlock() function na gagawa ng aktwal na pagmimina ng isang block. Ang function na ito ay ipapadala ang kinakailangang kahirapan bilang isang parameter at patuloy na isasagawa hanggang sa magsimula ang hash ng aming block na may sapat na mga zero.
Gumawa lang ako ng basic while loop na tatakbo hanggang sa magsimula ang hash natin na may sapat na mga zero. Ginagamit namin ang kahirapan upang matukoy kung gaano karaming mga zero ang kailangan. Sa kahirapan ng 5, ang aming hash ay dapat magsimula sa 5 zero.
Kapag ang aming hash ay hindi naglalaman ng sapat na mga zero, itinataas namin ang nonce nang paisa-isa at muling kalkulahin ang hash. At kung makakita kami ng hash na tumutugma sa kahirapan, ini-log namin ito sa console.
May isa pang bagay na kailangan nating gawin. Hindi namin talagang isinasaalang-alang ang nonce variable sa aming paraan ng kalkulaHash, kaya narito ito:
Klase ng Blockchain
Subukan natin ang bagong diskarte na ito sa ating blockchain class at tingnan kung paano ito napupunta.
Upang magsimula, tutukuyin ko ang kahirapan ng aming blockchain sa function na Object(). Tinukoy namin ito dito dahil magagamit namin ito sa ibang pagkakataon.
Ang addBlock function ay dapat pagkatapos ay mabago upang ito ay mina ang block bago ito idagdag sa aming chain.
Gamitin Ang Blockchain
Ngayon, ilagay natin ang ating bagong blockchain para magamit sa proof-of-work algorithm. Dito, magdagdag ng ilang console.log statement.
Kapag isinagawa natin ang code na ito, mapapansin natin na ang proseso ng pagmimina ay hindi na partikular na mabilis.
Ito ay tumatagal ng ilang oras para sa algorithm upang makabuo ng mga bloke na may mga hash na nagsisimula sa tatlong mga zero (tulad ng na-configure ng kahirapan).
Kaya iyon ang pagtatapos ng aming pangunahing pag-setup ng blockchain.
Maaari naming i-regulate kung gaano kabilis ang mga bagong bloke ay idinagdag sa aming blockchain salamat sa proof-of-work na mekanismo.
Ito ang pinakamahalagang tampok ng seguridad sa mga blockchain. At ngayong naiintindihan mo na kung paano ito gumagana, magpatuloy sa paggawa ng sarili mo!
Mag-iwan ng Sagot