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
Let's register a Viblo Account to get more interesting posts.