Trong các hệ thống blockchain kiểu Bitcoin, thợ đào phải giải một bài toán bằng chứng công việc (Proof of Work): tìm một giá trị nonce sao cho giá trị băm SHA-256 của (thông điệp nối với nonce) có ít nhất k bit 0 liên tiếp ở đầu (tính từ bit có trọng số cao nhất — MSB — của toàn bộ chuỗi 256 bit).
Cho thông điệp message (chuỗi) và độ khó k (0≤k≤16). Bắt đầu thử nonce = 0, 1, 2, \ldots, với mỗi giá trị tính:
H(nonce)=SHA256(message∥str(nonce))
(trong đó str(nonce) là biểu diễn thập phân thông thường của nonce, ví dụ nonce = 7 → chuỗi "7"; nối chuỗi trực tiếp, không thêm ký tự phân cách).
Tìm nonce nhỏ nhất sao cho H(nonce), khi biểu diễn dưới dạng 256 bit nhị phân (byte đầu tiên là các bit có trọng số cao nhất), có ít nhất k bit 0 liên tiếp kể từ vị trí đầu tiên.
Ví dụ: message = "hello", k=0 → mọi giá trị hash đều thỏa (có ít nhất 0 bit 0 ở đầu), do đó nonce nhỏ nhất là 0.
message (có thể rỗng).In ra hai dòng:
nonce nhỏ nhất tìm được.Ví dụ:
Đầu vào:
hello
0
Đầu ra:
0
5a936ee19a0cf3c70d8cb0006111b7a52f45ec01703e0af8cdc8c6d81ac5850c
Đầu vào:
block1
1
Đầu ra:
1
3762446e14a8df6d59ad91aa5887b65c09ceeb0ff0206cb84e0ac9f6a43ef13e
Đang tải editor...