Nhóm em sẽ tìmhiểu về cơ chế hoạt động của mỗi giao thức, ưu điểm và nhược điểm của chúng, cũng như cácứng dụng thực tế mà chúng được sử dụng.Việc hiểu về các giao thức đồng thuận trong
GIỚI THIỆU CHUNG VỀ CÔNG NGHỆ BLOCKCHAIN VÀ LUẬT ĐỒNG THUẬN
Giới thiệu chung về công nghệ blockchain và luật đồng thuận
1.1.1 Giới thiệu chung về công nghệ blockchain
Chuỗi khối là một danh sách kỹ thuật số liên tục phát triển các bản ghi dữ liệu Mỗi danh sách này bao gồm nhiều khối dữ liệu được sắp xếp theo thứ tự thời gian, được liên kết và bảo mật bằng các biện pháp mật mã.
Mặc dù công nghệ blockchain cũ hơn bitcoin nhưng nó là thành phần cơ bản cốt lõi của hầu hết các mạng tiền điện tử, hoạt động như một sổ cái kĩ thuật số phi tập trung, phân tán và công khai, chịu trách nhiệm lưu trữ hồ sơ vĩnh viễn của tất cả giao dịch đã được xác nhận trước đó.
Các giao dịch blockchain xảy ra trong một mạng ngang hàng gồm các máy tính được phân phối trên toàn cầu Mỗi một nút duy trì một bản sao của blockchain và đóng góp vào chức năng bảo mật của mạng.
1.1.2 Các thành phần cơ bản trong một hệ thống blockchain
- Sổ cái phân tán: là một cơ sở dữ liệu chứa toàn bộ thông tin giao dịch được cập nhập liên tục, được tạo bởi nhiều khối và các khối liên kết với nhau thành một chuỗi bằng cách sử dụng mật mã học
- Mạng ngang hàng: là mô hình giao tiếp phi tập trung giữa nhiều người tham gia mà không cần máy chủ trung tâm hoặc phụ thuộc vào bất kì nút nào khác.
- Cơ chế đồng thuận: qui định các tập luật để các nút tham gia vào mạng ngang hàng có thể hoạt động một cách đồng bộ với nhau Cơ chế đồng thuận được sử dụng để xác định trạng thái thực tế của Blockchain.
- Mật mã học: đảm bảo tính bí mật, toàn vẹn và tính xác thực của thông tin trong thanh ghi điện tửu hoặc thông tin được truyền đi giữa các nút.
- Máy ảo: là một chương trình mô phỏng một hệ thống máy tính, hoạt động giống như một máy tính vật lí, được sử dụng để lưu trữ dữ liệu, chạy các ứng dụng và tồn tại cùng vận hành một chuỗi khối mạng với các máy ảo khác.
1.1.3 Bài toán các vị tướng Byzantine
Bài toán các vị tướng Byzantine được đưa ra bởi 3 nhà khoa học máy tính Leslie Lampost, Robert Shostak và Marshall Pease trong một báo cáo khoa học mang tên “ The Byzantine Generals Problem” vào năm 1982.
Bài toán các vị tướng Byzantine miêu tả một nhóm các vị tướng trong đội quânByzantine ( quân đội đế quốc Đông La Mã), tiến hành vây hãm 1 thành phố Các vị tướng cần trao đổi để đạt được đến 1 thỏa thuận về kế hoạch tấn công thành phố đó Trong trường hợp đơn giản nhất, họ thỏa thuận về việc nên tấn công hay rút lui, và vấn đề là nếu chỉ có một bộ phận tấn công riêng lẻ, thì họ sẽ gặp thất bại, và đó là kế hoạch tồi tệ hơn việc cùng tấn công hoặc cùng rút lui.
Hình 1.1: Bài toán các vị tướng Byzantine Mọi thức sẽ trở nên phức tạp khi mà một vị tướng sẽ có thể gửi tin nhắn đi cho các vị tướng khác Chẳng hạn như trong trường hợp có 5 vị tướng, 2 ông đã phát tín hiệu muốn tấn công, 2 ông đa xphast tín hiệu muốn rút lui, còn ông thứ 5 lại chơi trò 2 mang, nhắn với 2 ông muốn tấn công rằng mình muốn tấn công, còn nhắn với 2 ông muốn rút lui rằng mình sẽ rút lui. Khi đó phe tấn công nghĩ rằng tấn công là lựa chọn đa số và họ tấn công (và sẽ thất bại), phe rút lui sẽ nghĩ rằng rút lui là lựa chọn đa số và họ rút lui Họ đã không đạt được sự đồng thuận ( về việc có cùng ý kiến).
Mọi thứ sẽ còn phức tạp hơn nữa khi ta đặt trong trường hợp họ còn phải gửi tin nhắn thông qua một người đưa thư, nên hoàn toàn có khả năng xảy ra tình trạng người đưa thư bị bắt, thư không gửi được đến nơi, hay nội dung bị sửa đổi.
Báo cáo khoa học của Lamport, Shostak và Pease giải quyết bài toán tướng Byzantine bằng biến thể "Chỉ huy và Trung úy" Các tướng gửi liên lạc viên cho nhau, đồng thuận đạt được khi số phản bội không quá một phần ba Tuy nhiên, trong mô hình chỉ huy và hai thừa lệnh (tức tập trung phân tán thông điệp), khi chỉ huy phản bội, hai thừa lệnh không xác định được thông điệp hợp lệ và kẻ phản bội Ví dụ, chỉ huy phản bội A ra lệnh cho B tấn công, C rút lui, sau đó xác nhận với B, C chuyển tiếp thông điệp B và C không xác định được kẻ phản bội vì A hoặc chính B, C có thể giả mạo thông điệp.
Do đó để đảm bảo khả năng chịu lỗi Byzantine này được đưa ra lần đầu vào năm 1982, nhưng đến năm 2008, bài toán này vẫn chưa có lời giải tổng quát.
Bài tón này có sự tương đồng rõ rang với Blockchain Blockchain là một mạng lưới rất lướn, làm thế nào để những người trong cùng mạng lưới tin tưởng lẫn nhau? Nếu một người gửi 4ETH từ ví của họ thì làm sao để họ chắc chắn rằng không ai trong mạng không xen vào thông điệp và thay đổi từ 4 lên 40ETH. Để xác nhận giao dịch hợp lệ và thống nhất chung về trạng thái của chuỗi khối hiện tại các thành viên tham gia cần phải liên lạc với nhau và đưa ra một cơ chế đồng thuận chung.
MỘT SỐ GIAO THỨC ĐỒNG THUẬN TRONG BLOCKCHAIN
Proof of Work(PoW)
2.1.1 Khái niệm và cơ chế hoạt của Proof of Word (PoW)
Thuật toán đồng thuận Proof of Word(PoW) là một phương pháp để sử dụng trong blockchain để xác minh và chứng thực các giao dịch mới và tạo ra các khối mới trong chuỗi blockchain.
Nguyên tắc cơ bản của thuật toán PoW là yêu cầu người tham gia mạng(thường là các máy tính khai thác) phải thực hiện một số công việc tính toán khó khăn nhưng dễ được xác minh để chứng tỏ sự đóng góp của họ và quyền lực tính toán của mình Quá trình này được gọi là “khai thác” (mining) và những người tham gia được gọi là “người khai thác” (miners).
Khi một giao dịch mới được tạo ra trên mạng, các người khai thác sẽ cạnh tranh để giải một bài toán tính toán có độ khó cao nhằm tạo ra một giá trị băm (hash) duy nhất mà khi kết hợp với khối trước đó sẽ tạo ra một giá trị băm mới thỏa mãn một yêu cầu xác định Điều này yêu cầu người khai thác phải tiêu tốn một lượng lớn thời gian và năng lượng tính toán để tìm ra một giải pháp chính xác.
Khi một người khai thác tìm ra giải pháp, họ thông báo cho toàn bộ mạng về kết quả của công việc tính toán của mình Các nút trong mạng sẽ kiểm tra và xác minh rằng giải pháp là chính xác bằng cách kiểm tra giá trị băm mới có thỏa mãn yêu cầu của thuật toán PoW hay không Nếu giải pháp được chấp nhận, khối mới sẽ được thêm vào chuỗi blockchain và giao dịch trong khối đó sẽ được xác minh.
Thuật toán PoW đảm bảo rằng để tạo ra một khối mới, người khai thác phải tiêu tốn một lượng công việc tính toán lớn và năng lượng điện Điều này làm cho việc tấn công mạng trở nên khó khăn vì kẻ tấn công phải có quyền lực tính toán lớn hơn phần còn lại của mạng để thay đổi thông tin trong chuỗi blockchain.
Để blockchain Bitcoin hoạt động hiệu quả, cần có sự tạo lập liên tục các khối mới để lưu trữ thông tin giao dịch.
Việc này được đảm nhận bởi thành phần gọi là “Miners” Họ sẽ phải giải đáp các bài toán phức tạp và gửi đáp án đúng đến toàn mạng lưới nhanh nhất. Để đáp ứng yêu cầu đó, Miner cần sử dụng các thiết bị có sức mạnh tính toán cao, được gọi là “máy đào” Để vận hành máy đào cần đến năng lượng điện.
Như vậy, bản chất PoW của Bitcoin sẽ đơn giản như sau: Xác nhận bằng chứng công việc(đáp án đúng của bài toán) của Miners đến toàn mạng lưới blockchain của Bitcoin, thông qua việc tiêu tốn tài nguyên trong thế giới thực(máy đào, năng lượng điện và thời gian).
Hình 2.1: Cơ chế của Proof of Work 2.1.2 Ưu và nhược điểm của Proof of Work(PoW)
` - Được sử dụng rộng rãi bởi hầu hết các loại tiền điện tử nổi bật: Các loại tiền kỹ thuật số nổi tiếng nhất và lớn nhất, đặc biệt là Bitcoin và Ethereum, sử dụng cơ chế Proof of Work.
- Cực kỳ an toàn: Vì việc thay đổi chuỗi khối của tiền điện tử yêu cầu quyền kiểm soát hơn một nửa tài nguyên máy tính của mạng tiền điện tử, nên các tài nguyên điện toán đáng kể theo yêu cầu của giao thức Proof of Work giúp mạng tiền điện tử trở nên an toàn.
- Phần thưởng cho những người khai thác kích hoạt các giao dịch mới: Những người khai thác xác thực thành công các khối giao dịch Bitcoin mới có thể kiếm được lợi nhuận.
- Rủi ro tấn công 51%: Nếu một thực thể kiểm soát sở hữu 51% nút mạng trở lên, thì thực thể đó làm hỏng chuỗi khối bằng cách giành quyền kiểm soát phần lớn mạng.
- Tốn thời gian: Người khai thác phải kiểm tra một số giá trị nonce để tìm ra câu trả lời chính xác cho câu đố phải hoàn thành để khai thác khối Xác nhận giao dịch mất từ 10 đến 60 phút Kết quả là, nó là một hoạt động tốn thời gian.
- Tiêu tốn tài nguyên: Các thợ đào yêu cầu một lượng sức mạnh tính toán đáng kể để giải câu đố toán học khó Nó dẫn đến việc lãng phí các tài nguyên có giá trị (tiền, năng lượng, không gian, phần cứng).
- Yêu cầu phần cứng đắt tiền: Mua phần cứng chuyên dụng, đắt tiền có thể là điều cần thiết để thành công và tạo ra lợi nhuận.
Những thách thức dành cho thợ đào cá nhân: Do yêu cầu về sức mạnh tính toán, các tổ chức khai thác tiền điện tử quy mô lớn và các nhóm khai thác có lợi thế hơn đáng kể trong việc khai thác tiền điện tử và tạo ra lợi nhuận từ hoạt động khai thác so với các thợ đào làm việc độc lập.
2.1.3 Ví dụ về các loại blockchain sử dụng Proof of Work (PoW)
Dưới dây là một số ví dụ về các loại blockchain sử dụng PoW
Proof of Stake (PoS)
2.2.1 Khái niệm về Proof of Stake (PoS)
Proof of Stake (PoS - Bằng chứng cổ phần) là một thuật toán làm việc của Blockchain, cho phép người dùng kiếm được phần thưởng cho việc xác thực các khối trên blockchain Có thể hiểu là người dùng sẽ ký gửi (Stake) một lượng tài sản nhất định để trở thành Validator (người xác thực) của Blockchain.
2.2.2 Quá trình lựa chọn người xác thực (Validator)
- Tính ngẫu nhiên của Proof of Stake (PoS) sẽ đảm bảo tính công bằng cho các node tham gia ngược lại với cơ chế đồng thuận Proof of Work (PoW) – khi các Node có lợi thế về hiệu suất (năng lượng) sẽ có cơ hội cao hơn để xác thực khối Với Proof of Stake (PoS) các Node được lựa chọn ngẫu nhiên để tham gia xác thực thường là các Node có tỉ lệ hàm băm (hashrate) thấp nhất.
- Số lượng coin các Node nắm giữ cũng là yếu tố quyết định Node có được lựa chọn hay không Cơ chế Proof of Stake (PoS) buộc người xác thực phải ký gửi một số lượng coin nhất định để đảm bảo tính xác thực ở mức cao nhất và đảm bảo tính cạnh tranh công bằng khi phần thưởng nhận về trong Proof of Stake (PoS) là tất cả phí giao dịch diễn ra khối.
Tuổi coin của Node là khoảng thời gian các Node tham gia ký gửi coin được yêu cầu đến khi có cơ hội được lựa chọn Nói cách khác, đây là khoảng thời gian các coin được giữ làm cổ phần để phục vụ mục đích xác minh giao dịch trên mạng lưới Độ tuổi được dựa trên công thức nhân số ngày các coin được giữ làm cổ phần và số lượng các coin đó.
2.2.3 Cơ chế hoạt động của Proof of Stake (PoS) Để khuyến khích người dùng tham gia vào mạng lưới sẽ có những phần thưởng được đưa ra Phần thưởng có thể là từ lạm phát token dự án (có thể đã được phân định sẵn trong token allocation hay vô hạn như Mina Protocol, Ethereum 1.0, …) Cũng có một số khác sử dụng phí giao dịch, tiêu biểu như Terra.
Lượng phần thưởng sẽ dựa vào số coin đã stake vài mạng lưới Người xác thực (Validators) không nhận phần thưởng khối thay vào đó, họ sẽ thu phí giao dịch để làm phần thưởng.
Công việc của Validator là xác thực các giao dịch có trong khối, ký xác nhận, thêm khối vào chuỗi khối và cuối cùng là nhận phần thưởng Phần thưởng ở đây sẽ là các phí giao dịch trong khối đó Trong trường hợp Validators xác nhận sai hoặc vi phạm hệ thống (hack) sẽ mất toàn bộ số coin đã ký gửi và không thể trở thành Validator trong một khoảng thời gian nhất định. Phần thưởng nhận được thường sẽ ít hơn số lượng coin Validator đó đã ký gửi nhằm đảm bảo tính an toàn cho hệ thống khi bị tấn công, phần lỗ cũng sẽ nhiều hơn lãi nếu vi phạm xác thực.
Phần thưởng sẽ được trao cho Validator sau khi từ bỏ quyền xác thực trong một khoảng thời gian nhất định để đề phòng trường hợp Validator làm giá xác thực và trốn chạy.
Hình 2.2: Cơ chế hoạt động của Proof of Stake (PoS)Cách thức hoạt động của Proof of Stake (PoS) đang ngày càng được áp dụng rộng rãi nhưng nó cũng như con dao 2 lưỡi Cụ thể:
- Trường hợp trong thời gian khóa token, nếu dự án có thể hoạt động tốt, đồng thời chứng minh được tại sao người dùng không nên bán mà nên giữ lại token thì ở chu kỳ khóa sẽ không xuất hiện áp lực bán.
- Nhưng ngược lại, nếu trong thời gian khóa token mọi thứ không có gì thay đổi thì có khả năng cao người dùng sẽ bán token thường với token gốc, làm dự án chịu tổn thất nghiêm trọng.
2.2.4 Ưu và nhược điểm của Proof of Stake (PoS)
- Tiết kiệm năng lượng: Cơ chế đồng thuận Proof of Stake (PoS) chọn một nút xác thực để giả mạo một khối thay vì Proof of Work (PoW), nơi nhiều thợ đào cạnh tranh để giải quyết các thách thức khối Do đó, Proof of Stake (PoS) tiết kiệm năng lượng hơn.
- Không có chi phí phần cứng ban đầu cho người giả mạo (thợ đào): Giao thức Proof of Stake (PoS) không yêu cầu trình xác nhận phải có tài nguyên tính toán cao, không giống như Proof of Work(PoW) Việc thiếu các yêu cầu tính toán cao làm cho việc tham gia vào Proof of Stake (PoS) dễ tiếp cận hơn.
- Triển vọng về khả năng mở rộng tốt hơn: Các blockchain sử dụng giao thức Proof of Stake (PoS) triển khai các kiến trúc khác nhau để mở rộng khả năng của chúng, chẳng hạn như sharding Nó cho phép mạng blockchain cải thiện thông lượng và trở nên hiệu quả Sharding cho phép các blockchain giảm thời gian tạo khối.
Proof of Work cũng tồn tại một số nhược điểm:
Khi tham gia các chương trình ủy quyền hoặc làm Validator, người dùng có thể nhận được thêm coin làm phần thưởng Tuy nhiên, để tham gia, họ cần phải khóa một số lượng coin nhất định (giam vốn), dẫn đến việc không thể giao dịch được số coin đó trong thời gian tham gia Đồng thời, giá trị của coin có thể biến động, khiến số lượng coin thưởng nhận được khi kết thúc chương trình không đủ để bù đắp cho số coin đã bị khóa, dẫn đến thua lỗ.
Delegated Proof of Stake (DPoS)
2.3.1 Khái niệm về Delegated Proof of Stake(DPoS)
Delegated Proof of Stake(DPoS) là một cơ chế đồng thuận nhanh được áp dụng trong nhiều hệ thống blockchain như BitShares, EOS và Tron DPoS thường được ví như một nền dân chủ kỹ thuật số, do hệ thống bỏ phiếu có trọng số được sử dụng trong giao thức này hoạt động tương tự như quá trình bầu cử diễn ra trong các cuộc bầu cử hiện đại hiện nay Ý tưởng cơ bản của DPoS là thay thế việc khai thác (mining) truyền thống bằng việc bầu cử một nhóm nhỏ các người nắm quyền quyết định trong mạng Thay vì sử dụng công nghệ tính toán (computational power) như Proof of Work(PoW), DPoS sử dụng quyền biểu quyết (voting power) để quyết định về sự toàn vẹn của các giao dịch và các quyết định quan trọng khác.
Trong một hệ thống Bằng chứng cổ phần ủy quyền(DPoS), người dùng có thể sử dụng cổ phần của họ để bỏ phiếu cho một số lượng đại biểu (hay các nhà ủy quyền-delegates) nhất định. Trọng số phiếu bầu của họ phụ thuộc vào số cổ phần đóng góp, chẳng hạn: nếu A đặt 10 đồng xu cho một nhà ủy quyền và B đặt 1 xu cho một nhà ủy quyền, phiếu bầu của A sẽ có giá trị trọng số nặng hơn 10 lần so với phiếu bầu của B.
Các nhà ủy quyền được bầu ra là một người hoặc tổ chức muốn sản xuất các khối trên mạng lưới Các nhà ủy quyền nhận được số phiếu bầu cao nhất sẽ tạo ra các khối và được thưởng khi tạo ra các khối này Giống như Proof of Stake, các nhà ủy quyền được trả tiền từ phí nhằm thúc đẩy và khuyến khích mạng lưới hoạt động Số lượng nhà ủy quyền có khả năng được sản xuất khối phụ thuộc vào thiết kế của blockchain Các nhà ủy quyền hàng đầu được sản xuất khối cũng có thể liên tục thay đổi.
Các nhà ủy quyền có thể vận động tranh cử cho mình bằng cách cắt giảm chi phí xác nhận khối, thực hiện các nhiệm vụ tiếp thị,… Vì các nhà ủy quyền muốn nhận được càng nhiều phiếu càng tốt, do đó họ liên tục được khuyến khích để tạo ra những thứ có giá trị cho cộng đồng, vì chỉ khi đó thì họ mới có khả năng nhận được thêm nhiều phiếu bầu mới.
Về việc bỏ phiếu: o Những người tham gia mạng bỏ phiếu bằng coins hoặc tokens của họ. o Mỗi người tham gia mạng(hoặc bên liên quan) nhận được số phiếu bầu giống như số coins mà họ sở hữu. o Các bên liên quan cũng có thể chuyển coins cho một bên liên quan khác để bỏ phiếu thay cho họ.
Lưu ý: Bỏ phiếu bằng coins không có nghĩa là cử tri đưa coins của họ cho đại biểu Họ chỉ đang phân bổ tiền để thể hiện phiếu bầu của mình Họ cũng có thể chỉ định lại tokens hoặc coins của mình để bỏ phiếu cho một số đại biểu khác.
Tuy nhiê, DPoS không chỉ đơn thuần là một hình thức bầu cử dân chủ Nó cũng có cơ chế xử lý xung đột (conflict resolution mechanism) trong trường hợp xảy ra tranh chấp hoặc các hành vi gian lận Các nhà ủy quyền có thể bị mất quyền nếu cộng đồng phát hiện ra họ đang làm việc không đúng quy định hoặc vi phạm quy tắc của mạng.
Giao thức Delegated Proof Of Stake hiệu quả hơn trong việc xử lý các giao dịch so với các truyền thống như Proof of Work hay Proof of Stake Nó có thể mở rộng để xử lý tới hàng triệu giao dịch mỗi giây Nếu bạn để ý khối lượng giao dịch của các blockchain thường xuyên, bạn sẽ thấy các blockchain hoạt động mạnh nhất, hầu hết đều sử dụng giao thức Delegated Proof
Of Stake hoặc một biến thể của nó.
2.3.2 Cơ chế hoạt động của Delegated Proof of Stake (DPoS)
Trong Delegated Proof Of Stake có hai loại thành viên tham gia vào quá trình xác minh giao dịch và đồng thuận:
- Người tạo khối là những người chịu trách nhiệm tạo và ký các khối mới Số lượng người tạo khối bị giới hạn tùy thuộc từng loại blockchain, và được bầu bởi các cử tri nắm giữ cổ phần trong mạng.
- Người xác nhận là các nút đầy đủ có nhiệm vụ xác minh lại tính hợp lệ của các khối được tạo ra bởi những người tạo khối, đảm bảo tính đúng đắn của giao dịch trong khối cũng như của giao dịch đồng thuận Bất kỳ người dùng nào cũng có thể trở thành người xác nhận Để trở thành người xác nhận, các thành viên chỉ cần tải về đầy đủ blockchain và thực hiện xác minh giao dịch Người xác nhận trong trường hợp này khác với trong giao thức Proof of Stake, trong PoS người xác nhận còn có vai trò tạo ra các khối.
Số lượng người tạo khối trong DPoS sẽ tùy thuộc vào quy tắc đồng thuận của từng loại blockchain Chẳng hạn với:
Với N người tạo khối, quy trình hoạt động của DPoS diễn ra như sau:
- Bước 1: Bầu chọn N người tạo khối từ nhóm ứng viên Các thành viên trong mạng sẽ sử dụng cổ phần của mình để bầu chọn ra đủ N thành viên có nhiệm vụ tạo khối.
- Bước 2:Từ N người tạo khối được chọn, một thuật toán sẽ chọn ra người có quyền được tạo khối trong một thời điểm nhất định Có nhiều cách chọn lựa khác nhau, chẳng hạn như ngẫu nhiên hoặc theo thứ tự round-robin Điều này tùy thuộc vào thiết kế của từng loại blockchain.
Một khối được xác minh hoàn chỉnh khi nó được xác nhận bởi 2/3 tổng số người tạo khối +1.
Phần thưởng khối và cơ chế thưởng cho mỗi lần thực hiện DPoS phụ thuộc vào từng mô hình của blockchain.
Những người xác nhận loại bỏ những người tạo khối độc hại bằng cách kiểm duyệt lại tính hợp lệ của các giao thức hoặc các sự kiện lặp và không bỏ phiếu cho những người tạo khối gian lận trong những vòng tiếp theo.
Do số lượng những người có khả năng tạo khối rất hạn chế, do đó DPoS có thể xử lý một lượng lớn các giao dịch lớn thậm chí lớn hơn nhiều so với nhu cầu hiện tại Một giao dịch thường được xác nhận trong vòng 1,5 giây kể từ thời điểm công bố với độ chắc chắn 99,9% Để có sự chắc chắn tuyệt đối về tính hợp lệ của một giao dịch, một nút chỉ cần đợi 2/3 số người tạo khối đi đến thống nhất.
2.3.3 Ưu và nhược điểm của Delegated Proof of Stake (DPoS)
- Tốn ít năng lượng: DPoS tiêu thụ ít năng lượng hơn so với các thuật toán khác như Proof of Work (PoS), do không yêu cầu việc tính toán phức tạp để giải quyết các câu đố mật mã.
Proof of Authority (PoA)
2.4.1 Khái niệm về Proof of Authority (PoA)
Thuật toán Bằng chứng Ủy quyền (PoA) ra đời năm 2017 do Gavin Wood sáng lập PoA đề cao danh tính và uy tín của những người xác thực giao dịch và thêm khối mới vào blockchain Cơ chế này được phát triển bởi Parity Technologies và nhằm tăng cường tính bảo mật cho blockchain bằng cách trao quyền cho những cá nhân được xác thực và có uy tín trong mạng lưới.
- Danh tính là thứ chỉ có một Người xác thực (validator) cần công khai xác nhận thông tin cá nhân thực sự của mình để có thể dễ dàng thiết lập trách nhiệm trong hoạt động của blockchain.
-Danh tiếng là thứ mà người xác thực phải xây dựng rất lâu Để trở thành người xác thực thì họ phải có độ uy tín cao, sự tín nhiệm lớn Họ chưa từng phạm lỗi gì trong quá khứ hoặc có một địa vị nhất định trong mạng lưới Nếu có bất kỳ hành động đáng ngờ nào, danh tiếng của người xác thực sẽ bị ảnh hưởng.
PoA là một biến thể của cơ chế đồng thuận Proof of Stake (PoS) Tuy nhiên, PoA không của token, PoA tập trung vào danh tính của người xác thực Những người này sẽ stake
“uy tín” của mình lên hàng đầu để có quyền xác thực giao dịch.
2.4.2 Cơ chế hoạt động của Proof of Authority
Proof of Authority (PoA) có số lượng Validator (người xác thực) giới hạn, vì vậy thuật toán này giúp cho các blockchain có khả năng mở rộng cao hơn Các block và giao dịch được kiểm duyệt bởi các Validator đáng tin cậy hơn vì Proof of Authority (PoA) sở hữu các node có danh tính đã được xác thực.
Nhiệm vụ của các Validator là khởi chạy ứng dụng để tiếp nhận yêu cầu giao dịch vào block Nhưng vì mô hình Proof of Authority (PoA) tự động hoàn toàn, nên các Validator không cần phải liên tục theo dõi máy tính để cập nhật Tuy nhiên, máy tính và trang web quản trị luôn phải được duy trì trong trạng thái hoạt động.
Hình 2.3: Cơ chế hoạt động của Proof of Authority (PoA)
Những điều kiện và quyền hạn cho mỗi Validator là giống nhau Có nghĩa là họ có cơ hội tạo block mới và nhận số phần thưởng tương tự nhau Chính vì vậy, Proof of Authority (PoA) sẽ sử dụng ít năng lượng hơn các thuật toán đồng thuận khác, ví dụ như Proof of Work (PoW).Cách thức hoạt động của Proof of Authority (PoA) như sau:
Đầu tiên, hệ thống blockchain ngẫu nhiên chọn một Validator để xác thực giao dịch và tạo khối mới dựa trên kết quả bỏ phiếu của các Validator đã được ủy quyền trước đó.
- Sau đó, các Validator sẽ xác thực các giao dịch diễn ra trong blockchain, sau khi xác thực thành công họ sẽ nhận phần thưởng được trích từ phí giao dịch.
- Mặt khác, nếu Validator không thể đảm bảo các giao dịch trong hệ thống được diễn ra suôn sẻ hoặc gây hại cho mạng lưới thì danh tiếng của họ sẽ bị đánh giá thấp Đồng thời, hệ thống sẽ loại bỏ vĩnh viễn quyền xác thực của họ.
2.4.3 Ưu và nhược điểm của Proof of Authority(PoA)
Sự ra đời của Proof of Authority (PoA) đã đánh dấu một bước phát triển mới của thuật toán trên blockchain Proof of Authority (PoA) đã giúp giải quyết bốn vấn đề chính và các vấn đề mà Proof of Work và Proof of Stake (PoS) đang phải đối mặt trước đó là:
- Năng lượng sử dụng không tốn kém: Proof of Authority (PoA) không đòi hỏi nhiều nỗ lực tính toán và thiết bị chuyên dụng như Proof of Work (PoW).
- Độ bảo mật tuyệt đối: Nếu muốn trở thành người xác thực giao dịch, Validator cần xác minh danh tính và xây dựng danh tiếng trên mạng lưới Điều này giúp loại bỏ hoàn toàn các node xấu phá hoại hệ thống và làm cho giao dịch bị chậm Cơ chế này cũng giúp đảm bảo kết quả xác thực là hợp lệ, công bằng, không chịu sự chi phối của bất kỳ ai.
Tốc độ giao dịch của Proof of Authority (PoA) nhanh chóng và mở rộng cao Khi tạo block mới, một node được chọn ngẫu nhiên để xác thực và thêm block này vào mạng lưới dựa trên sự đồng thuận của các node khác, trong khi số lượng Validator ở mô hình này có giới hạn Do đó, Proof of Authority (PoA) sở hữu hiệu suất giao dịch cao và khả năng mở rộng lớn.
Khác với mô hình Proof of Stake (PoS), Proof of Authority (PoA) không yêu cầu sự cân bằng tài chính giữa các validator Điều này đảm bảo rằng tất cả các validator đều có động cơ như nhau để duy trì thành công của mạng và phần thưởng của chính họ ở dạng token blockchain sau khi xác thực giao dịch, do đó thúc đẩy sự tham gia của họ.
- Mất đi khả năng phi tập trung : Do có rất ít Validator node nên tính phi tập trung của mạng lưới Proof of Authority (PoA) là rất thấp.
- Validator dễ bị thao túng: Danh tính của Validator được công khai trên mạng lưới Vì thế, khả năng một số Validator bị bên thứ ba khai thác, thao túng là có thể xảy ra Ví dụ: Nếu muốn gián đoạn mạng, đối thủ có thể tận dụng nhược điểm này của thuật toán Proof of Authority(PoA) để cố gắng thuyết phục những người xác thực công khai danh tính thực hiện các hành vi gian lận.Điều này sẽ làm cho hệ thống bị phá hủy từ bên trong.
- Tích phân cấp thấp: Quyền xác thực khối chỉ nằm trong tay một số nhóm người nhất định.
THỰC NGHIỆM MÔ PHỎNG HOẠT ĐỘNG CỦA GIAO THỨC POS VÀ DPOS
Proof of Stake (PoS)
Các module được import bao gồm:
- datetime: để làm việc với thời gian và ngày tháng trong Python.
- time: để sử dụng hàm sleep và đồng bộ thời gian giữa các yêu cầu.
- hashlib.sha256: để tính toán giá trị hash SHA-256 của các khối.
- json: để làm việc với JSON trong Python.
- requests: để gửi yêu cầu HTTP giữa các nút trong blockchain.
- random.randint: để tạo một số ngẫu nhiên trong khoảng đã cho.
Hình 3.1: Các module cần import Tiến hành khởi tạo các khối Genesis, mục đích là để cung cấp cấu trúc ban đầu cho blockchain và chuẩn bị cho việc khởi tạo đối tượng Blockchain với các khối Genesis này.
Mỗi khối Genesis có các thông tin sau:
- “Index”: Chỉ số của khối Trong trường hợp này, giá trị index của tất cả các khối Genesis đều được đặt là 0.
- “Timestamp”: Thời gian tạo khối Biến DATE được sử dụng để lấy thời gian hiện tại và chuyển đổi thành chuỗi Do đó, mỗi khối Genesis sẽ có thời gian tạo khối là thời điểm chạy đoạn code.
Giá trị "BPM" được sử dụng tạm thời trong khối Genesis, đóng vai trò giá trị đại diện cho thông tin giao dịch thực tế như số tiền chuyển đổi, người gửi và người nhận Khi có thông tin giao dịch xác thực, giá trị BPM sẽ được thay thế Do đó, trong khối Genesis, BPM chỉ là giá trị tạm thời, giữ chỗ cho dữ liệu giao dịch chính thức.
- “PrevHash”: Hash của khối trước đó trong chuỗi Đối với các khối Genesis, trường này được đặt thành một chuỗi rỗng, vì không có khối trước đó.
- “Validator”: Địa chỉ của người xác nhận (validator) và thông tin về phần thưởng nhận được Trong trường hợp này, trường này cũng được đặt thành một chuỗi rỗng, vì các khối
Hình 3.2: Thông tin của khối Geneses Khởi tạo lớp Blockchain:
- self.blockChain: Một danh sách rỗng để lưu trữ các khối trong blockchain.
- self.tempBlocks: Một danh sách rỗng để lưu trữ các khối tạm thời trong quá trình xây dựng blockchain.
- self.myCurrBlock: Một từ điển rỗng để lưu trữ thông tin về khối hiện tại đang được xây dựng.
- self.validators: Một tập hợp để lưu trữ thông tin về các người xác nhận (validators) và số dư của họ.
- self.nodes: Một tập hợp để lưu trữ thông tin về các nút (nodes) trong mạng blockchain.
- self.myAccount: Một từ điển đại diện cho tài khoản của người dùng trong blockchain, bao gồm địa chỉ, trọng số (weight) và tuổi(age).
- Trong phần khởi tạo, giá trị của self.myAccount được thiết lập bằng cách sao chép thông tin từ tham số account truyền vào.
Hình 3.3: Lớp Blockchain Sau đó, trong khối try, đoạn code tiếp tục bằng việc tạo khối Genesis và kiểm tra tính hợp lệ của khối này bằng cách gọi hai phương thức khác: generate_genesis_block và is_block_valid.
- self.generate_genesis_block( _genesisBlock): Phương thức này nhận vào một đối tượng _genesisBlock và trả về một khối Genesis dựa trên thông tin đó.
- self.is_block_balid(genesisBlock): Phương thức này kiểm tra tính hợp lệ của khối Genesis (genesisBlock) bằng cách kiểm tra các thuộc tính của khối như chỉ số (indix), hash của khối trước đó(preHash), người xác nhận (validator) và thời gian tạo khối (timestamp).
Nếu khối Genesis được xác định là hợp lệ, nó được thêm vào self.blockChain (danh sách các khối trong blockchain) Nếu không, một ngoại lệ (Exception) được ném ra thông báo về việc không thể xác minh tính hợp lệ của khối Genesis.
Mã đoạn này tạo một đối tượng Blockchain khởi tạo với khối Genesis hợp lệ Nếu không hợp lệ, nó sẽ khởi tạo đối tượng Blockchain với khối Genesis hợp lệ, nếu không sẽ hiển thị thông báo lỗi.
Triển khai hàm is_block_valid kiểm tra tính hợp lệ của một khối (block) trong blockchain:
Hình 3.4: Hàm is_block_valid kiểm tra tính hợp lệ
Khối try-except đầu tiên dùng để kiểm tra khối có thuộc tính Hash hay không Nếu không có, tức là khối không hợp lệ và hàm sẽ trả về False.
Tiếp theo, hàm tính toán hash mới của khối bằng hàm hasher(block) và lưu vào biến hash2 Sau đó, hàm kiểm tra giá trị 'Hash' ban đầu (_hash) và hash2 có khớp không bằng lệnh assert Nếu không khớp, hàm trả về False.
Giá trị preHash được xác định dựa trên giá trị 'Hash' của khối trước đó (preBlock) nếu có tồn tại, nếu không sẽ gán giá trị rỗng (' ') Tiếp theo, hàm sẽ gán giá trị 'Hash' của khối hiện tại (_hash) vào thuộc tính 'Hash' của khối.
- Nếu blockchain đã có khối, hàm sẽ kiểm tra xem giá trị ‘PreHash’ của khối hiện tại có khớp với preHash hay không bằng cách sử dụng lệnh assert Nếu không khớp, hàm kiểm tra xem giá trị preHash có khớp với ‘Hash’ của khối Genesis(khối đầu tiên trong blockchain) hay không Nếu khớp, hàm sẽ trả về True và không làm thay đổi giá trị ‘Hash’ của khối hiện tại Nếu không khớp, hàm trả về False và không làm thay đổi giá trị ‘Hash’ của khối hiện tại.
- Cuối cùng, hàm trả về True nếu tất cả các kiểm tra trên đều vượt qua, và trả về False nếu có bất kỳ kiểm tra nào không hợp lệ.
Tác dụng của hàm này là đảm bảo tính hợp lệ của một khối trong blockchain Nếu khối không hợp lệ, hàm sẽ trả về False, và việc thêm khối đó vào blockchain sẽ bị từ chối Điều này giúp đảm bảo tính toàn vẹn và an toàn của blockchain bằng cách ngăn chặn việc thêm các khối không hợp lệ hoặc thay đổi dữ liệu trong các khối đã tồn tại.
Hàm generate_new_block được sử dụng để tạo ra một khối mới trong blockchain:
Hình 3.5: Hàm generate_new_block tạo ra một khối mới
- Đầu tiên, hàm kiểm tra xem đã có khối hiện tại (myCurrBlock) hay chưa Nếu đã có, hàm trả về khối hiện tại đó và không thực hiện bất kỳ thay đổi nào.
- Tiếp theo, hàm lấy giá trị ‘Hash’ của khối trước đó (preHash) từ khối cuối cùng trong blockchain (blockChain[-1])
Delegated Proof of Stake (DPoS)
Thực hiện mô phỏng giao thức DPoS bằng cách triển khai một chương trình Python Giả sử mạng Blockchain sử dụng giao thức đồng thuận DPoS này có 5 thành viên trong mạng lưới. Chương trình này giả lập quá trình bầu cử và chọn ra một delegate chính (Main Delegate) để tạo và xác nhận cac khối mới trong blockchain Dưới đây là phân tích đoạn mã chính:
Class Voter: Đại diện cho một người dùng có thể bỏ phiếu cho các nhà ủy quyền(delegate) Mỗi người dùng có teeb (name) và tài sản (coins) mà họ có thể sử dụng để bỏ phiếu.
Hình 3.9: Class Voter Class Block: Đại diện cho một khối trong blockchain Mỗi khối bao gồm danh sách các giao dịch(transactions), mã hash của khối trước (previous_hash) và tên của đại diện (delegate) đang được bỏ phiếu.
Hình 3.10: Class BlockClass Blockchain: Đại diện cho mạng Blockchain Nó bao gồm danh sách các khối và danh sách các nhà ủy quyền Nó cũng cung cấp các phương thức để thêm các nhà ủy quyền, cập nhật tổng số phiếu bầu của nhà ủy quyền, tạo khối mới và kiểm tra tính hợp lệ của blockchain.
Hình 3.11: Class BlockchainHàm main(): Là hàm chính của chương trình Trong hàm này, một blockchain được khởi tạo và các nhà ủy quyền ban đầu được thêm vào Sau đó, các người dùng (voters) có thể bỏ phiếu cho các nhà ủy quyền, và điểm số của họ sẽ được cập nhật sau quá trình vote Nhà ủy quyền được vote nhiều nhất sẽ trở thành Main Delegates, có thể tạo và các thực các khối mới Cuối cùng, một số khối được tạo và tính hợp lệ của blockchain được kiểm tra.
để thêm giao dịch vào khối.
Khi chạy chương trình, đầu tiên sẽ nhập vào các quyết định vote của người dùng trong mạng để bầu ra nhà ủy quyền:
Hình 3.13: Các quyết định vote của người dùngSau khi nhà ủy quyền đã được bầu ra, tiến hành tạo các khối mới và thêm vào blockchain:
Hình 3.14: Các khối mới được thêm vào blockchain