Độ khó đào Bitcoin là gì? Hiểu đơn giản đào bitcoin là quá trình giải những bài toán phức tạp, và khi giải xong thì phần thưởng sẽ là những đồng coin nhận được. Độ khó đào Bitcoin được tự động chỉnh sửa sao cho trung bình cứ khoảng mỗi 10 phút thì sẽ có một nhóm hoặc một người trên thế giới giải được một Block. Sau đây Coin86 sẽ giải thích cho bạn về độ khó về thuật toán đào Bitcoin.
Tham khảo
Độ khó đào Bitcoin là gì?
Nếu giải thích theo thuật ngữ kĩ thuật thì có thể bạn sẽ rất khó hiểu. Dưới đây Coin86 sẽ cố gắng giải thích theo cách đơn giản nhất có thể. Ok bây giờ chúng ta vào bài thôi.
Hồi bé chắc ai cũng có chơi cờ cá ngựa nhỉ. Trong trò chơi này, mỗi người khi tới lượt của mình sẽ thảy xúc xắc để ra được số nước đi của quân cờ. Giờ mình với các bạn cũng thử chơi thảy xúc xắc nhé
Giả sử chúng ta có 2 viên xúc xắc. Yêu cầu của trò chơi là sau khi thảy, nếu tổng số nút của 2 viên xúc xắc là nhỏ hơn 10 chúng ta sẽ chiến thắng.
Xem hình trên, thì tổng số cơ hội chiến thắng của chúng ta là 30/36 (phần tô màu xanh), hay tương ứng với xác suất chiến thắng là 83.3% (chà, chơi trò chơi mà tỉ lệ thắng cao thế này thì bán nhà cũng chơi).
Bây giờ luật chơi thay đổi tí ti, là nếu tổng số nút của 2 viên xúc xắc là nhỏ hơn 7 chúng ta mới chiến thắng.
Cơ hội chiến thắng của chúng ta rút xuống còn 15/36 ~ 41.7%
Số 10 hay 7 ở đây chúng ta gọi là mục tiêu hay target. Rõ ràng khi target càng nhỏ thì cơ hội chiến thắng của chúng ta cũng nhỏ theo.
Nhưng target này thì có liên quan gì tới độ khó đào Bitcoin nhỉ? Nếu bỏ qua tất cả những thứ như là centralize/decentralize hay lý tưởng cao đẹp gì đó thì việc mining bitcoin cũng là một cuộc chơi, trong đó tất cả các miner cùng nhau giải 1 bài toán (thực chất là tính hash của block header). Target của mạng Bitcoin sẽ được tính toán sao cho thời gian trung bình để 1 miner bất kỳ tìm được lời giải và nhận phần thưởng Bitcoin là 10 phút.
Theo định nghĩa về Target của mạng Bitcoin trên Bitcoin Wiki thì:
The target is a 256-bit number (extremely large) that all Bitcoin clients share. The SHA-256 hash of a block‘s header must be lower than or equal to the current target for the block to be accepted by the network. The lower the target, the more difficult it is to generate a block.
Nghĩa là, các miner phải thực hiện tính hash của block header, và nếu hash này nhỏ hơn hoặc bằng với target hiện tại thì thì hash đó mới được chấp nhận (cũng đồng nghĩa với việc miner đó được ghi block vào blockchain và nhận phần thưởng bitcoin từ hệ thống). Nó cũng nói rằng, target càng thấp thì càng khó để tạo ra một block ==> có vẻ liên quan tới độ khó rồi ha.
Chúng ta định nghĩa, độ khó (hay difficulty) của mạng Bitcoin là sự thay đổi của target hiện tại so với target gốc.
Công thức: difficulty = original_target / target
- original_target: target gốc, là giá trị target lớn nhất của mạng Bitcoin, chính là target trong block 0 của Bitcoin. Giá trị này là cố định.
- target: giá trị target của block hiện tại
Như vậy, rõ ràng khi giá trị target (mẫu số) càng nhỏ thì difficulty càng lớn.
Câu hỏi đặt ra là, chúng ta có thể xem được giá trị target hay difficulty hiện tại của mạng Bitcoin ở đâu? Hãy cùng khảo sát cấu trúc header của 1 block Bitcoin:
Trường bits chính là trường lưu trữ giá trị target của block hiện tại. Tuy nhiên, giá trị này được lưu trữ ở dạng nén (compact) vì chỉ có 4 bytes, trong khi target là một số có 32 bytes. Chúng ta sẽ xem xét cách tính từ giá trị bits ra target ngay bên dưới. Nhưng trước tiên, chúng ta thử quan sát các giá trị này trong 1 block thực tế xem nó như thế nào. Hình bên dưới là header của block 528554 được chụp lại từ trang blockchain.info:
Chúng ta thấy nó hiển thị cả giá trị Bits và Difficulty. Thực ra giá trị difficulty là blockchain.info đã tự tính và thêm vào khi hiển thị cho chúng ta, vì rõ ràng không có trường này trong cấu trúc header. Hai giá trị bits và difficulty tương ứng là 389508950 và 5,077,499,034,879.02. Chúng ta sẽ thử tính xem có ra đúng giá trị như vậy không.
Đầu tiên, chúng ta chuyển đổi giá trị bits ra số Hex: 389508950 = 0x17376f56. Giá trị này chúng ta chia làm 2 phần: 17 và 376f56.
17: kích thước của target theo bytes (lưu ý: 0x17 là số Hexa = 23 bytes theo thập phân)
376f56: giá trị 3 bytes đầu tiên của target
Từ đó ta có được giá trị của target là:
target: 376f560000000000000000000000000000000000000000
hoặc nếu ghi đủ 32 bytes:
target: 000000000000000000376f560000000000000000000000000000000000000000
Với cách tương tự, ta có target gốc (original_target) là giá trị target của block 0, bằng:
original_target: 00000000ffff0000000000000000000000000000000000000000000000000000
Dùng Python tính toán thử difficulty bằng cách áp dụng công thức:
Phew, may mà ra giống giá trị mà blockchain.info đã tính.
OK. Đọc đến đây là các bạn đã hiểu được difficulty là gì và cách tính như thế nào. Câu hỏi cuối: bao lâu thì giá trị difficulty này thay đổi, và điều gì làm nó thay đổi? Hãy quan sát hình sau:
Ta có thể nhận thấy giá trị Difficulty tăng liên tục và trung bình 14 ngày thay đổi 1 lần. Thực tế thì giá trị Difficulty này sẽ thay đổi sau mỗi 2016 block (trung bình 10 phút/block ~ 20160 phút ~ 14 ngày). Sự thay đổi này dựa theo thời gian tìm ra 2016 block trước đó. Nếu thời gian đó ít hơn 20160 phút thì difficulty sẽ tăng. Và ngược lại, nếu thời gian đó nhiều hơn 20160 phút thì difficulty sẽ giảm.
Difficulty phụ thuộc vào:
- Tổng lượng Hashrate của mạng Bitcoin: số lượng miner tham gia càng nhiều thì độ khó càng tăng)
- Sự may mắn: bởi vì hash là một giá trị ngẫu nhiên không thể tính toán trước được. Do đó không có phương pháp nào để tìm được hash. Mà thỏa mãn target ngoài phương pháp brute force, tức thử-sai. Nếu 2016 block trước đó, các miner may mắn nhiều. Nghĩa là tổng thời gian ít hơn 20160 phút thì độ khó tăng, và ngược lại.
Truy cập Kiến thức Crypto và Tin tức Coin của Coin86 để biết thông tin mới nhất.
Đọc thêm
- Hướng dẫn toàn tập cách chơi Bitcoin cho người mới
- Ví Bitcoin là gì? Nên dùng loại ví nào để lưu trữ coin
- Bitcoin Halving là gì? Ảnh hưởng của Bitcoin Halving đến giá BTC
- Tấn công 51% là gì? Sự nguy hiểm của tấn công 51% (51% Attack)