លំហសិក្សាកម្ពុជា លំហសិក្សាកម្ពុជា V1.0
ចូល ចុះឈ្មោះ

មេរៀនទី ៥៖ ការរចនា Transaction និង Block សម្រាប់ Blockchain Console Application

មូលសង្ខេប / Abstract

មេរៀនទី ៥ នេះផ្ដោតលើការរចនា Transaction និង Block ដែលជារចនាសម្ព័ន្ធស្នូលរបស់ Blockchain។ នៅមេរៀនមុនៗ និស្សិតបានរៀនពី Python Console Application, Functions, Lists, Dictionaries, CSV File Handling និង SHA-256 Hashing។ មេរៀននេះនឹងភ្ជាប់ចំណេះដឹងទាំងនោះ ដើម្បីបង្កើត Certificate Transaction និង Blockchain Block ដោយប្រើ Python Dictionary។ ក្នុង Project នេះ Transaction មួយតំណាងឱ្យ Certificate Record មួយ ហើយ Block មួយជាក្រុមនៃ Transactions ដែលមាន fields សំខាន់ៗដូចជា index, timestamp, transactions, previous_hash, nonce និង hash។ NIST ពន្យល់ថា Blockchain អាចឱ្យអ្នកប្រើកត់ត្រា Transactions ក្នុង Shared Ledger ហើយ Blocks ត្រូវបានភ្ជាប់គ្នាតាម Cryptographic Hashes ដើម្បីធ្វើឱ្យប្រព័ន្ធមានលក្ខណៈ Tamper-Evident [1]។ Python time module ត្រូវបានប្រើសម្រាប់បង្កើត Timestamp ហើយ Python json module អាចប្រើសម្រាប់បម្លែង Dictionary ទៅជា JSON String មុនធ្វើ Hash [2], [3]។ មេរៀននេះជាមូលដ្ឋានសំខាន់សម្រាប់មេរៀនទី ៦ ដែលនឹងបង្កើត Simple Blockchain ពេញលេញក្នុង Console។

ពាក្យគន្លឹះ

១. ព័ត៌មានទូទៅអំពីមេរៀន

ចំណុចព័ត៌មាន
មុខវិជ្ជាBlockchain Technology Using Python Console and CSV
មេរៀនមេរៀនទី ៥
ចំណងជើងTransaction and Block Structure
ប្រធានបទសំខាន់Certificate Transaction, Block Fields, Previous Hash, Block Hash
កម្រិតនិស្សិតBeginner to Intermediate
ភាសាសរសេរកម្មវិធីPython
ប្រភេទកម្មវិធីConsole Application
Python Modulestime, hashlib, json
លទ្ធផលរំពឹងទុកនិស្សិតអាចរចនា Transaction និង Block Structure ដោយប្រើ Python Dictionary
ទិសដៅ ProjectConsole-Based Blockchain Student Certificate Verification System

២. គោលបំណងសិក្សា

បន្ទាប់ពីបញ្ចប់មេរៀននេះ និស្សិតគួរអាច៖

  1. ពន្យល់បានថា Transaction ក្នុង Blockchain មានន័យដូចម្តេច។
  2. ពន្យល់បានថា Certificate Transaction ក្នុង Project នេះជាអ្វី។
  3. រចនា Certificate Transaction ដោយប្រើ Python Dictionary។
  4. ពន្យល់បានថា Block ក្នុង Blockchain មានន័យដូចម្តេច។
  5. កំណត់ Fields សំខាន់ៗរបស់ Block ដូចជា index, timestamp, transactions, previous_hash, nonce និង hash។
  6. ប្រើ Python time.time() ឬ datetime ដើម្បីបង្កើត Timestamp។
  7. ប្រើ SHA-256 Hashing ដើម្បីបង្កើត Block Hash។
  8. ពន្យល់បានថា Previous Hash មានតួនាទីភ្ជាប់ Block មួយទៅ Block មុន។
  9. បង្កើត Block មួយដែលមាន Transactions ច្រើន។
  10. ត្រៀមខ្លួនសម្រាប់មេរៀនទី៦៖ Building a Simple Blockchain in Console។

៣. ទំនាក់ទំនងមេរៀនទី ៥ ជាមួយ Final Project

នៅមេរៀនទី ៤ និស្សិតបានរៀនពី Hashing និង Data Integrity។ ឥឡូវនេះ យើងនឹងយក Hashing ទៅប្រើលើ Block។ ដើម្បីបង្កើត Blockchain យើងត្រូវយល់ពីលំដាប់ដូចខាងក្រោម៖

Certificate Record
↓
Certificate Transaction
↓
List of Transactions
↓
Block
↓
Block Hash
↓
Previous Hash Link
↓
Blockchain

ក្នុង Final Project របស់យើង៖

  • Certificate Record គឺជាព័ត៌មានវិញ្ញាបនបត្រ។
  • Transaction គឺជា Certificate Record ដែលបានរៀបចំសម្រាប់ដាក់ក្នុង Blockchain។
  • Block គឺជាក្រុមនៃ Transactions។
  • Hash គឺជាស្នាមម្រាមដៃឌីជីថលរបស់ Block។
  • Previous Hash គឺជាការភ្ជាប់ Block ថ្មីទៅ Block មុន។

Figure 1. From Certificate Transaction to Block

រូបភាពនេះគួរបង្ហាញថា Certificate Transactions ជាច្រើនត្រូវបានបញ្ចូលទៅក្នុង Block មួយ។ Block មួយមិនត្រឹមតែមាន Transactions ប៉ុណ្ណោះទេ ប៉ុន្តែមាន Timestamp, Previous Hash, Nonce និង Current Hash ផងដែរ។ រូបភាពនេះជួយឱ្យនិស្សិតយល់ថា Blockchain ចាប់ផ្ដើមពីការរៀបចំ Transaction ឱ្យបានត្រឹមត្រូវជាមុន។


៤. Transaction ក្នុង Blockchain

៤.១ តើ Transaction គឺជាអ្វី?

Transaction គឺជាកំណត់ត្រាទិន្នន័យមួយដែលត្រូវបានបញ្ចូលទៅក្នុង Blockchain។ ក្នុងប្រព័ន្ធ Cryptocurrency Transaction អាចបង្ហាញការផ្ទេរប្រាក់ពីមនុស្សម្នាក់ទៅមនុស្សម្នាក់។ ប៉ុន្តែក្នុង Project Certificate Verification របស់យើង Transaction មួយតំណាងឱ្យ Certificate Record មួយ។

NIST Blockchain Technology Overview ពន្យល់ថា Blockchain អាចកត់ត្រា Transactions ក្នុង Shared Ledger ហើយក្រោមលក្ខខណ្ឌដំណើរការធម្មតា Transaction មិនអាចត្រូវបានផ្លាស់ប្ដូរបានក្រោយពេលបាន Publish ទៅ Ledger [1]។


៤.២ Certificate Transaction ក្នុង Project នេះ

Certificate Transaction មួយគួរមាន Fields ដូចខាងក្រោម៖

Fieldការពន្យល់
transaction_idលេខសម្គាល់ Transaction
certificate_idលេខសម្គាល់វិញ្ញាបនបត្រ
student_nameឈ្មោះនិស្សិត
programកម្មវិធីសិក្សា
certificate_titleចំណងជើងវិញ្ញាបនបត្រ
issue_dateថ្ងៃចេញវិញ្ញាបនបត្រ
statusValid, Invalid ឬ Revoked
certificate_hashHash របស់ Certificate Record

ការបន្ថែម certificate_hash ជួយឱ្យ Transaction មានភស្តុតាងបច្ចេកទេសសម្រាប់ពិនិត្យ Data Integrity។


៤.៣ ឧទាហរណ៍ Certificate Transaction

certificate_transaction = {
    "transaction_id": "TX-0001",
    "certificate_id": "CERT-FDE-001",
    "student_name": "Sok Dara",
    "program": "Digital Economy",
    "certificate_title": "Blockchain Technology Completion",
    "issue_date": "2026-08-25",
    "status": "Valid",
    "certificate_hash": "a3f1c6d7e8b9f01a..."
}

print(certificate_transaction)

ការពន្យល់

Transaction នេះជាកំណត់ត្រាវិញ្ញាបនបត្រមួយដែលត្រូវបានរៀបចំជាទម្រង់ Dictionary។ នៅមេរៀនបន្ទាប់ វានឹងត្រូវបានដាក់ចូលក្នុង Block។

Figure 2. Certificate Transaction Fields

រូបភាពនេះគួរបង្ហាញ Fields សំខាន់ៗរបស់ Certificate Transaction ដូចជា Transaction ID, Certificate ID, Student Name, Program, Certificate Title, Issue Date, Status និង Certificate Hash។ វាជួយឱ្យនិស្សិតយល់ពីទិន្នន័យមួយ Record មុនពេលដាក់ចូល Block។


៥. Block ក្នុង Blockchain

៥.១ តើ Block គឺជាអ្វី?

Block គឺជាក្រុមនៃ Transactions។ Block មួយរក្សាទុក Transactions ជាច្រើន និងព័ត៌មានបច្ចេកទេសដែលត្រូវការសម្រាប់ភ្ជាប់ទៅ Blockchain។ NIST IR 8202 បង្ហាញថា Block ក្នុង Blockchain អាចមាន Transactions ចាប់ពីសូន្យឡើងទៅ ហើយ Blocks ត្រូវបានភ្ជាប់គ្នាតាម Hashes [1]។

ក្នុង Course នេះ Block មួយនឹងមាន៖

Block = Header Information + List of Transactions + Hash

៥.២ Fields សំខាន់ៗរបស់ Block

Fieldការពន្យល់
indexលំដាប់លេខរបស់ Block
timestampពេលវេលាដែល Block ត្រូវបានបង្កើត
transactionsList នៃ Certificate Transactions
previous_hashHash របស់ Block មុន
nonceលេខប្រើសម្រាប់ការសាកល្បង Proof-of-Work នៅមេរៀនក្រោយ
hashHash របស់ Block បច្ចុប្បន្ន

Figure 3. Basic Block Structure

រូបភាពនេះគួរបង្ហាញរចនាសម្ព័ន្ធ Block មួយដែលមាន Index, Timestamp, Transactions, Previous Hash, Nonce និង Current Hash។ វាជួយឱ្យនិស្សិតមើលឃើញថា Block មិនមែនគ្រាន់តែជាទិន្នន័យធម្មតាទេ ប៉ុន្តែជារចនាសម្ព័ន្ធដែលត្រូវបានរៀបចំសម្រាប់ភ្ជាប់ក្នុង Blockchain។


៦. Timestamp ក្នុង Block

៦.១ តើ Timestamp គឺជាអ្វី?

Timestamp គឺជាពេលវេលាដែលកំណត់ថា Block ត្រូវបានបង្កើតនៅពេលណា។ ក្នុង Python យើងអាចប្រើ time.time() ដើម្បីទទួល Unix timestamp ឬប្រើ datetime.now() ដើម្បីទទួលពេលវេលាដែលមើលងាយ។

Python time module ផ្ដល់ functions ជាច្រើនសម្រាប់ការចូលដំណើរការ និងបម្លែងពេលវេលា [2]។

៦.២ ឧទាហរណ៍ប្រើ time.time()

import time

timestamp = time.time()
print("Timestamp:", timestamp)

លទ្ធផលអាចមានទម្រង់ដូចជា៖

Timestamp: 1798185123.245

៦.៣ ឧទាហរណ៍ប្រើ datetime.now()

from datetime import datetime

timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("Timestamp:", timestamp)

លទ្ធផល៖

Timestamp: 2026-08-25 21:30:00

ក្នុង Project សម្រាប់និស្សិត Beginner ប្រើ datetime.now().strftime() អាចងាយអានជាង time.time()។


៧. Previous Hash

៧.១ តើ Previous Hash គឺជាអ្វី?

Previous Hash គឺជា Hash របស់ Block មុន។ វាត្រូវបានរក្សាទុកក្នុង Block ថ្មី ដើម្បីភ្ជាប់ Block ថ្មីទៅ Block មុន។ នេះជាគំនិតសំខាន់បំផុតក្នុង Blockchain។

ឧទាហរណ៍៖

Block 1 Hash       = abc123
Block 2 Previous   = abc123
Block 2 Hash       = def456
Block 3 Previous   = def456

បើ Block 1 ត្រូវបានកែប្រែ Hash របស់ Block 1 នឹងផ្លាស់ប្ដូរ ហើយ Block 2 Previous Hash នឹងមិនត្រូវគ្នាទៀត។ នេះជាមូលដ្ឋានសម្រាប់ Tamper Detection។

NIST CSRC glossary ក៏ពន្យល់ថា Block នីមួយៗត្រូវបានភ្ជាប់ទៅ Block មុនតាម Cryptographic Link ដើម្បីធ្វើឱ្យវាមានលក្ខណៈ Tamper-Evident [4]។

Figure 4. Previous Hash Links Blocks Together

រូបភាពនេះគួរបង្ហាញ Block 1, Block 2 និង Block 3 ដែល Block នីមួយៗមាន Current Hash ហើយ Block បន្ទាប់រក្សាទុក Previous Hash របស់ Block មុន។ វាជួយបង្ហាញថា Previous Hash គឺជាខ្សែភ្ជាប់សំខាន់បំផុតក្នុង Blockchain។


៨. Nonce

៨.១ តើ Nonce គឺជាអ្វី?

Nonce គឺជាលេខមួយដែលអាចត្រូវបានប្តូរដើម្បីបង្កើត Hash ដែលមានលក្ខខណ្ឌជាក់លាក់។ ក្នុង Blockchain ពិតៗ Nonce ត្រូវបានប្រើក្នុង Proof-of-Work។ ក្នុង Course នេះ យើងប្រើ nonce = 0 ជាមូលដ្ឋានសិន ហើយនៅមេរៀនក្រោយអាចបន្តទៅការសាកល្បង Mining ងាយៗ។

ឧទាហរណ៍៖

nonce = 0
print("Nonce:", nonce)

ក្នុង Block Structure យើងរក្សាទុក Nonce ទោះបីមិនទាន់ប្រើ Proof-of-Work ពេញលេញក៏ដោយ ព្រោះវាជាផ្នែកសំខាន់នៃការយល់ពី Blockchain Design។


៩. Block Hash

៩.១ តើ Block Hash គឺជាអ្វី?

Block Hash គឺជា Hash ដែលបង្កើតពីទិន្នន័យសំខាន់ៗក្នុង Block។ Block Hash តំណាងឱ្យស្នាមម្រាមដៃឌីជីថលរបស់ Block មួយ។ ប្រសិនបើ Field ណាមួយក្នុង Block ត្រូវបានកែ Hash នឹងផ្លាស់ប្ដូរ។

Block Hash គួរបង្កើតពី Fields ដូចជា៖

  • index
  • timestamp
  • transactions
  • previous_hash
  • nonce

ជាធម្មតា យើងមិនបញ្ចូល hash Field ខ្លួនឯងនៅពេលគណនា Hash ទេ ព្រោះវាអាចបង្កើត Circular Problem។


៩.២ Function សម្រាប់ Generate Block Hash

import hashlib
import json

def generate_hash(data):
    data_string = json.dumps(data, sort_keys=True)
    return hashlib.sha256(data_string.encode("utf-8")).hexdigest()

Python json.dumps() អាចបម្លែង Python object ទៅជា JSON formatted string ហើយ sort_keys=True ជួយធ្វើឱ្យ key order មានលំដាប់ថេរ [3]។


១០. Practical Lab 1: Create One Transaction

គោលបំណង

បង្កើត Certificate Transaction មួយដោយប្រើ Python Dictionary។

Source Code

import hashlib
import json

def generate_hash(data):
    data_string = json.dumps(data, sort_keys=True)
    return hashlib.sha256(data_string.encode("utf-8")).hexdigest()

certificate_record = {
    "certificate_id": "CERT-FDE-001",
    "student_name": "Sok Dara",
    "program": "Digital Economy",
    "certificate_title": "Blockchain Technology Completion",
    "issue_date": "2026-08-25",
    "status": "Valid"
}

certificate_hash = generate_hash(certificate_record)

transaction = {
    "transaction_id": "TX-0001",
    "certificate_id": certificate_record["certificate_id"],
    "student_name": certificate_record["student_name"],
    "program": certificate_record["program"],
    "certificate_title": certificate_record["certificate_title"],
    "issue_date": certificate_record["issue_date"],
    "status": certificate_record["status"],
    "certificate_hash": certificate_hash
}

print("=== Certificate Transaction ===")
print(transaction)

ការពន្យល់

  • certificate_record រក្សាទុកព័ត៌មានវិញ្ញាបនបត្រ។
  • certificate_hash ជា Hash របស់ Certificate Record។
  • transaction ជា Certificate Transaction ដែលមាន Hash ភ្ជាប់ជាមួយ។
  • Transaction នេះអាចបញ្ចូលទៅក្នុង Block នៅ Practical Lab បន្ទាប់។

១១. Practical Lab 2: Create One Block

គោលបំណង

បង្កើត Block មួយដែលមាន Transactions និង Block Hash។

Source Code

from datetime import datetime
import hashlib
import json

def generate_hash(data):
    data_string = json.dumps(data, sort_keys=True)
    return hashlib.sha256(data_string.encode("utf-8")).hexdigest()

transactions = [
    {
        "transaction_id": "TX-0001",
        "certificate_id": "CERT-FDE-001",
        "student_name": "Sok Dara",
        "program": "Digital Economy",
        "certificate_title": "Blockchain Technology Completion",
        "issue_date": "2026-08-25",
        "status": "Valid",
        "certificate_hash": "sample_certificate_hash"
    }
]

block = {
    "index": 1,
    "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
    "transactions": transactions,
    "previous_hash": "0",
    "nonce": 0
}

block["hash"] = generate_hash(block)

print("=== Block Information ===")
print("Index:", block["index"])
print("Timestamp:", block["timestamp"])
print("Previous Hash:", block["previous_hash"])
print("Nonce:", block["nonce"])
print("Hash:", block["hash"])
print("Transactions:", block["transactions"])

ការពន្យល់

Block នេះមាន Transaction មួយ។ previous_hash ត្រូវបានកំណត់ជា "0" ព្រោះនេះជាឧទាហរណ៍ Block ដំបូង។ នៅមេរៀនក្រោយ យើងនឹងបង្កើត Genesis Block និងបន្ថែម Blocks ជាច្រើន។

Figure 5. One Block with Transactions and Hash

រូបភាពនេះគួរបង្ហាញ Block មួយដែលមាន Transactions, Timestamp, Previous Hash, Nonce និង Current Hash។ វាជួយឱ្យនិស្សិតយល់ពីទំនាក់ទំនងរវាង Transaction Data និង Block Hash។


១២. Practical Lab 3: Create a Block with Multiple Transactions

គោលបំណង

បង្កើត Block មួយដែលមាន Certificate Transactions ច្រើន។

Source Code

from datetime import datetime
import hashlib
import json

def generate_hash(data):
    data_string = json.dumps(data, sort_keys=True)
    return hashlib.sha256(data_string.encode("utf-8")).hexdigest()

transactions = [
    {
        "transaction_id": "TX-0001",
        "certificate_id": "CERT-FDE-001",
        "student_name": "Sok Dara",
        "program": "Digital Economy",
        "certificate_title": "Blockchain Technology Completion",
        "issue_date": "2026-08-25",
        "status": "Valid",
        "certificate_hash": "hash_001"
    },
    {
        "transaction_id": "TX-0002",
        "certificate_id": "CERT-FDE-002",
        "student_name": "Chan Vicheka",
        "program": "Information Technology",
        "certificate_title": "Python Programming Completion",
        "issue_date": "2026-08-26",
        "status": "Valid",
        "certificate_hash": "hash_002"
    }
]

block = {
    "index": 1,
    "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
    "transactions": transactions,
    "previous_hash": "0",
    "nonce": 0
}

block["hash"] = generate_hash(block)

print("=== Block with Multiple Transactions ===")
print(block)

ការពន្យល់

Block មួយអាចមាន Transactions ច្រើន។ ក្នុង Project ពិត Group អាចសម្រេចថា Block មួយមាន Transaction មួយ ឬច្រើន។ សម្រាប់អ្នកចាប់ផ្ដើម ប្រើ Block មួយមាន Transactions ច្រើនអាចជួយឱ្យយល់ថា Block គឺជា Container សម្រាប់ Records។


១៣. Practical Lab 4: Change Transaction Data and Observe Block Hash

គោលបំណង

បង្ហាញថា បើ Transaction Data ក្នុង Block ត្រូវបានកែ Block Hash នឹងផ្លាស់ប្តូរ។

Source Code

import hashlib
import json
from datetime import datetime

def generate_hash(data):
    data_string = json.dumps(data, sort_keys=True)
    return hashlib.sha256(data_string.encode("utf-8")).hexdigest()

block = {
    "index": 1,
    "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
    "transactions": [
        {
            "transaction_id": "TX-0001",
            "certificate_id": "CERT-FDE-001",
            "student_name": "Sok Dara",
            "program": "Digital Economy",
            "certificate_title": "Blockchain Technology Completion",
            "issue_date": "2026-08-25",
            "status": "Valid"
        }
    ],
    "previous_hash": "0",
    "nonce": 0
}

original_hash = generate_hash(block)

block["transactions"][0]["student_name"] = "Sok Daraa"

changed_hash = generate_hash(block)

print("Original Hash:", original_hash)
print("Changed Hash :", changed_hash)

if original_hash == changed_hash:
    print("Block data is unchanged.")
else:
    print("Block data has changed.")

ការពន្យល់

កូដនេះបង្ហាញថា បើកែ Student Name ក្នុង Transaction នោះ Block Hash នឹងផ្លាស់ប្តូរ។ នេះជាមូលដ្ឋានសម្រាប់ Blockchain Validation នៅមេរៀនក្រោយ។

Figure 6. Transaction Change Affects Block Hash

រូបភាពនេះគួរបង្ហាញថា ការកែ Transaction Data តូចមួយក្នុង Block នឹងធ្វើឱ្យ Block Hash ផ្លាស់ប្តូរ។ វាជួយបញ្ជាក់ថា Block Hash អាចប្រើសម្រាប់រកឃើញការកែប្រែទិន្នន័យ។


១៤. ការរៀបចំ Block Structure សម្រាប់ Final Project

សម្រាប់ Final Project និស្សិតគួរប្រើ Block Structure ដូចខាងក្រោម៖

block = {
    "index": 1,
    "timestamp": "2026-08-25 21:30:00",
    "transactions": [],
    "previous_hash": "0",
    "nonce": 0,
    "hash": ""
}

ការពន្យល់

FieldRequired?Reason
indexYesសម្គាល់លំដាប់ Block
timestampYesបង្ហាញពេលវេលាបង្កើត Block
transactionsYesរក្សាទុក Certificate Transactions
previous_hashYesភ្ជាប់ទៅ Block មុន
nonceYesត្រៀមសម្រាប់ Mining / Proof-of-Work
hashYesសម្គាល់ Block បច្ចុប្បន្ន

Figure 7. Final Project Block Structure

រូបភាពនេះគួរបង្ហាញ Block Structure ចុងក្រោយដែលនិស្សិតត្រូវប្រើក្នុង Final Project។ វាជួយឱ្យពួកគេមានគំរូច្បាស់សម្រាប់បន្តទៅមេរៀនទី៦ ដែលនឹងបង្កើត Blockchain ជាសង្វាក់ Blocks។


១៥. ការពិភាក្សាក្នុងថ្នាក់

គ្រូអាចប្រើសំណួរខាងក្រោម៖

  1. Transaction ក្នុង Project នេះតំណាងឱ្យអ្វី?
  2. ហេតុអ្វី Block ត្រូវមាន Transactions ជា List?
  3. ហេតុអ្វី Block ត្រូវមាន Timestamp?
  4. Previous Hash មានតួនាទីអ្វី?
  5. តើមានអ្វីកើតឡើង បើ Transaction Data ត្រូវបានកែ?
  6. ហេតុអ្វីមិនគួរបញ្ចូល Field hash ខ្លួនឯងនៅពេល Generate Hash?
  7. តើ Block Structure នេះអាចបន្តទៅ Blockchain បានយ៉ាងដូចម្តេច?

១៦. Reflection Exercise

សរសេរចម្លើយខ្លី ៥–៧ បន្ទាត់៖

ហេតុអ្វី Previous Hash ជាគំនិតសំខាន់បំផុតមួយក្នុង Blockchain?

ចម្លើយគួររួមបញ្ចូលគំនិត៖

  • Previous Hash ភ្ជាប់ Block ថ្មីទៅ Block មុន។
  • បើ Block មុនត្រូវបានកែ Hash នឹងផ្លាស់ប្តូរ។
  • Block បន្ទាប់នឹងមិនត្រូវគ្នាជាមួយ Previous Hash ទៀត។
  • វាជួយ Tamper Detection។
  • វាជួយធ្វើឱ្យ Blockchain មានលក្ខណៈជាសង្វាក់។

១៧. លំហាត់អនុវត្ត

លំហាត់ទី១៖ Create Certificate Transaction

បង្កើត Certificate Transaction មួយដែលមាន Fields៖

transaction_id
certificate_id
student_name
program
certificate_title
issue_date
status
certificate_hash

លំហាត់ទី២៖ Create Block Structure

បង្កើត Block មួយដែលមាន Fields៖

index
timestamp
transactions
previous_hash
nonce
hash

លំហាត់ទី៣៖ Add Two Transactions into One Block

បង្កើត Transactions ចំនួន ២ ហើយបញ្ចូលទៅក្នុង Block មួយ។


លំហាត់ទី៤៖ Generate Block Hash

សរសេរ Function generate_hash(data) ហើយប្រើវាសម្រាប់ Generate Block Hash។


លំហាត់ទី៥៖ Change Transaction Data

កែ student_name ក្នុង Transaction មួយ ហើយ Generate Hash ថ្មី។ ប្រៀបធៀប Hash ដើម និង Hash ថ្មី។


លំហាត់ទី៦៖ Explain Previous Hash

សរសេរពន្យល់ខ្លីៗថា Previous Hash មានតួនាទីអ្វីក្នុង Blockchain។


១៨. កិច្ចការផ្ទះ

បង្កើតកម្មវិធី Python Console មួយឈ្មោះ៖

block_structure_demo.py

កម្មវិធីត្រូវមាន៖

  1. Function generate_hash(data)
  2. Function create_certificate_transaction()
  3. Function create_block(index, transactions, previous_hash)
  4. Certificate Transactions ចំនួនយ៉ាងតិច ៣
  5. Block មួយដែលមាន Transactions ទាំង ៣
  6. Block Hash
  7. Display Block Information clearly
  8. Comment ពន្យល់កូដសំខាន់ៗ
  9. Test ការកែ Transaction Data ហើយប្រៀបធៀប Hash មុន និងក្រោយកែ

១៩. លទ្ធផលដែលនិស្សិតគួរទទួលបាន

បន្ទាប់ពីបញ្ចប់មេរៀនទី ៥ និស្សិតគួរមាន៖

  1. ការយល់ដឹងពី Transaction Structure។
  2. ការយល់ដឹងពី Block Structure។
  3. ការយល់ពី Timestamp, Previous Hash, Nonce និង Block Hash។
  4. ការបង្កើត Block មួយដោយប្រើ Python Dictionary។
  5. ការបញ្ចូល Transactions ច្រើនក្នុង Block មួយ។
  6. ការយល់ថា ការកែ Transaction Data នឹងប្ដូរ Block Hash។
  7. មូលដ្ឋានសម្រាប់បន្តទៅមេរៀនទី៦៖ Building a Simple Blockchain in Console។

២០. Notes

មេរៀនទី ៥ គឺជាស្ពានពី Hashing ទៅ Blockchain។ និស្សិតគួរយល់ច្បាស់ថា Block គឺជា Data Structure មួយ មិនមែនជាអ្វីស្មុគស្មាញពេកទេ។ ប្រសិនបើពួកគេយល់ Python Dictionary និង List ពួកគេអាចយល់ Block បានយ៉ាងងាយ។

លទ្ធផល Hash មុន និងក្រោយកែ Transaction Data ដោយផ្ទាល់ក្នុង Console ដើម្បីឱ្យនិស្សិតឃើញថា Block Hash មានតួនាទីជាភស្តុតាងបច្ចេកទេស។ កុំអោយនិស្សិតច្រឡំថា Block Hash គឺជាការលាក់ទិន្នន័យ។ វាមិនមែន Encryption ទេ។ វាគឺជាវិធីសាស្ត្រសម្រាប់ពិនិត្យ Integrity។


២១. ការណែនាំរូបភាពក្នុងមេរៀនទី ៥

Figureកន្លែងបញ្ចូលគោលបំណង
Figure 1ផ្នែក ៣បង្ហាញ Certificate Transactions ទៅ Block
Figure 2ផ្នែក ៤.៣បង្ហាញ Fields របស់ Certificate Transaction
Figure 3ផ្នែក ៥.២បង្ហាញ Fields របស់ Block
Figure 4ផ្នែក ៧.១បង្ហាញ Previous Hash ភ្ជាប់ Blocks
Figure 5ផ្នែក ១១បង្ហាញ Block មួយដែលមាន Transactions និង Hash
Figure 6ផ្នែក ១៣បង្ហាញថា Transaction Change ប៉ះពាល់ Block Hash
Figure 7ផ្នែក ១៤បង្ហាញ Final Project Block Structure

២២. IEEE-Style References

[1] D. Yaga, P. Mell, N. Roby, and K. Scarfone, “Blockchain Technology Overview,” National Institute of Standards and Technology, NISTIR 8202, 2018. doi: 10.6028/NIST.IR.8202.

[2] Python Software Foundation, “time — Time access and conversions,” Python 3 Documentation, 2026.

[3] Python Software Foundation, “json — JSON encoder and decoder,” Python 3 Documentation, 2026.

[4] National Institute of Standards and Technology, “blockchain — Glossary,” NIST Computer Security Resource Center, 2026.

ចែករំលែក
រក្សាទុក
ការផ្សព្វផ្សាយ
ការផ្សព្វផ្សាយ
មតិយោបល់ 0
ចូលគណនី ដើម្បីបញ្ចេញមតិ