Bỏ qua tới nội dung

Không phải sàn giao dịch, không nhận tiền.

Merkle tree và nonce là gì, cây Merkle kiểm dự trữ sàn thế nào?

Merkle tree gom nhiều dữ liệu thành một mã gốc, nonce có hai nghĩa ở Bitcoin và Ethereum. Xem ví dụ tính tay và cách sàn dùng cây Merkle để khách tự kiểm số dư.

Đăng 10 phút đọc 12 nguồn
Mục lục 8 phần
  1. 01Merkle tree là gì?
  2. 02Merkle root trong khối Bitcoin nằm ở đâu?
  3. 03Merkle proof: kiểm một giao dịch mà không tải cả khối
  4. 04Ethereum dùng cây Merkle thế nào?
  5. 05Nonce là gì? Hai nghĩa khác nhau
  6. 06Vì sao bằng chứng dự trữ của sàn cần cây Merkle?
  7. 07Cây Merkle không chứng minh được gì?
  8. 08Ở Việt Nam, sàn có phải công bố cây Merkle không?
  9. Câu hỏi thường gặp
  10. Nguồn tham khảo

Tóm tắt nhanh

  • Merkle tree (cây Merkle, cây băm) băm từng dữ liệu rồi ghép từng cặp băm tiếp cho tới khi còn một mã gốc (Merkle root). Đổi một giao dịch, mã gốc đổi theo.
  • Mỗi khối Bitcoin chỉ ghi mã gốc vào phần đầu khối 80 byte. Khối 973.969 (31/10/2026) có 4.112 giao dịch, nhưng chứng minh một giao dịch nằm trong khối chỉ cần 13 mã băm, tức 416 byte.
  • Nonce có hai nghĩa: ở Bitcoin là số 32 bit thợ đào thay liên tục để tìm khối hợp lệ; ở Ethereum là bộ đếm số giao dịch đã gửi của một tài khoản, mỗi số chỉ dùng một lần.
  • Trong bằng chứng dự trữ, sàn đưa số dư khách vào cây Merkle dạng tổng và công bố mã gốc. Khách nhận một nhánh khoảng log2(số khách) nút để tự kiểm số dư mình có trong tổng: khoảng 20 nút cho 1 triệu khách.
  • Cây Merkle chỉ cho biết số dư của bạn nằm trong tổng nợ sàn tự kê. Nó không phải kiểm toán, không chứng minh sàn không có khoản nợ khác.
Merkle tree và nonce là gì, cây Merkle kiểm dự trữ sàn thế nào?

Merkle tree (cây Merkle, còn gọi là cây băm) là cách gom hàng nghìn giao dịch hoặc số dư thành một mã gốc duy nhất, để ai cũng kiểm được một mục có nằm trong đó mà không cần xem hết. Nonce là một con số “chỉ dùng một lần”, nhưng mang hai nghĩa khác nhau ở Bitcoin và Ethereum.

Với người dùng sàn, cây Merkle quan trọng vì nó là công cụ để bạn tự kiểm số dư của mình có được tính trong bằng chứng dự trữ (proof of reserves, báo cáo sàn tự công bố để cho thấy tài sản đủ trả khách) hay không.

Merkle tree là gì?

Merkle tree là cây mà mỗi lá là mã băm của một dữ liệu, mỗi nút trên là mã băm của hai nút con, đỉnh là một mã gốc. Cấu trúc này mang tên nhà mật mã học Ralph Merkle, người mô tả nó trong bài báo năm 1980 mà sách trắng Bitcoin trích ở mục 7.

Hàm băm (hash function) là phép tính biến dữ liệu bất kỳ thành một chuỗi độ dài cố định. Cùng đầu vào luôn ra cùng mã, đổi một ký tự thì mã đổi hẳn, và không suy ngược được đầu vào. Bitcoin dùng SHA-256 (hàm băm cho ra 256 bit, tức 32 byte), băm hai lần liên tiếp.

Ví dụ tính thật bằng SHA-256, bốn dữ liệu A, B, C, D (chỉ in 8 ký tự đầu của mỗi mã; minh họa ghép hai chuỗi mã rồi băm một lần):

TầngCách tínhMã băm (8 ký tự đầu)
Lábăm(A), băm(B), băm(C), băm(D)559aead0, df7e70e5, 6b23c0d5, 3f39d5c3
Tầng giữabăm(A ghép B), băm(C ghép D)b30ab174, 26b5aabe
Gốcbăm(AB ghép CD)50a50483

Giờ sửa C thành “C2”. Lá C đổi thành 9685eb76, nút CD đổi thành af8fb2a8, và mã gốc đổi thành b8bb10e1. Nhánh A, B không đổi. Chỉ cần so mã gốc là biết có dữ liệu nào bị sửa.

Điểm mạnh thứ hai: muốn chứng minh C nằm trong cây, chỉ cần đưa băm(D) và nút AB. Người kiểm tự tính lại ra mã gốc, không cần thấy A, B. Dãy nút đi kèm này gọi là nhánh Merkle (Merkle proof, Merkle branch).

Merkle root trong khối Bitcoin nằm ở đâu?

Mã gốc Merkle nằm trong phần đầu khối (block header), một đoạn dữ liệu cố định 80 byte. Mã băm của khối được tính từ 80 byte này, nên sửa bất kỳ giao dịch nào trong khối cũng làm đổi mã khối.

Trường trong đầu khốiSố byteVai trò
version4Phiên bản quy tắc kiểm khối
previous block header hash32Mã băm đầu khối trước, nối các khối thành chuỗi
merkle root hash32Mã gốc của mọi giao dịch trong khối
time4Thời điểm thợ đào bắt đầu băm
nBits, nonce4 + 4Ngưỡng mục tiêu và số thợ đào thay đổi khi đào

Nguồn: Bitcoin Developer Reference. Cộng lại 4 + 32 + 32 + 4 + 4 + 4 = 80 byte.

Kiểm trên một khối thật: khối 170 (ngày 12/1/2009) có 2 giao dịch. VietnamBit ghép hai mã giao dịch (TxID, mã định danh giao dịch) theo thứ tự byte nội bộ, băm SHA-256 hai lần, ra 7dac2c56…4c10ff, đúng mã gốc ghi trong đầu khối theo mempool.space.

Khối chỉ có một giao dịch thì mã gốc chính là TxID của giao dịch đó. Khối nguồn gốc (khối 0) có mã gốc 4a5e1e4b…deda33b, cũng là TxID giao dịch duy nhất của nó.

Khi một tầng có số mã lẻ, Bitcoin nhân đôi mã cuối rồi mới ghép. Chú thích trong mã nguồn Bitcoin Core cảnh báo cách làm “bất thường” này từng gây lỗ hổng CVE-2012-2459 (mã số trong danh mục công khai các lỗ hổng bảo mật): một số danh sách giao dịch cho ra cùng mã gốc. Chú thích này dặn người đang thiết kế hệ thống mới dùng cây Merkle lưu ý điểm yếu đó.

Merkle proof: kiểm một giao dịch mà không tải cả khối

Nhánh Merkle chỉ dài khoảng log2(số giao dịch) mã băm, nên rất nhỏ so với cả khối. Sách trắng Bitcoin (mục 8) gọi cách dùng này là xác minh thanh toán giản lược (SPV): người dùng chỉ giữ đầu khối và xin nhánh Merkle của giao dịch mình.

Ví dụ khối 973.969 (đào lúc 18

13 ngày 31/10/2026 theo mempool.space):

  • Số giao dịch: 4.112. Vì 2^12 = 4.096 < 4.112 ≤ 2^13 = 8.192, nhánh cần 13 mã băm.
  • Kích thước nhánh: 13 × 32 byte = 416 byte.
  • Kích thước cả khối: 1.587.957 byte. Nhánh chỉ bằng khoảng 416 / 1.587.957 ≈ 0,026% khối.

Đầu khối cũng nhẹ. Sách trắng tính 80 byte × 6 khối/giờ × 24 × 365 = 4,2 MB mỗi năm. Ví điện thoại kiểu SPV nhờ vậy theo được chuỗi mà không cần tải toàn bộ blockchain.

Sách trắng cũng nói rõ giới hạn: người dùng SPV “can’t check the transaction for himself”, chỉ thấy mạng đã chấp nhận nó vào một khối.

Ethereum dùng cây Merkle thế nào?

Ethereum dùng biến thể Merkle Patricia Trie và đầu khối mang ba mã gốc: trạng thái, giao dịch, biên nhận. Theo ethereum.org, mọi cây Merkle ở lớp thực thi của Ethereum đều theo dạng này, băm bằng Keccak-256 (hàm băm 256 bit Ethereum dùng).

Mã gốcCây chứa gì
stateRootTrạng thái mọi tài khoản sau khối: nonce, số dư, mã gốc lưu trữ, mã băm hợp đồng
transactionsRootCác giao dịch trong khối, khóa là số thứ tự giao dịch
receiptsRootBiên nhận kết quả từng giao dịch (thành công hay lỗi, nhật ký sự kiện)

Khác Bitcoin, Ethereum có cả mã gốc trạng thái. Nhờ đó một ví nhẹ có thể kiểm số dư hoặc nonce của một địa chỉ với mã gốc trong đầu khối, thay vì chỉ kiểm giao dịch.

Nonce là gì? Hai nghĩa khác nhau

Nonce là con số chỉ dùng một lần; ở Bitcoin nó phục vụ việc đào khối, ở Ethereum nó đếm giao dịch của tài khoản. Hai nghĩa không liên quan nhau, chỉ trùng tên.

Nonce trong đào khối (Bitcoin)Nonce tài khoản (Ethereum)
Nằm ở đâuĐầu khối, 4 byteTrong trạng thái từng tài khoản và trong mỗi giao dịch
Ai đặtThợ đàoVí của người gửi
Giá trịSố bất kỳ từ 0 tới 4.294.967.2950, 1, 2… tăng dần theo từng giao dịch
Để làm gìThay đổi mã băm khối cho tới khi đủ nhỏXếp thứ tự giao dịch, chặn phát lại giao dịch đã ký

Nonce trong đào khối Bitcoin

Thợ đào thay nonce liên tục, băm lại đầu khối, cho tới khi mã băm nhỏ hơn hoặc bằng ngưỡng mục tiêu. Sách trắng (mục 4) viết bằng chứng công việc (proof of work) được làm “by incrementing a nonce in the block”. Cách đo tốc độ thử này ở bài hashrate là gì.

Trường nonce 32 bit chỉ có 2^32 = 4.294.967.296 giá trị. Khối nguồn gốc có nonce 2.083.236.893, khối 973.969 có nonce 2.739.408.991 (mempool.space).

Dải này hết rất nhanh. Một máy đào giả định chạy 10 TH/s (10^13 lần băm mỗi giây) quét hết trong 4.294.967.296 / 10^13 ≈ 0,00043 giây. Cả mạng khoảng 1.068 EH/s (ước tính của mempool.space ngày 31/10/2026) quét hết dải khoảng 1,068 × 10^21 / 4,29 × 10^9 ≈ 249 tỷ lần mỗi giây.

Hết nonce thì sao? Bitcoin Developer Reference viết thợ đào đổi thời gian, hoặc đổi giao dịch thưởng (giao dịch đầu tiên của khối, trả thưởng cho thợ đào) “and the merkle root updated”. Đây là chỗ hai khái niệm gặp nhau: đổi một giao dịch làm đổi mã gốc Merkle, cho ra 2^32 lượt thử mới.

Nonce tài khoản Ethereum

Nonce tài khoản là bộ đếm số giao dịch một địa chỉ đã gửi; mỗi giá trị chỉ được thực hiện một lần. Ethereum.org viết điều này “protecting against replay attacks”, tức chặn kẻ khác phát lại một giao dịch đã ký để chuyển tiền lần nữa.

Ví dụ

Một địa chỉ đã gửi 5 giao dịch (nonce 0 tới 4) thì giao dịch kế tiếp mang nonce 5. Với tài khoản hợp đồng, nonce đếm số hợp đồng nó đã tạo. Địa chỉ hợp đồng mới tạo bằng lệnh CREATE (lệnh tạo hợp đồng mới của máy ảo Ethereum) được tính từ địa chỉ người tạo và nonce này.

Vì nonce tăng tuần tự, một giao dịch nonce nhỏ đang kẹt sẽ chặn các giao dịch sau của cùng ví. Cách tăng tốc hoặc hủy bằng giao dịch cùng nonce, phí cao hơn có ở bài giao dịch pending.

Còn trường nonce của khối Ethereum thì đã hết dùng. Từ khi Ethereum chuyển từ bằng chứng công việc sang bằng chứng cổ phần (The Merge, 15/9/2022 theo ethereum.org), EIP-3675 (đề xuất cải tiến Ethereum số 3675, bản đặc tả nâng cấp này) quy định khối hợp lệ phải có nonce bằng 0.

Vì sao bằng chứng dự trữ của sàn cần cây Merkle?

Cây Merkle cho mỗi khách tự kiểm số dư mình nằm trong tổng nợ sàn công bố, mà không phải công khai số dư của mọi người. Bằng chứng dự trữ có hai nửa: chứng minh tài sản (ví sàn giữ bao nhiêu) và chứng minh nợ (sàn nợ khách bao nhiêu). Cây Merkle phục vụ nửa thứ hai.

Vitalik Buterin tóm tắt các bước tiến trong bài viết ngày 19/11/2022:

  1. Đăng cả danh sách tên và số dư. Ai cũng kiểm được, nhưng lộ hết thông tin khách.
  2. Thay tên bằng mã băm của tên ghép một chuỗi ngẫu nhiên (salt). Vẫn lộ số dư và cách số dư thay đổi.
  3. Đưa số dư vào cây Merkle dạng tổng (Merkle sum tree). Mỗi nút mang mã băm và tổng số dư của hai nút con. Sàn chỉ công bố mã gốc và tổng, mỗi khách nhận riêng nhánh của mình.

Nhánh của một khách gồm các nút anh em trên đường từ lá lên gốc, nên số nút khoảng log2(số khách). Sàn có 1 triệu khách cần khoảng 20 nút, vì 2^20 = 1.048.576.

Vì sao phải là cây dạng tổng chứ không chỉ cây băm? Theo Vitalik, nếu sàn chèn một tài khoản giả số dư âm để kéo tổng nợ xuống, khách nào nhận nhánh đi qua nút đó sẽ thấy số âm và biết bằng chứng sai. Cây băm thường không lộ được gian lận này.

Ví dụ bốn khách tính tay từng tầng và các bước tự kiểm trên sàn có ở bài bằng chứng dự trữ là gì. Phần riêng tư còn có thể tốt hơn nhờ zero-knowledge proof (bằng chứng chứng minh một điều đúng mà không lộ dữ liệu), hướng Vitalik đề xuất cùng bài.

Cây Merkle không chứng minh được gì?

Nhánh Merkle chỉ chứng minh số dư của bạn có trong tổng nợ sàn tự kê, tại một thời điểm chụp. Nó không phải kiểm toán và không chứng minh sàn không có khoản nợ nào khác.

Cây Merkle cho biếtCây Merkle không cho biết
Số dư của bạn được tính vào tổngSàn có khoản vay, nghĩa vụ khác ngoài số dư khách hay không
Tổng các lá khớp với tổng sàn công bốSàn có bỏ sót khách không tự kiểm hay không
Không có nút âm trên nhánh của bạnVí sàn có thật sự đủ tài sản (phải kiểm riêng phần chứng minh tài sản)
Dữ liệu tại thời điểm chụpTình hình trước và sau thời điểm đó

Vitalik chỉ ra điểm yếu cốt lõi: nếu sàn đoán được nhóm khách sẽ không kiểm, sàn có thể loại họ khỏi cây và tổng nợ nhỏ đi. Vì vậy một cây Merkle chỉ mạnh khi nhiều khách cùng kiểm.

Không ai cần cụm từ khôi phục, mật khẩu hay mã OTP của bạn để kiểm nhánh Merkle. Trang hoặc “nhân viên” nào đòi các thông tin này là dấu hiệu lừa đảo.

Ở Việt Nam, sàn có phải công bố cây Merkle không?

Nghị quyết 05/2025/NQ-CP không yêu cầu sàn công bố cây Merkle hay bằng chứng dự trữ. Nghị quyết buộc sàn được cấp phép “quản lý tách biệt tiền, tài sản mã hóa của khách hàng” (Điều 15 khoản 2 điểm a) và công bố báo cáo tài chính năm đã được kiểm toán (Điều 15 khoản 3 điểm a). Sàn có thể tự nguyện công bố thêm.

Tính đến 31/10/2026, chưa sàn nào được cấp phép. Khi so sánh sàn được cấp phép, VietnamBit sẽ xem sàn có công bố mã gốc Merkle và công cụ kiểm mã nguồn mở để khách tự kiểm hay không, bên cạnh báo cáo kiểm toán.

Chia sẻ bài viết

Liên quan

Bắt đầu từ cơ bản: Tài sản mã hóa cho người mới: 10 điều cần biết trước khi mua

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

Merkle root có làm lộ nội dung giao dịch không?

Không. Mã gốc chỉ là chuỗi băm 32 byte, không suy ngược ra được giao dịch. Ở Bitcoin, nội dung giao dịch vốn đã công khai trên chuỗi; mã gốc chỉ dùng để kiểm một giao dịch có nằm trong khối hay không.

Ngoài blockchain, cây Merkle còn dùng ở đâu?

Nhật ký minh bạch chứng chỉ (Certificate Transparency), hệ thống công khai chứng chỉ bảo mật của các trang web, dùng cây băm Merkle nhị phân để ai cũng kiểm được nhật ký có bị sửa hay không (RFC 6962, tháng 6/2013).

Nonce tài khoản Ethereum có phải mật khẩu hay mã bí mật không?

Không. Nonce là số đếm công khai, ai cũng tra được trên trình khám phá khối. Biết nonce không giúp ai lấy được tài sản. Thứ phải giữ bí mật là khóa riêng tư và cụm từ khôi phục.

Vì sao khối Ethereum hiện nay có nonce bằng 0?

Từ khi Ethereum chuyển sang bằng chứng cổ phần (The Merge, 15/9/2022), không còn đào khối. EIP-3675 quy định trường nonce của khối phải bằng 0x0000000000000000, khối nào khác giá trị này là không hợp lệ. Nonce tài khoản vẫn dùng như cũ.

Đầu khối Bitcoin có chứa số dư của các ví không?

Không. Bitcoin không lưu số dư theo tài khoản mà theo các đầu ra chưa tiêu (UTXO). Đầu khối chỉ có mã gốc của danh sách giao dịch trong khối, không có mã gốc trạng thái số dư như Ethereum.

Bước tiếp theo

Nguồn tham khảo 12

Kiểm chứng ngày 31/10/2026

  1. 01Satoshi Nakamoto (2008): Bitcoin, a peer-to-peer electronic cash system (mục 4, 7, 8)bitcoin.org
  2. 02Bitcoin Developer Reference: Block chain (block headers, merkle trees), truy cập 31/10/2026developer.bitcoin.org
  3. 03Bitcoin Core: src/consensus/merkle.cpp (chú thích về CVE-2012-2459), truy cập 31/10/2026github.com
  4. 04mempool.space API: khối 0, 170 và 973.969, truy vấn 31/10/2026mempool.space
  5. 05ethereum.org: Accounts (nonce), truy cập 31/10/2026ethereum.org
  6. 06ethereum.org: Transactions, truy cập 31/10/2026ethereum.org

Mục lục

  1. 01Merkle tree là gì?
  2. 02Merkle root trong khối Bitcoin nằm ở đâu?
  3. 03Merkle proof: kiểm một giao dịch mà không tải cả khối
  4. 04Ethereum dùng cây Merkle thế nào?
  5. 05Nonce là gì? Hai nghĩa khác nhau
  6. 06Vì sao bằng chứng dự trữ của sàn cần cây Merkle?
  7. 07Cây Merkle không chứng minh được gì?
  8. 08Ở Việt Nam, sàn có phải công bố cây Merkle không?
  9. Câu hỏi thường gặp
  10. Nguồn tham khảo