Thuta Learning
ရှာဖွေရန်
ExercisesSecurityadvanced

Blockchain အလေ့အကျင့် — အတွဲ ၁ (Hashing & Block အခြေခံ)

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Blockchain အလေ့အကျင့် — အတွဲ ၁ (Hashing & Block အခြေခံ) ကို ကိုယ်တိုင် လေ့ကျင့်ကြည့်မယ်
  • သင်ခဲ့ပြီးသား skill တွေကို practice လုပ်ပြီး ခိုင်မာအောင်လုပ်မယ်
  • အမှားရှာ၊ ပြင်တတ်၊ ကိုယ်တိုင် check လုပ်တတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

ဒီ lesson မှာ အသစ် concept ဘာမှ မသင်ဘဲ Basic chapter မှာ ရှင်းပြပြီးသား hashing, blocks, immutability idea တွေကို ကိုယ်တိုင် code ရေးပြီး လက်ဆွဲစမ်းသပ်ကြည့်တာပါ။ SHA256 hash function ရဲ့ avalanche effect (input အနည်းငယ်ပြောင်းရင် output လုံးဝပြောင်းသွားတာ) ကို တွေ့မြင်ရအောင် ရည်ရွယ်ထားပါတယ်။ Task တွေက short ပါတယ်၊ terminal ထဲမှာ node ဖွင့်ပြီး တိုက်ရိုက် run ကြည့်နိုင်ပါတယ်။

လေ့ကျင့်ခန်းများ

Task 1 — Node.js crypto module ကို require လုပ်ပြီး 'Hello Blockchain' နဲ့ 'hello Blockchain' (H စာလုံးကြီး/သေး တစ်လုံးပဲ ကွာ) ဆိုတဲ့ string နှစ်ခုကို SHA256 နဲ့ hash လုပ်ပြီး output ကို ယှဉ်ကြည့်ပါ။ Task 2 — {index:0, timestamp: Date.now(), data:'Genesis Block', previousHash:'0'} ပါတဲ့ genesis block object တစ်ခု ကိုယ်တိုင်ရေးပြီး ၄င်းရဲ့ hash ကို JSON.stringify() နဲ့ ပေါင်းပြီး SHA256 တွက်ကြည့်ပါ။ Task 3 — Task 2 မှာရေးထားတဲ့ block object ရဲ့ data field ကို ပြောင်းလိုက်ပြီး hash ကို ပြန်တွက်ကြည့်ပြီး original hash နဲ့ တူ/မတူ ယှဉ်ကြည့်ပါ။

Code နမူနာ

javascript
const crypto = require('crypto');

function sha256(input) {
  return crypto.createHash('sha256').update(input).digest('hex');
}

// Task 1: string နှစ်ခု hash ယှဉ်ပါ (H စာလုံးကြီး/သေးပဲ ကွာပါတယ်)
const hashA = sha256('Hello Blockchain');
const hashB = sha256('hello Blockchain');
console.log('hashA:', hashA);
console.log('hashB:', hashB);

// Task 2: genesis block object ရေးပြီး hash တွက်ပါ
const genesisBlock = {
  index: 0,
  timestamp: Date.now(),
  data: 'Genesis Block',
  previousHash: '0',
};
const genesisHash = sha256(JSON.stringify(genesisBlock));
console.log('genesisHash:', genesisHash);

// Task 3: data ပြောင်းပြီး hash ကို ပြန်တွက်ကြည့်ပါ (TODO — ကိုယ်တိုင်ရေးပါ)
// const changedBlock = { ...genesisBlock, data: 'Genesis Block v2' };
// const changedHash = sha256(JSON.stringify(changedBlock));
// console.log('changedHash:', changedHash);
You should see
Task သုံးခုစလုံး ပြီးရင် terminal ထဲမှာ hash string သုံးခု (character တစ်လုံးပဲ ကွာတဲ့ string နှစ်ခုရဲ့ လုံးဝမတူတဲ့ hash နှစ်ခု၊ block ရဲ့ hash) ကို မြင်ရပါလိမ့်မယ်။

၅ မိနစ် စမ်းကြည့်

Hash output တွေကို note ထဲ paste ချပြီး ဘယ် character အနေအထားက ဘယ်လောက်ကွာသွားလဲဆိုတာ 5 မိနစ်အတွင်း observe ရေးမှတ်ကြည့်ပါ။

သတိလေးတစ်ချက်

SHA256 output ကို မျက်လုံးနဲ့ ကြည့်ပြီး ခန့်မှန်းလို့မရပါဘူး — character တစ်လုံးပဲ ကွာလည်း output က လုံးဝမတူတော့တာမို့ line-by-line diff လုပ်ကြည့်တာ ပိုနားလည်ပါလိမ့်မယ်။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • hash လုပ်ခင် object ကို JSON.stringify() မလုပ်ဘဲ တိုက်ရိုက် hash.update(data) ထဲထည့်လိုက်လို့ [object Object] error/wrong hash ရနေခြင်း
  • hex digest မထုတ်ဘဲ (.digest('hex') မခေါ်ဘဲ) Buffer object ကို တိုက်ရိုက် print လိုက်လို့ output ကို မဖတ်နိုင်ခြင်း

အခု ကိုယ်တိုင် စမ်းကြည့်

Hash output တွေကို note ထဲ paste ချပြီး ဘယ် character အနေအထားက ဘယ်လောက်ကွာသွားလဲဆိုတာ 5 မိနစ်အတွင်း observe ရေးမှတ်ကြည့်ပါ။

You'll know it worked when: Task သုံးခုစလုံး ပြီးရင် terminal ထဲမှာ hash string သုံးခု (character တစ်လုံးပဲ ကွာတဲ့ string နှစ်ခုရဲ့ လုံးဝမတူတဲ့ hash နှစ်ခု၊ block ရဲ့ hash) ကို မြင်ရပါလိမ့်မယ်။