Công nghệ blockchain tìm hiểu về các giao thức đồng thuận trong công nghệ blockchain

45 7 0
Công nghệ blockchain tìm hiểu về các giao thức đồng thuận trong công nghệ blockchain

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT Mà ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ CƠNG NGHỆ BLOCKCHAIN TÌM HIỂU VỀ CÁC GIAO THỨC ĐỒNG THUẬN TRONG CƠNG NGHỆ BLOCKCHAIN Ngành: An tồn thông tin Sinh viên thực hiện: Đỗ Minh Hiếu Thiều Thị Hoa Bùi Tiến Đạt  AT160127  AT160127  AT160116 Người hướng dẫn : Ths Lê Quang Huy Khoa An tồn thơng tin – Học viện Kỹ thuật mật mã Hà Nội, 2022 LỜI CẢM ƠN Nhóm chúng em xin gửi lời cảm ơn chân thành tới thầy giáo, giáo Khoa An tồn thơng tin tạo điều kiện thuận lợi cho nhóm em trình thực tập Chúng em xin gửi lời cảm ơn đặc biệt đến Thạc sĩ thầy: Lê Quang Huy nhiệt tình hướng dẫn bảo nhóm suốt thời gian thực tập, giúp chúng em hồn thành tốt tập lớn lần GIẢNG VIÊN HƯỚNG DẪN NHÓM SINH VIÊN THỰC HIỆN Đỗ Minh Hiếu Thiều Thị Hoa Bùi Tiến Đạt Ths Lê Quang Huy 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 L Ờ I M ỞĐẦẦU Trong năm gần đây, công nghệ chuỗi khối (Blockchain) phát triển mạnh mẽ nhờ ưu điểm tính phi tập trung (decentralized), tính minh bạch (transparent) tính bất biến (immutability) Một thành phần quan trọng Blockchain giao thức đồng thuận Các giao thức đảm bảo tính quán giao dịch mạng đảm bảo an toàn cho liệu lưu trữ Blockchain Với mong muốn có thêm hiểu biết nghiên cứu sâu giao thức đồng thuận công nghệ Blockchain, nhóm chúng em thống thực nghiên cứu đề tài “Tìm hiểu giao thức đồng thuận công nghệ Blockchain” làm đề tài báo cáo Trong trình làm tập, q trình làm báo cáo, khó tránh khỏi sai sót, mong thầy bỏ qua Đồng thời trình độ kinh nghiệm thực tiễn cịn hạn chế nên báo cáo tránh khỏi thiếu sót, chúng em mong nhận góp ý thầy để chúng em học thêm nhiều kinh nghiệm hoàn thành tốt báo cáo tới Báo cáo chia làm chương, với nội dung sau: Chương I: Tổng quan Blockchain Chương II: Các giao thức đồng thuận Blockchain Chương III: Triển khai thực nghiệm CH ƯƠ NG T Ổ NG QUAN VỀẦ BLOCKCHAIN 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 1.1 Giới thiệu chung Blockchain 1.1.1 Khái niệm Blockchain Về bản, định nghĩa Blockchain theo Wikipedia sau: "Blockchain (chuỗi khối) sở liệu phân cấp lưu trữ thông tin, khối chứa thông tin liên kết với thông qua kỹ thuật mã hóa mở rộng theo thời gian Mỗi khối chứa thông tin thời gian khởi tạo liên kết tới khối trước đó, sở liệu gọi chuỗi khối Blockchain thiết kế để chống lại việc thay đổi liệu: Một liệu lưu khơng có cách thay đổi nó." Từ định nghĩa bên trên, hiểu đơn giản Blockchain bao gồm tập hợp khối chứa liệu liên kết với theo cách chặt chẽ, đảm bảo tính an tồn 1.1.2 Lịch sử đời phát triển Blockchain Blockchain xuất vào năm 1991 W Scott Stornetta với Stuart Haber Hai nhà toán học muốn triển khai hệ thống không giả mạo timestamp tài liệu Năm 2005, người hay nhóm ẩn danh tên Satoshi Nakamoto trình bày khái niệm nguyên sơ Blockchain tạo giao thức mã nguồn mở tên Bitcoin(BTC) Khi tài giới sụp đổ vào năm 2008, “cha đ}” đồng tiền điện tử Bitcoin – Satoshi Nakamoto người đặt móng cho cơng nghệ Blockchain Một năm sau, Blockchain thực hóa hồn tồn nhờ vào việc đóng vai trị cốt lõi Bitcoin Đây kiện đánh dấu đời cơng nghệ blockchain đồng tiền mã hóa giới, đồng thời đặt móng cho phát triển Crypto Trải qua nhiều giai đoạn phát triển, tới thời điểm tại, Blockchain có 04 phiên khác nhau, bao gồm: + Blockchain 1.0: Dùng cho thuật tốn tiền tệ (ví blockchain) Công nghệ hỗ trợ giao dịch liên quan đến chuyển đổi tiền tệ, kiều hối tạo lập hệ thống toán kỹ thuật số phạm vi tiền điện tử cách sử dụng thuật toán tiền tệ + Blockchain 2.0: Dùng ngành tài ngân hàng Cơng nghệ ứng dụng xử lý tài sản ngành Tài – Ngân hàng Các tài sản bao gồm cổ phiếu, chi phiếu, nợ, 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 quyền sở hữu điều có liên quan đến thỏa thuận hay hợp đồng cách minh bạch, rõ ràng + Blockchain 3.0: Kế thừa ưu điểm tất phiên Blockchain trước đồng thời tích hợp nhiều ngành nghề Cơng nghệ Blockchain mở rộng hội nhập vào đa lĩnh vực đời sống y tế, giáo dục, phủ hay nghệ thuật + Blockchain 4.0: Doanh nghiệp ứng dụng giao dịch Đây công nghệ nhất, tạo để tối ưu hoá ưu điểm khắc phục nhược điểm công nghệ trước Công nghệ nhắm đến doanh nghiệp với mục đích tạo ứng dụng giao dịch nhanh chóng hồn thiện 1.1.3 Cấu trúc Blockchain  Blockchain bao gồm phần chính: + Khối (Block): khối chứa liệu + Chuỗi (Chain): khối chứa liệu liên kết với tạo thành chuỗi  Mỗi khối (Block) bao gồm thành phần chính: Data (Dữ liệu), Mã Hash khối (Mã hàm băm) Mã Previous Hash (mã Hash khối trước đó) + Data (Dữ liệu): Các ghi liệu xác minh bạn bảo vệ thuật toán mã hóa phụ thuộc vào chuỗi khối (Thơng tin người gửi, người nhận, số lượng coin gửi,…) 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 + Mã Hash khối (Mã hàm băm): Là chuỗi ký tự số tạo ngẫu nhiên khơng giống hồn tồn Nó đại diện cụ thể cho khối sử dụng thuật tốn mã hóa để mã hóa Mã sử dụng để phát thay đổi khối Những mã nhất, không trùng + Mã Previous Hash (mã Hash khối trước đó): Được sử dụng giúp cho khối liền kề biết khối trước, khối sau, nhằm liên kết với Tuy nhiên khối đầu tiên, khơng có khối trước nên mã Hash chuỗi số Khối gọi Genesis Block tức “Khối nguyên thủy” hay khối gốc 1.1.4 Các đặc điểm công nghệ blockchain  Phân quyền: Blockchain hoạt động độc lập theo thuật tốn máy tính hồn tồn khơng chịu kiểm sốt tổ chức Do đó, Blockchain tránh rủi ro từ bên thứ ba  Phân tán: Các khối chứa liệu, phân tán nhiều nơi khác Vì vậy, nơi bị bị hỏng, liệu nằm Blockchain  Bất biến: Một liệu ghi vào khối chuỗi khối, khơng thể bị thay đổi sửa đổi đặc điểm thuật toán đồng thuận mã hash Các liệu lưu trữ mãi  Bảo mật: Chỉ người nắm giữ khóa riêng tư (private key) truy cập vào liệu bên Blockchain truy xuất liệu  Minh bạch: Các giao dịch chuỗi khối ghi lại người xem giao dịch Dựa vào đó, kiểm tra truy xuất lịch sử giao dịch Mọi người chí phân quyền phép người khác truy cập phần thông tin Blockchain  Tích hợp hợp đồng thơng minh: Hợp đồng thông minh kỹ thuật số tạo đoạn code if-this-then-that (IFTTT) hệ thống công nghệ Hợp đồng cho phép blockchain tự thực thi thứ mà không cần bên thứ ba tham gia vào hệ thống Các điều khoản viết hợp đồng thơng minh, thực thi điều kiện trước đáp ứng khơng ngăn chặn hủy bỏ  Khơng thể phá hủy hoă ‰c làm giả: Về lý thuyết, có máy tính lượng tử can thiệp giải mã blockchain Blockchain bị phá hủy hồn 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 tồn khơng cịn Internet giới, tất nhiên điều xảy 1.2 Các thành phần mạng Blockchain 1.2.1 Sổ phân tán  Khái niệm: Sổ điện tử thực chất sở liệu chứa tồn thơng tin giao dịch – transaction cập nhật liên tục Cấu tạo nhiều khối – block (mỗi khối chứa giao dịch) khối nối với thành chuỗi – chain cách sử dụng mật mã học Nói cách đơn giản, khối sau chứa thông tin định danh mật mã học khối trước Vì vậy, khối khứ xảy vấn đề ảnh hưởng tới tất khối phía sau chuỗi  Đặc điểm bật: + Sổ loại bỏ cần thiết quan trung ương người trung gian để xử lý xác thực giao dịch + Các ghi liệu lưu trữ sổ bên liên quan đạt đồng thuận + Tất người tham gia chia s} sổ bao gồm tất ghi cập nhật + Số cung cấp lịch sử xác minh kiểm tra tất thông tin lưu trữ tập liệu cụ thể theo trình tự thời gian 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 1.2.2 Mạng lưới Peer-to-peer (P2P)  Khái niệm: Mạng ngang hàng (P2P) mơ hình giao tiếp phi tập trung nhiều người tham gia gọi nút ngang hàng mà không cần máy chủ trung tâm hay phụ thuộc vào nút khác Mạng P2P cho phép bên hoạt động máy khách máy chủ Điều có nghĩa sau mạng hình thành, người tham gia sở hữu sổ Từ sử dụng để chia s} lưu trữ tệp mà không cần trợ giúp người trung gian  Đặc điểm bật: + Trên mạng Blockchain, nút tham gia linh hoạt vai trò máy khách máy chủ nút khác để cung cấp kiểm soát liệu + Việc phi tập trung hoá sở liệu quyền quản trị giúp loại bỏ đơn vị trung gian mơ hình truyền thống, giúp thành viên trực tiếp trao đổi thông tin với + Bản ghi liệu chép tất nút đảm bảo hệ thống hoạt động liên tục hạn chế thất bại đơn điểm hình thức cơng từ chối dịch vụ + Nâng cao tính sẵn sàng liệu, cách thức xác minh tính hợp lệ giúp tránh tình trạng thơng tin khơng có khả xác minh hệ thống  Phân loại + Unstructured P2P Network (Mạng P2P không cấu trúc) + Structured P2P Network (Mạng P2P không cấu trúc) + Hybrid P2P Network (Mạng P2P hỗn hợp) 1.2.3 Cơ chế đồng thuận  Khái niệm: Cơ chế đồng thuật quy định tập luật để nút tham gia vào mạng ngang hàng hoạt động cách đồng với thống giao dịch hợp pháp nên thêm vào Blockchain thông qua tương tác với hợp đồng thông minh – smart contract Cơ chế đồng thuận dùng để xác định trạng thái thực Blockchain  Đặc điểm bật: 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Testnet cho phép nhà phát triển xây dựng kiểm tra ứng dụng blockchain tảng Ethereum mà không cần sử dụng tiền thật + POA Network: POA Network blockchain công cộng xây dựng giao thức PoA POA Network cho phép người dùng gửi nhận giao dịch, xây dựng ứng dụng blockchain tương tác với dịch vụ tài khác + Callisto Network: Callisto Network blockchain công cộng xây dựng giao thức PoA Callisto Network cung cấp tảng cho nhà phát triển xây dựng ứng dụng blockchain triển khai chúng tảng 2.4.5 Ưu nhược điểm PoA - Ưu điểm : + Tốc độ xử lý giao dịch nhanh: PoA giúp tăng tốc độ xử lý giao dịch mạng blockchain, giúp cho việc thực giao dịch trở nên nhanh chóng + Giảm thiểu cạnh tranh thợ đào: PoA giúp giảm thiểu cạnh tranh thợ đào tăng tính bền vững mạng + Tiết kiệm lượng chi phí: PoA giảm thiểu nhu cầu lượng phần cứng để đào, giúp giảm thiểu chi phí cho người dùng + Bảo vệ trước công 51%: PoA giúp ngăn chặn công 51%, nhóm người dùng đào 50% khối mạng thực công + Không yêu cầu nhiều kiến thức lập trình: PoA khơng u cầu nhiều kiến thức lập trình để xây dựng giao thức + Khả mở rộng tốt hơn: PoA giúp cho việc mở rộng mạng trở nên dễ dàng hơn, không cần nhiều điều kiện lượng phần cứng - Nhược điểm : + Tính trung tâm hóa: PoA có tính trung tâm hóa cao so với giao thức khác, nhà sản xuất khối chọn bên định quyền mạng thay thợ đào + Khơng đảm bảo tính an tồn: PoA khơng đảm bảo tính an tồn mạng blockchain nhà sản xuất khối bị cơng kiểm sốt mạng 29 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 + Khó đạt đồng thuận: PoA yêu cầu đồng thuận chủ sở hữu để thực bầu cử cho nhà sản xuất khối mới, điều khó đạt số trường hợp + Không công với người dùng mới: PoA khơng cơng với người dùng mới, họ cần phải có số lượng đồng tiền định để đặt cược vào mạng thưởng với đồng tiền + Không phù hợp với ứng dụng có tính chất phân cấp mạng blockchain lớn: PoA không phù hợp với ứng dụng blockchain có tính chất phân cấp khơng phù hợp cho mạng blockchain lớn 2.6 Một số giao thức đồng thuận khác - Hiện xuất nhiều chế đồng thuận khác nhau, phục vụ nhu cầu cơng cộng riêng tư Cịn vài tên khác kể đến Proof of Location (PoL), Proof of Burn (PoB), Proof of Zero (PoZ), Proof of Weight (PoWeight), Direct Acyclic Graph Tangle (DAG), \ - Các thuật tốn blockchain khó để thay đổi, người ta thường nghĩ tới việc tạo chế Những blockchain với chế đồng thuận đem đến phát triển không ngừng blockchain tương lai Kết luận Chương - Có nhiều giao thức đồng thuận blockchain khác nhau, giao thức có ưu điểm hạn chế riêng Sau số so sánh giao thức đồng thuận blockchain - PoW giao thức đồng thuận sử dụng blockchain Bitcoin Nó yêu cầu thợ đào giải toán phức tạp để tạo khối nhận phần thưởng PoW tốn nhiều lượng thời gian, dẫn đến việc tăng chi phí tiêu thụ lượng - PoS phương phápồng thuận Nó yêu cầu người dùng sở hữu số lượng tiền tệ hệ thống để đóng góp vào trình đồng thuận PoS tốn lượng giúp giảm thiểu chi phí thời gian đồng thuận - DPoS PoA phiên PoS DPoS yêu cầu người dùng bỏ phiếu để chọn số người đại diện để đóng góp vào q trình đồng 30 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 thuận PoA yêu cầu thực thể xác nhận trước để tham gia vào trình đồng thuận - DPoS PoA giao thức đồng thuận phổ biến blockchain công cộng riêng tư Chúng cho phép tăng tốc độ đồng thuận giảm thiểu chi phí, đồng thời có hạn chế liên quan đến tính trung thực an ninh - BFT PBFT giao thức đồng thuận sử dụng chủ yếu hệ thống blockchain tập trung Chúng cho phép thực thể hệ thống đồng thuận giảm thiểu nguy xảy lỗi - PBFT có tốc độ đồng thuận nhanh BFT, yêu cầu thực thể hệ thống phải tin tưởng lẫn để đạt đồng thuận CHƯƠNG THỰC NGHIỆM GIAO TH Ứ C ĐỒẦNG THUẬN PROOF-OF-WORK 3.1 Ngôn ngữ thư viện sử dụng Python ngơn ngữ lập trình sáng tạo Guido Van Rossum – chuyên gia lập trình người Hà Lan vào năm 1991 Python mang chất ngôn ngữ lập trình bậc cao Ngơn ngữ python thiết kế hướng tới đối tượng với cấu trúc hàng cách xử lý liệu đơn giản, dễ đọc Nó giúp người dùng tạo chương trình hay với số lượng dịng code Python thân thiện với người dùng, khơng khó để người làm quen Tất câu lệnh, cú pháp trực quan rõ ràng Python phần mềm mã nguồn mở (open source) Do đó, đóng góp để phát triển Python, giúp ngơn ngữ ngày trở nên phổ biến mạnh mẽ Thư viện hashlib Python cung cấp hàm lớp để thực phép băm mã hóa thơng qua thuật tốn băm mã hóa tiêu chuẩn Hashlib hỗ trợ nhiều thuật toán băm MD5, SHA-1, SHA-256, SHA-512 nhiều thuật toán khác Hashlib cung cấp thuật tốn mã hóa HMAC (Hash-based Message Authentication Code) PBKDF2 (Password-Based Key Derivation Function 2) 31 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Thư viện time Python cung cấp phương thức để làm việc với thời gian tại, đo lường thời gian tính tốn thời gian ứng dụng Python Thư viện time cho phép ta đo lường thời gian thực thi phần mã khối mã cụ thể Bằng cách sử dụng hàm time() trước sau thực phần mã, ta tính thời gian thực thi cách lấy hiệu hai giá trị thời gian Thư viện time cung cấp cách để đồng hóa chương trình với thời gian hệ thống đoạn thời gian cụ thể Và thư viện cung cấp hàm để chuyển đổi định dạng thời gian, bao gồm chuỗi thời gian cấu trúc liệu struct_time Thư viện random Python cung cấp phương thức để làm việc với số ngẫu nhiên Ví dụ random cung cấp hàm để sinh số ngẫu nhiên, bao gồm số nguyên, số thực, phần tử ngẫu nhiên từ chuỗi Thư viện random cung cấp hàm để kiểm sốt q trình ngẫu nhiên Ta sử dụng hàm seed() để thiết lập giá trị khởi tạo cho trình ngẫu nhiên sử dụng getstate() setstate() để lưu khôi phục trạng thái ngẫu nhiên thư viện Thư viện sử dụng nhiều ứng dụng, bao gồm mơ phỏng, trị chơi, phân tích thống kê nhiều lĩnh vực khác yêu cầu sử dụng số ngẫu nhiên 3.2 Triển khai thực nghiệm 3.2.1 Giao thức đồng thuận PoW 3.2.1.1 Import thư viện cần thiết Bước việc triển khai thuật toán PoW Python nhập mơ-đun cần thiết, hashlib time Mô-đun hashlib sử dụng để tạo hàm băm SHA-256 liệu khối, mô-đun time sử dụng để ghi lại dấu thời gian khối import hashlib import time 3.2.1.2 Tạo class Block Bước thứ hai tạo lớp Block chứa thông tin liên quan khối Khối chứa liệu giao dịch, hàm băm khối trước đó, hàm băm khối tại, nonce, dấu thời gian index khối Lớp có phương thức init() khởi tạo khối với liệu, dấu thời gian nonce cung cấp, đồng thời tạo hàm băm cho khối phương thức 32 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 calculate_hash() class Block: def init (self, index, previous_hash, timestamp, data): self.index = index self.nonce = # Nonce for PoW self.data = data self.timestamp = timestamp self.previous_hash = previous_hash self.current_hash = self.calculate_hash() Tạo class Block 3.2.1.3 Định nghĩa phương thức calculate_hash() Bước thứ ba xác định phương thức calculate_hash(), phương thức tạo hàm băm cho khối Phương thức nối liệu giao dịch khối, hàm băm, dấu thời gian nonce khối trước đó, sau tạo hàm băm thuật tốn băm SHA-256 từ mơ-đun hashlib def calculate_hash(self): data = f"{self.index}{self.previous_hash}{self.timestamp}{self.data} {self.nonce}".encode() return hashlib.sha256(data).hexdigest() Định nghĩa phương thức calculate_hash() 33 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 3.2.1.4 Định nghĩa phương thức mine_block() Phương thức mine_block() triển khai thuật tốn PoW Nó bắt đầu cách khởi tạo mức độ khó mục tiêu, mức độ xác định mức độ khó giải puzzle Sau đó, phương thức tạo hàm băm cho khối kiểm tra xem có thỏa mãn mức độ khó mục tiêu hay không Nếu hàm băm không đáp ứng mức độ khó mục tiêu, phương thức tăng nonce tạo hàm băm Quá trình tiếp tục hàm băm đáp ứng mức độ khó mục tiêu, thời điểm đó, khối coi khai thác def mine_block(self, difficulty): target = "0" * difficulty while True: self.current_hash = self.calculate_hash() if self.current_hash.startswith(target): return self.current_hash self.nonce += Định nghĩa phương thức mine_block() 3.2.1.5 Định nghĩa phương thức validate_block() Phương thức validate_block() sử dụng để kiểm tra tính hợp lệ khối trước thêm vào chuỗi blockchain Nếu khối khơng hợp lệ (ví dụ: previous hash khơng khớp giá trị hash khơng xác), q trình tạo khối bị hủy bỏ không thêm vào chuỗi 34 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 def validate_block(self, new_block): previous_block = self.chain[-1] if new_block.previous_hash != previous_block.current_hash: return False if new_block.current_hash != new_block.calculate_hash(): return False return True Định nghĩa phương thức validate_block() 3.2.1.6 Tạo class Blockchain Ta xác định class Blockchain có chứa danh sách khối Ta định nghĩa phương thức để thêm khối vào chuỗi khối Khối genesis khối mạng chuỗi khối đóng vai trị tảng tồn chuỗi khối Khối khơng tham chiếu đến khối trước đó, khơng có khối trước tồn Việc tạo khối genesis bước quan trọng quy trình tạo chuỗi khối, thiết lập điều kiện ban đầu chuỗi khối đặt quy tắc cách thức hoạt động mạng Khối genesis chứa tất thông tin cần thiết để thiết lập trạng thái ban đầu chuỗi khối Điều bao gồm chi tiết số genesis, dấu thời gian, hàm băm khối trước (được đặt thành tất số cho khối genesis) liệu mà khối chứa Dữ liệu lưu trữ khối genesis bao gồm thơng tin phân phối mã thông báo ban đầu, quy tắc khai thác chi tiết quan trọng khác mạng Sau khối genesis tạo, bước tạo khối Các khối tham chiếu khối trước chuỗi khối chứa liệu giao dịch Mỗi khối mạng xác minh thêm vào chuỗi khối đáp ứng tiêu chí bắt buộc 35 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 class Blockchain: def init (self): self.chain = [] self.difficulty = # Difficulty level for PoW def create_genesis_block(self): # Create the first block (genesis block) genesis_block = Block(0, "0"*64, time.time(), "Genesis Block") genesis_block.mine_block(self.difficulty) self.chain.append(genesis_block) def add_block(self, new_block): new_block.previous_hash = self.chain[-1].current_hash new_block.mine_block(self.difficulty) if self.validate_block(new_block): self.chain.append(new_block) print("New block added successfully.") else: print("Invalid block Discarded.") Tạo class Blockchain Trong đoạn mã trên, ta định nghĩa lớp Blockchain với danh sách trống gọi chain Sau đó, ta xác định phương thức create_genesis_block() để tạo khối genesis Phương thức add_block() thêm khối vào chain cách đặt hàm băm khối trước gọi phương thức mine_block() Sau kiểm tra tính hợp lệ khối trước thêm vào chuỗi blockchain 36 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 3.2.1.7 Định nghĩa phương thức is_chain_valid(), get_block_info() get_blockchain() Phương thức is_chain_valid() sử dụng để kiểm tra tính hợp lệ tất khối chuỗi khối trước hiển thị Nếu khối hợp lệ khơng hợp lệ (ví dụ: previous hash khơng khớp giá trị hash khơng xác) hiển thị message lên hình Phương thức get_block_info() hiển thị block với block number định get_blockchain() hiển thị toàn chuỗi khối def is_chain_valid(self): for i in range(1, len(self.chain)): current_block = self.chain[i] previous_block = self.chain[i - 1] if current_block.previous_hash != previous_block.calculate_hash(): return False if current_block.current_hash != current_block.calculate_hash(): return False return True def get_block_info(self, number): block = self.chain[number] print(f"Block Number: {block.index}") print(f"Nonce: {block.nonce}") print(f"Data: {block.data}") print(f"Prev hash: {block.previous_hash}") print(f"Hash: {block.calculate_hash()}") print(" -") def get_blockchain(self): print("\nBlockchain validity:", self.is_chain_valid()) print("Blockchain information:") for index in range(len(blockchain.chain)): self.get_block_info(index) 37 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Định nghĩa phương thức is_chain_valid(), get_block_info() get_blockchain() 3.2.1.8 Hàm main chương trình Trong hàm main ta khởi tạo đối tượng class Blockchain tạo khối genesis block Sau tạo options với option thứ tạo block mới, option thứ hai hiển thị blockchain với tất block option thứ ba kết thúc chương trình if name == " main ": # Create Blockchain blockchain = Blockchain() blockchain.create_genesis_block() i = while True: print() print("1 print("2 print("3 try: opt = Add new block") Show blockchain info") Exit") input("Option: ") 38 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 opt = int(opt) match opt: case 1: new_block = Block(i, "", time.time(), f"Data for Block {i}") blockchain.add_block(new_block) blockchain.get_block_info(-1) i += case 2: blockchain.get_blockchain() case 3: exit() case _: print("Invalid option.") except: if opt == 3: exit() print("Invalid option.") 39 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Hàm main chương trình 3.2.1.9 Kết chạy chương trình Khi khởi tạo Blockchain tạo genesis block tương ứng với block number Thơng tin genesis block có giá trị Previous hash Khởi tạo Blockchain genesis block Nếu chọn option 1, tức thêm block vào chuỗi khối, có giao dịch cần tạo block để xác thực, chương trình thực thuật toán Proof-of-Work cho block number để tìm số nonce cho giá trị hash block number nhỏ giá trị mục tiêu dựa độ khó định thuật tốn bốn số 0, với giá trị Previous hash giá trị hash block number Sau tìm số nonce thỏa mãn giá trị hash mục tiêu, block xác minh lại giá trị hash Previous hash thông qua phương thức validate_block() trước thêm block vào chuỗi khối Thêm block 40 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Lúc này, lựa chọn option thị danh sách thông tin blocks chuỗi khối cập nhật đồng bộ, bao gồm block number block number Hiển thị khối blockchain (1) Tương tự thêm block lần (option 1) thuật tốn Proof-of-Work thực block block number hiển thị blocks blockchain (option 2) chương trình hiển thị tổng cộng blocks 41 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 Hiển thị khối blockchain (2) 3.3 Kết luận Chương 42 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66 37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99

Ngày đăng: 07/09/2023, 23:13

Tài liệu cùng người dùng

Tài liệu liên quan