OKB.VN
🔷 Fundamentals

Blockchain hoạt động thế nào?

Từ transaction đến finality — cơ chế từng bước chi tiết
⏱ 13 phút đọc 📐 Fundamentals 🔗 okb.vn

📌 Tóm tắt nhanh

Blockchain hoạt động theo 6 bước tuần tự: (1) người dùng tạo transaction và ký bằng private key, (2) broadcast lên mạng P2P, (3) transaction vào mempool chờ xử lý, (4) validator/miner chọn transaction đóng block, (5) block được đồng thuận qua consensus protocol, (6) block được xác nhận và đạt finality. Toàn bộ quá trình này xảy ra mà không cần bên thứ ba tin cậy.

1Tổng quan: Blockchain là gì về mặt kỹ thuật?

Trước khi đi vào chi tiết từng bước, cần hiểu blockchain ở tầng cơ bản nhất. Blockchain là một cấu trúc dữ liệu đặc biệt — một danh sách liên kết các block, trong đó mỗi block chứa dữ liệu và một tham chiếu (hash) đến block trước đó.

Đặc tính cốt lõi: mỗi block chứa hash(block_trước) trong header của nó. Điều này tạo ra tính không thể thay đổi ngược (tamper-evidence): nếu ai đó sửa block cũ, hash của nó thay đổi → hash trong block tiếp theo không còn khớp → toàn bộ chain từ đó trở đi bị vô hiệu.

Nhưng tính bất biến của dữ liệu chỉ là một phần. Câu hỏi quan trọng hơn: Ai được quyền thêm block mới? Làm sao hàng nghìn node phân tán đồng ý với nhau về trạng thái của chain? Đây là vai trò của consensus mechanism.

Phân biệt cơ bản: "Blockchain" là cấu trúc dữ liệu. "Mạng blockchain" (blockchain network) là hệ thống phân tán bao gồm hàng nghìn node chạy cùng một phần mềm, đồng ý với nhau về trạng thái của blockchain đó.

2Bước 1: Tạo và ký Transaction

Mọi thứ trên blockchain bắt đầu từ một transaction. Transaction là một thông điệp được ký bằng mật mã học, mô tả hành động người dùng muốn thực hiện trên mạng.

Anatomy của một Transaction

Một transaction điển hình trên Ethereum chứa các trường:

  • from: địa chỉ người gửi (suy ra từ chữ ký)
  • to: địa chỉ người nhận hoặc smart contract
  • value: số ETH chuyển (0 nếu chỉ gọi contract)
  • data: calldata để gọi hàm smart contract
  • nonce: số thứ tự transaction của địa chỉ này (chống replay attack)
  • gasLimit: gas tối đa sẵn sàng tiêu
  • maxFeePerGas: phí tối đa sẵn sàng trả mỗi gas
  • maxPriorityFeePerGas: tip cho validator
  • signature (v, r, s): chữ ký ECDSA bằng private key

Chữ ký số hoạt động thế nào?

Người dùng dùng private key để ký hash của transaction data bằng thuật toán ECDSA (secp256k1). Chữ ký này chứng minh hai điều: người tạo transaction sở hữu private key tương ứng với địa chỉ gửi, và dữ liệu transaction không bị sửa đổi sau khi ký. Bất kỳ node nào cũng có thể verify chữ ký bằng public key — mà không cần biết private key.

Sau khi transaction được tạo và ký, ví (MetaMask, v.v.) sẽ encode nó theo chuẩn RLP (Recursive Length Prefix) và gửi lên mạng.

3Bước 2: Broadcast lên mạng P2P

Transaction sau khi ký được gửi đến một hoặc vài node trong mạng. Từ đó, nó được broadcast (phát sóng) theo cơ chế gossip protocol trên mạng P2P (peer-to-peer).

Gossip Protocol là gì?

Gossip protocol hoạt động giống tin đồn lan truyền: khi node A nhận transaction từ bạn, nó forward cho các peer của mình (B, C, D). Rồi B forward cho peers của B, C forward cho peers của C, v.v. Trong vài giây, transaction đã lan đến phần lớn mạng mà không cần bất kỳ server trung tâm nào.

Trước khi forward, mỗi node thực hiện basic validation:

  • Chữ ký hợp lệ không?
  • Nonce có đúng thứ tự không? (chống replay attack)
  • Sender có đủ balance để trả gas không?
  • Transaction format có đúng chuẩn không?

Transaction không vượt qua basic validation sẽ bị drop, không được forward tiếp. Đây là lớp bảo vệ đầu tiên chống spam và transaction rác.

4Bước 3: Mempool — Phòng chờ của Transaction

Mempool (memory pool) là vùng nhớ tạm trên mỗi node blockchain lưu trữ các transaction đã broadcast nhưng chưa được include vào block. Đây là "phòng chờ" trước khi transaction được xử lý chính thức.

Mỗi node có mempool riêng

Không có một mempool toàn cầu duy nhất — mỗi node duy trì mempool riêng của mình. Các mempool khác nhau có thể chứa các transaction khác nhau ở bất kỳ thời điểm nào, tùy thuộc vào topology mạng và thời điểm nhận transaction.

Cạnh tranh bằng Gas Fee

Khi mempool đầy, transaction với phí thấp hơn bị drop để nhường chỗ cho transaction phí cao hơn. Đây là lý do khi mạng tắc nghẽn, phí gas tăng vọt — người dùng "đấu giá" để transaction của mình được include sớm hơn.

Với Ethereum EIP-1559, phí gồm hai phần: base fee (đốt, bắt buộc theo trạng thái mạng) và priority fee/tip (trả cho validator để được ưu tiên). Base fee tự động điều chỉnh dựa trên mức độ tắc nghẽn.

MEV và Mempool

Mempool thường là public — ai cũng có thể xem transaction đang chờ. Điều này tạo ra cơ hội cho MEV (Maximal Extractable Value): bot có thể đọc mempool và chèn transaction của mình vào trước hoặc sau transaction mục tiêu để kiếm lợi nhuận (front-running, sandwich attack...).

5Bước 4: Đóng Block

Định kỳ, một node được chọn (theo cơ chế của consensus mechanism) để tạo block mới từ các transaction trong mempool. Trong PoW gọi là miner, trong PoS gọi là block proposer.

Chọn transaction nào để include?

Block proposer thường chọn transaction theo chiến lược tối đa hóa phí thu được: ưu tiên transaction có fee cao nhất. Tuy nhiên có giới hạn block gas limit — tổng gas của tất cả transaction trong một block không được vượt ngưỡng này. Block gas limit giúp kiểm soát block size và thời gian xử lý.

Thực thi Transaction trong Block

Khi đóng block, proposer thực thi từng transaction theo thứ tự:

  1. Deduct gas fee từ sender
  2. Thực thi bytecode (transfer ETH, hoặc call smart contract trên EVM)
  3. Cập nhật state (balance, storage, code...)
  4. Tạo receipt (kết quả: success/fail, gas used, logs/events)

Kết quả của tất cả transaction được tổng hợp thành state root mới — một hash đại diện cho toàn bộ trạng thái blockchain sau block này.

6Bước 5: Consensus — Đồng thuận toàn mạng

Sau khi block được tạo, nó cần được các node khác trong mạng xác nhận và đồng ý. Đây là vai trò của consensus mechanism.

Trong Proof of Work (Bitcoin)

Miner phải tìm một nonce sao cho hash(block_header) thỏa mãn điều kiện độ khó (difficulty) — hash phải bắt đầu bằng đủ số lượng bit 0. Đây là bài toán "lottery" ngẫu nhiên: miner chỉ có thể thử hàng tỷ nonce/giây cho đến khi may mắn tìm được đáp án. Block hợp lệ được broadcast, các node khác verify (verify nhanh hơn nhiều so với tìm) và bắt đầu mine tiếp trên block mới.

Trong Proof of Stake (Ethereum)

Một validator được chọn ngẫu nhiên theo tỷ lệ stake để propose block. Sau đó, các validator khác trong committee attest (chứng thực) cho block. Khi đủ ⅔ stake của committee attest cho cùng một block, block được justified. Sau hai epoch (khoảng 12.8 phút), block được finalized.

Fork Choice Rule: Khi có nhiều chain fork cạnh tranh, mỗi consensus mechanism có quy tắc để chọn chain "đúng": Bitcoin dùng "longest chain" (tổng độ khó cao nhất), Ethereum PoS dùng LMD-GHOST (chọn fork được nhiều attestation nhất).

7Bước 6: Block Confirmation và Finality

Sau khi block được thêm vào chain, transaction trong đó chưa hoàn toàn "an toàn" ngay lập tức — đặc biệt trong PoW. Block confirmation là số block được mine/validate sau block chứa transaction của bạn.

Tại sao cần nhiều Confirmation?

Trong PoW, không có finality tuyệt đối — một chain dài hơn luôn có thể thay thế chain hiện tại (dù xác suất giảm mạnh theo số confirmation). Với 1 confirmation, xác suất reorg cao hơn nhiều so với 6 confirmations. Đây là lý do Bitcoin exchange thường đợi 6 confirmations (~60 phút) trước khi ghi nhận deposit.

BlockchainMechanismThời gian blockFinality
BitcoinPoW~10 phútProbabilistic — thực tế 6 blocks (~60 phút)
EthereumPoS12 giâyAbsolute — sau ~2 epochs (~12.8 phút)
SolanaPoH + PoS~0.4 giâyOptimistic — ~1.3 giây; Absolute — lâu hơn
PolygonPoS + Checkpoints~2 giâyCheckpoint trên Ethereum (~30 phút)

Probabilistic vs Absolute Finality

Probabilistic finality (PoW): không bao giờ đạt 100% chắc chắn, chỉ đạt xác suất đủ cao sau nhiều confirmation. Absolute finality (PoS Ethereum): sau khi finalized, block không thể bị reorg mà không cần đốt ít nhất ⅓ tổng ETH stake — một đảm bảo kinh tế cực kỳ mạnh.

8Cấu trúc bên trong một Block

Mỗi block trên Ethereum gồm hai phần chính: Block HeaderBlock Body.

Block Header

  • parentHash: hash của block trước — tạo nên "chain"
  • stateRoot: Merkle root của toàn bộ state sau block này
  • transactionsRoot: Merkle root của tất cả transaction trong block
  • receiptsRoot: Merkle root của tất cả receipt (kết quả thực thi)
  • number: chiều cao block (block height)
  • timestamp: thời điểm block được tạo
  • gasLimit: giới hạn gas của block này
  • gasUsed: gas thực tế đã dùng
  • baseFeePerGas: base fee của EIP-1559
  • extraData: dữ liệu tùy chọn của miner/proposer

Block Body

Phần body chứa danh sách tất cả transaction được include. Mỗi transaction được lưu trữ với đầy đủ thông tin để bất kỳ node nào cũng có thể tái thực thi và verify kết quả.

9Merkle Tree — Tổ chức Transaction trong Block

Blockchain sử dụng Merkle Tree (cây Merkle) để tổ chức và verify transaction một cách hiệu quả. Đây là cấu trúc dữ liệu đặc biệt cho phép verify bất kỳ transaction nào mà không cần tải toàn bộ block.

Cách Merkle Tree hoạt động

Tất cả transaction hash được hash theo cặp, kết quả lại được hash theo cặp, tiếp tục như vậy cho đến khi chỉ còn một hash duy nhất: Merkle Root. Merkle Root này được lưu trong block header.

Để prove một transaction thuộc block: chỉ cần cung cấp một "Merkle Proof" — đường dẫn các hash từ transaction đó lên đến root. Với block có 10,000 transaction, Merkle Proof chỉ cần ~14 hash (log₂ của 10,000). Rất hiệu quả!

Ứng dụng: Light Client

Merkle Proof cho phép light client (node không tải full blockchain) verify transaction mà chỉ cần download block header. Đây là nền tảng của light node và mobile wallet.

Ethereum còn sử dụng Merkle Patricia Trie (MPT) — phiên bản nâng cấp của Merkle Tree — để lưu toàn bộ state (tất cả account balance, smart contract storage) một cách có thể verify được.

10Câu hỏi thường gặp (FAQ)

6 bước: (1) Người dùng tạo và ký transaction bằng private key. (2) Transaction được broadcast lên mạng P2P qua gossip protocol. (3) Transaction vào mempool chờ xử lý. (4) Validator/miner chọn transaction đóng block và thực thi. (5) Block được đồng thuận qua consensus mechanism. (6) Block được xác nhận và đạt finality.

Mempool là vùng nhớ tạm trên mỗi node lưu transaction đã broadcast nhưng chưa vào block. Khi mạng tắc nghẽn, mempool đầy — transaction cạnh tranh nhau bằng phí gas để được include sớm hơn. Người dùng sẵn sàng trả cao hơn → phí gas tăng vọt.

Block confirmation là số block được mine/validate sau block chứa transaction của bạn. Bitcoin thường cần 6 confirmations (~60 phút) vì finality là probabilistic — nhiều confirmation hơn thì xác suất reorg thấp hơn. Ethereum PoS đạt absolute finality sau ~12.8 phút, không thể reorg sau đó.

Merkle Tree cho phép verify bất kỳ transaction nào bằng một "proof" nhỏ, không cần tải cả block. Điều này là nền tảng của light client và mobile wallet — họ chỉ cần block header và Merkle Proof để xác nhận transaction đã được include trong block.

PoW: miner cạnh tranh bằng hash power, người đầu tiên tìm ra nonce thỏa mãn độ khó thì được đóng block. PoS: một validator được chọn ngẫu nhiên theo tỷ lệ stake để propose block, các validator khác attest để xác nhận. PoW tốn nhiều năng lượng hơn, PoS đạt absolute finality nhanh hơn.

📚Tham khảo

  1. Ethereum.org — How Ethereum Transactions Work (2023)
  2. Bitcoin.org — How Bitcoin Works (Nakamoto, 2008)
  3. Ethereum Yellow Paper — Formal specification of Ethereum protocol
  4. Ethereum.org — Blocks documentation
  5. Buterin, V. — "Understanding the Ethereum Trie" (2015)
📚 Khám phá thêm theo chủ đề
113 bài phân tích kỹ thuật — Blockchain Infrastructure từ nền tảng đến nâng cao
📋 Xem tất cả bài viết →