[Bitcoin] Bài toán của các thợ mỏ


Có một câu hỏi khá hay được đặt ra về cách mà thợ mỏ có được bitcoin trên groups của Science2vn. Và vì trả lời nó khá dài dòng nên mình sẽ viết một bài nói về cái này.
Link của câu hỏi:
"Các thợ đào còn được trả công cho việc mã hoá các khối (block) nhật ký giao dịch. Cứ mỗi 10 phút, một khối mới được tạo ra kèm theo một lượng Bitcoin được cấp phát. Số bitcoin được cấp cho mỗi khối phụ thuộc vào thời gian hoạt động của mạng lưới"
Vậy theo các bác thì bicoin trả cho thợ đào được lấy từ đâu và từ đâu mà coin mới sinh ra. Theo coinmarketcap thì hiện đang có 16,529,462 BTC và còn lại 4470538 BTC chưa được khai thác. Vậy họ khai thác coin mới từ đâu ra khi không có bất kì một nhà cung cấp bitcoin nào(dạng như tiền tệ VN thì có kho bạc cung cấp nhưng BTC thì làm gì có một bên nào như thế)?
===========
Ở bài này mình sẽ bỏ qua các khái niệm cơ bản của Bitcoin. Chỉ tập trung đào sâu vào bài toán của các thợ mỏ. Cho nên để hiểu được phần này các bạn cần phải nắm một số thứ cơ bản về bitcoin trước đó. Khi đọc qua các lời giới thiệu về bitcoin, mọi người thường gặp đoạn nói về các thợ mỏ sẽ giải bài toán gì gì đó. Ai giải ra nhanh hơn thì sẽ nhận được phần thưởng. Nhưng cụ thể bài toán đó như thế nào thì ít có bài nào nói sâu vào. Để hiểu và bắt đầu thì chúng ta sẽ cần tìm hiểu một chút về hàm băm và mã hóa bảo mật dữ liệu.
Hàm băm là hàm mà đầu vào là dữ liệu gốc X, có độ dài bất kỳ. Đầu ra là một chuỗi chữ số Y có độ dài cố định. Ví dụ Y của hàm băm SHA256 có độ dài là 64 ký tự,  Y = SHA256(X).
SHA256("spiderum.com") = bd2e014a2b681a8b8ec9dff14ffd9fadbdfee9530b74c3d629480774d61950a2
SHA256("") = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Và chỉ cần thay đổi một chút xíu ở dữ liệu đầu vào các bạn sẽ có được một kết quả khác hoàn toàn. [s]-->[S]
SHA256("Spiderum.com") = 83e1c1f5c6a3fc62f4c1bf4e6f1bfb3dcd8218e3f5d84610576861dfb7b4fc53
Và người ta đã nghĩ ra cách để mã hóa dữ liệu như thế này: Ở đầu vào, ngoài dữ liệu gốc X ra thì người ta sẽ thêm vào đó một đoạn dữ liệu nữa. Đoạn này được gọi là nonce (key/salt/). Và áp dụng vào hàm băm SHA256(X+nonce) = Z. Z sẽ khác hoàn toàn so với Y ban đầu.
Đây chính là ứng dụng cho việc mã hóa dữ liệu và truyền đi trong mạng internet. Giá trị của nonce sẽ đóng vai trò như một chìa khóa (key) bí mật để bảo vệ phần dữ liệu X được truyền đi. Ở phía người nhận chỉ khi có được key nonce thì người ta mới có thể xác nhận được X họ đang có là đúng.
Ứng dụng rõ nhất của SHA256 thường thấy là dùng cho việc đăng nhập vào các tài khoản online. Máy chủ sẽ lưu trữ Y của các bạn, và khi đăng nhập, bạn gõ email+ mật khẩu vào ô nhưng thứ truyền đi tới máy chủ sẽ là Y' = SHA256("email+mật khẩu") và máy chủ sẽ so sánh Y và Y' có khớp với nhau hay không, nếu khớp thì bạn sẽ được cấp token sử dụng chức năng của trang vừa đăng nhập. Do đó, dù hacker có lấy được database của máy chủ thì họ cũng không thể biết được mật khẩu và email của bạn. Y của hàm băm SHA256 là không thể dịch ngược.
Quay lại bài toán của thợ mỏ. Công việc của họ là gì?
Sổ cái của bitcoin là dạng blockchain. Là một chuỗi dài của các khối SHA256 nối đuôi vào nhau. Khối sau sẽ chứa thông tin|sự thay đổi|thời gian thay đổi của khối trước nó. Cho nên muốn tạo giả một thông tin ở khối hiện tại cho nó sai đi, bạn cần thay đổi dữ liệu khối trước đó và kéo theo bạn cần sửa dữ liệu khối trước đó nữa... Và nghĩa là bạn phải tạo ra một sổ cái mới hoàn toàn. Khi đó những người đang giữ bản sao của sổ cái cũ sẽ đối chiếu và bỏ phiếu loại bạn ra khỏi "vòng thi đấu". Và ở đây sẽ có phần công việc cho các thợ mỏ. Ngoài việc tham gia hệ thống để xác minh tính chính xác của sổ cái. Một phần việc khác của các thợ mỏ, đó là tạo ra khối SHA256 mới. Họ sẽ quyết định cái khối SHA256 nào sẽ được ghi tiếp vào sổ cái.
Khối mới được ghi vào sổ cái sẽ là [SHA256(các giao dịch|thời gian|dữ liệu sổ cũ)]. Nhưng với dữ liệu có sẵn thế thì hàm băm này chả có gì khó cả, nó sẽ được giải quyết trong vòng một phần tỷ của một nốt nhạc. Và đây chính là chỗ để sinh ra bài toán cho các thợ mỏ.
Các thợ mỏ sẽ được yêu cầu tìm ra một chuỗi SHA256 khác sao cho chuỗi này có giá trị nhỏ hơn một số D cho trước. Chuỗi này vẫn sẽ chứa các thông tin về giao dịch|thời gian|dữ liệu sổ cũ. Nhưng sẽ được gắn thêm một đoạn nonce vào nữa.
Công thức như sau SHA256(X + nonce) < D.
Với X là dữ liệu của hệ thống đã biết, D là giá trị yêu cầu. Việc làm của thợ mỏ là tìm xem cái nonce nào hợp lệ cho công thức trên. Ai tìm được nonce trước thì người đó sẽ thắng và khối mới sẽ sử dụng nonce của người đó để tạo ra và đồng thời hệ thống cũng sẽ ghi nhận luôn rằng chính người thợ mỏ đó sở hữu lượng bitcoin mới được sinh ra.
Số D này sẽ có liên hệ với giá trị độ khó difficulty của hệ thống. Nếu hệ thống có tổng hash rate (tốc độ tính toán) càng cao thì difficulty sẽ càng lớn, số D này sẽ càng nhỏ và việc tìm ra nonce sẽ càng khó. Số D này sẽ được hệ thống tính toán lại sau mỗi 2016 blocks được sinh ra, nhằm đảm bảo khoản thời gian 10 phút cho mỗi lượt sinh coin mới.
Lấy một ví dụ cho dễ hiểu. Giả sử bài toán yêu cầu hàm SHA256(X + nonce) < 0x64 nghĩa là D = x64 ( = 100 ở hệ thập phân). Dữ liệu X có rồi. Thì ta sẽ có 99 kết quả của nonce thỏa mãn yêu cầu sao cho SHA256(X+nonce) < 100. SHA256(X+nonce) có thể là bất kỳ giá trị nào từ [1-99]. Giả sử độ khó difficulty tăng lên gấp đôi, thì giá trị D này sẽ giảm đi một nửa và sẽ bằng 50. Khi đó bài toán sẽ khó hơn với yêu cầu là SHA256(X+nonce) < 50, chúng ta chỉ có 49 khả năng cho nonce đúng. Các giá trị thõa mãn D cũ như 78, 65, 69 sẽ không được chấp nhận với D mới này. Tương tự như vậy, nếu độ khó difficulty giảm đi 3 lần, thì số đáp án có thể đạt được cũng tăng lên 3 lần. Điều này sẽ giúp đảm bảo thời gian tính toán sinh coin mới luôn nằm trong khoản 10 phút. Điều này cũng là nguyên nhân dẫn đến việc càng nhiều thợ mỏ tham gia thì việc đào ra coin càng có tỉ lệ thấp.
Đây là một ví dụ thực tế của D = 0x00000000000404CB000000000000000000000000000000000000000000000000
Như vậy ta có thể trả lời được câu hỏi thợ mỏ làm gì và bitcoint từ đâu ra.
Số 21 triệu bitcoin là giới hạn. Không phải là cái mốc. Vì cứ 4 năm một lần thì số coin sinh ra giảm đi một nửa sau mỗi 10 phút. Đến năm 2140 thì số coin sẽ đạt gần đến mức 21 triệu chứ không phải đúng 21 triệu. Số lượng sinh ra coin lúc đó sẽ rất nhỏ. Vì mỗi 4 năm chia đôi một lần mà. Chia đôi mãi một số thì nó không bao giờ về 0 cả. Nó chỉ về con số rất nhỏ thôi :v
Đến đây là hy vọng các bạn có thể nắm được phần nói về bài toán của các thợ mỏ trong hệ thống bitcoin. Và hiểu được cơ chế sinh ra coin mới của hệ thống này.
-ThanhCj-

16
4234 lượt xem
16
18
18 bình luận