- vừa được xem lúc

Practical byzantine fault tolerance

0 0 6

Người đăng: Hiếu Võ

Theo Viblo Asia

Pbft là giải thuật chống lỗi byzantine đầu tiên có thể chạy được trên mạng bất đồng bộ (như internet). Giải thuật được đề xuất vào năm 1999 bởi hai nhà khoa học Castro và Liskov nhằm xây dựng các mô hình chống lỗi byzantine trong thực tế (các giải thuật trước đó thường tốn kém tài nguyên nên khó triển khai). Pbft sử dụng các kĩ thuật mật mã học để đảm bảo tính toàn vẹn của dữ liệu được gửi đi, tránh bị giả mạo.

Giải thuật hoạt động thông qua các view (tương tự round), ở mỗi view sẽ có một node đứng ra làm primary (tương tự như leader), được xác định thông qua công thức v mod N. Trong đó, v là view hiện tại, N là số node trong mạng. Ban đầu, client sẽ gửi request đến node primary, node primary sẽ thực hiện quá trình 3 pha cho request. Khi client thu được f + 1 phản hồi từ các node khác nhau với kết quả phản hồi giống nhau thì có thể đảm bảo kết quả trả về đó là đúng và đã được thống nhất thông qua hệ thống, với f là số node lỗi. Nếu client không nhận được các phản hồi trong thời gian cho phép, nó sẽ gửi lại request đến tất cả các node. Như vậy, node nào không phải là primary sẽ chuyển hướng request đó đến node primary. Nếu request đó đã được xử lý (các xử lý trước được lưu lại) thì node chỉ cần gửi lại phản hồi. Nếu client vẫn không nhận được phản hồi trong thời gian cho phép, nghĩa là node primary có thể đã bị lỗi, lúc này các node sẽ thực hiện giao thức view-change để chuyển sang view mới (thay đổi node primary).

Quá trình 3 pha:

pbft

Pbft hoạt động thông qua 3 pha là pre-prepare, preparecommit. Node primary sau khi nhận được request từ client sẽ gán thêm giá trị sequence number n vào và gửi đi message pre-prepare. Giá trị sequence number là duy nhất ở mỗi view, nhằm đảm bảo thứ thự của các request ở một view cụ thể. Do đó, các node sau khi nhận message pre-prepare, chỉ chấp thuận khi ở node đó chưa từng chấp nhận message pre-prepare cho view v (view v tại thời điểm gửi cũng được gán vào message pre-prepare) có sequence number nằm trong message pre-prepare nhận được nhưng lại có nội dung khác. Khi một node chấp nhận message pre-prepare, nó sẽ gửi message prepare đến các node khác để tiến vào pha prepare. Message prepare chuyển sang trạng thái prepared khi một node nhận được 2f + 1 message prepare ứng với message pre-prepare đó. Tóm lại, pha pre-prepare và prepare nhằm đảm bảo thứ tự của các request trong một view, nếu đã có một request m đã được chấp nhận ứng với sequence number n thì sẽ không có request m’ ≠ m với sequence number n được chấp nhận trong view đó. Sau khi nhận được một message đã ở trạng thái prepared, node sẽ chuyển sang pha commit và gửi message commit ứng với request của nó đến các node trong mạng và đợi phản hồi chấp thuận từ f + 1 node trước khi cập nhập / thực thi request và trả về giá trị cho client. Pha commit nhằm kiểm tra lại, đảm bảo các node trong hệ thống sẵn sàng, đảm bảo tính nhất quán của hệ thống. Nếu không có pha commit mà thực thi / cập nhật request luôn thì rất nguy hiểm vì có thể chưa đảm bảo đủ số lượng node tham gia thực thi / cập nhật.

Giao thức view-change:

Giao thức view-change nhằm đảm bảo tính chất liveness của hệ thống. Khi một node không nhận được phản hồi (nghi ngờ node primary bị lỗi), nó sẽ gửi message view-change đề xuất view v + 1 đến các node trong mạng. Khi node primary của view v + 1 nhận được 2f + 1 message view-change, nó sẽ tiến hành tạo new-view bằng cách gom 2f + 1 messages nhận được làm bằng chứng và gửi message new-view đến tất cả các node khác và tiến vào view v + 1. Node primary mới đó cũng cần phải xử lý lại các message pre-prepare bị lỗi ở view v.

Tham khảo: Castro, M. and Liskov, B. (1999). Practical Byzantine Fault Tolerance. Proceedings of the Third Symposium on Operating Systems Design and Implementation (OSDI'99), pp. 173-186.

Bình luận

Bài viết tương tự

- vừa được xem lúc

[Blockchain] Road to Bitcoin

. Chắc mọi người hẳn đã không còn xa lạ gì với anh chàng tỷ phú đã ném vỡ cửa kính ô tô nhà mình cùng với siêu năng lực điều khiển vật giá chỉ bằng lời nói, người đã đẩy định giá Bitcoin trên thị trường vượt ngưỡng 50K dolar/coin với những bài twitter để đời . .

0 0 44

- vừa được xem lúc

Khi Ethereum có chi phí giao dịch quá đắt đỏ - Tương lai cho layer2 ?

Với sự phát triển như vũ bão của Blockchain, ETH dường như đang quá tải và hệ quả là chi phí Gas đã lên đến 1000Gwei, phí để tạo những transaction phức tạp đã xấp xỉ 500$ . Và một giải pháp cứu cánh cho các sản phẩm Defi trên ETH chính là Layer2, và trong nhiệm vụ lần này Matic đang thể hiện khả năn

0 0 73

- vừa được xem lúc

Blockchain với Java - Tại sao không?

Cuộc cách mạng công nghiệp 4.0 ra đời kéo theo nhiều sự thay đổi và xu hướng mới được hình thành. Riêng đối với lĩnh vực CNTT cũng không nằm ngoài vùng ảnh hưởng mạnh mẽ. Chính làn sóng 4.

0 0 79

- vừa được xem lúc

Phân loại và tầm quan trọng của các node trong mạng blockchain

Trước khi đi vào phân loại và nêu rõ được tầm quan trọng của các node trọng mạng blockchain thì mình xin được trích dẫn khái niệm về blockchain từ Wikipedia như sau:. .

0 1 47

- vừa được xem lúc

Code Smart Contract bằng Assembly ?

Introduction. Hồi còn học trong ghế nhà trường bộ môn lập trình tốn nhiều não nhất của mình là code assembly. Nôm na thì bất cứ ngôn ngữ bậc cao nào như C , Go, Java,... được sinh ra để người dễ hiểu và dễ code , tuy nhiên chúng đều sẽ được compiled down xuống assembly một ngôn ngữ bậc thấp để máy h

0 0 44

- vừa được xem lúc

Dextool - Công cụ phân tích Decentralized Exchange tuyệt vời

. Trend Defi mặc dù đã bớt nhiệt nhưng những sản phẩm nổi bật của làn sóng này mang lại thì vẫn rất được người dùng ưa chuộng. Đặc biệt là các nền tảng Decentralized Exchange, tiêu biểu là Uniswap, SushiSwap, 1inch Exchange, FalconSwap,... Nhưng khi đã sử dụng các nền tảng DEx này mà không biết đến

0 0 92