Thuật toán đồng thuận dựa trên bằng chứng lịch sử (PoH)
I. Đặt vấn đề
Những mạng blockchains hiện hành không đặt tín nhiệm vào thời gian, hoặc đưa ra các giả thuyết về khả năng quản lý thời gian của những người tham gia.
Như ta được biết mỗi node tin vào bộ đếm thời gian (clock) của chính nó mà không cần quan tâm về clock của những node khác trong mạng khác.
Do đó, vấn đề của việc "nguồn thời gian tin cậy" là thời gian được sử dụng để quyết định việc chấp nhận hoặc từ chối một tin nhắn, không có gì đảm bảo rằng những người tham gia khác trong mạng đều đưa ra các lựa chọn chính xác giống nhau.
Vì vậy, PoH (Bằng chứng lịch sử, từ giờ trong bài viết sẽ đề cập dưới dạng viết tắt PoH) được thiết kế để tạo một sổ cái với khả năng xác minh được thời gian trôi qua, tức là khoảng thời gian giữa các sự kiện và thứ tự tin nhắn. Với điều này mọi nút trong mạng sẽ có thể tín nhiệm vào thời gian được ghi lại trong sổ cái.
II. Tổ chức mạng
Như thể hiện trong Hình 1, tại bất kỳ thời điểm nào, một nút hệ thống được chỉ định là Leader với nhiệm vụ là tạo ra chuỗi PoH nhất quán cung cấp cho toàn mạng và kèm với đó khoảng thời gian có thể xác minh được.
Leader nhận các messages từ người dùng theo trình tự và tổ chức chúng sao cho có thể được xử lý hiệu quả bởi các nút trong hệ thống và tối đa hóa thông lượng.
Nó xử lý các tiến trình (transaction) đang được lưu trữ trên RAM và chuyển các transaction kèm với chữ ký của trạng thái cuối cùng đến các nút xác minh (Verifiers).
Các Verifiers này cùng xử lý chính xác Transaction với trạng thái trạng thái nhận được trên các bản sao của chúng, và đưa ra kết quả xác minh cho chữ ký.
Kết quả xác nhận trả về đóng vai trò là phiếu bầu cho thuật toán đồng thuận
Trong trạng thái không phân vùng, tại bất kỳ thời điểm nào cũng chỉ có 1 Leader duy nhất. Mỗi Verifier có cấu hình phần cứng tương tự với Leader và đều có thể được bầu chọn thành Leader
III. Bằng chứng lịch sử (PoH)
PoH là một chuỗi các tính toán cung cấp cách thức để xác minh bằng mật mã khoảng thời gian giữa 2 sự kiện. Đó là một hàm mật mã, không thể dự đoán output từ input, chỉ có thể lấy được output sau khi hàm thực thi xong.
Hàm chạy tuần tự trên một lõi đơn duy nhất, output là trước đó là input tiến trình hiện tại, output hiện tại được ghi lại kèm với số lần mà hàm đã được gọi. Output sau đó có thể được tính toán lại và xác minh bởi các máy ở ngoài mạng.
Dữ liệu có thể được đánh dấu thời gian vào chuỗi này bằng cách thêm dữ liệu (hoặc là hash của 1 phần dữ liệu) vào trạng thái của hàm. Việc ghi lại trạng thái, chỉ mục và dữ liệu khi nó được nối vào chuỗi cung cấp dấu thời gian có thể đảm bảo rằng dữ liệu đã được tạo vào một thời điểm nào đó trước khi hàm băm tiếp theo được tạo trong chuỗi.
1.Mô tả
Hệ thống này hoạt động như sau. Với một hàm hash ( sha256,...) , chạy hàm từ một số giá trị bắt đầu ngẫu nhiên và lấy ouput của nó làm input của chính hàm này. Ghi lại số lần hàm đã thực hiện kèm với Output tương ứng
Ví dụ
Index | Operation | Output hash |
---|---|---|
1 | sha256("Xin chao") | hash1 |
2 | sha256(hash1) | hash2 |
3 | sha256(hash2) | hash3 |
... | ... | ... |
200 | sha256(hash199) | hash200 |
Tập hợp các hàm băm này chỉ có thể tính toán theo một trật tự duy nhất. Do đó có thể suy ra thời gian thực đã trôi qua giữa index0 đến index300 từ cấu trúc dữ liệu.
Như minh họa dưới đây ta có thể thấy
- mã băm 62f51643c1 đếm tại 510144806912
- mã băm c43d862d88 đếm tại 510146904064
Ta có thể tin tưởng thời gian đã trôi qua giữa 510144806912 và 510146904064
2.Gán nhãn thời gian cho các sự kiện
Ta có thể sử dụng một hàm kết để thêm vào hàm băm một dữ liệu đơn giản để giảm khả năng trùng lặp ( giảm xung đột )
Hàm băm được tạo tiếp theo đại diện cho một dấu thời gian của dữ liệu, vì nó có thể chỉ được tạo sau khi phần dữ liệu cụ thể đó được chèn vào.
Index | Operation | Output hash |
---|---|---|
1 | sha256("Xin chao") | hash1 |
200 | sha256(hash199) | hash200 |
300 | sha256(hash299) | hash3 |
336 | sha256(append(hash335, sha256("simple test")) | hash335 |
Trong ví dụ dưới đây cfd40df8
được thêm vào chuỗi PoH và count là 510145855488
, state 3d039eef3
. Mỗi node quan sát trình tự này có thể xác định thứ tự mà tất cả
các sự kiện đã được chèn và ước tính thời gian thực giữa các lần chèn.
....(tobe continue)
Phần tiếp sau mình sẽ tiếp tục viết về việc xác minh chuỗi PoH