Một blockchain gồm n khối đánh số 0,1,…,n−1. Mỗi khối i có 4 trường: prevHash, data, nonce, hash, trong đó hash được công bố (claimed) là kết quả băm của khối. Mã băm đúng của một khối được tính theo công thức:
expectedHash=SHA256(prevHash∥data∥nonce)
(nối chuỗi trực tiếp, không dấu phân cách). Chuỗi khối được coi là hợp lệ nếu với mọi khối i:
expectedHash của khối i trùng khớp với hash đã công bố của khối đó, vàprevHash của khối i phải bằng đúng hash đã công bố của khối i−1 (khối 0 — khối Genesis — không bị kiểm tra điều kiện này).Hãy tìm khối đầu tiên (chỉ số nhỏ nhất, đánh số từ 0) vi phạm một trong hai điều kiện trên. Nếu toàn bộ chuỗi hợp lệ, in ra VALID.
Ví dụ: nếu dữ liệu của khối 1 bị sửa (từ Alice->Bob:10 thành Alice->Bob:99) nhưng hash công bố vẫn giữ nguyên như cũ thì expectedHash mới sẽ không khớp, và chương trình phải in ra 1.
prevHash data nonce hash (giả định data không chứa khoảng trắng).Một dòng: in VALID nếu toàn bộ chuỗi hợp lệ; ngược lại in chỉ số (bắt đầu từ 0) của khối đầu tiên bị lỗi.
Ví dụ:
Đầu vào:
3
0000000000000000000000000000000000000000000000000000000000000000 Genesis 0 5af80efc111ff94db09eae2d050ff8fdf85ae9eb55a624d285285d990f73c25f
5af80efc111ff94db09eae2d050ff8fdf85ae9eb55a624d285285d990f73c25f Alice->Bob:99 5 1b4b3dfc0e189263e7d769b3cac3f72737209a4dd5878d6542ca7917d008d2ed
1b4b3dfc0e189263e7d769b3cac3f72737209a4dd5878d6542ca7917d008d2ed Bob->Carol:5 7 3bd882aaff9718a6dd729fa22553697bfc9279ca5b375da02127d11752204f0c
Đầu ra:
1
Đầu vào:
3
0000000000000000000000000000000000000000000000000000000000000000 Genesis 0 5af80efc111ff94db09eae2d050ff8fdf85ae9eb55a624d285285d990f73c25f
5af80efc111ff94db09eae2d050ff8fdf85ae9eb55a624d285285d990f73c25f Alice->Bob:10 5 1b4b3dfc0e189263e7d769b3cac3f72737209a4dd5878d6542ca7917d008d2ed
1b4b3dfc0e189263e7d769b3cac3f72737209a4dd5878d6542ca7917d008d2ed Bob->Carol:5 7 3bd882aaff9718a6dd729fa22553697bfc9279ca5b375da02127d11752204f0c
Đầu ra:
VALID
Đang tải editor...