Một khối Bitcoin gồm hai phần: tiêu đề khối dài đúng tám mươi byte với sáu trường cố định, và danh sách giao dịch, luôn bắt đầu bằng giao dịch coinbase. Tiêu đề chứa dấu vân tay của khối trước, gốc Merkle tóm tắt mọi giao dịch trong khối, dấu thời gian, mục tiêu độ khó và nonce. Chỉ riêng tiêu đề được băm để tạo bằng chứng công việc, nhưng nhờ gốc Merkle, mọi giao dịch đều bị ràng buộc vào dấu vân tay của khối.
Bài viết mổ xẻ từng phần của khối, giải thích vai trò của mỗi trường, và vì sao thiết kế này vừa cho phép kiểm tra nhanh vừa làm cho việc sửa đổi lịch sử trở nên cực kỳ tốn kém. Nội dung kỹ thuật, dành cho người muốn hiểu sâu.
Sáu trường của tiêu đề khối
Trường thứ nhất là phiên bản, bốn byte, ban đầu dùng để đánh dấu phiên bản quy tắc. Về sau, các bit trong trường này được dùng để thợ đào báo hiệu ủng hộ những nâng cấp chia tách mềm.
Trường thứ hai là dấu vân tay khối trước, ba mươi hai byte. Đây là mối nối tạo thành chuỗi: thay đổi bất kỳ khối nào cũng làm đổi dấu vân tay của nó, phá vỡ mối nối với khối sau.
Trường thứ ba là gốc Merkle, ba mươi hai byte, đại diện cho toàn bộ giao dịch trong khối. Trường thứ tư là dấu thời gian, bốn byte, thời điểm thợ đào ghi nhận, tính bằng giây.
Trường thứ năm là mục tiêu độ khó ở dạng mã hoá gọn, bốn byte. Trường thứ sáu là nonce, bốn byte, con số mà thợ đào thay đổi liên tục để tìm dấu vân tay hợp lệ.
Băm tiêu đề và bằng chứng công việc
Dấu vân tay của khối được tính bằng cách băm tiêu đề hai lần bằng hàm SHA-256. Khối hợp lệ khi dấu vân tay này, đọc như một con số, nhỏ hơn hoặc bằng mục tiêu được mã hoá trong trường độ khó.
Vì hàm băm không đoán trước được, cách duy nhất là thử. Thợ đào thay nonce, mỗi lần thay là một phép băm mới. Bốn byte nonce chỉ cho khoảng bốn tỷ giá trị, máy đào hiện đại thử hết trong chớp mắt.
Khi hết nonce, thợ đào thay đổi những phần khác: dấu thời gian trong biên độ cho phép, hoặc một trường dữ liệu tuỳ ý trong giao dịch coinbase, làm gốc Merkle thay đổi, mở ra không gian thử mới.
Kiểm tra thì ngược lại, chỉ cần một phép băm kép tiêu đề và so với mục tiêu. Sự chênh lệch giữa khó tìm và dễ kiểm là trái tim của bằng chứng công việc.
Cây Merkle: tóm tắt giao dịch
Cây Merkle là cách tóm tắt một danh sách dài thành một dấu vân tay duy nhất. Mỗi giao dịch được băm, rồi các dấu vân tay được ghép đôi và băm tiếp, cứ thế lên đến đỉnh, gọi là gốc Merkle.
Nhờ cấu trúc cây, muốn chứng minh một giao dịch nằm trong khối, chỉ cần cung cấp các dấu vân tay dọc theo nhánh từ giao dịch lên gốc, gọi là nhánh Merkle. Với khối vài nghìn giao dịch, nhánh chỉ cần khoảng chục dấu vân tay.
Đây là cơ sở của xác minh thanh toán đơn giản: nút nhẹ chỉ giữ tiêu đề, và kiểm tra giao dịch bằng nhánh Merkle mà không cần tải toàn bộ khối.
Thay đổi bất kỳ giao dịch nào sẽ làm đổi gốc Merkle, làm đổi tiêu đề, làm đổi dấu vân tay khối, làm hỏng bằng chứng công việc và mối nối với khối sau.
Giao dịch coinbase và cam kết witness
Giao dịch đầu tiên trong mỗi khối là giao dịch coinbase, nơi thợ đào nhận phần thưởng khối cộng phí giao dịch. Giao dịch này có một đầu vào đặc biệt không trỏ đến UTXO nào, và trường dữ liệu của nó cho phép thợ đào ghi thông tin tuỳ ý.
Từ một nâng cấp trong những năm đầu, chiều cao khối bắt buộc phải được ghi trong giao dịch coinbase, giúp mỗi giao dịch coinbase là duy nhất.
Sau SegWit, dữ liệu witness không nằm trong cây Merkle gốc. Để ràng buộc chúng vào khối, giao dịch coinbase chứa một đầu ra đặc biệt mang cam kết witness, tức gốc của một cây Merkle khác tính trên dữ liệu có witness.
Cách thiết kế này cho phép nút cũ vẫn thấy khối hợp lệ, trong khi nút mới kiểm tra được dữ liệu witness.
Giới hạn và quy tắc khác của khối
Sau SegWit, khối bị giới hạn bởi trọng lượng tối đa bốn triệu đơn vị, thay cho giới hạn một megabyte cũ. Ngoài ra có giới hạn số thao tác kiểm tra chữ ký trong một khối.
Dấu thời gian phải lớn hơn trung vị dấu thời gian của mười một khối trước, và không được vượt quá thời gian của nút quá hai giờ. Quy tắc này giữ dấu thời gian ở mức hợp lý mà không đòi đồng hồ chính xác tuyệt đối.
Mỗi giao dịch trong khối phải hợp lệ và không xung đột với nhau hay với chuỗi trước đó. Tổng đầu ra của giao dịch coinbase không được vượt phần thưởng cộng phí.
Bất kỳ vi phạm nào cũng khiến toàn bộ khối bị từ chối, bất kể bằng chứng công việc của nó tốn bao nhiêu công sức.
Một điểm thú vị: khối trống, không chứa giao dịch nào ngoài coinbase, vẫn hợp lệ. Thỉnh thoảng thợ đào tạo khối trống vì vừa nhận khối trước và chưa kịp dựng danh sách giao dịch mới. Điều này hợp lệ về luật, dù làm phí của người dùng phải chờ thêm.
Ngược lại, một khối có đúng mọi thứ nhưng bằng chứng công việc không đạt mục tiêu sẽ bị từ chối ngay, dù chỉ thiếu một chút. Không có chuyện gần đúng trong luật đồng thuận.
Thành phần của một khối Bitcoin
Phiên bản Bốn byte, nay chủ yếu dùng để báo hiệu nâng cấp.
Dấu vân tay khối trước Ba mươi hai byte, mối nối tạo thành chuỗi.
Gốc Merkle Ba mươi hai byte, tóm tắt toàn bộ giao dịch.
Dấu thời gian Bốn byte, phải nằm trong biên độ cho phép.
Mục tiêu độ khó Bốn byte, dạng mã hoá gọn của ngưỡng dấu vân tay.
Nonce Bốn byte, giá trị thợ đào thay đổi để tìm khối.
Số lượng giao dịch Đếm số giao dịch trong khối.
Giao dịch coinbase Giao dịch đầu tiên, tạo bitcoin mới, chứa chiều cao khối.
Cam kết witness Đầu ra trong coinbase ràng buộc dữ liệu witness sau SegWit.
Các giao dịch còn lại Giao dịch thông thường do thợ đào chọn từ mempool.
Trọng lượng tối đa Bốn triệu đơn vị trọng lượng.
Băm kép SHA-256 Cách tính dấu vân tay khối từ tiêu đề.
Vì sao thiết kế này bền vững
Thiết kế khối của Bitcoin tách bạch phần cần băm, tiêu đề nhỏ gọn, với phần dữ liệu lớn, các giao dịch, nhưng ràng buộc chúng chặt chẽ bằng gốc Merkle.
Nhờ đó, thợ đào chỉ băm tám mươi byte mỗi lần thử, nút nhẹ chỉ giữ tiêu đề, và mọi thay đổi trong giao dịch đều bị phát hiện ngay.
Mối nối dấu vân tay khối trước biến chuỗi thành một cấu trúc mà sửa một chỗ là phải sửa tất cả phía sau, và mỗi chỗ sửa đều phải làm lại bằng chứng công việc.
Hiểu cấu trúc khối giúp bạn đọc được thông tin trên trình khám phá khối, và hiểu vì sao lịch sử Bitcoin được coi là rất khó viết lại.
Câu hỏi thường gặp
Tiêu đề khối Bitcoin gồm những gì?
Sáu trường trong 80 byte: phiên bản, dấu vân tay khối trước, gốc Merkle, dấu thời gian, mục tiêu độ khó và nonce.
Gốc Merkle dùng để làm gì?
Tóm tắt toàn bộ giao dịch thành một dấu vân tay, cho phép chứng minh một giao dịch nằm trong khối chỉ bằng một nhánh ngắn.
Nonce là gì?
Là trường bốn byte mà thợ đào thay đổi liên tục để tìm dấu vân tay khối nhỏ hơn mục tiêu.
Giao dịch coinbase khác giao dịch thường ở đâu?
Nó không chi tiêu UTXO nào, tạo bitcoin mới làm phần thưởng và chứa chiều cao khối.
Vì sao sửa một khối cũ lại khó?
Vì phải làm lại bằng chứng công việc cho khối đó và mọi khối sau, nhanh hơn cả mạng lưới.