ប្រសិនបើយើងក្រឡេកមើលនិន្នាការនៃប៉ុន្មានឆ្នាំមុននេះ យើងបានឮអំពី blockchain គ្រប់ពេលវេលា ប៉ុន្តែមិនមានច្រើនអំពីជាក់លាក់នោះទេ។
យើងទាំងអស់គ្នាដឹងហើយថារូបិយប័ណ្ណអេឡិចត្រូនិកដូចជា Bitcoin, Ethereum, Dogecoin, Matic និងផ្សេងទៀតពឹងផ្អែកលើបច្ចេកវិទ្យា blockchain ។ Blockchain បានដឹកនាំព្រឹត្តិការណ៍សំខាន់ៗដែលបានធ្វើបដិវត្តឧស្សាហកម្មជាច្រើននៅឆ្នាំ 2021 ហើយបានត្រួសត្រាយផ្លូវសម្រាប់សមិទ្ធិផលថ្មីៗ។
Blockchain គឺជាមធ្យោបាយនៃការរក្សាទុកទិន្នន័យតាមរបៀបដែលពិបាក ឬមិនអាចកែប្រែ លួច ឬបោកប្រាស់។ វាគឺជាសៀវភៅកត់ត្រាឌីជីថលនៃប្រតិបត្តិការដែលត្រូវបានចម្លង និងរីករាលដាលនៅទូទាំងបណ្តាញប្រព័ន្ធកុំព្យូទ័រទាំងមូលរបស់ blockchain ។
វាគឺជាបច្ចេកវិជ្ជាមូលដ្ឋានទិន្នន័យដំបូងបង្អស់ដែលផ្តល់ថាមពលដល់រូបិយប័ណ្ណគ្រីបតូទាំងអស់។ Blockchain ធ្វើឱ្យវាមានការលំបាកមិនគួរឱ្យជឿក្នុងការ hack ឬបន្លំប្រព័ន្ធដោយការផ្សព្វផ្សាយច្បាប់ចម្លងដូចគ្នានៃមូលដ្ឋានទិន្នន័យនៅលើបណ្តាញទាំងមូល។
ខណៈពេលដែល Bitcoin ឥឡូវនេះគឺជាការប្រើប្រាស់ដ៏លេចធ្លោបំផុតសម្រាប់ blockchain បច្ចេកវិទ្យាអាចបម្រើកម្មវិធីយ៉ាងទូលំទូលាយ។
Cryptocurrencies និង blockchains មានប្រជាប្រិយភាពកាន់តែខ្លាំងឡើងក្នុងប៉ុន្មានឆ្នាំថ្មីៗនេះ ហើយនិន្នាការនេះត្រូវបានគេរំពឹងថានឹងបន្ត។
យើងនឹងបង្កើត blockchain សាមញ្ញជាមួយ JavaScript នៅក្នុងមេរៀននេះ។ វានឹងផ្តល់ឱ្យអ្នកនូវការយល់ដឹងជាមូលដ្ឋានអំពីរបៀបដែល blockchain ដំណើរការ។
តោះហៅវាថា MelodyCoin ហើយចាប់ផ្តើមសកម្មភាព!
ការបង្កើតប្លុក
ដើម្បីចាប់ផ្តើម យើងនឹងបង្កើតឯកសារ JavaScript ថ្មីមួយ ដែលយើងនឹងដាក់កូដទាំងអស់របស់យើង។
តោះហៅវាថា main.js ហើយចាប់ផ្តើមជាមួយនឹងការពិពណ៌នាអំពីរបៀបដែល blockchain និង blocks គួរតែមើលទៅ។
បង្កើតថ្នាក់ Block ហើយផ្តល់ឱ្យវានូវមុខងារ Object() { [កូដដើម] } ដើម្បីចាប់ផ្តើមជាមួយ។
អ្នកត្រូវតែផ្តល់កាលបរិច្ឆេទ និងសញ្ញានៃប្លុកមុន នៅពេលបង្កើតប្លុកថ្មី៖
នេះគឺជានិយមន័យសម្រាប់ទ្រព្យសម្បត្តិនីមួយៗ៖
- ត្រាពេលវេលាបង្ហាញពីពេលដែលប្លុកត្រូវបានបង្កើតឡើង។ អ្នកអាចប្រើទ្រង់ទ្រាយអ្វីក៏ដោយដែលអ្នកជ្រើសរើស (ក្នុងករណីនេះ ត្រាពេលវេលា UNIX)។
- ទម្រង់ទិន្នន័យណាមួយដែលអ្នកចង់ភ្ជាប់ទៅប្លុកនេះអាចត្រូវបានរួមបញ្ចូលនៅក្នុងប៉ារ៉ាម៉ែត្រទិន្នន័យ។ ប្រសិនបើអ្នកចង់បង្កើតរូបិយប័ណ្ណគ្រីបតូ អ្នកអាចរក្សាទុកទិន្នន័យប្រតិបត្តិការដូចជាអ្នកផ្ញើ/អ្នកទទួល និងចំនួនប្រាក់ដែលបានផ្លាស់ទីនៅទីនេះ។
- PreviousHash គឺជាខ្សែអក្សរដែលផ្ទុកសញ្ញារបស់ប្លុកមុន។ នេះគឺជាអ្វីដែលនឹងបង្កើតខ្សែសង្វាក់នៃប្លុកដែលនឹងមានសារៈសំខាន់ក្នុងការផ្តល់នូវភាពសុចរិតនៃ blockchain របស់យើងនៅពេលក្រោយ។
ការបង្កើត Hashes
ប្លុកនីមួយៗភ្ជាប់ទៅប្លុកមុន (ដូច្នេះលក្ខណសម្បត្តិ Hash ពីមុន) ។ នោះគឺប្លុកនីមួយៗទាមទារសញ្ញា។ សញ្ញាគឺស្រដៀងនឹងស្នាមម្រាមដៃ។ វាខុសគ្នាសម្រាប់ប្លុកនីមួយៗ។
សញ្ញារបស់ប្លុកអាចត្រូវបានគណនាដោយឆ្លងកាត់មាតិកាទាំងអស់របស់វាតាមរយៈមុខងារ hash ។
ដូច្នេះ ចូរចាប់ផ្តើមដោយអនុវត្តមុខងារដែលគណនាសញ្ញានៃប្លុកបច្ចុប្បន្ន។
ដូច្នេះនៅក្រោមថ្នាក់ Block យើងកំណត់មុខងារគណនាHash៖
ទោះជាយ៉ាងណាក៏ដោយ SHA256 hash មិនត្រូវបានគាំទ្រដោយ JavaScript ហើយត្រូវតែទទួលបានពីបណ្ណាល័យខាងក្រៅ។
Crypto-js គឺជាកញ្ចប់ដ៏អស្ចារ្យដែលរួមបញ្ចូលការអនុវត្តប្រកបដោយសុវត្ថិភាពនៃក្បួនដោះស្រាយ hash ជាច្រើន។
បន្ទាប់មកយើងអាចនាំចូលវាចូលទៅក្នុងកូដ main.js របស់យើង។
ឥឡូវយើងមានមុខងារគណនាHash() របស់យើងហើយ ចូរយើងដាក់វាទៅប្រើក្នុងមុខងារ Block របស់យើង៖
បន្ទាប់ពីពណ៌នាថា Blockchain មើលទៅដូចអ្វី យើងអាចកំណត់ថា Blockchain គួរតែមើលទៅដូចអ្វី។ ដូច្នេះយើងបង្កើតថ្នាក់ថ្មី។
នៅក្នុងសេណារីយ៉ូនេះ blockchain គឺជាវត្ថុសាមញ្ញបំផុតដែលមានខ្សែសង្វាក់ទ្រព្យសម្បត្តិ។ នេះគឺជាអារេដែលផ្ទុកប្លុកទាំងអស់នៅលើខ្សែសង្វាក់។
មុននឹងយើងអាចបន្ថែមប្លុក យើងត្រូវបង្កើតអ្វីដែលគេស្គាល់ថាជា "ប្លុកហ្សែន" ជាដំបូង នេះគឺជាប្លុកទីមួយនៅក្នុងខ្សែសង្វាក់ ហើយវាមានតែមួយគត់ដែលវាមិនអាចចង្អុលទៅប្លុកមុន (វាគឺជាទីមួយ!)
ដូច្នេះ ដើម្បីបង្កើតប្លុកហ្សែន ខ្ញុំនឹងបន្ថែមមុខងារមួយទៅថ្នាក់របស់យើងដែលមានឈ្មោះថា createGenesisBlock()។ ត្រលប់ទៅមុខងារ Object() { [កូដដើម] } នៃថ្នាក់ Blockchain របស់យើង។
ឥឡូវនេះយើងអាចរួមបញ្ចូលប្លុក genesis គ្រប់ពេលដែលយើងបង្កើតឧទាហរណ៍ Blockchain ថ្មី៖
វិធីសាស្រ្ត Blockchain
ឥឡូវនេះ ចូរយើងបន្ថែមវិធីសាស្រ្តទៅថ្នាក់ Blockchain របស់យើង ដែលនឹងអនុញ្ញាតឱ្យយើងធ្វើអ្វីៗដូចជា បន្ថែមប្លុកថ្មី និងទាញយកប្លុកថ្មីៗបំផុត។
មុខងារ getLatestBlock គឺជាមូលដ្ឋានបំផុត។ វាគ្រាន់តែត្រឡប់សមាជិកចុងក្រោយនៃអារេខ្សែសង្វាក់៖
បច្ចេកទេស addBlock គឺពាក់ព័ន្ធបន្តិច។
មុននឹងយើងអាចបន្ថែមប្លុកថ្មីមួយទៅខ្សែសង្វាក់របស់យើង យើងត្រូវកំណត់កន្លែងមុនរបស់ប្លុកនោះឱ្យបានត្រឹមត្រូវជាមុនសិន។
វាត្រូវតែកំណត់ទៅជាសញ្ញានៃប្លុកដែលបានបន្ថែមថ្មីៗបំផុតទៅកាន់ខ្សែសង្វាក់របស់យើង។ យើងក៏ត្រូវគណនា hash នៃប្លុកថ្មីផងដែរ៖
ការសាកល្បង
ចាំមើលថាតើ MelodyCoin របស់យើងចេញយ៉ាងដូចម្តេច?
បង្កើតឧទាហរណ៍ blockchain ដើម្បីសម្រេចកិច្ចការនេះ។ តោះបន្ថែមប្លុកពីរបីទៀត៖
យើងបានបង្កើតប្លុកថ្មីពីរនៅទីនោះ។ សូមក្រឡេកមើលអ្វីដែល blockchain របស់យើងមើលទៅដូចបច្ចុប្បន្ន។
MelodyCoin នឹងត្រូវបានចងក្រង និងធ្វើទ្រង់ទ្រាយដោយដកឃ្លាចំនួនបួន៖
ផ្ទៀងផ្ទាត់ភាពសុចរិតរបស់ Blockchain
Blockchains គឺអស្ចារ្យណាស់ ពីព្រោះនៅពេលដែលប្លុកមួយត្រូវបានបន្ថែម វាមិនអាចត្រូវបានកែប្រែដោយគ្មានសុពលភាពនៃខ្សែសង្វាក់ដែលនៅសល់នោះទេ។
ទោះយ៉ាងណាក៏ដោយមិនមានវិធីសាស្រ្តសម្រាប់ខ្ញុំដើម្បីពិនិត្យមើលភាពសុចរិតនៃ blockchain របស់យើងជាមួយនឹងការអនុវត្តនេះទេ។
តោះណែនាំមុខងារ isChainValid ដល់ blockchain របស់យើង។ ប្រសិនបើខ្សែសង្វាក់នេះស្របច្បាប់ វានឹងត្រលប់មកវិញពិត។ បើមិនដូច្នេះទេ វានឹងត្រឡប់មិនពិត៖
ការធ្វើតេស្តភាពសុចរិត
ឥឡូវនេះយើងអាចដាក់ភាពសុចរិតរបស់ blockchain របស់យើងក្នុងការសាកល្បង។ ប្រសិនបើយើងប្រតិបត្តិវាឥឡូវនេះ វានឹងបញ្ជាក់ថាខ្សែសង្វាក់របស់យើងគឺពិតប្រាកដ។
ឥឡូវនេះសូមឱ្យយើងព្យាយាមជ្រៀតជ្រែកជាមួយ blockchain របស់យើង។ ចូរផ្លាស់ប្តូរប្លុក 2 ហើយសរសេរជាន់លើមាតិការបស់វា (ឧបមាថាយើងផ្ទេរ 100 កាក់ជំនួសឱ្យបួន) ។
នៅពេលយើងប្រតិបត្តិវា យើងអាចមើលឃើញថាកម្មវិធីទទួលស្គាល់ការខិតខំប្រឹងប្រែងរបស់យើងក្នុងការរំខានខ្សែសង្វាក់។
យ៉ាងណាក៏ដោយ អ្នកអាចជឿថាមានវិធីផ្សេងទៀតសម្រាប់ខ្ញុំក្នុងការជ្រៀតជ្រែកជាមួយនឹងរឿងនេះ។ ខ្ញុំបានកែប្រែខ្លឹមសារក្នុងប្លុក ប៉ុន្តែមិនបានគណនាលេខសញ្ញាឡើងវិញទេ។ ដូច្នេះអ្នកអាចព្យាយាមឆ្លាត ហើយគណនាឡើងវិញនូវសញ្ញានៃប្លុកដូចគ្នានោះ។
នោះហើយជាអ្វីទាំងអស់ដែលមានចំពោះការដំឡើង blockchain ដ៏តូចរបស់យើង! វាអនុញ្ញាតឱ្យយើងបន្ថែមប្លុកថ្មីនិងរកឃើញការរំខានទិន្នន័យក្នុងខ្សែសង្វាក់។
មានបញ្ហាពីរជាមួយ blockchain តូចរបស់យើងដែលយើងត្រូវដោះស្រាយ៖
- កុំព្យូទ័រទំនើបមានល្បឿនលឿនខ្លាំង ហើយអាចបន្ថែមប្លុករាប់ពាន់ទៅខ្សែសង្វាក់របស់យើងក្នុងរយៈពេលប៉ុន្មានវិនាទី។ យើងច្បាស់ជាមិនចង់ឱ្យនរណាម្នាក់ spam ចូល blockchain របស់យើងទេ។
- Blockchain របស់យើងនៅតែងាយរងគ្រោះក្នុងការជ្រៀតជ្រែក។ អ្នកអាចធ្វើបច្ចុប្បន្នភាពមាតិកានៃប្លុក ហើយបន្ទាប់មកគណនាឡើងវិញនូវសញ្ញា (និងសញ្ញាសញ្ញាមុន) សម្រាប់ប្លុកខាងក្រោមទាំងអស់។ ទោះបីជាអ្នករញ៉េរញ៉ៃជាមួយវាក៏ដោយ អ្នកនឹងបញ្ចប់ដោយខ្សែសង្វាក់ស្របច្បាប់។
ដើម្បីដោះស្រាយកង្វល់ទាំងនេះ blockchains ប្រើបច្ចេកទេសដែលគេស្គាល់ថាជា "ភស្តុតាងនៃការងារ" ។ អ្នកត្រូវតែបង្ហាញថាអ្នកបានប្រើប្រាស់ធនធានគណនាយ៉ាងច្រើនដើម្បីបង្កើតប្លុកដោយប្រើវិធីសាស្រ្តនេះ។ នេះត្រូវបានគេហៅផងដែរ។ រុករករ៉ែ.
ភស្តុតាងនៃការងារតម្រូវឱ្យ hash របស់ប្លុកចាប់ផ្តើមដោយចំនួនជាក់លាក់នៃសូន្យ។ ប៉ុន្តែធ្វើដូចម្តេចទើបអាចដឹងថា hash របស់អ្នកត្រូវនឹងច្បាប់នេះ?
ខ្លឹមសារនៃប្លុកកំណត់សញ្ញារបស់វា។ ដូច្នេះ យើងតែងតែទទួលបានសញ្ញាដូចគ្នា ប្រសិនបើយើងមិនកែប្រែខ្លឹមសារនោះទេ។
ប្លុកនីមួយៗគួរតែមានតម្លៃ nonce បន្ថែមទៅវាជាដំណោះស្រាយ។ នេះគឺជាទិន្នន័យចៃដន្យមួយចំនួនដែលយើងអាចធ្វើបច្ចុប្បន្នភាពបានរហូតដល់សញ្ញានៃប្លុករបស់យើងចាប់ផ្តើមដោយលេខសូន្យគ្រប់គ្រាន់។ ដោយសារតែអ្នកមិនអាចផ្លាស់ប្តូរលទ្ធផលនៃមុខងារ hash អ្នកត្រូវតែសាកល្បងបន្សំផ្សេងៗគ្នាជាច្រើន ហើយសង្ឃឹមថាល្អបំផុត។
ណែនាំការជីកយករ៉ែទៅ Blockchain
ចូរចាប់ផ្តើមដោយរួមបញ្ចូល nonce នៅក្នុងថ្នាក់ Block របស់យើង។ nonce គឺជាតម្លៃតែមួយនៅក្នុងប្លុករបស់យើងដែលយើងអាចកែប្រែដើម្បីប៉ះពាល់ដល់សញ្ញារបស់ប្លុក។
យើងមិនអាចកែប្រែពេលវេលា ឬទិន្នន័យបានទេ។
បន្ទាប់មក ចូរយើងសរសេរមុខងារ mineBlock() ដែលនឹងធ្វើការជីកយករ៉ែពិតប្រាកដនៃប្លុក។ មុខងារនេះនឹងត្រូវបានផ្ញើការលំបាកដែលត្រូវការជាប៉ារ៉ាម៉ែត្រ ហើយនឹងបន្តប្រតិបត្តិរហូតដល់សញ្ញានៃប្លុករបស់យើងចាប់ផ្តើមដោយលេខសូន្យគ្រប់គ្រាន់។
ខ្ញុំទើបតែបង្កើតមូលដ្ឋានខណៈពេលដែលរង្វិលជុំដែលនឹងដំណើរការរហូតដល់ hash របស់យើងចាប់ផ្តើមដោយលេខសូន្យគ្រប់គ្រាន់។ យើងប្រើការលំបាកដើម្បីកំណត់ចំនួនសូន្យដែលត្រូវការ។ ជាមួយនឹងការលំបាកនៃ 5 សញ្ញារបស់យើងត្រូវតែចាប់ផ្តើមដោយលេខសូន្យ 5 ។
នៅពេលដែល hash របស់យើងមិនមានលេខសូន្យគ្រប់គ្រាន់ យើងលើក nonce ម្តងមួយៗ ហើយគណនាលេខ hash ឡើងវិញ។ ហើយប្រសិនបើយើងរកឃើញ hash ដែលត្រូវនឹងការលំបាកនោះ យើងចូលទៅក្នុងកុងសូល។
មានរឿងមួយទៀតដែលយើងត្រូវធ្វើ។ យើងពិតជាមិនយកអថេរ nonce ទៅក្នុងគណនីក្នុងវិធីគណនា Hash របស់យើងទេ ដូច្នេះវាគឺ៖
ថ្នាក់ Blockchain
ចូរយើងដាក់វិធីសាស្រ្តថ្មីនេះទៅការសាកល្បងនៅក្នុងថ្នាក់ blockchain របស់យើង ហើយមើលថាតើវាទៅជាយ៉ាងណា។
ដើម្បីចាប់ផ្តើម ខ្ញុំនឹងកំណត់ភាពលំបាកនៃ blockchain របស់យើងនៅក្នុងមុខងារ Object()។ យើងកំណត់វានៅទីនេះ ព្រោះយើងអាចប្រើវានៅកន្លែងណាមួយនៅពេលក្រោយ។
បន្ទាប់មក មុខងារ addBlock ត្រូវតែត្រូវបានកែប្រែ ដូចជាវាជីកយករ៉ែ Block មុនពេលបញ្ចូលវាទៅក្នុងសង្វាក់របស់យើង។
ប្រើ Blockchain
ឥឡូវនេះសូមដាក់ blockchain ថ្មីរបស់យើងដើម្បីប្រើជាមួយ proof-of-work algorithm ។ នៅទីនេះ បន្ថែមសេចក្តីថ្លែងការណ៍ console.log ពីរបី។
នៅពេលដែលយើងប្រតិបត្តិកូដនេះ យើងអាចសង្កេតឃើញថា ដំណើរការរុករករ៉ែលែងមានល្បឿនលឿនពិសេសទៀតហើយ។
វាត្រូវការពេលវេលាខ្លះសម្រាប់ក្បួនដោះស្រាយដើម្បីបង្កើតប្លុកដែលមានសញ្ញាសញ្ញាដែលចាប់ផ្តើមដោយលេខសូន្យបី (ដូចដែលបានកំណត់ដោយការលំបាក)។
ដូច្នេះនោះគឺជាការបញ្ចប់នៃការដំឡើង blockchain មូលដ្ឋានរបស់យើង។
យើងអាចគ្រប់គ្រងពីរបៀបដែលប្លុកថ្មីត្រូវបានបន្ថែមទៅ blockchain របស់យើងបានយ៉ាងឆាប់រហ័ស ដោយសារយន្តការភស្តុតាងនៃការងារ។
វាជាមុខងារសុវត្ថិភាពដ៏សំខាន់បំផុតនៅលើ blockchains ។ ហើយឥឡូវនេះអ្នកយល់ពីរបៀបដែលវាដំណើរការ ចូរចាប់ផ្តើមបង្កើតរបស់អ្នក!
សូមផ្ដល់យោបល់