Trả lời nhanh: Nonce (number used once) là một số chỉ dùng một lần cho một mục đích nhất định. Trong Bitcoin, nonce là trường 32 bit trong tiêu đề khối mà thợ đào thay đổi liên tục để hash của khối nhỏ hơn mức mục tiêu. Trên Ethereum, nonce là bộ đếm giao dịch của mỗi ví, dùng để sắp thứ tự và chống phát lại.
Điểm chính
- Nonce có ít nhất hai nghĩa trong blockchain: nonce khai thác (tìm hash) và nonce tài khoản (đếm giao dịch).
- Trong Bitcoin, nonce chỉ chiếm 4 byte trong tiêu đề khối 80 byte, nên thợ đào còn phải đổi thêm extranonce.
- Nonce không phải khoá bí mật và không tự làm khối an toàn. Độ an toàn đến từ hash, độ khó và chi phí tính toán.
- Người dùng ví Ethereum gặp nonce khi giao dịch bị kẹt hoặc cần huỷ, tăng phí.
Mục lục
- Nonce là gì và tên gọi bắt nguồn từ đâu?
- Nonce nằm ở đâu trong một khối Bitcoin?
- Thợ đào dùng nonce để tìm khối như thế nào?
- Khi dùng hết 32 bit nonce thì sao?
- Nonce tài khoản trên Ethereum khác nonce khai thác ra sao?
- Có những loại nonce nào? Bảng phân biệt
- Nonce có vai trò gì với tính bất biến của blockchain?
- Proof of Stake có còn dùng nonce không?
- Khi nào bạn cần quan tâm đến nonce?
- Những hiểu lầm thường gặp về nonce
- Câu hỏi thường gặp
Nonce là gì và tên gọi bắt nguồn từ đâu?
Nonce là viết tắt của “number used once”, tức số chỉ dùng một lần. Thuật ngữ này có trước blockchain, vốn đã xuất hiện trong mật mã học và giao thức xác thực. Ý chung là một giá trị được chọn để không bị lặp lại, nhờ đó kẻ xấu không thể dùng lại một thông điệp cũ.
Trong blockchain, hai nghĩa phổ biến nhất khác hẳn nhau. Một nghĩa là biến số mà máy đào thử hàng loạt để tìm hash hợp lệ. Nghĩa còn lại là số thứ tự giao dịch gắn với một địa chỉ ví. Theo một bài giải thích kỹ thuật, nonce tài khoản là trạng thái gắn với địa chỉ, còn nonce hash là biến tìm kiếm bên trong hàm băm; cả hai đều là số nguyên nhưng nằm ở các tầng khác nhau và giải quyết bài toán khác nhau.
Phần lớn bài tiếng Việt chỉ nói nghĩa thứ nhất. Nếu bạn dùng ví Ethereum hoặc viết ứng dụng gửi giao dịch, nghĩa thứ hai mới là thứ bạn gặp hằng ngày. Bài này giải thích cả hai.
Nonce nằm ở đâu trong một khối Bitcoin?
Mỗi khối Bitcoin có phần tiêu đề (block header) dài 80 byte. Tiêu đề chứa hash khối trước, Merkle root của các giao dịch, dấu thời gian, mục tiêu độ khó, trường phiên bản và nonce. Nonce chỉ chiếm 4 byte, tức một số 32 bit bắt đầu từ 0 và tăng dần mỗi lần thử một hash.
Hình dưới so sánh kích thước các trường. Hash khối trước và Merkle root mỗi trường chiếm 32 byte, còn nonce chỉ 4 byte.

Hash khối trước là thứ nối các khối thành chuỗi. Bạn có thể đọc thêm về hàm băm và SHA-256. Merkle root tóm tắt toàn bộ giao dịch trong khối, được giải thích ở bài Merkle tree và Merkle root.
Thợ đào dùng nonce để tìm khối như thế nào?
Cơ chế là thử và sai có chủ đích. Thợ đào dựng tiêu đề ứng viên, đặt nonce, băm hai lần bằng SHA-256 rồi so kết quả với mục tiêu. Nếu hash nhỏ hơn hoặc bằng mục tiêu độ khó hiện tại, bài toán được giải. Nếu không, nonce tăng lên và vòng lặp lại.

Vì hàm băm cho kết quả không đoán trước được, đổi nonce từ 1000 sang 1001 sẽ cho một hash hoàn toàn khác. Không có đường tắt nào để suy ra nonce đúng. Một bài nghiên cứu về tối ưu đào nhận định cách nhanh nhất để tính va chạm hash từng phần, thứ hashcash dựa vào, là vét cạn.
Ví dụ minh hoạ về số lần thử
Giả sử mục tiêu yêu cầu hash bắt đầu bằng 20 bit 0 (ví dụ minh hoạ, không phải độ khó thật của Bitcoin). Mỗi lần thử có xác suất 1 trên 2^20 để đạt, nên trung bình cần khoảng một triệu lần thử. Cứ thêm một bit 0 yêu cầu thì số lần thử trung bình tăng gấp đôi. Đây là lý do độ khó chỉnh được bằng cách thu nhỏ mục tiêu.
Độ khó thật của Bitcoin cao hơn nhiều. Theo một bài nghiên cứu, độ khó đổi mỗi 2.016 khối, khoảng hai tuần một lần. Bạn xem thêm về cơ chế này ở bài Proof of Work là gì.
Khi dùng hết 32 bit nonce thì sao?
Không gian nonce có 2^32 giá trị, khoảng 4,3 tỷ. Một bảng so sánh ghi nhận không gian nonce của Bitcoin khoảng 4,3 tỷ giá trị, và khi cạn thì phải sửa extraNonce rồi chạy lại. Với phần cứng đào chuyên dụng (ASIC) hiện nay, số này cạn rất nhanh, nên thợ đào luôn cần thêm “cần gạt” khác.
Có ba cần gạt chính:
- Extranonce trong giao dịch coinbase. Đây là giao dịch đầu tiên của khối, trả phần thưởng cho thợ đào và có một trường tự do. Một bài phân tích dữ liệu Bitcoin mô tả: đổi dữ liệu trong trường này làm Merkle root của cả tập giao dịch thay đổi, trong khi mọi giao dịch vẫn hợp lệ, nên mở ra một vòng 2^32 lần thử mới.
- Dấu thời gian. Theo tài liệu Bitcoin Developer, khi đã thử hết mọi giá trị 32 bit, thợ đào có thể cập nhật thời gian hoặc đổi giao dịch coinbase rồi cập nhật Merkle root.
- Thứ tự và tập giao dịch. Chọn lại giao dịch đưa vào khối cũng làm Merkle root đổi.
Vì vậy, nói “nonce là con số thợ đào đi tìm” chỉ đúng một phần. Thực tế, thợ đào duyệt tổ hợp gồm nonce, extranonce và các trường tiêu đề khác. Chi tiết về vận hành và phần thưởng nằm ở bài đào coin là gì.
Nonce tài khoản trên Ethereum khác nonce khai thác ra sao?
Ethereum dùng mô hình tài khoản, nên mỗi địa chỉ có một bộ đếm. Theo một bài giải thích, nonce tài khoản nằm trong trạng thái tài khoản Ethereum, được lưu trong cây trạng thái thế giới (world state trie) và đổi khi một giao dịch được ghi vào khối. Quy tắc cốt lõi gồm hai điểm: giao dịch có nonce N chỉ được ghi sau giao dịch có nonce N-1, và khi giao dịch nonce 5 đã được xác nhận, không giao dịch nào khác nonce 5 từ cùng tài khoản được chấp nhận.
Hai quy tắc này giải quyết hai việc. Thứ nhất, chúng sắp thứ tự giao dịch của cùng một ví. Thứ hai, chúng chặn tấn công phát lại (replay): kẻ xấu chép một giao dịch đã ký và gửi lại sẽ bị từ chối vì nonce đã dùng.
Ví dụ minh hoạ: giao dịch bị kẹt
Ví của bạn đang ở nonce 7. Bạn gửi liên tiếp giao dịch nonce 7, 8 và 9, nhưng giao dịch nonce 7 đặt phí quá thấp nên chờ lâu. Hai giao dịch sau chưa thể được ghi dù phí cao, vì chúng phải đợi nonce 7. Nhiều ví cho phép gửi lại giao dịch cùng nonce 7 với phí cao hơn để thay thế, hoặc gửi giao dịch rỗng cùng nonce để huỷ. Về phí, xem bài gas fee là gì.
Với người phát triển ứng dụng, lỗi hay gặp là hai tiến trình cùng gửi giao dịch từ một ví và lấy trùng nonce, khiến một giao dịch bị từ chối hoặc ghi đè. Cách xử lý thường là có một bộ phận tập trung cấp nonce cho từng ví gửi.
Nền tảng khác chọn thiết kế khác. Theo bảng so sánh trong một bài tổng hợp, Bitcoin không có nonce tài khoản vì dùng mô hình UTXO; đầu ra đã chi tiêu thì coi như đã dùng hết. Solana có “durable nonce” để hoãn thời điểm hết hạn của giao dịch. Cách Ethereum vận hành rộng hơn có ở bài Ethereum là gì.
Có những loại nonce nào? Bảng phân biệt

| Tiêu chí | Nonce khai thác (Bitcoin) | Nonce tài khoản (Ethereum) |
|---|---|---|
| Mục đích | Tìm hash nhỏ hơn mục tiêu | Sắp thứ tự giao dịch, chống phát lại |
| Kích thước | 32 bit | Số nguyên không dấu 64 bit |
| Cách thay đổi | Thử ngẫu nhiên hoặc tăng dần | Tăng đúng một đơn vị mỗi giao dịch |
| Nơi lưu | Trường trong tiêu đề khối | Trạng thái tài khoản |
| Ai thay đổi | Phần cứng đào | Ví của người gửi |
| Người dùng thường thấy | Hầu như không | Khi giao dịch kẹt, huỷ hoặc tăng phí |
Số liệu về kích thước và vai trò trong bảng dựa trên bảng so sánh của một bài giải thích nonce năm 2026. Nonce mật mã là nhóm thứ ba, ngoài phạm vi blockchain: trong các thuật toán mã hoá có nonce, dùng lại cùng một nonce với cùng một khoá có thể làm lộ thông tin về dữ liệu.
Nonce có vai trò gì với tính bất biến của blockchain?
Nonce không tự khoá dữ liệu. Nó chỉ là biến số đổi được trong công thức mà hash phải thoả mãn. Tính bất biến đến từ ba thứ cùng lúc:
- Hash khối sau chứa hash khối trước, nên sửa một khối cũ làm hỏng mọi khối đứng sau.
- Muốn khối sửa lại hợp lệ, thợ đào phải tìm nonce mới, tức làm lại toàn bộ công việc tính toán của khối đó.
- Phải làm lại tiếp mọi khối sau, và đồng thời đuổi kịp phần còn lại của mạng đang đào tiếp.
Điều thú vị là việc kiểm tra lại rất rẻ. Theo mô tả trong một bài tổng quan, các nút khác xác minh khối bằng cách băm tiêu đề cùng nonce rồi so với mục tiêu. Một lần băm là đủ, trong khi tìm ra nonce cần hàng loạt lần thử. Sự bất đối xứng này là nền tảng của Proof of Work. Các nút kiểm tra khối được mô tả ở bài node trong blockchain.
Một nonce hợp lệ chỉ đúng với đúng tiêu đề đó. Đổi một trường khác như timestamp hay Merkle root thì nonce cũ không còn dùng được. Vì thế nói “mỗi khối có một nonce riêng” là cách diễn đạt gần đúng, không phải nonce được phát cho từng khối.
Proof of Stake có còn dùng nonce không?
Các chuỗi Proof of Stake không dò nonce để chọn người tạo khối, vì người đề xuất khối được chọn theo lượng cổ phần khoá. Ethereum chuyển sang PoS từ tháng 9/2022, nên nonce khai thác không còn là cơ chế bảo mật của mạng này. Nonce tài khoản thì vẫn còn, vì nó phục vụ thứ tự giao dịch chứ không phải đồng thuận. Sự khác biệt giữa hai cơ chế được so sánh ở bài PoW và PoS khác nhau thế nào.
Khi nào bạn cần quan tâm đến nonce?
- Bạn học blockchain: nắm nonce khai thác để hiểu vì sao đào tốn điện và vì sao sửa dữ liệu cũ gần như không khả thi.
- Bạn dùng ví Ethereum: chỉ cần biết nonce khi giao dịch kẹt, cần huỷ hoặc tăng phí cho giao dịch đang chờ.
- Bạn là lập trình viên: quản lý nonce là việc bắt buộc khi gửi nhiều giao dịch song song từ một ví, ví dụ ví thanh toán hàng loạt của hệ thống.
- Bạn làm hợp đồng thông minh: nonce hay xuất hiện trong chữ ký ủy quyền (ví dụ cho phép bên thứ ba chi tiêu thay) để một chữ ký không dùng được hai lần. Xem thêm ở bài smart contract là gì.
Những hiểu lầm thường gặp về nonce
- “Nonce là mật khẩu của khối.” Sai. Nonce công khai trong tiêu đề, ai cũng đọc được.
- “Tìm được nonce nghĩa là giải được một bài toán phức tạp.” Không hẳn. Việc làm chỉ là thử lặp lại một phép băm đơn giản rất nhiều lần.
- “Nonce cho biết ai đã đào khối.” Không. Danh tính nhận thưởng nằm ở giao dịch coinbase, không nằm ở nonce.
- “Nonce lớn hơn là khối khó hơn.” Không. Độ khó nằm ở mục tiêu (nBits). Nonce chỉ là số thử may mắn trúng.
- “Nonce chỉ có trong tiền mã hoá.” Không. Khái niệm này dùng rộng trong mật mã và giao thức mạng.
Nếu bạn mới bắt đầu, bài Bitcoin là gì cho bức tranh toàn cảnh trước khi đi vào chi tiết kỹ thuật như nonce.
Câu hỏi thường gặp
Nonce có phải là số ngẫu nhiên không?
Về nguyên tắc, nó là giá trị bất kỳ thợ đào chọn. Nhiều phần mềm đào duyệt tuần tự từ 0 lên, và vì hàm băm cho kết quả không đoán được nên thứ tự duyệt không làm tăng khả năng trúng. Nonce tài khoản thì hoàn toàn không ngẫu nhiên, nó tăng đúng từng đơn vị.
Vì sao nonce của Bitcoin chỉ có 32 bit?
Đó là kích thước trường trong định dạng tiêu đề khối, chiếm 4 byte. Khi thiết kế ban đầu, 4,3 tỷ giá trị là đủ rộng. Với phần cứng đào mạnh hơn nhiều, không gian này cạn nhanh, nên thợ đào dùng thêm extranonce, dấu thời gian và thứ tự giao dịch để mở rộng không gian tìm.
Có thể đoán trước nonce hợp lệ không?
Không có cách tính thẳng ra nonce từ dữ liệu khối. Hàm SHA-256 được thiết kế để kết quả không suy ngược được, nên thợ đào chỉ có thể thử rồi kiểm tra. Đó là điều làm công việc đào có chi phí thật.
Giao dịch Ethereum của tôi kẹt, có liên quan đến nonce không?
Thường là có. Nếu một giao dịch có nonce thấp hơn đang chờ vì phí thấp, các giao dịch nonce cao hơn của cùng ví sẽ phải đợi theo. Cách phổ biến là gửi lại giao dịch cùng nonce với phí cao hơn. Hãy kiểm tra kỹ trên ví và trình duyệt khối trước khi thao tác, và lưu ý đây là mô tả chung, không phải hướng dẫn cho một ví cụ thể.
Nonce có ảnh hưởng đến bảo mật khoá riêng không?
Nonce khai thác và nonce tài khoản không chứa khoá riêng. Tuy nhiên trong một số sơ đồ chữ ký số, giá trị ngẫu nhiên dùng một lần được tạo kém hoặc dùng lại có thể làm lộ khoá riêng. Vì vậy hãy dùng ví và thư viện đã được kiểm định, và xem bài private key và public key để hiểu cách bảo vệ khoá.
Nonce và hash khác nhau thế nào?
Hash là kết quả đầu ra của hàm băm, còn nonce là một phần đầu vào mà thợ đào được phép đổi. Đổi nonce thì hash đổi theo. Thợ đào tìm nonce sao cho hash thoả điều kiện mục tiêu.
VBPO Tech Blog cập nhật tin tức và kiến thức công nghệ cho doanh nghiệp Việt Nam. Xem thêm các bài cùng chuyên mục Blockchain cơ bản.