අපි පසුගිය වසර කිහිපයේ ප්රවණතා දෙස බැලුවහොත්, අපි බ්ලොක්චේන් ගැන නිතරම අසා ඇත්තෙමු, නමුත් විශේෂතා ගැන එතරම් නොවේ.
Bitcoin, Ethereum, Dogecoin, Matic, සහ වෙනත් cryptocurrencies blockchain තාක්ෂණය මත රඳා පවතින බව අපි කවුරුත් දනිමු. බ්ලොක්චේන් 2021 දී බොහෝ කර්මාන්තවල විප්ලවීය වෙනසක් ඇති කළ වැදගත් සිදුවීම් වලට නායකත්වය දුන් අතර නව ජයග්රහණ සඳහා මග පෑදීය.
Blockchain යනු සංස්කරණය කිරීමට, හැක් කිරීමට හෝ වංචා කිරීමට අපහසු හෝ කළ නොහැකි ආකාරයෙන් දත්ත ගබඩා කිරීමේ මාධ්යයකි. එය බ්ලොක්චේන් හි සමස්ත පරිගණක පද්ධති ජාලය හරහා අනුපිටපත් කර ව්යාප්ත වන ගනුදෙනුවල ඩිජිටල් ලෙජරයක් වේ.
එය ප්රායෝගිකව සියලුම ගුප්තකේතන මුදල් බලගන්වන බිම් කඩ දත්ත සමුදා තාක්ෂණයයි. Blockchain මඟින් සම්පූර්ණ ජාලයක් හරහා දත්ත සමුදායක සමාන පිටපත් බෙදා හැරීමෙන් පද්ධතිය හැක් කිරීම හෝ වංචා කිරීම ඇදහිය නොහැකි තරම් දුෂ්කර කරයි.
Bitcoin දැන් බ්ලොක්චේන් සඳහා වඩාත්ම ප්රමුඛ භාවිතය වන අතර, තාක්ෂණයට ඉතා පුළුල් විවිධ යෙදුම් සඳහා සේවය කළ හැකිය.
Cryptocurrencies සහ blockchains මෑත වසරවලදී වැඩි වැඩියෙන් ජනප්රිය වී ඇති අතර මෙම ප්රවණතාවය දිගටම පවතිනු ඇතැයි අපේක්ෂා කෙරේ.
අපි මෙම නිබන්ධනයේදී JavaScript සමඟ සරල blockchain එකක් සාදන්නෙමු. බ්ලොක්චේන් ක්රියා කරන ආකාරය පිළිබඳ මූලික අවබෝධයක් එය ඔබට ලබා දෙනු ඇත.
අපි එය MelodyCoin ලෙස හඳුන්වමු සහ ක්රියාවට පිවිසෙමු!
බ්ලොක් එකක් නිර්මාණය කිරීම
ආරම්භ කිරීමට, අපි නව ජාවාස්ක්රිප්ට් ගොනුවක් සාදන්නෙමු, එහි අපි අපගේ සියලුම කේත ස්ථානගත කරමු.
අපි එය main.js ලෙස හඳුන්වමු සහ blockchain සහ blocks පෙනිය යුතු ආකාරය පිළිබඳ විස්තරයකින් ආරම්භ කරමු.
Block class එකක් සාදා එයට Object() { [native code] } ශ්රිතයක් ලබා දෙන්න.
නව බ්ලොක් එකක් සෑදීමේදී ඔබ දිනයක් සහ පෙර කොටසේ හැෂ් ලබා දිය යුතුය:
එක් එක් දේපල සඳහා අර්ථ දැක්වීම් මෙන්න:
- බ්ලොක් එක සෑදුවේ කවදාදැයි කාලමුද්රාවෙන් දැක්වේ. ඔබට ඔබ තෝරා ගන්නා ඕනෑම ආකෘතියක් භාවිතා කළ හැකිය (මෙම අවස්ථාවේදී, UNIX වේලා මුද්දරයක්).
- ඔබ මෙම බ්ලොක් එකට සම්බන්ධ කිරීමට බලාපොරොත්තු වන ඕනෑම ආකාරයක දත්ත දත්ත පරාමිතියට ඇතුළත් කළ හැක. ඔබට cryptocurrency එකක් සෑදීමට අවශ්ය නම්, ඔබට යවන්නා/ලබන්නා සහ ගෙන ගිය මුදල් ප්රමාණය වැනි ගනුදෙනු දත්ත තබා ගත හැක.
- පෙර හෑෂ් යනු පෙර බ්ලොක් එකේ හැෂ් රඳවා ඇති තන්තුවකි. මෙය බ්ලොක් දාමය උත්පාදනය කරනු ඇත, එය පසුව අපගේ බ්ලොක්චේන්හි අඛණ්ඩතාව සැපයීමේදී තීරණාත්මක වනු ඇත.
Hashes නිර්මාණය කිරීම
සෑම වාරණයක්ම පෙර කොටසට සම්බන්ධ කරයි (එමගින් පෙරහැෂ් ගුණය). එනම්, සෑම බ්ලොක් එකකටම හැෂ් එකක් අවශ්ය වේ. හැෂ් එකක් ඇඟිලි සලකුණකට සමානයි. එය එක් එක් බ්ලොක් සඳහා වෙනස් වේ.
බ්ලොක් එකක හැෂ් එහි සියලුම අන්තර්ගතයන් හැෂ් ශ්රිතයක් හරහා යැවීමෙන් ගණනය කළ හැක.
එබැවින්, වත්මන් බ්ලොක් එකේ හැෂ් ගණනය කරන ශ්රිතයක් ක්රියාත්මක කිරීමෙන් ආරම්භ කරමු.
එබැවින්, බ්ලොක් පන්තිය යටතේ, අපි ගණනය හෑෂ් ශ්රිතය නිර්වචනය කරමු:
කෙසේ වෙතත්, SHA256 හැෂ් ජාවාස්ක්රිප්ට් මගින් සහය නොදක්වන අතර බාහිර පුස්තකාලයකින් ලබාගත යුතුය.
Crypto-js යනු හැෂ් ඇල්ගොරිතම කිහිපයක ආරක්ෂිත ක්රියාත්මක කිරීම් ඇතුළත් අපූරු පැකේජයකි.
එවිට අපට එය අපගේ main.js කේතයට ආයාත කළ හැක.
දැන් අපගේ ගණනය හෑෂ්() ශ්රිතය ඇති බැවින්, එය අපගේ බ්ලොක් ශ්රිතයේ භාවිතා කිරීමට තබමු:
Block එකක් පෙනෙන්නේ කෙසේද යන්න විස්තර කිරීමෙන් පසුව, Blockchain කෙබඳු විය යුතුද යන්න අපට නිර්වචනය කළ හැකිය. එහෙනම් අපි අලුත් class එකක් හදමු.
මෙම අවස්ථාවෙහිදී, blockchain යනු දේපල දාමයක් ඇති ඉතා සරල වස්තුවකි. මෙය දාමයේ ඇති සියලුම කුට්ටි අල්ලාගෙන සිටින අරාවකි.
අපි කුට්ටි එකතු කිරීමට පෙර, අපි මුලින්ම "උත්පත්ති වාරණ" ලෙස හඳුන්වන දේ නිර්මාණය කළ යුතුය. මෙය දාමයේ පළමු කොටස වන අතර, එය පෙර බ්ලොක් එකක් වෙත යොමු කළ නොහැකි වීම සුවිශේෂී වේ (එය පළමුවැන්නයි!).
ඉතින්, ජෙනසිස් බ්ලොක් එක ගොඩනැගීමට, මම අපේ පන්තියට createGenesisBlock () නමින් ශ්රිතයක් එක් කරමි. අපගේ Blockchain පන්තියේ Object() { [native code] } ශ්රිතයේ ආපසු.
අපි නව Blockchain උදාහරණයක් ගොඩනඟන ඕනෑම වේලාවක අපට දැන් උත්පත්ති වාරණ ඇතුළත් කළ හැකිය:
බ්ලොක්චේන් ක්රම
දැන්, අපි අපේ Blockchain පන්තියට නව බ්ලොක් එකතු කිරීම සහ වඩාත්ම මෑත වාරණ ලබා ගැනීම වැනි දේවල් කිරීමට ඉඩ දෙන ක්රම එකතු කරමු.
getLatestBlock කාර්යය වඩාත් මූලික වේ. එය හුදෙක් දාම අරාවේ අවසාන සාමාජිකයා ආපසු ලබා දෙයි:
addBlock තාක්ෂණය තව ටිකක් සම්බන්ධයි.
අපගේ දාමයට නව බ්ලොක් එකක් එක් කිරීමට පෙර, අපි පළමුව එම බ්ලොක් එකේ පෙර හැෂ් ක්ෂේත්රය සුදුසු පරිදි සැකසිය යුතුය.
එය අපගේ දාමයට ඉතා මෑතකදී එකතු කරන ලද බ්ලොක් එකේ හැෂ් ලෙස සැකසිය යුතුය. අපි නව බ්ලොක් එකේ හැෂ් ද ගණනය කළ යුතුය:
පරීක්ෂා කිරීම
අපි බලමු කොහොමද අපේ MelodyCoin එක එලියට ඇවිත් තියෙන්නේ කියලා.
මෙය ඉටු කිරීම සඳහා blockchain උදාහරණයක් සාදන්න. අපි තවත් කොටස් කිහිපයක් එකතු කරමු:
අපි එතන අලුත් කුට්ටි දෙකක් හැදුවා. අපි දැන් බලමු අපේ blockchain එක මොන වගේද කියලා.
MelodyCoin අවකාශ හතරක් සමඟ තන්තුගත කර හැඩතල ගන්වනු ඇත:
Blockchain හි අඛණ්ඩතාව තහවුරු කරන්න
බ්ලොක්චේන් අතිවිශිෂ්ට වන්නේ බ්ලොක් එකක් එක් කළ පසු, දාමයේ ඉතිරි කොටස අවලංගු නොකර එය වෙනස් කළ නොහැකි බැවිනි.
කෙසේ වෙතත්, මෙම ක්රියාත්මක කිරීම සමඟ අපගේ බ්ලොක්චේන්හි අඛණ්ඩතාව පරීක්ෂා කිරීමට මට ක්රමයක් නොමැත.
අපි අපගේ blockchain වෙත isChainValid ශ්රිතයක් හඳුන්වා දෙමු. දාමය නීත්යානුකූල නම්, එය නැවත සත්ය වනු ඇත; එසේ නොමැති නම්, එය අසත්ය ලෙස ආපසු එනු ඇත:
අඛණ්ඩතාව පරීක්ෂා කිරීම
අපට දැන් අපගේ blockchain හි අඛණ්ඩතාව පරීක්ෂාවට ලක් කළ හැක. අපි දැන් එය ක්රියාත්මක කළහොත්, අපගේ දාමය සත්ය බව තහවුරු වේ.
අපි දැන් අපගේ blockchain සමඟ බාධා කිරීමට උත්සාහ කරමු. බ්ලොක් 2 වෙනස් කර එහි අන්තර්ගතය උඩින් ලියමු (අපි හිතමු කාසි හතරක් වෙනුවට කාසි 100ක් මාරු කළා කියලා).
අපි මෙය ක්රියාත්මක කරන විට, දාමයට හානි කිරීමට අපගේ උත්සාහය මෘදුකාංගය හඳුනා ගන්නා බව අපට පෙනේ.
කෙසේ වෙතත්, මෙයට මැදිහත් වීමට මට තවත් ක්රමයක් ඇති බව ඔබට විශ්වාස කළ හැකිය. මම බ්ලොක් එකේ අන්තර්ගතය වෙනස් කළ නමුත් හැෂ් නැවත ගණනය කළේ නැත. එබැවින් ඔබට දක්ෂ වීමට උත්සාහ කළ හැකි අතර එම බ්ලොක් එකේ හැෂ් නැවත ගණනය කරන්න.
අපගේ කුඩා බ්ලොක්චේන් සැකසුම සඳහා තිබුණේ එපමණයි! එය අපට නව කොටස් එකතු කිරීමට සහ දාමය තුළ දත්ත විකෘති කිරීම හඳුනා ගැනීමට හැකියාව ලබා දෙයි.
අපගේ කුඩා blockchain සමඟ අප විසින් විසඳිය යුතු ගැටළු දෙකක් තිබේ:
- නවීන පරිගණක ඉතා වේගවත් වන අතර තත්පර කිහිපයකින් අපගේ දාමයට බ්ලොක් දහස් ගණනක් එකතු කළ හැකිය. අපගේ බ්ලොක්චේන් කිසිවකු අයාචිත තැපැල් කිරීමට අපට අවශ්ය නැත.
- අපගේ blockchain තවමත් විකෘති කිරීමට අවදානමට ලක්ව ඇත. ඔබට බ්ලොක් එකක අන්තර්ගතය යාවත්කාලීන කළ හැකි අතර පසුව පහත දැක්වෙන සියලුම කොටස් සඳහා හෑෂ් (සහ පෙර හැෂ්) නැවත ගණනය කළ හැක. ඔබ එය අවුල් කළත්, ඔබට නීත්යානුකූල දාමයක් ලැබෙනු ඇත.
මෙම ගැටළු විසඳීම සඳහා, බ්ලොක්චේන් "වැඩ කිරීමේ සාක්ෂි" ලෙස හඳුන්වන තාක්ෂණයක් භාවිතා කරයි. මෙම ප්රවේශය භාවිතා කරමින් බ්ලොක් එකක් සෑදීමට ඔබ සැලකිය යුතු පරිගණන සම්පත් ප්රමාණයක් භාවිතා කළ බව ඔබ විසින් ප්රදර්ශනය කළ යුතුය. මෙය ද හැඳින්වේ පතල්.
වැඩ සාධනය සඳහා බ්ලොක් එකක හැෂ් නිශ්චිත ශුන්ය ප්රමාණයකින් ආරම්භ වීම අවශ්ය වේ. නමුත් ඔබේ හෑෂ් මෙම රීතියට ගැළපෙනවාද යන්න ඔබට දැනගත හැක්කේ කෙසේද?
බ්ලොක් එකක අන්තර්ගතය එහි හැෂ් තීරණය කරයි. එබැවින් අපි අන්තර්ගතය වෙනස් නොකරන්නේ නම්, අපි සෑම විටම එකම හැෂ් ලබා ගනිමු.
සෑම කුට්ටියකටම විසඳුමක් ලෙස එකතු නොකළ අගයක් තිබිය යුතුය. මෙය අත්යවශ්යයෙන්ම අපගේ බ්ලොක් හි හැෂ් ප්රමාණවත් බිංදු වලින් ආරම්භ වන තෙක් අපට යාවත්කාලීන කළ හැකි අහඹු දත්ත වේ. ඔබට හැෂ් ශ්රිතයක ප්රතිදානය වෙනස් කළ නොහැකි නිසා, ඔබට විවිධ සංයෝජන රාශියක් පරීක්ෂා කර හොඳම දේ බලාපොරොත්තු විය යුතුය.
Blockchain වෙත පතල් කැණීම හඳුන්වා දෙන්න
අපගේ බ්ලොක් පන්තියට නොන්ස් එකක් ඇතුළත් කිරීමෙන් ආරම්භ කරමු. නොන්ස් යනු අපගේ බ්ලොක් එකේ ඇති තනි අගය වන අතර එය බ්ලොක් එකේ හැෂ් වලට බලපෑම් කිරීමට අපට වෙනස් කළ හැක.
අපට වේලා මුද්රාව හෝ දත්ත වෙනස් කිරීමට නොහැක.
මීළඟට, බ්ලොක් එකක සත්ය කැණීම සිදු කරන mineBlock() ශ්රිතයක් ලියමු. මෙම ශ්රිතය අවශ්ය දුෂ්කරතාව පරාමිතියක් ලෙස යවනු ලබන අතර අපගේ වාරණයේ හැෂ් ප්රමාණවත් බිංදු වලින් ආරම්භ වන තෙක් ක්රියාත්මක වේ.
මම මේ දැන් අපේ හැෂ් ප්රමාණවත් බිංදු වලින් ආරම්භ වන තෙක් ධාවනය වන මූලික ලුප් එකක් සෑදුවෙමි. ශුන්ය කීයක් අවශ්ය දැයි තීරණය කිරීමට අපි දුෂ්කරතාවය භාවිතා කරමු. 5 ක දුෂ්කරතාවයකින්, අපගේ හැෂ් ශුන්ය 5 කින් ආරම්භ විය යුතුය.
අපගේ හැෂ් හි ප්රමාණවත් බිංදු අඩංගු නොවන විට, අපි නොන්ස් එකකින් ඉහළ දමා හැෂ් නැවත ගණනය කරමු. දුෂ්කරතාවයට අනුරූප වන හැෂ් එකක් අපට හමු වුවහොත්, අපි එය කොන්සෝලයට ලොග් කරමු.
අපි කරන්න ඕන තව එක දෙයක් තියෙනවා. අපි ඇත්තටම අපේ ගණනය හෑෂ් ක්රමයේදී nonce විචල්යය සැලකිල්ලට නොගනිමු, එබැවින් එය මෙන්න:
බ්ලොක්චේන් පන්තිය
අපි මෙම නව ප්රවේශය අපගේ බ්ලොක්චේන් පන්තියේ පරීක්ෂණයට තබා එය සිදු වන්නේ කෙසේදැයි බලමු.
ආරම්භ කිරීමට, මම Object() ශ්රිතයේ අපගේ blockchain හි දුෂ්කරතාවය නිර්වචනය කරමි. අපට එය පසුව කොහේ හෝ භාවිතා කළ හැකි බැවින් අපි එය මෙහි නිර්වචනය කරමු.
addBlock ශ්රිතය අපගේ දාමයට එකතු කිරීමට පෙර එය බ්ලොක් එක පතල් කරන ලෙස වෙනස් කළ යුතුය.
Blockchain භාවිතා කරන්න
දැන්, අපි අපගේ නව බ්ලොක්චේනය වැඩ ඔප්පු කිරීමේ ඇල්ගොරිතම සමඟ භාවිතා කරමු. මෙන්න, console.log ප්රකාශ කිහිපයක් එක් කරන්න.
අපි මෙම කේතය ක්රියාත්මක කරන විට, පතල් කැණීමේ ක්රියාවලිය තවදුරටත් විශේෂයෙන් වේගවත් නොවන බව අපට නිරීක්ෂණය කළ හැකිය.
ඇල්ගොරිතමයට ශුන්ය තුනකින් ආරම්භ වන (දුෂ්කරතාවයෙන් වින්යාස කර ඇති පරිදි) හැෂ් සහිත බ්ලොක් ජනනය කිරීමට යම් කාලයක් ගතවේ.
එබැවින් එය අපගේ මූලික බ්ලොක්චේන් සැකසුම අවසන් විය.
වැඩ ඔප්පු කිරීමේ යාන්ත්රණයට ස්තූතිවන්ත වන පරිදි අපගේ බ්ලොක්චේන් වෙත නව බ්ලොක් කෙතරම් ඉක්මනින් එකතු වේද යන්න අපට නියාමනය කළ හැකිය.
එය බ්ලොක්චේන් වල වඩාත්ම වැදගත් ආරක්ෂක අංගයයි. එය ක්රියා කරන ආකාරය දැන් ඔබට වැටහී ඇති බැවින්, ඔබේම නිර්මාණයක් කරන්න!
ඔබමයි