លំហសិក្សាកម្ពុជា
V1.0
មេរៀនទី ៦ នេះផ្ដោតលើការបង្កើត Blockchain សាមញ្ញក្នុង Python Console ដោយយកចំណេះដឹងពីមេរៀនមុនៗមកភ្ជាប់ជាប្រព័ន្ធតែមួយ។ នៅមេរៀនទី ៥ និស្សិតបានរៀនពី Transaction Structure និង Block Structure។ ក្នុងមេរៀននេះ និស្សិតនឹងរៀនបង្កើត Genesis Block, បន្ថែម Block ថ្មី, ភ្ជាប់ Block ដោយប្រើ previous_hash, បង្កើត current hash, រក្សាទុក Blocks ក្នុង Python List និងបង្ហាញ Blockchain នៅក្នុង Console។ Blockchain ត្រូវបានពន្យល់ដោយ NIST ថាជា Ledger ដែលមាន Blocks ភ្ជាប់គ្នាតាម Cryptographic Hashes និងអាចជួយឱ្យការកែប្រែទិន្នន័យត្រូវបានរកឃើញ [1]។ ក្នុងមេរៀននេះ និស្សិតនឹងប្រើ Python modules ដូចជា hashlib, json និង datetime ដើម្បីបង្កើត Hash និង Timestamp សម្រាប់ Block។ Python hashlib ផ្ដល់ interface សម្រាប់ secure hashes ដូចជា SHA-256 [2] ហើយ json.dumps(..., sort_keys=True) ជួយ serialize dictionary ដោយមានលំដាប់ key ថេរ មុនធ្វើ hashing [3]។ មេរៀននេះជាជំហានសំខាន់មុនទៅកាន់មេរៀនទី ៧ ដែលនឹងបន្តទៅ CSV-Based Blockchain Storage។
| ចំណុច | ព័ត៌មាន |
|---|---|
| មុខវិជ្ជា | Blockchain Technology Using Python Console and CSV |
| មេរៀន | មេរៀនទី ៦ |
| ចំណងជើង | Building a Simple Blockchain in Python Console |
| ប្រធានបទសំខាន់ | Genesis Block, Add Block, Previous Hash Linking, View Blockchain |
| កម្រិតនិស្សិត | Beginner to Intermediate |
| ភាសាសរសេរកម្មវិធី | Python |
| ប្រភេទកម្មវិធី | Console Application |
| Python Modules | hashlib, json, datetime |
| លទ្ធផលរំពឹងទុក | និស្សិតអាចបង្កើត Blockchain សាមញ្ញដែលមាន Blocks ជាច្រើន និងភ្ជាប់គ្នាតាម Previous Hash |
| ទិសដៅ Project | Console-Based Blockchain Student Certificate Verification System |
បន្ទាប់ពីបញ្ចប់មេរៀននេះ និស្សិតគួរអាច៖
generate_hash(data) សម្រាប់ Block Hash។
create_genesis_block().
create_block(index, transactions, previous_hash).
previous_hash.
នៅមេរៀនទី ៥ និស្សិតបានរៀនថា Block មួយមាន Fields សំខាន់ៗ៖
index, timestamp, transactions, previous_hash, nonce, hash
ក្នុងមេរៀនទី ៦ នេះ យើងនឹងយក Block Structure នោះមកបង្កើតជា Blockchain ពិតប្រាកដក្នុង Python Console។ Blockchain របស់យើងនឹងត្រូវរក្សាទុកជា List មួយ៖
blockchain = []
List នេះនឹងរក្សាទុក Blocks ជាច្រើនតាមលំដាប់៖
Genesis Block → Block 1 → Block 2 → Block 3 → ...
Flow របស់មេរៀននេះគឺ៖
Create Genesis Block↓Prepare Certificate Transactions↓Create New Block↓Use Previous Block Hash↓Add New Block to Blockchain List↓View Blockchain in Console

រូបភាពនេះគួរបង្ហាញថា Block Structure ដែលបានរៀននៅមេរៀនទី ៥ ត្រូវបានដាក់ចូលទៅក្នុង Python List មួយដែលហៅថា blockchain។ List នេះរក្សាទុក Genesis Block និង Blocks ថ្មីៗតាមលំដាប់។ វាជួយឱ្យនិស្សិតយល់ថា Blockchain ក្នុងកម្រិត Beginner អាចចាប់ផ្ដើមពី List of Blocks មួយបាន។
ក្នុង Python យើងអាចចាប់ផ្ដើម Blockchain ដោយប្រើ List។ List នេះនឹងរក្សាទុក Block Dictionaries ម្តងមួយៗ។ ឧទាហរណ៍៖
blockchain = []
នៅពេលបង្កើត Genesis Block រួច យើងអាចបន្ថែមវាចូលទៅក្នុង List៖
blockchain.append(genesis_block)
បន្ទាប់មក Block ថ្មីៗក៏អាចបន្ថែមតាមរបៀបដូចគ្នា៖
blockchain.append(new_block)
| មូលហេតុ | ការពន្យល់ |
|---|---|
| ងាយស្រួលសម្រាប់ Beginner | List ងាយយល់ និងងាយប្រើ |
| រក្សាទុក Blocks តាមលំដាប់ | Blockchain ត្រូវការលំដាប់ Block |
| អាចយក Block ចុងក្រោយបានងាយ | ប្រើ blockchain[-1] |
| អាច Loop មើល Block ទាំងអស់ | ប្រើ for block in blockchain |
| អាចបន្តទៅ CSV Storage | នៅមេរៀនទី៧ អាច Save List of Blocks ទៅ CSV |
Genesis Block គឺជា Block ដំបូងបំផុតក្នុង Blockchain។ វាមានសារៈសំខាន់ ព្រោះ Blockchain ត្រូវការចំណុចចាប់ផ្ដើម។ Block ថ្មីៗទាំងអស់នឹងភ្ជាប់ទៅ Block មុន តែ Genesis Block គ្មាន Block មុនទេ។
ដូច្នេះ previous_hash របស់ Genesis Block ត្រូវកំណត់ជា៖
"previous_hash": "0"
NIST ពន្យល់ថា Blocks ត្រូវបានភ្ជាប់តាម cryptographic hashes ដែលជួយបង្កើត chain structure និង tamper-evident records [1]។ Genesis Block គឺជាចំណុចចាប់ផ្ដើមនៃ chain structure នោះ។
genesis_block = { "index": 0, "timestamp": "2026-08-25 23:00:00", "transactions": [], "previous_hash": "0", "nonce": 0, "hash": "" }

រូបភាពនេះគួរបង្ហាញ Genesis Block ជា Block ដំបូងក្នុង Blockchain ដែលមាន index = 0 និង previous_hash = 0។ វាជួយឱ្យនិស្សិតយល់ថា Blockchain ត្រូវការចំណុចចាប់ផ្ដើមមួយ មុនពេលបន្ថែម Blocks ថ្មីៗ។
ដើម្បីបង្កើត Block Hash យើងប្រើ Function មួយឈ្មោះ generate_hash(data)។ Function នេះត្រូវបម្លែង Dictionary ទៅជា JSON String ជាមុន ដោយប្រើ json.dumps(data, sort_keys=True) ហើយបន្ទាប់មកប្រើ SHA-256។
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()
json.dumps(data, sort_keys=True) បម្លែង Dictionary ទៅ JSON string និងតម្រៀប keys ឱ្យមានលំដាប់ថេរ។
encode("utf-8") បម្លែង string ទៅ bytes។
hashlib.sha256(...) បង្កើត SHA-256 hash object។
.hexdigest() បង្ហាញ hash ជា hexadecimal string។
Python hashlib documentation បង្ហាញថា sha256() គឺជាមុខងារមួយក្នុង secure hash algorithms [2]។ Python json documentation បញ្ជាក់ថា sort_keys=True នឹងធ្វើឱ្យ dictionary output ត្រូវបាន sort តាម keys [3]។
បង្កើត Genesis Block ក្នុង Python Console។
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() def create_genesis_block(): block = { "index": 0, "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "transactions": [], "previous_hash": "0", "nonce": 0 } block["hash"] = generate_hash(block) return block genesis_block = create_genesis_block() print("=== Genesis Block ===") print(genesis_block)
create_genesis_block() បង្កើត Block ដំបូង។
index = 0 បង្ហាញថា Block នេះជាដំបូង។
transactions = [] មានន័យថា Genesis Block មិនទាន់មាន Certificate Transactions។
previous_hash = "0" ព្រោះមិនមាន Block មុន។
block["hash"] = generate_hash(block) បង្កើត Hash សម្រាប់ Genesis Block។

រូបភាពនេះគួរបង្ហាញ Python Console ដែលបង្កើត Genesis Block ហើយបង្ហាញ Fields ដូចជា Index, Timestamp, Previous Hash និង Hash។ វាជួយឱ្យនិស្សិតឃើញថា Genesis Block អាចបង្កើតបានដោយ Python Dictionary និង Hash Function។
បន្ទាប់ពីមាន Genesis Block យើងអាចបង្កើត Block ថ្មី។ Block ថ្មីត្រូវការទិន្នន័យ ៣ សំខាន់៖
index
transactions
previous_hash
def create_block(index, transactions, previous_hash): block = { "index": index, "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "transactions": transactions, "previous_hash": previous_hash, "nonce": 0 } block["hash"] = generate_hash(block) return block
Function នេះអាចប្រើសម្រាប់បង្កើត Block ថ្មីៗជាច្រើន។ វាប្រើ previous_hash ដើម្បីភ្ជាប់ទៅ Block មុន។ Hash របស់ Block ថ្មីត្រូវបានគណនាដោយប្រើ Fields ទាំងអស់ក្នុង Block។
នៅពេល Blockchain មាន Genesis Block រួច យើងអាចបន្ថែម Block ថ្មី។ ដើម្បីភ្ជាប់ Block ថ្មីទៅ Block មុន យើងត្រូវយក Hash របស់ Block ចុងក្រោយ៖
previous_block = blockchain[-1] previous_hash = previous_block["hash"]
បន្ទាប់មកបង្កើត Block ថ្មី ហើយបន្ថែមទៅ List៖
new_block = create_block(len(blockchain), transactions, previous_hash) blockchain.append(new_block)

រូបភាពនេះគួរបង្ហាញថា Block ថ្មីយក Hash របស់ Block ចុងក្រោយមកដាក់ជា previous_hash។ វាជួយឱ្យនិស្សិតយល់ពីរបៀបដែល Blockchain ភ្ជាប់ Blocks ជាសង្វាក់។
បង្កើត Blockchain ដែលមាន Genesis Block និង Block ថ្មីមួយ។
from datetime import datetime import hashlib import json blockchain = [] def generate_hash(data): data_string = json.dumps(data, sort_keys=True) return hashlib.sha256(data_string.encode("utf-8")).hexdigest() def create_genesis_block(): block = { "index": 0, "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "transactions": [], "previous_hash": "0", "nonce": 0 } block["hash"] = generate_hash(block) return block def create_block(index, transactions, previous_hash): block = { "index": index, "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "transactions": transactions, "previous_hash": previous_hash, "nonce": 0 } block["hash"] = generate_hash(block) return block blockchain.append(create_genesis_block()) 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 = blockchain[-1]["hash"] new_block = create_block(len(blockchain), transactions, previous_hash) blockchain.append(new_block) print("=== Blockchain ===") for block in blockchain: print(block)
blockchain = [] បង្កើត List ទទេ។
blockchain.append(create_genesis_block()) បន្ថែម Genesis Block។
transactions គឺជា List of Certificate Transactions។
previous_hash = blockchain[-1]["hash"] យក Hash របស់ Block ចុងក្រោយ។
create_block(...) បង្កើត Block ថ្មី។
blockchain.append(new_block) បន្ថែម Block ថ្មីទៅ Blockchain។
នៅពេល Blockchain មាន Blocks ច្រើន យើងត្រូវមាន Function សម្រាប់បង្ហាញ Blockchain ឱ្យអានងាយ។
def view_blockchain(): print("\n=== Blockchain Records ===") for block in blockchain: print("\n-----------------------------") print("Block Index:", block["index"]) print("Timestamp:", block["timestamp"]) print("Previous Hash:", block["previous_hash"]) print("Current Hash:", block["hash"]) print("Nonce:", block["nonce"]) print("Transactions:") for tx in block["transactions"]: print(" - Transaction ID:", tx["transaction_id"]) print(" Certificate ID:", tx["certificate_id"]) print(" Student Name:", tx["student_name"]) print(" Status:", tx["status"])

រូបភាពនេះគួរបង្ហាញ Console Output ដែលបង្ហាញ Block Index, Timestamp, Previous Hash, Current Hash និង Transactions។ វាជួយឱ្យនិស្សិតយល់ថា Blockchain អាចត្រូវបានបង្ហាញជា Text-Based Records ក្នុង Console។
បង្កើត Blockchain ដែលមាន Genesis Block និង Blocks ថ្មីចំនួន ៣។
from datetime import datetime import hashlib import json blockchain = [] def generate_hash(data): data_string = json.dumps(data, sort_keys=True) return hashlib.sha256(data_string.encode("utf-8")).hexdigest() def create_genesis_block(): block = { "index": 0, "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "transactions": [], "previous_hash": "0", "nonce": 0 } block["hash"] = generate_hash(block) return block def create_block(index, transactions, previous_hash): block = { "index": index, "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "transactions": transactions, "previous_hash": previous_hash, "nonce": 0 } block["hash"] = generate_hash(block) return block def add_block(transactions): previous_block = blockchain[-1] new_block = create_block(len(blockchain), transactions, previous_block["hash"]) blockchain.append(new_block) def view_blockchain(): print("\n=== Blockchain Records ===") for block in blockchain: print("\n-----------------------------") print("Block Index:", block["index"]) print("Timestamp:", block["timestamp"]) print("Previous Hash:", block["previous_hash"]) print("Current Hash:", block["hash"]) print("Nonce:", block["nonce"]) print("Transactions:", block["transactions"]) blockchain.append(create_genesis_block()) add_block([ { "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" } ]) add_block([ { "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" } ]) add_block([ { "transaction_id": "TX-0003", "certificate_id": "CERT-FDE-003", "student_name": "Kim Sopheak", "program": "Data Science", "certificate_title": "Data Science Basics Completion", "issue_date": "2026-08-27", "status": "Revoked" } ]) view_blockchain()
មុននឹងទៅ Validation ពេញលេញនៅមេរៀនក្រោយៗ យើងអាចពិនិត្យ Chain សាមញ្ញដោយមើលថា៖
current block previous_hash == previous block hash
def check_chain_links(): for i in range(1, len(blockchain)): current_block = blockchain[i] previous_block = blockchain[i - 1] if current_block["previous_hash"] == previous_block["hash"]: print(f"Block {i} link is valid.") else: print(f"Block {i} link is invalid.")
Function នេះពិនិត្យពី Block 1 ដល់ Block ចុងក្រោយ។ វាមិនពិនិត្យ Hash ទាំងមូលនៅឡើយទេ ប៉ុន្តែវាជួយឱ្យនិស្សិតយល់ពី Previous Hash Linking ជាមុន។

រូបភាពនេះគួរបង្ហាញការប្រៀបធៀប current_block["previous_hash"] ជាមួយ previous_block["hash"]។ ប្រសិនបើតម្លៃទាំងពីរដូចគ្នា Link គឺ Valid។ ប្រសិនបើមិនដូចគ្នា Link គឺ Invalid។
from datetime import datetime import hashlib import json blockchain = [] def generate_hash(data): data_string = json.dumps(data, sort_keys=True) return hashlib.sha256(data_string.encode("utf-8")).hexdigest() def create_genesis_block(): block = { "index": 0, "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "transactions": [], "previous_hash": "0", "nonce": 0 } block["hash"] = generate_hash(block) return block def create_block(index, transactions, previous_hash): block = { "index": index, "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "transactions": transactions, "previous_hash": previous_hash, "nonce": 0 } block["hash"] = generate_hash(block) return block def add_block(transactions): previous_block = blockchain[-1] new_block = create_block(len(blockchain), transactions, previous_block["hash"]) blockchain.append(new_block) print("New block added successfully.") def view_blockchain(): print("\n=== Blockchain Records ===") for block in blockchain: print("\n-----------------------------") print("Block Index:", block["index"]) print("Timestamp:", block["timestamp"]) print("Previous Hash:", block["previous_hash"]) print("Current Hash:", block["hash"]) print("Nonce:", block["nonce"]) print("Transactions:", block["transactions"]) def check_chain_links(): print("\n=== Chain Link Check ===") for i in range(1, len(blockchain)): current_block = blockchain[i] previous_block = blockchain[i - 1] if current_block["previous_hash"] == previous_block["hash"]: print(f"Block {i} link is valid.") else: print(f"Block {i} link is invalid.") blockchain.append(create_genesis_block()) add_block([ { "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" } ]) add_block([ { "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" } ]) view_blockchain() check_chain_links()

រូបភាពនេះគួរបង្ហាញ Console Application ដែលបង្កើត Genesis Block, បន្ថែម Blocks ថ្មី, បង្ហាញ Blockchain និងពិនិត្យ Chain Links។ វាជួយបង្ហាញថា Blockchain សាមញ្ញអាចបង្កើតបានដោយប្រើ Python List, Dictionary និង Hash Function។
គ្រូអាចប្រើសំណួរខាងក្រោម៖
previous_hash ក្នុង Block ថ្មីយកតម្លៃពីណា?
blockchain[-1]?
សរសេរចម្លើយខ្លី ៥–៧ បន្ទាត់៖
ហេតុអ្វី Genesis Block និង Previous Hash មានសារៈសំខាន់ក្នុងការបង្កើត Blockchain?
ចម្លើយគួររួមបញ្ចូលគំនិត៖
សរសេរ Function create_genesis_block() ដែលបង្កើត Block ដំបូងដែលមាន៖
index = 0 transactions = [] previous_hash = "0" nonce = 0 hash = generated hash
សរសេរ Function create_block(index, transactions, previous_hash) ដើម្បីបង្កើត Block ថ្មី។
បង្កើត blockchain = [] ហើយបន្ថែម Genesis Block និង Blocks ថ្មីចំនួន ៣។
សរសេរ Function view_blockchain() ដើម្បីបង្ហាញ Blocks ទាំងអស់ក្នុង Console។
សរសេរ Function check_chain_links() ដើម្បីពិនិត្យថា previous_hash របស់ Block បច្ចុប្បន្នត្រូវគ្នាជាមួយ hash របស់ Block មុនឬអត់។
បង្កើត Block មួយដែលមាន Certificate Transactions យ៉ាងតិច ២។
បង្កើតកម្មវិធី Python Console មួយឈ្មោះ៖
simple_blockchain_demo.py
កម្មវិធីត្រូវមាន៖
generate_hash(data)
create_genesis_block()
create_block(index, transactions, previous_hash)
add_block(transactions)
view_blockchain()
check_chain_links()
បន្ទាប់ពីបញ្ចប់មេរៀនទី ៦ និស្សិតគួរមាន៖
មេរៀននេះ គឺជាជំហានដំបូងដែលនិស្សិតបានបង្កើត Blockchain ពិតប្រាកដក្នុង Python Console។ ទោះបីវាមិនទាន់ជា Distributed Blockchain ឬ Public Blockchain ក៏ដោយ វាមានគំនិតស្នូលដូចជា Genesis Block, Block Hash, Previous Hash និង Chain Linking។
Live Demo ដោយបោះពុម្ព Hash របស់ Block 0 ហើយបង្ហាញថា Block 1 យក Hash នោះទៅដាក់ជា previous_hash។ វាជាវិធីងាយបំផុតឱ្យនិស្សិតមើលឃើញ Blockchain Linking ជាក់ស្តែង។
| Figure | កន្លែងបញ្ចូល | គោលបំណង |
|---|---|---|
| Figure 1 | ផ្នែក ៣ | បង្ហាញពី Block Structure ទៅ Blockchain List |
| Figure 2 | ផ្នែក ៥.២ | បង្ហាញ Genesis Block ជា Block ដំបូង |
| Figure 3 | ផ្នែក ៧ | បង្ហាញការបង្កើត Genesis Block ក្នុង Python |
| Figure 4 | ផ្នែក ៩.១ | បង្ហាញការបន្ថែម Block ថ្មីដោយប្រើ Previous Hash |
| Figure 5 | ផ្នែក ១១ | បង្ហាញការមើល Blockchain Records ក្នុង Console |
| Figure 6 | ផ្នែក ១៣ | បង្ហាញការពិនិត្យ Previous Hash Links |
| Figure 7 | ផ្នែក ១៤ | បង្ហាញ Complete Simple Blockchain in Console |
[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, “hashlib — Secure hashes and message digests,” Python 3 Documentation, 2026.
[3] Python Software Foundation, “json — JSON encoder and decoder,” Python 3 Documentation, 2026.
មតិយោបល់ 0