Proof of Work

Blockchain Example · GitHub

BlockChain

  • Gồm 1 chain - chuỗi các block
  • difficulty - Độ khó. Độ khó này sẽ tăng lên, tùy thuộc vào số lượng miners, hoặc 1 thuật toán xác định của người lập trình. (Ví dụ độ khó sẽ tăng gấp đôi sau mỗi 4 năm)
  • Cần khởi tạo 1 block nguyên thủy
  • Các pool sẽ cố gắng add_block vào chain.

Notes

Hàm Proof of Work (PoW) trong blockchain yêu cầu tìm ra một giá trị nonce sao cho: hash(block) bắt đầu bằng X số lượng số 0. Trong đó X là độ khó của chain.

  • Ví dụ: Độ khó = 6 thì các pool cần tìm ra số nonce sao cho hash phải bắt đầu bằng 6 số “0” (“000000”)

  • Vấn đề: Hash SHA-256 trong Ruby tạo ra một chuỗi ngẫu nhiên dài 64 ký tự dạng hex (từ “0” đến “f”). Ví dụ:

    • a0f1c48e… Không hợp lệ
    • 000000f5a8… Hợp lệ (vì bắt đầu bằng 6 số 0)
  • Hàm Hash này hoàn toàn ngẫu nhiên, nên cách duy nhất để tìm ra hash hợp lệ là phải thử tất cả các giá trị nonce từ 0 ∞ cho đến khi tìm được.

  • Nếu độ khó tăng lên, Tỷ lệ tìm được hash đúng giảm đi, trong khi bạn cần thử nhiều lần hơn, thời gian tính toán thì tăng lên theo cấp số nhân.

Độ khó càng cao, Blockchain càng bảo mật.

Do phải bỏ quá nhiều công sức trong việc tính toán, nên Blockchain sẽ hạn chế được Sybil Attack.

Questions

  • Hash generate hoàn toàn ngẫu nhiên, vậy tức là có lúc thì thử rất lâu, lúc lại ra kết quả rất nhanh đúng không?
    • Đúng. Khi tìm ra số nonce hoàn toàn là may mắn. Bạn có thể dùng các siêu máy tính để thử được nhiều lần hơn, nhưng nếu bạn đen tôi đỏ thì tôi chỉ cần random 1 lần ăn ngay rồi.