Xây dựng chuỗi khối của riêng bạn

📖 12 đọc tối thiểu · 🐍 Python

✍️ Viết và xem xét bởi Karel HavlíčekĐã cập nhật 2026🛡️ Biên tập độc lập

Quick Answer

Cách tốt nhất để hiểu blockchain là xây dựng nó. Trong khoảng 50 dòng Python, bạn có thể tạo một chuỗi khối đồ chơi hoạt động với hàm băm, chuỗi khối, khai thác bằng chứng công việc và phát hiện giả mạo — những ý tưởng cốt lõi tương tự để bảo mật Bitcoin. Không cần có kiến ​​thức về blockchain trước đó.

⚠️ Đây là mô hình học tập, không phải mã sản xuất. Nó dạy về cấu trúc dữ liệu đằng sau Bitcoin - nó không phải là tiền an toàn và không bao giờ có giá trị thực.

Bước 1 - Một khối và dấu vân tay của nó

Một khối chứa một số dữ liệu (giao dịch), một liên kết đến khối trước đó và một "nonce" (một số chúng ta có thể thay đổi). Danh tính của nó là hàm băm SHA-256 của tất cả nội dung của nó - thay đổi một ký tự và hàm băm sẽ thay đổi hoàn toàn. Hàm băm đó là dấu vân tay rõ ràng giả mạo của khối.

import hashlib, json, time

class Block:
    def __init__(self, index, transactions, previous_hash, nonce=0):
        self.index = index
        self.timestamp = time.time()
        self.transactions = transactions
        self.previous_hash = previous_hash
        self.nonce = nonce

    def hash(self):
        # A block's fingerprint = SHA-256 of all its contents.
        payload = json.dumps({
            "index": self.index,
            "timestamp": self.timestamp,
            "transactions": self.transactions,
            "previous_hash": self.previous_hash,
            "nonce": self.nonce,
        }, sort_keys=True).encode()
        return hashlib.sha256(payload).hexdigest()

Bước 2 - Khai thác (Bằng chứng công việc)

Khai thác có nghĩa là tìm hàm băm đáp ứng quy tắc - ở đây, bắt đầu bằng một số số 0 đã đặt. Không có công thức; bạn ép buộc nonce cho đến khi hàm băm phù hợp. Việc kiểm tra giải pháp là ngay lập tức, nhưng việc tìm ra giải pháp sẽ mất nhiều công sức. Sự bất đối xứng đó chính là trọng tâm của Proof of Work.

DIFFICULTY = 4  # require this many leading zeros

def mine(block):
    # Proof of Work: keep changing the nonce until the hash
    # starts with DIFFICULTY zeros. There is no shortcut —
    # you just have to guess, which is what costs energy.
    target = "0" * DIFFICULTY
    while not block.hash().startswith(target):
        block.nonce += 1
    return block.hash()

Bước 3 - Xâu chuỗi các khối

Mỗi khối mới lưu trữ hàm băm của khối trước đó, hàn chúng thành một chuỗi bắt đầu bằng khối "genesis" được mã hóa cứng. Bởi vì mỗi khối đều cam kết với khối trước nó nên thứ tự được cố định và lịch sử được liên kết với nhau.

class Blockchain:
    def __init__(self):
        # The genesis block — the very first, hard-coded block.
        genesis = Block(0, [{"note": "genesis"}], "0")
        mine(genesis)
        self.chain = [genesis]

    def add_block(self, transactions):
        prev = self.chain[-1]
        block = Block(len(self.chain), transactions, prev.hash())
        mine(block)            # do the work
        self.chain.append(block)
        return block

Bước 4 - Xác thực chuỗi

Để tin cậy một chuỗi, bạn kiểm tra lại chuỗi đó: mọi khối phải trỏ đến hàm băm thực sự của khối trước đó và mọi khối phải đáp ứng quy tắc bằng chứng công việc. Nếu một trong hai bước kiểm tra không thành công thì chuỗi đó không hợp lệ.

def is_valid(chain):
    for i in range(1, len(chain)):
        current, previous = chain[i], chain[i - 1]
        # 1) Each block must point to the real hash of the one before it.
        if current.previous_hash != previous.hash():
            return False
        # 2) Each block must satisfy the proof-of-work rule.
        if not current.hash().startswith("0" * DIFFICULTY):
            return False
    return True

Bước 5 - Chạy nó và cố gắng gian lận

Bây giờ hãy thêm một vài khối và sau đó giả mạo giao dịch cũ. Thời điểm bạn thay đổi dữ liệu trong quá khứ, hàm băm của khối đó không còn khớp với những gì khối tiếp theo mong đợi — và việc xác thực ngay lập tức trả về Sai. Đây là lý do thu nhỏ tại sao bạn không thể lặng lẽ viết lại lịch sử của Bitcoin.

bc = Blockchain()
bc.add_block([{"from": "Alice", "to": "Bob", "amount": 5}])
bc.add_block([{"from": "Bob", "to": "Carol", "amount": 2}])

print("Chain valid?", is_valid(bc.chain))   # True

# Now try to cheat: tamper with an old transaction.
bc.chain[1].transactions[0]["amount"] = 5000
print("Chain valid?", is_valid(bc.chain))   # False — tampering is caught!

🔑 Bài học chính

Chuỗi khối chỉ là cấu trúc dữ liệu cộng với các quy tắc: băm từng khối, liên kết nó với khối cuối cùng và khiến việc thêm khối trở nên tốn kém thông qua bằng chứng công việc. Việc giả mạo phá vỡ chuỗi băm - đó chính xác là cách Bitcoin vẫn có thể bị giả mạo mà không cần có cơ quan trung ương.

Bitcoin thực sự bổ sung thêm những gì

Chuỗi đồ chơi của chúng tôi dạy về bộ xương. Bitcoin thực bổ sung một mạng lưới các nút ngang hàng toàn cầu, chữ ký số chứng minh ai có thể tiêu tiền, điều chỉnh độ khó tự động, mô hình UTXO, phần thưởng khối và giảm một nửa cũng như các quy tắc đồng thuận cho phép người lạ đồng ý mà không cần tin tưởng. Hãy khám phá từng phần trong phần giải thích của chúng tôi bên dưới.

Câu hỏi thường gặp

Đây có phải là một blockchain thực sự giống như Bitcoin không?

Đây là một mô hình giảng dạy đơn giản hóa chia sẻ các ý tưởng cốt lõi của Bitcoin – băm, xâu chuỗi và bằng chứng công việc – nhưng loại bỏ mạng lưới, chữ ký số và các khuyến khích kinh tế giúp Bitcoin an toàn ở quy mô toàn cầu. Nó là để học chứ không phải để kiếm tiền.

Tôi có cần phải là một lập trình viên không?

Việc làm quen cơ bản với Python sẽ hữu ích nhưng phần giải thích được viết ra để bất kỳ ai cũng có thể hiểu theo logic. Bạn có thể đọc nó để hiểu các khái niệm ngay cả khi không chạy mã.

Tại sao khai thác chỉ thêm số không?

Yêu cầu hàm băm bắt đầu bằng một số số 0 là điều kiện dễ kiểm tra nhưng khó tìm. Cách duy nhất để tìm ra giá trị băm hợp lệ là tiếp tục đoán (thay đổi số nonce), đó chính xác là lý do tại sao việc khai thác thực tế lại tốn năng lượng.

Điều gì còn thiếu so với Bitcoin thật?

Một mạng lưới các nút thực sự, chữ ký số chứng minh quyền sở hữu, giao thức ngang hàng, điều chỉnh độ khó, mô hình UTXO và phần thưởng khối. Hướng dẫn này dạy về cấu trúc dữ liệu; xem phần giải thích của chúng tôi để biết toàn bộ hệ thống.

Tiếp tục học hỏi