So sánh các cơ chế đồng thuận: Cơ chế nào phù hợp với Blockchain của bạn?

Là một nhà phát triển dày dạn kinh nghiệm với nhiều năm kinh nghiệm, tôi thấy hướng dẫn này là một nguồn tài nguyên tuyệt vời để hiểu các cơ chế đồng thuận khác nhau có thể tác động đáng kể đến hiệu suất, tính bảo mật và độ tin cậy của mạng blockchain.

Công nghệ chuỗi khối đã phát triển và mở rộng đáng kể các ứng dụng của nó, khiến việc lựa chọn thuật toán đồng thuận phù hợp trở thành một trong những quyết định quan trọng. Các thuật toán đồng thuận đóng vai trò là xương sống của các hệ thống blockchain vì chúng không chỉ ảnh hưởng đến bảo mật mà còn tác động đến các yếu tố như khả năng mở rộng, tốc độ giao dịch, mức sử dụng năng lượng và niềm tin của người dùng.

Tại sao lại đổi mới ngoài PoW và PoS?

Khác với các cơ chế đồng thuận thông thường như Proof of Work (PoW) và Proof of Stake (PoS), cả hai đều có một số nhược điểm nhất định: PoW nổi tiếng vì tính chất tiêu tốn nhiều năng lượng, trong khi PoS có thể vô tình dẫn đến việc tập trung hóa, cho phép lựa chọn ít bên liên quan có ảnh hưởng để thống trị mạng lưới. Do đó, các mô hình đồng thuận đổi mới đang phát triển nhằm cung cấp các giải pháp tùy chỉnh hơn phù hợp với các yêu cầu cụ thể như tăng tốc độ trong mạng riêng, xử lý khối lượng giao dịch lớn hoặc đảm bảo hoạt động liền mạch thông qua việc phụ thuộc vào các trình xác thực đáng tin cậy.

Bằng chứng về thẩm quyền

Nói một cách đơn giản hơn, Bằng chứng xác thực là một phương pháp dựa trên độ tin cậy để xác nhận các giao dịch trong đó tính hợp lệ của các khối được xác minh bởi người xác minh được chỉ định (hoặc tài khoản được phê duyệt).

Nhưng điều gì khiến trình xác thực trở nên đáng tin cậy và họ làm cách nào để giữ an toàn cho mạng?

Trình xác thực phụ thuộc vào phần mềm để gộp các giao dịch thành các khối, giảm nhu cầu giám sát màn hình liên tục. Tuy nhiên, việc duy trì tính bảo mật và bảo vệ máy tính của họ, thường được gọi là “nút thẩm quyền”, là điều quan trọng để duy trì tính toàn vẹn của mạng.

Một cách minh bạch, người xác nhận nên tiết lộ danh tính của họ cho cộng đồng. Sự cởi mở này thúc đẩy trách nhiệm giải trình và sự tin tưởng giữa những người tham gia mạng lưới. Tính minh bạch như vậy phù hợp tốt với các hệ thống blockchain được cấp phép, nơi những người xác thực thường dựa vào danh tiếng của họ để đảm bảo độ tin cậy.

Với tư cách là một nhà phân tích, tôi mô tả Proof of Authority là việc giao nhiệm vụ xác thực giao dịch cho một nhóm cá nhân đáng tin cậy, những người được tin cậy vì vị thế tốt của họ. Không giống như các phương pháp truyền thống dựa vào những câu đố tiêu tốn năng lượng, những cơ quan chức năng này được chọn vì danh tiếng của họ, khiến người khác dễ dàng tin tưởng họ hơn. Cách tiếp cận này tăng tốc và tối ưu hóa quy trình, nhưng điều quan trọng cần nhớ là hiệu quả của nó phụ thuộc vào niềm tin đặt vào các cơ quan chức năng này.

Dưới đây là ví dụ cơ bản về cơ chế đồng thuận PoA:

nhập hashlib
thời gian nhập

Trình xác thực lớp:
def __init__( tự, tên, khóa riêng):
self.name = tên
self.private_key = Private_key

 def sign_block(self, data):
trả về hashlib.sha256((self.private_key +
data).encode). hexdigest

lớp PoABlockchain:
def __init__(self, validators):
self .chain = []
self.validators = trình xác thực

def add_block(self, data, validator):
if trình xác thực trong self.validators:
signed_block = {
‘data’: data,< br/>‘validator’: validator.name,
‘signature’: validator.sign_block(data),
‘timestamp’ : time.time
    >
 self. chain.append(signed_block)
 print(f”Khối được ký bởi {validator.name}: {signed_block}”)
        else:
print(“Trình xác thực không được ủy quyền!”)

# Khởi tạo trình xác thực
validator1 = Trình xác thực (“Validator1”, “key1”)
validator2 = Trình xác thực(“Validator2”, “key2”)
validators = [validator1, validator2]

# Thêm khối
poa_chain = PoABlockchain(validators)
poa_chain.add_block( “Dữ liệu giao dịch 1”, trình xác thực1)
poa_chain.add_block(“Dữ liệu giao dịch 2”, trình xác thực2)

Bằng chứng lịch sử

Bằng chứng lịch sử (PoH) là một cơ chế đồng thuận do Solana nghĩ ra với mục tiêu nâng cao khả năng mở rộng và tốc độ của chuỗi khối. Không giống như các phương pháp truyền thống yêu cầu sự thỏa thuận thường xuyên giữa các nút cho mỗi giao dịch, PoH giới thiệu một “lịch” có thể xác minh được của các sự kiện được băm, hoạt động giống như một chiếc đồng hồ kỹ thuật số trong đó mỗi tích tắc biểu thị vị trí của một sự kiện theo trình tự. Điều này giúp mọi người dễ dàng theo dõi và xác minh niên đại. Bằng cách tránh việc đăng ký liên tục giữa các nút, phương pháp này tăng tốc độ giao dịch và cải thiện hiệu quả cũng như tốc độ tổng thể của chuỗi khối.

Xác minh lịch sử về cơ bản liên quan đến việc thiết lập một chuỗi các sự kiện có trật tự dùng làm bằng chứng về thời điểm xảy ra các sự kiện cụ thể. Không giống như việc giải các câu đố phức tạp, nó chỉ đơn giản đảm bảo rằng mỗi giao dịch có thể được kiểm tra chéo dựa trên nhật ký để xác nhận dòng thời gian của nó. Phương pháp này hợp lý hóa hệ thống bằng cách loại bỏ nhu cầu xác minh và xác minh lại liên tục.

nhập hashlib
thời gian nhập

lớp ProofOfHistory:
def __init__( self, init_seed=”initial”):
self.seed = init_seed
self.history = []

lớp ProofOfHistory:
def __init__(self, init_seed=”initial”):
self.seed = init_seed
self.history = []

def generate_proof(self):
proof = hashlib.sha256(self.seed.encode).hexdigest
self.history.append(proof)
# Cập nhật hạt giống cho bằng chứng tiếp theo
self.seed = bằng chứng
bằng chứng trả về
# Mô phỏng chuỗi PoH
poh = ProofOfHistory
cho i trong phạm vi(5):

proof = poh.generate_proof
print(f”PoH Hash {i + 1}: {proof}”)
time.sleep(1)  # Mô phỏng thời gian trôi qua giữa các lần chứng minh b>

Bằng chứng về cổ phần được ủy quyền

Trong hệ thống Bằng chứng cổ phần được ủy quyền (DPoS), một dạng Bằng chứng cổ phần được sử dụng, nhưng thay vì những người xác thực riêng lẻ, có một hệ thống giống như nền dân chủ đại diện nơi các đại diện được chọn để đặt cược và xác minh mã thông báo cũng như giao dịch trên thay mặt cho cử tri của họ.

Trong thiết lập Bằng chứng cổ phần được ủy quyền (DPoS), chủ sở hữu mã thông báo không đích thân xác minh các giao dịch. Thay vào đó, họ bỏ phiếu để bầu ra một số lượng hạn chế các cá nhân được gọi là “đại diện” hoặc “đại biểu”. Những đại diện được bầu này đảm nhận nhiệm vụ tạo các khối mới và xác thực các giao dịch trong hệ thống. Các đại biểu có nhiều phiếu bầu nhất được chọn làm nhà sản xuất khối.

Trong hệ thống DPoS (Bằng chứng cổ phần được ủy quyền), người dùng có cơ hội bỏ phiếu liên tục, nghĩa là họ có thể thường xuyên bỏ phiếu hoặc chuyển đổi đại diện (đại biểu) đã chọn của mình, tùy thuộc vào hiệu suất của họ.

Bằng chứng cổ phần được ủy quyền hoạt động tương tự như việc bầu một nhóm để quản lý nhiệm vụ xác minh giao dịch. Bạn sở hữu một số token nhất định, cho phép bạn bỏ phiếu cho những người đại diện đáng tin cậy, những người sẽ chịu trách nhiệm xác thực các giao dịch. Phương pháp này tăng tốc hệ thống vì chỉ một số ít cá nhân đáng tin cậy thực hiện công việc.

Tại đây, những cá nhân sở hữu token (như Alice, Bob và Carol) bỏ phiếu cho các đại biểu, việc lựa chọn bị ảnh hưởng bởi số cổ phần tương ứng của họ. Sau đó, hai đại biểu được bình chọn cao nhất sẽ có quyền tạo các khối mới.

từ bộ sưu tập import defaultdict

# Lớp mẫu cho hệ thống chuỗi khối DPoS
lớp DPoSBlockchain:
def __init__(self):self.token_holders = defaultdict(int)  # Lưu trữ chủ sở hữu mã thông báo và cổ phần của họ
 self.delegates = {}  # Lưu trữ các đại biểu được bầu
self.votes = defaultdict(int)  # Lưu trữ phiếu bầu cho đại biểu

 def add_token_holder(self, chủ sở hữu, cổ phần):
“””Thêm chủ sở hữu mã thông báo và cổ phần của họ.””
self.token_holders[holder] = cổ phần

 def vote_for_delegate(tự, chủ sở hữu, đại biểu):
“””Người nắm giữ mã thông báo bỏ phiếu cho đại biểu đã chọn của họ.”””
nếu chủ sở hữu không có trong self.token_holders:
raise ValueError(“Chủ sở hữu mã thông báo chưa được đăng ký.”)
self.votes[delegate] += self.token_holders[holder]  # Quyền biểu quyết dựa trên cổ phần

def elect_delegates(self, num_delegates):
“””Elect những đại biểu hàng đầu dựa trên số phiếu bầu.”””
sorted_delegates = được sắp xếp(self.votes.items, key=lambda x: x[1], Reverse=True)< br/>self.delegates = {delegate: phiếu bầu cho đại biểu, phiếu bầu trong Sort_delegates[:num_delegates]
print(f”Đại biểu được bầu: {self.delegates}”)

def production_block(self):
“””Mô phỏng việc sản xuất khối của các đại biểu được bầu.”””< br/>dành cho đại biểu trong self.delegate:
print(f”Khối do {delegate} tạo ra với {self.delegates[delegate]} phiếu bầu”)

# Cách sử dụng ví dụ
blockchain = DPoSBlockchain
blockchain.add_token_holder(“Alice”, 100)
blockchain.add_token_holder(“Bob”, 150)
blockchain.add_token_holder(“Carol”, 200)
< br/>
blockchain.vote_for_delegate(“Alice”, “Delegate1”)
blockchain.vote_for_delegate(“Bob”, “Delegate2”)< br/>blockchain.vote_for_delegate(“Carol”, “Delegate1”)

# Bầu 2 đại biểu đứng đầu
blockchain.elect_delegates(2)
blockchain.produce_block

Khả năng chịu lỗi Byzantine thực tế

Nói một cách đơn giản hơn, Dung sai lỗi Byzantine thực tế (PBFT) là một phương pháp được sử dụng để đạt được thỏa thuận giữa các nút trong mạng, ngay cả khi một số nút đó có thể bị lỗi hoặc hoạt động không trung thực. Điều này làm cho nó mạnh mẽ chống lại các loại vấn đề khác nhau.

Trong hệ thống phân tán, các thành phần có thể cố tình gây nhầm lẫn hoặc xung đột bằng cách phổ biến dữ liệu mâu thuẫn do lỗi hoặc lỗi lập trình và điều này được gọi là Dung sai lỗi Byzantine.

Về bản chất, Byzantine Fault Tolerance (BFT) đóng một vai trò quan trọng trong cả chuỗi khối và hệ thống phân tán vì nó cung cấp cấu trúc để đảm bảo độ tin cậy của hệ thống ngay cả khi một số người tham gia có thể không đáng tin cậy hoặc độc hại.

Dung sai lỗi Byzantine (BFT) về cơ bản có nghĩa là hệ thống có thể tiếp tục hoạt động trơn tru ngay cả khi một số người tham gia cố tình làm gián đoạn hệ thống hoặc hành động không trung thực hoặc khi một số bộ phận gặp trục trặc. Nó tương tự như một nhóm người đang cố gắng đưa ra quyết định. Ngay cả khi một số ít cá nhân nói dối hoặc từ chối tham gia, miễn là đa số đồng ý thì quyết định đó được coi là đáng tin cậy.

Cơ chế:

Ban đầu, trong Dung sai lỗi Byzantine xác suất (PBFT), một giả định được đưa ra là trong tổng số nút, khoảng một phần ba cộng với một nút có thể có khả năng hoạt động độc hại. Điều này ngụ ý rằng nếu có các nút ‘n’, xung quanh các nút ‘f’ sẽ được coi là có thể độc hại, với ‘f’ nhỏ hơn n/3 + 1.

PBFT đạt được sự đồng thuận thông qua quy trình giao tiếp ba giai đoạn giữa các nút: Quá trình chuẩn bị trước→Giai đoạn chuẩn bị→Giai đoạn cam kết.

lớp PBFTNode:
def __init__(self, name):
self.name = name
self.messages = []

def send_message(self, message, node):
dành cho nút trong các nút:
if node.name != self.name:
node.receive_message(message, self.name)
< br/>def nhận_message(tự, tin nhắn, người gửi):
self.messages.append((người gửi, tin nhắn))
print(f”{self.name} đã nhận được tin nhắn từ {sender}: {message}”)

# Khởi tạo các nút
nút_A = PBFTNode(“Node_A”)
node_B = PBFTNode(“Node_B”)
node_C = PBFTNode(“Node_C”)

# Mô phỏng việc truyền tin nhắn
nodes = [node_A, node_B, node_C]
node_A.send_message( “Chặn đề xuất”, nút)
node_B.send_message(“Chặn đề xuất”, nút)
node_C.send_message(“Chặn đề xuất”, nút )

Mô hình đồng thuận kết hợp

Kết hợp các yếu tố từ các phương pháp đồng thuận khác nhau như Proof-of-Work (PoW) và Proof-of-Stake (PoS), hoặc Proof-of-Authority (PoA) và Proof-of-Stake, các mô hình đồng thuận lai hoạt động để đạt được sự cân bằng giữa bảo mật, tốc độ và phân cấp.

Về bản chất, các mô hình đồng thuận lai kết hợp các khía cạnh mạnh nhất của các hệ thống khác nhau, nâng cao tính bảo mật, tốc độ và khả năng thích ứng. Để minh họa, hãy xem xét một kịch bản blockchain trong đó một phương thức được sử dụng để xác minh giao dịch trong khi phương thức khác đảm bảo tính bảo mật. Cách tiếp cận kết hợp này cho phép hệ thống xử lý nhiều giao dịch hiệu quả hơn và khiến các mối đe dọa tiềm ẩn khó xâm nhập hơn.

Có rất nhiều sự kết hợp có thể có của sự đồng thuận kết hợp và đây là một số sự kết hợp chính:

  • Bằng chứng công việc + Bằng chứng cổ phần (PoW + PoS): Thường được sử dụng để bảo mật lớp cơ sở bằng PoW trong khi sử dụng PoS để xác thực các giao dịch, như trong Decred và Kadena. Thiết lập này cung cấp cả tính bảo mật của PoW và hiệu quả của PoS.
  • Bằng chứng về cổ phần + Dung sai lỗi Byzantine (PoS + BFT): Trình xác thực PoS xử lý việc đặt cược, trong khi BFT đảm bảo tính cuối cùng của giao dịch. Cosmos và Algorand sử dụng các biến thể của phương pháp này để đảm bảo sự đồng thuận ngay cả với các nút độc hại hoặc không đáng tin cậy.
  • Bằng chứng về quyền lực + Dung sai lỗi Byzantine thực tế (PoA + PBFT): Mô hình này kết hợp sự đồng thuận dựa trên trình xác thực của PoA với khả năng chịu lỗi và tấn công của PBFT. Hyperledger Fabric và VeChain sử dụng mô hình này, cho phép thiết lập chuỗi khối được cấp phép, tốc độ cao.
nhập hashlib
nhập ngẫu nhiên

class HybridBlockchain:
def __init__( self, người xác thực):
self.chain = []
self.validators = người xác thực

def proof_of_work(bản thân, dữ liệu, độ khó=”000″):
nonce = 0
trong khi Đúng:

hash_result = hashlib.sha256((data +
str(nonce)).encode).hexdigest
if hash_result.startswith(độ khó):
trả về số không, hash_result
nonce += 1

def add_block(self, data):
nonce, hash_result = self.proof_of_work(data)
validator = Random.choice(self.validators)
block = {< br/>
‘dữ liệu’: dữ liệu,
‘nonce’: nonce,
‘hash’: hash_result,
‘validator’ : trình xác thực,
‘status’: ‘Được phê duyệt’ nếu trình xác thực trong self.validators khác ‘
Bị từ chối’

self.chain.append(block)< br/>print(f”Khối được thêm bởi trình xác thực {validator}: {block}”)

# Khởi tạo trình xác thực
trình xác thực = [“Trình xác thực1”, “Trình xác thực2”, “Validator3”]

# Thêm các khối với PoW + PoS lai
hybrid_chain = HybridBlockchain(validators)
hybrid_chain.add_block(“Dữ liệu giao dịch 1”)
hybrid_chain.add_block(“Dữ liệu giao dịch 2”)

Chọn Cơ chế đồng thuận phù hợp nhất cho ứng dụng của bạn:

Cơ chế đồng thuận Tính năng chính Trường hợp sử dụng Khả năng mở rộng và bảo mật
Bằng chứng về quyền lực (PoA) Trình xác thực đáng tin cậy với danh tính được xác định trước. Mạng lưới tập đoàn tư nhân/blockchain. Cao & Cao
Bằng chứng lịch sử (PoH) Dấu thời gian để chứng minh thứ tự của các sự kiện. Thông lượng cao, ví dụ: chuỗi khối Solana. Rất cao & Trung bình
Bằng chứng cổ phần được ủy quyền (DPoS) Bỏ phiếu cho các đại biểu đáng tin cậy để xác nhận các khối. Blockchain công khai với nhu cầu về khả năng mở rộng. Cao & Trung bình
Dung sai lỗi Byzantine thực tế (PBFT) Khả năng phục hồi chống lại các nút bị lỗi bằng cách sử dụng đại biểu. Chuỗi khối được cấp phép với độ tin cậy. Trung bình & Rất cao
Mô hình đồng thuận lai Kết hợp các tính năng từ nhiều loại đồng thuận. Khác nhau, tùy theo nhu cầu cụ thể. Rất Cao & Cao

Kết luận

Thông qua việc nắm bắt các chiến lược đồng thuận mang tính đột phá này, các nhà phát triển có thể nâng cao chức năng, độ an toàn và độ tin cậy của dự án của họ. Bằng cách cung cấp các minh họa mã hóa cụ thể, hướng dẫn này cho phép bạn kiểm tra PoA, PoH, DPoS, PBFT và các mô hình hỗn hợp để khám phá sự phù hợp phù hợp cho hệ thống blockchain của bạn. Để mở rộng hơn nữa kiến ​​thức chuyên môn của bạn, hãy đi sâu vào các tài liệu học tập nâng cao như Cosmos SDK, Tendermint và Hyperledger Fabric.

Chúc bạn viết mã vui vẻ và tiếp tục học tập!!

2024-11-16 09:09