Tìm hiểu công nghệ Blockchain nằm dưới Bitcoin Protocol [Part 1]

Tram Ho

Mục đích

Bài này viết dành cho các bác muốn tìm hiểu về công nghệ nằm dưới Bitcoin, đi vào từng những khái niệm đơn giản đến phần công nghệ nằm dưới nó mang đến một cái nhìn tổng quan về công nghệ Blockchain sử dụng trong cái gọi là Bitcoin Protocol.

1.Tại sao lại gọi là Blockchain? Blockchain để làm gì? Cách thức một giao dịch được diễn ra?

Cái này mình cần hiểu cấu trúc của một Block trong Blockchain và bài này mình sẽ tìm hiểu về cấu trúc của một Block trong Bitcoin Protocol. Blockchain hiểu đơn giản là để ghi lại tất cả các giao dịch được diễn ra trên mạng lưới. Và khi đã được ghi lại thì nó gần như là không thể xóa bỏ.

1.1 Cấu trúc của một Block

Một Block còn có một số trường nữa nhưng cái mình cần quan tâm là 6 trường ở dưới đây vì 1 Block chính là giá trị Hash của 6 trường dưới đây. Thuật toán Hash sử dụng ở đây là thuật toán SHA-256. Mình cũng giải thích luôn thuật toán này một chút.

.u2b2521025a66ed09299f1b0cc29582c1 { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid #34495E!important; text-decoration:none; } .u2b2521025a66ed09299f1b0cc29582c1:active, .u2b2521025a66ed09299f1b0cc29582c1:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .u2b2521025a66ed09299f1b0cc29582c1 { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .u2b2521025a66ed09299f1b0cc29582c1 .ctaText { font-weight:bold; color:inherit; text-decoration:none; font-size: 16px; } .u2b2521025a66ed09299f1b0cc29582c1 .postTitle { color:#000000; text-decoration: underline!important; font-size: 16px; } .u2b2521025a66ed09299f1b0cc29582c1:hover .postTitle { text-decoration: underline!important; }

  Tại sao công nghệ Blockchain lại vô cùng phức tạp?

.u2c3811e0bda2fd3aec4bc38c4f81a197 { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid #34495E!important; text-decoration:none; } .u2c3811e0bda2fd3aec4bc38c4f81a197:active, .u2c3811e0bda2fd3aec4bc38c4f81a197:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .u2c3811e0bda2fd3aec4bc38c4f81a197 { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .u2c3811e0bda2fd3aec4bc38c4f81a197 .ctaText { font-weight:bold; color:inherit; text-decoration:none; font-size: 16px; } .u2c3811e0bda2fd3aec4bc38c4f81a197 .postTitle { color:#000000; text-decoration: underline!important; font-size: 16px; } .u2c3811e0bda2fd3aec4bc38c4f81a197:hover .postTitle { text-decoration: underline!important; }

  Tập đoàn Blockchain FinTech BitRock kêu gọi hơn 4 Triệu Đô cho phát triển các giải pháp FinTech!

Thuật toán SHA-256 là thuật toán băm một chiều. Tức các bạn đưa vào một input là một chuỗi, 1 ảnh, …. thì qua thuật toán nó sẽ cho ra một output có độ dài 256 bits. Và không thể tìm được input ấy kể cả khi mình có mã băm output. Lưu ý: Bạn đưa vào input là cái gì, nặng bao nhiêu đi chăng nữa nó cũng chỉ cho ra một output 256 bits thôi. Các bác có thể tự mình thử dùng thuật toán này ở link dưới đây:

https://passwordsgenerator.net/sha256-hash-generator/

TênGiải thích
VersionGhi lại phiên bản của Bitcoin Protocol khi tạo Block
Previous Block HashGhi lại hash của Block đứng ngay trước
Merkle RootLà hash của tất cả các transactions trong Block
TimestampGhi lại thời gian tạo Block
BitsGhi lại độ khó của Block
NonceLà 1 số ngẫu nhiên ( Mình sẽ giải thích ở bên dưới )

 

Previous Block Hash

Trường này để ghi lại Hash của Block ngay trước nó để Bitcoin tạo thành hình như cái xích nối các mắt xích lại với nhau khiến cho việc “Khi đã tạo ra 1 block rồi thì rất khó có thể thay đổi thông tin của Block đó”. Bởi 1 Block là hash của 6 trường bên trên nên nếu Block trước bị thay đổi => hash của Block trước cũng bị thay đổi => giá trị trường Previous Block Hash cũng bị thay đổi theo và cứ thế cứ thế nếu block thứ n bị thay đổi thì block n+1, n+2,…. n+n cũng bị thay đổi theo. Và cũng chính từ đặc điểm Block trước kết nối với Block sau thành một chuỗi thế này nên nguời ta gọi là Blockchain ( Block: khối , Chain: chuỗi, Blockchain: tạm dịch là chuỗi khối)

Merkle Root

Để giao dịch thực hiện trên mạng lưới Blockchain thì nó cần được đưa vào một khối. Trường này ghi lại giá trị hash của tất cả các giao dịch trong khối theo hình thức cây Merkle như thế này:

Các giao dịch được hash lại với nhau rồi cuối cùng tạo thành một hash hợp nhất lại ( Do sử dụng thuật toán SHA-256 như mình trình bày ở bên trên nên cho dù hash bao nhiêu lần thì kết quả trả ra cho Merkle Root vẫn chỉ là 256 bits thôi nhé) khiến cho mọi sự thay đổi nhỏ trong cây cũng sẽ làm cho giá trị của merkle root thay đổi. và dẫn đến Block hash cũng thay đổi theo. Cây Merkle tree ae thấy ở đây thì hiện tại số các giao dịch có như trên hình là số chẵn.

Bits và Nonce

Ghi lại độ khó của (cái gì đó). Hiểu cái này mình lại phải đi tìm hiểu về cách thức 1 Block hợp lệ được tạo ra. Và để một Block được coi là hợp lệ thì người tạo ra Block phải tìm ra Block hash, và để tìm ra Blockhash thì người ta cần tìm ra được giá trị của cả 6 trường bên trên, trong đó có một trường chứa một giá trị ngẫu nhiên (Chính là trường Nonce). Cùng nhìn lại cách BlockHash được tạo ra:

Trường Bits chính là trường ghi lại độ khó của công việc tìm ra số ngẫu nhiên Nonce. ( Và đây cũng chính là công việc của các Miner hay còn gọi là các thợ đào Bitcoin) Điểm qua một chút về công việc của người đào Bitcoin thì giống như dưới đây.

Bộ đếm Nonce sẽ đếm tăng dần từ 0,1,2,3,…. cho đến khi nào nó hợp lệ thì thôi. Cứ mỗi lần tăng thêm 1 đơn vị thì máy tính sẽ phải tính toán lại giá trị Hash của Block. Thông qua thuật toán SHA-256 nên số Nonce tăng thêm 1 đơn vị thôi cũng cho ra một giá trị BlockHash khác hoàn toàn với giá trị Hash vừa rồi. Nên người đào Bitcoin có một máy có sức mạnh tính toán Hash càng cao thì sẽ càng có nhiều cơ hội tìm ra số Nonce sớm hơn. Và số Nonce thích hợp sẽ là số khi kết hợp lại với 5 trường kia sẽ cho ra 1 giá trị Hash có giá trị nhỏ hơn trường Bits.

Như vậy trong mạng lưới Bitcoin, các máy đào Bitcoin sẽ tranh nhau tìm ra số Nonce thích hợp để tạo ra 1 Block mới. (Người tạo ra Block sẽ được nhận thưởng từ hệ thống (Transaction từ coinbase) Và tất cả phần phí từ các giao dịch có trong Block. Phần thưởng từ coinbase sẽ giảm dần từ những Block đầu tiên được tạo ra, Block đầu tiên (Genesis Block) do Nakamoto Satoshi- Người tạo ta Bitcoin đã được nhận thưởng 50 Bitcoin và hiện tại người tạo ra Block sẽ nhận được 12.5 Bitcoin. Hiện tại ở Bitcoin thì trung bình cứ 10 phút thì 1 block mới được tạo ra. Và cái này có thể config được. Cứ mỗi khoảng 2 tuần ( 2048 block) thì hệ thống sẽ tự động tính toán lại mức độ khó dễ, và bằng việc thay đổi giá trị của trường Bits, Bitcoin Protocol có thể điều chỉnh lại được độ khó của thuật toán tím ra giá trị Block Hash để luôn giữ mức 10 phút/1 block kể cả khi có nhiều hay ít người tham gia vào công việc đào Bitcoin. Hiện tại số lượng người tham gia vào giải toán là rất lớn nên việc tìm ra Block Hash cực kì khó khăn, nếu hiện tại mà đào bằng máy cá nhân thì cũng có rất ít khả năng chúng ta sẽ đào được một Block. Việc đào Bitcoin chính là việc tính ra số Hash nên nếu ngày xưa người ta dùng CPU để đào thì hiện tại người ta sử dụng GPU ( card đồ họa) để đào sẽ mang lại hiệu quả gấp nhiều lần . Do card đồ họa chuyên dùng để tính toán hash để làm chuyển động các pixel màu để hiển thị. Hiện tại thì cũng đã có máy chuyên dụng để đào Bitcoin tên là ASIC đến từ Trung Quốc dưới đây và nó có sức mạnh tính toán hash vượt xa so với máy tính cá nhân chúng ta đang dùng. Cụ thể mạnh hơn bao nhiêu thì phụ thuộc vào từng loại.

Không chỉ thế, khi đào Bitcoin trở lên khó khăn thì nhiều nhóm người đã lên ý tưởng là liên kết với nhau để tạo thành một “Mining Pool” Tạm dịch là một cụm đào trông như ảnh dưới đây để tăng tỷ lệ đào được Bitcoin. Lượng Bitcoin đào được sẽ chia như thế nào thì tùy từng Mining Pool nhé. Và hiện tại các Mining Pool lớn tập trung ở Trung Quốc.

1.2 Cách thức truyền thông tin trong mạng lưới các máy ngang hàng của Bitcoin

Ở mô hình Web ae đang sử dụng là mô hình client-sever thì mối quan hệ truyền tin chỉ có 1-1 Client -> sever và Sever -> client như thế này:

Còn ở mô hình các máy ngang hàng như trong mô hình Blockchain sẽ như thế này:

Các máy liên kết với nhau và truyền thông tin qua nhau. Cụ thể như nếu gọi mỗi một máy tham gia vào hệ thống là một Node và bạn đang muốn gửi một thông báo đến node rằng “Tôi muốn gửi một giao dịch cho anh ‘Chó cũng học code’ 1 bitcoin”

Nếu từ node của bạn 1 phát gửi thông tin cho tất cả các node khác có trong hệ thống và các node khác cũng đồng thời làm vậy thì sẽ sảy ra hiện tượng nghẹn cổ chai ở nhiều nơi nên …Mỗi một Node sẽ có một list các “hàng xóm” của mình và việc truyền tin sẽ chỉ sảy ra ở mình -> các hàng xóm của mình mà thôi,và cứ thế anh hàng xóm của mình nhận được tin sẽ xác thực xem giao dịch mà mình gửi có hợp lệ không. Và nếu hợp lệ sẽ gửi tiếp đến các hàng xóm của anh ấy rồi hàng xóm của anh lại tiếp tục check và gửi cho đến khi truyền đến tất cả các node. Và nó sẽ được thực hiện khá nhanh do mô hình truyền thông tin theo hình cây nhị phân như thế . Cho dù tăng số lượng lên gấp 2 lần đi nữa thì cũng chỉ mất thêm 1 lần gửi …

1.3 Cách thức để mạng lưới chấp nhận một giao dịch

Giả sử như giao dịch vừa nãy ta gửi cho bạn “Chó cũng học code” 1 bitcoin vừa rồi là hợp lệ và giao dịch đã được gửi đi tất cả các Node trong mạng lưới. Trong mạng lưới sẽ bao gồm những Mining Node tạm gọi là những máy chuyên để đào Bitcoin trong mạng lưới. Các node này sẽ gom các giao dịch vào một list rồi sẽ chọn ra những giao dịch mình muốn thêm vào để tạo thành 1 Block ( khoảng 1500 giao dịch gì đó cũng tùy ạ) đa số sẽ chọn các giao dịch có phí giao dịch cao để có thể hưởng lợi nhiều hơn. 1 Block chỉ có dung lượng Max là 1 MB thôi và tiến hành tính toán giá trị BlockHash. Lại chạy hàm tính giá trị Nonce chạy từ 0,1,2,3,….. Và khi đã tìm ra Blockhash thì sẽ thêm Block đó vào chính Blockchain trên loval của máy mình và tiếp tục (với hình thức giống như gửi thông tin giao dịch) gửi đến các hàng xóm của mình, các hàng xóm check Block ấy có hợp lệ không, nếu hợp lệ sẽ thêm Block đó vào Blockchain của mình rồi tiếp tục gửi đi.

To be continue…

viblo

.u6449b51646017051eb99e06ec4233105 { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid #34495E!important; text-decoration:none; } .u6449b51646017051eb99e06ec4233105:active, .u6449b51646017051eb99e06ec4233105:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .u6449b51646017051eb99e06ec4233105 { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .u6449b51646017051eb99e06ec4233105 .ctaText { font-weight:bold; color:inherit; text-decoration:none; font-size: 16px; } .u6449b51646017051eb99e06ec4233105 .postTitle { color:#000000; text-decoration: underline!important; font-size: 16px; } .u6449b51646017051eb99e06ec4233105:hover .postTitle { text-decoration: underline!important; }

  Bitcoin sụt giảm thê thảm, các công ty đào tiền mã hóa đua nhau phá sản

.uaae56076deae138a28941dcdde3d9238 { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid #34495E!important; text-decoration:none; } .uaae56076deae138a28941dcdde3d9238:active, .uaae56076deae138a28941dcdde3d9238:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .uaae56076deae138a28941dcdde3d9238 { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .uaae56076deae138a28941dcdde3d9238 .ctaText { font-weight:bold; color:inherit; text-decoration:none; font-size: 16px; } .uaae56076deae138a28941dcdde3d9238 .postTitle { color:#000000; text-decoration: underline!important; font-size: 16px; } .uaae56076deae138a28941dcdde3d9238:hover .postTitle { text-decoration: underline!important; }

  Giải ngố toàn tập về Blockchain từ A – I: “Bitcoin – Đồng tiền ảo đầu tiên”

Chia sẻ bài viết ngay

Nguồn bài viết : viblo .u6449b51646017051eb99e06ec4233105 { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid #34495E!important; text-decoration:none; } .u6449b51646017051eb99e06ec4233105:active, .u6449b51646017051eb99e06ec4233105:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .u6449b51646017051eb99e06ec4233105 { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .u6449b51646017051eb99e06ec4233105 .ctaText { font-weight:bold; color:inherit; text-decoration:none; font-size: 16px; } .u6449b51646017051eb99e06ec4233105 .postTitle { color:#000000; text-decoration: underline!important; font-size: 16px; } .u6449b51646017051eb99e06ec4233105:hover .postTitle { text-decoration: underline!important; } Bitcoin sụt giảm thê thảm, các công ty đào tiền mã hóa đua nhau phá sản .uaae56076deae138a28941dcdde3d9238 { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid #34495E!important; text-decoration:none; } .uaae56076deae138a28941dcdde3d9238:active, .uaae56076deae138a28941dcdde3d9238:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .uaae56076deae138a28941dcdde3d9238 { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .uaae56076deae138a28941dcdde3d9238 .ctaText { font-weight:bold; color:inherit; text-decoration:none; font-size: 16px; } .uaae56076deae138a28941dcdde3d9238 .postTitle { color:#000000; text-decoration: underline!important; font-size: 16px; } .uaae56076deae138a28941dcdde3d9238:hover .postTitle { text-decoration: underline!important; } Giải ngố toàn tập về Blockchain từ A - I: "Bitcoin - Đồng tiền ảo đầu tiên"