Please or Register to create posts and topics.

Blockchain là gì? Đào Bitcoin là gì?

BLOCKCHAIN là gì?
Blockchain là từ được ghép từ 2 từ block và chain. Block có thể dịch ra là khối, nơi lưu những giao dịch (transaction) được mã hoá bằng hash (hash function). Khi một khối được hình thành, nó sẽ được gắn vào khối trước đó, khối trước đó được gắn vào khối trước đó, cho đến khối đầu tiên (genesis block), từ đó thì chúng tạo thành một chuỗi (hình 1). Vì vậy, có thể hiểu một cách tóm tắt blockchain là chính là sổ cái (ledger), lưu trữ lại tất cả các giao dịch từng xảy ra trong các khối sắp xếp theo thứ tự thời gian. Với ngân hàng truyền thống, sổ cái này thuộc về ngân hàng, và chỉ có ngân hàng mới có thể truy cập vào đó (private). Trong blockchain, sổ cái này không thuộc quyền sở hữu của bất kỳ ai, và ai cũng có thể truy cập (public) và duy trì nó. Những thợ đào (miner), chính là người xử lý những giao dịch, bỏ chúng vào khối, và sau đó là ghép các khối vào chuỗi.

Lý thuyết là vậy, để hiểu rõ hơn cả việc block, blockchain, và miner trong thực tế là gì, liên hệ ra sao, mời anh em đọc tiếp.

Đào Bitcoin là gì?

Hash trong blockchain là gì?
Để giải thích đào Bitcoin là gì, mình phải nói sơ về mã hoá hash mà khi nãy mình có đề cập: “các giao dịch trong một block được mã hoá hash”. Hash là một cách để mã hoá dữ liệu.
Một cách dễ hiểu là dữ liệu thông qua hash, nó sẽ được mã hoá thành một chuỗi ký tự và số vô nghĩa, một cách random.

Có ba đặc tính quan trọng của mã hoá hash:

  • Cùng một thông tin giống nhau hoàn toàn, bạn sẽ có một chuỗi hash tương tự.
  • Không quan trọng thông tin anh em đưa vào ít hay nhiều, có thể là cả trang giấy, cả cuốn sách, hay chỉ là một ký tự, hay không có gì hết, anh em đều có một chuỗi hash.
  • Gần như bạn không thể dịch ngược lại thông tin sau khi đã mã hoá. Có nghĩa là mình cho anh em cái chuỗi hash đó, anh em gần như không thể dịch lại cái thông tin mình đã cung cấp ban đầu. Anh em gần như, chỉ có thể đoán mò, bằng cách đưa thông tin đầu vào cho đến khi cái chuỗi hash nó tương tự.

Anh em xem thử GIF minh hoạ dưới đây nhé. Khi mình gõ: “Hoang”, mình có một chuỗi hash: 8fd446866f86f2cc6e71b1697c0b4379036b087d1b7bfd73c8894e3c45cc45e9. Mình xoá, rồi gõ lại bao nhiêu lần đều ra y chang cái chuỗi hash đó.
Nhưng nếu có thay đổi nhỏ, ví dụ mình gõ: “hoang”, thì nó lại có chuỗi hash khác: 270723e7f50a26d4ae90da0e13079f293dd37e9953f7f9801ce7de19a35fc58e.

Bai 2_video 1.gif

Hash trong Bitcoin là: “64-bit hexadecimal numbers”. Cái hash này có kích thước 64 bits. Hexadecimal numbers có nghĩa là hash 1 ký tự trong chuỗi hash có thể là một trong những con số từ 0 tới 9 (decimal) hoặc là một trong 6 ký tự (hexa): a, b, c, d, e và f.
image.png

Block trong blockchain là gì?
Okay, bây giờ anh em biết thông tin được mã hoá hash như thế nào. Về cơ bản một block sẽ có những thông tin như sau:

  • Block: thứ tự của block hiện tại (n).
  • Nonce (number only used once): một con số bất kỳ (random).
  • Data: chứa những giao dịch (transaction).
  • Target hash: Hash của block, có rất nhiều yếu tố để tạo ra hash của một block (ba cái thông tin phía trên, độ khó (difficulty), vân vân). Anh em nhớ phía trên không, input khác nhau, sẽ cho ra cái hash khác nhau. Anh em có thể hiểu tóm tắt là, cái hash này là cái hệ thống nó tạo ra, và các miner phải tìm ra để được thưởng Bitcoin.

Tất cả miner, đều nhận được data: thông tin về các giao dịch như nhau của một block như nhau, tất tần tật các thông tin khác cũng giống nhau, ngoại trừ cái nonce. Họ đào (mine) hay xử lý cái block đó ở đây, không có nghĩa họ phải đi tìm ra cái hash của cái block (gần như là không thể), mà họ đi đoán mò cái “nonce”. Họ đoán cho tới khi cái nonce của họ cho ra cái hash giống như cái hash của cái block.

Anh em xem dùm mình tấm hình dưới đây, là thông tin của block #695359 đã được đào vào ngày 12/08/2021. Anh em để ý dùm mình dòng đầu tiên – Hash, đây là hash của block mà mình nói phía trên, và dòng thứ 13 – Nonce, mà miner này tìm, cho ra cái khác gần đúng với cái hash của block. Mình sẽ nói về vấn đề gần đúng phía dưới.
Screenshot 2021-08-13 at 21.49.08.png
Nguồn: blockchain.com.

Để dễ hình dung anh em xem GIF dưới đây dùm mình. Mình cũng như các miner khác đều có cùng thông tin của cái block đó: block number (trường hợp này là block đầu tiên – genesis block), data (trường hợp này là Hoang Nguyen). Anh em có để ý thấy cái block của mình màu đỏ không, tức là cái nonce của mình không đúng. Mình thử gõ từ đủ thứ số vào mục nonce, nhưng nó vẫn màu đỏ, tức là cái hash của mình chưa đúng. Để nhanh hơn, mình nhấn nút mine, hệ thống bắt đầu sẽ thử từng con số, cho tới cái nonce: 2811, cho ra cái hash: 0000d015fd0dc9ee0d5e6036ab7e9444c8c35fe0a330dbe0826824a3d32f53db, đúng và cái block nó chuyển thành màu xanh. Vậy là mình đã đào được một block rồi.
[​IMG]

Hy vọng tới đây anh em đã hiểu công việc của miner là đi mò ra cái nonce để cho ra cái hash gần đúng với cái hash của block mà hệ thống nó đặt ra. Vậy gần đúng là gì? Để được thưởng cho việc đào thành công một block, miner phải là người tìm ra nonce, cho ra cái hash gần bằng hoặc ít hơn cái target hash. Để dễ hình dung anh em xem thử tấm hình phía dưới dùm mình.
[​IMG]

Giả sử cái hash của block là cột target, là cái hash mà các miner phải tìm ra )dựa trên việc thử và sai cái nonce).

  • Miner 1: Cái hash không thoả mãn cái điều kiện gần bằng hoặc nhỏ hơn, do target hash có 17 con số 0, hash của miner 1 chỉ có 16 con số 0.
  • Miner 2: khá hơn một chút, có 17 con số 0, nhưng con số thứ 18 – d, lại lớn hơn con số thứ 18 – 5 của target hash. Anh em xem lại cái bảng bên trên, ký tự ‘d’ tương ứng với số 13 trong hexadecimal, và 13 dĩ nhiên là lớn hơn 5 của target hash rồi.
  • Miner 3: ký tự 18 là số 4, nhỏ hơn 5 của target hash. Vậy là trong 3 người miner này, thì miner số 3 sẽ nhận được Bitcoin như là block reward.

Miner nào tìm ra cái nonce cho chuỗi hash gần bằng hoặc nhỏ hơn target hash sẽ là người nhận được block reward. Cái này trong blockchain, người ta gọi là proof of work (mình không biết dịch ra tiếng Việt là gì). Một số anh em sẽ nghĩ đây giống như trò đoán mò, và hên xui. Chính xác việc đào Bitcoin và một số cryptocurrency khác là trò đoán mò. Nên để tăng khả năng đoán trúng, những miner hiện tại sử dụng nhiều thứ để tăng cái hash rate (số hash trong một giây, hay đơn giản ở đây là đoán cành nhanh và càng nhiều cái nonce này càng tốt). Giống như mua vé số, muốn tăng khả năng trúng, chỉ có cách là mua càng nhiều vé càng tốt.
Nhưng lỡ cùng một lúc, có hai miner đều cho ra kết quả giống nhau, thì ai sẽ được nhận cái block reward? Có một cái luật (protocol) đã được quy định, giữa hai người miner này, ai đã từng xử lý (add) được nhiều block nhất vào cái blockchain, sẽ được nhận block reward này.

Blockchain hoạt động thế nào?
Okay, vậy là anh em đã hiểu làm sao mà các giao dịch (transaction) trong một block được miner đào được. Vậy khi gắn nó vào một chuỗi thì như thế nào? Anh em xem hình sẽ thấy, target hash của một block còn phụ thuộc một biến số nữa là hash của block trước (n-1) – previous hash, mà mình không nhắc tới phía trên. Cái previous hash này rất quan trọng.

Tại sao cái previous hash này rất quan trọng? Vì nếu anh em thay đổi thông tin của một block nào đó, cái target hash nó cũng sẽ phải thay đổi. Thành ra, khi thay đổi một thông tin nào đó của một block, nó sẽ kéo theo tất cả các block sau đó không còn đúng (invalidate), vì hash của một block, phụ thuộc vào cái hash của block trước đó.
[​IMG]

Cho trực quan, anh em xem qua cái GIF này của mình nhé. Mở đầu, anh em thấy mình có 5 block, tất cả đều đã được đào (mine) thành công và gắn vào chuỗi (chain). Cả 5 block đều là green. Hash của 1 block (n), là prev hash của block sau đó (n+1).

Bai 2_video 3.gif

  • Mình bắt đầu sửa một giao dịch của block số 3, anh em thấy là block thứ 3, và các block sau đó nó bị invalidate và chuyển sang màu đỏ hết không? Lý do như mình nói là cái target hash của block số 3 không còn đúng (invalid) nữa, nên nó sẽ kéo theo block số 4 (prev hash dựa vào hash của block số 3), và block số 5 (prev hash dựa vào block số 4) đều sai và đỏ hết.

Bai 2_video 4.gif

  • Vậy để sửa cái này, bắt buộc mình phải đào lại hay tìm cái nonce mới từ block số 3 trở đi. Tức là mình phải tìm từng cái nonce đúng cho block 3, 4, và 5. Anh em thấy mình phải nhấn mine để tìm lại cái nonce cho 3 block trên, và sau đó cả 3 block (3, 4, và 5) đều xanh (valid) trở lại.

Bai 2_video 5.gif

Anh em sửa thông tin của một block càng về trước, thì số block anh em phải đào lại (remine) từ đầu càng nhiều. Nên gần như là không thể để sửa một giao dịch trong một blockchain.
Vậy ví dụ có một ông miner nào đó sửa dữ liệu giao dịch, thêm bớt gì đó thì sao? Chuyện này vẫn có thể xảy ra, nhưng cái blockchain mà anh em bỏ thêm thông tin không chính xác và sẽ bị loại bỏ (rejected). Vì cái blockchain (sổ cái) này được chia sẻ với tất cả các nodes trên toàn thế giới. Các nodes làm nhiệm vụ lưu trữ cái blockchain chứa đựng các thông tin giao dịch, đặc biệt là cái hash của các block. Các nodes này liên kết và trao đổi dữ liệu với nhau, để đảm bảo cái blockchain của mình là mới nhất (up-to-date).

Bai 2_video 6.gif

Như trong GIF bên trên, anh em thấy Peer A (giả sử là miner 1), làm giả số liệu ở giao dịch. Sau khi đào và đẩy cái block này lên network, các nodes chỉ cần so sánh, họ thấy cái blockchain của Peer B và Peer C là có hai cái hash giống nhau ở block số 5 là giống nhau, thế là cái blockchain của Peer A sẽ bị bỏ (rejected). Như trong bài viết của Unocoin vào năm 2018, phải tốn ít nhất 30 tỷ đô la Mỹ để làm giả một giao dịch [3]. Đặc tính không thể sửa đổi (immutable) này rất quan trọng, giúp cho blockchain về cơ bản là an toàn để có thể giử lý giao dịch, và tránh tình trạng xài tiền hai lần (double-spending), hay tiền giả (counterfeit). 

Nguồn: Tinhte.vn