0

Proof of History (PoH)– cơ chế đồng thuận được sử dụng bởi Solana – sử dụng một **Verifiable Delay Function (VDF)**

Chắc chắn rồi! Dưới đây là một ví dụ minh họa đơn giản bằng data mẫu về cách hoạt động của Proof of History (PoH) – cơ chế đồng thuận được sử dụng bởi Solana – sử dụng một Verifiable Delay Function (VDF) để chứng minh thời gian trôi qua giữa các block.


🧠 Tóm lược lý thuyết:

  • PoH = ghi nhận thời gian có thể xác minh được
  • Nó sử dụng một hàm VDF (Verifiable Delay Function) – một phép tính tuần tự mất thời gian và không thể tăng tốc bằng tính toán song song.
  • Mỗi output mới của VDF phụ thuộc vào output trước đó.
  • Khi có chuỗi đầu ra VDF liên tục, ta có thể xác minh được thứ tự và khoảng thời gian các sự kiện xảy ra.

📊 Data mẫu minh họa:

Giả sử VDF là hàm hash lặp lại nhiều lần:

VDF(x) = SHA256(x)  // đơn giản hóa để dễ hiểu

🧪 Ví dụ minh họa:

Block 1:

  • Input ban đầu: "genesis"
  • Số lần hash (delay count): 5
  • Chuỗi hash:
Step Hash (SHA256)
1 hash_1 = SHA256("genesis")
2 hash_2 = SHA256(hash_1)
3 hash_3 = SHA256(hash_2)
4 hash_4 = SHA256(hash_3)
5 hash_5 = SHA256(hash_4)
  • Kết quả cuối (PoH): hash_5

Block 2:

  • Input: hash_5
  • Delay count: 5
  • Hash tiếp tục:
Step Hash (SHA256)
6 hash_6 = SHA256(hash_5)
7 hash_7 = SHA256(hash_6)
8 hash_8 = SHA256(hash_7)
9 hash_9 = SHA256(hash_8)
10 hash_10 = SHA256(hash_9)
  • Kết quả PoH cho block 2: hash_10

✅ Cách xác minh:

Một node khác chỉ cần:

  1. Nhận hash_10 và biết hash_5.
  2. Chạy VDF 5 lần từ hash_5hash_10.
  3. Nếu khớp, thì chứng minh được đã có 5 đơn vị thời gian trôi qua.

Mô phỏng Proof-of-History với VDF:

import hashlib
import time

def sha256(data: str) -> str:
    return hashlib.sha256(data.encode()).hexdigest()

def vdf_chain(start: str, delay: int) -> list:
    chain = [start]
    for _ in range(delay):
        next_hash = sha256(chain[-1])
        chain.append(next_hash)
    return chain

def verify_vdf(start: str, target: str, delay: int) -> bool:
    current = start
    for _ in range(delay):
        current = sha256(current)
    return current == target

# --- Giả lập dữ liệu ---
genesis = "genesis_block"
delay_per_block = 5

# Block 1
chain_block_1 = vdf_chain(genesis, delay_per_block)
print("Block 1 chain:")
for i, h in enumerate(chain_block_1):
    print(f"Step {i}: {h}")

# Block 2 - tiếp tục từ hash cuối của Block 1
start_block_2 = chain_block_1[-1]
chain_block_2 = vdf_chain(start_block_2, delay_per_block)
print("\nBlock 2 chain:")
for i, h in enumerate(chain_block_2):
    print(f"Step {i+delay_per_block}: {h}")

# --- Xác minh PoH của Block 2 ---
is_valid = verify_vdf(start_block_2, chain_block_2[-1], delay_per_block)
print("\nXác minh PoH Block 2:", "✅ Hợp lệ" if is_valid else "❌ Không hợp lệ")

Kết quả.

Block 1 chain:
Step 0: genesis_block
Step 1: a16d0...
Step 2: b47ac...
...
Step 5: e2c1f...

Block 2 chain:
Step 5: e2c1f... (tiếp từ block 1)
Step 6: 37af9...
...
Step 10: ab173...

Xác minh PoH Block 2: ✅ Hợp lệ


🧭 Tổng kết:

  • Mỗi block không cần đồng hồ ngoài, chỉ cần chain hash như vậy là đủ chứng minh thời gian và thứ tự.
  • Việc chèn dữ liệu sự kiện (transaction) vào giữa các bước VDF cho phép ghi nhận chính xác thời điểm các transaction diễn ra.

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí