Blockchain là cái quái gì vậy?
Bitcoin và Blockchain đang là các từ khoá hot nhất hiện nay.
Mình đã đọc khá nhiều bài viết về Blockchain và thấy rằng có lẽ bài viết này có giải thích dễ hiểu nhất, ngay cả với những người không có background về IT.
Bài viết bằng tiếng Anh nên mình xin được dịch lại ở đây.
Tại sao lại cần đến Blockchain?
Trước khi định nghĩa Blockchain, hay cùng tìm hiểu vì sao lại cần đến Blockchain và bài toán mà nó giải quyết.
Hãy tưởng tượng bạn có 1 người bạn thân tên Joe. Joe đang đi du lịch nước ngoài và đến ngày thứ 5 thì anh ta hết tiền tiêu. Joe gọi cho bạn và nhờ bạn giúp đỡ. Bạn quyết định bắn cho Joe ít tiền.
Bạn ra ngân hàng yêu cầu ngân hàng chuyển khoản từ tài khoản của bạn sang tài khoản của Joe. Nhân viên ngân hàng kiểm tra số dư tài khoản của bạn, nếu đủ, sẽ chuyển 1000$ sang tài khoản của Joe.
Vì bạn đẹp trai nhà giàu, đương nhiên bạn có nhiều hơn số tiền đó trong tài khoản. Giao dịch được thiết lập.
Thông tin giao dịch được ngân hàng ghi lại như bên dưới.
Bạn gọi cho Joe và báo đã chuyển 1000$. Joe có thể ra ngân hàng để rút.
Điều gì vừa diễn ra?
Mấu chốt ở đây là cả bạn và Joe đều tin tưởng một bên thứ 3 là ngân hàng. Bên thứ 3 này quản lý tiền của 2 bạn. Không hề có sự chuyển dịch vật lý của đồng tiền, mà chỉ có bản ghi giao dịch của bạn. Và thậm chí cả bạn và Joe cũng không sở hữu bản ghi đó.
Và đây chính là vấn đề của hệ thống ngân hàng và tiền tệ hiện nay:
Niềm tin giữa 2 người được tạo dựng và duy trì bởi một bên thứ 3
Nhưng ngẫm lại, bạn sẽ thắc mắc tại sao phải tin vào một bên thứ 3 như vậy.
Điều gì sẽ xảy ra nếu:
- Bản ghi giao dịch của bạn bị thất lạc, bị cháy bởi hoả hoạn…
- Ngân hàng ghi nhầm số tiền chuyển thành 1500$ thay vì 1000$.
- Ngân hàng cố tình ghi nhầm thì sao?
- …
Chúng ta đang đặt tất cả trứng vào cùng một chiếc giỏ, thậm chí lại không phải là chiếc giỏ của chúng ta.
Vậy làm cách nào để chúng ta có thể chuyển tiền mà không cần đến ngân hàng?
Để trả lời câu hỏi này, chúng ta cần đào sâu hơn một chút, đưa ra một câu hỏi thông minh hơn (chỉ những câu hỏi thông minh mới dấn đến những câu trả lời sáng suốt).
Mấu chốt của việc chuyển tiền ở đây là gì? Là các lệnh (bản ghi) giao dịch.
Vậy câu hỏi thông minh hơn sẽ là:
Có cách nào để trao đổi và duy trì giao dịch giữa chúng ta mà không cần trợ giúp của bên thứ 3?
Và giải pháp cho câu hỏi này là sự khởi nguồn của công nghệ Blockchain, phương pháp cho phép lưu trữ các giao dịch giữa các cá nhân theo đặc thù nhu cầu của họ.
Cơ chế hoạt động của Blockchain
Yêu cầu tiên quyết của phương pháp này là phải có 1 nhóm người cùng ý chí (tức là cùng không muốn dựa vào bên thứ 3 để thực thi và lưu trữ các giao dịch. Nhóm người này sẽ tự làm việc đó.
It might make sense just to get some Bitcoin in case it catches on. If enough people think the same way, that becomes a self-fulfilling prophecy.
Vậy nhóm này cần tối thiếu bao nhiêu người? Tối thiểu là 3 người.
Lấy ví dụ nhóm có 10 người. 10 người này không muốn giao cho bên thứ 3 thực thi và quản lý các giao dịch của mình.
Họ cần có một thỏa thuận chung:
Mỗi người trong nhóm này luôn có thông tin về tài khoản của 9 người còn lại nhưng không quan tâm đến danh tính của chủ sở hữu tài khoản.
1. Túi đựng tài liệu trống
Mỗi người sẽ giữ một cái túi đựng tài liệu trống không và một tờ giấy trắng.
Khi có giao dịch xảy ra, mỗi người sẽ ghi lại thông tin giao dịch đó vào tờ giấy của mình.
2. Khi giao dịch diễn ra
Giả sử bây giờ người #2 muốn chuyển cho người #9 một số tiền là 10$.
#2 sẽ nói với 9 người còn lại là: Tao sẽ chuyển 10$ cho thằng #9, mọi người hãy ghi lại điều này.
Mọi người sẽ kiểm tra xem #2 có đủ 10$ để chuyển cho #9 không?
Nếu có, mọi người sẽ viết giao dịch thành công lên tờ giấy của mình như dưới.
Giao dịch được coi là thành công.
3. Các giao dịch tiếp diễn
Thời gian trôi, mọi người thực hiện giao dịch với nhau ngày càng nhiều, các bước giao dịch lặp đi lặp lại cho đến khi tất cả mọi người đã viết kín các giao dịch lên tờ giấy đầu tiên. (Giả sử 1 tờ giấy ghi được tối đa 10 giao dịch).
Vậy đã đến lúc cho tờ giấy này vào túi tài liệu và lấy một tờ giấy mới ra để ghi các giao dịch trong tương lai.
4. Cất tờ giấy cũ đi
Trước khi cất tờ giấy cũ đi, để đảm bảo không ai trong hôm nay, ngày mai, hay nhiều năm sau nữa có thể thay đổi thông tin các giao dịch đã ghi trên tờ giấy, 10 người sẽ cần niêm phong tờ giấy cũ đó của họ.
(Hành động này được gọi là mining, tuy nhiên để đơn giản hóa, chúng ta tạm gọi là tờ giấy cũ bị niêm phong.)
Tất cả 10 người tin tưởng vào các nội dung giao dịch được ghi trên tờ giấy cũ và tin tưởng vào việc niêm phong nó, đây chính là mấu chốt của công nghệ Blockchain.
Điều này cũng tương tự như việc sử dụng bên thứ 3 là ngân hàng. Chúng ta tin tưởng rằng ngân hàng đã ghi chép và quản lý các giao dịch một cách đầy đủ vả chính xác.
Thú vị đấy! Vậy niêm phong tờ giấy bằng cách nào?
Trước đó chúng ta cần biết về cơ chế niêm phong trong Blockchain hoạt động như thế nào.
Tưởng tượng chúng ta có một cỗ máy, ta đưa đầu vào cho cỗ máy này, và nó trả lại ta một sản phẩm tương ứng với đầu vào.
Cỗ máy này chính là Hàm Băm (Hash Function)
Giả sử chúng ta đưa đầu vào là 4, cỗ máy sẽ cho đầu ra là dcbea.
Vì sao lại có kết quả này? Không ai biết.
Chúng ta chỉ biết rằng khi đầu vào là 4, đầu ra sẽ luôn là dcbea nhưng khi chỉ biết đầu ra dcbea ta không thể biết được đầu vào là gì.
Hãy thử với một số khác, giả dụ là 26.
Đầu ra sẽ là 94c8e. Thú vị đấy. Vậy đầu ra có thể vừa chứa kí tự, vừa chứa số.
Vậy điều gì sẽ xảy ra nếu ta thử đặt một câu hỏi:
Ta cần đưa gì ở đầu vào để đầu ra ta có một dãy ký tự bắt đầu bằng 3 số 0?
Chẳng hạn như: 000ab hay 00098 hay 000fa …
Như chúng ta đã biết cỗ máy này là cỗ máy một chiều, không thể tính được đầu vào nếu chỉ biết đầu ra.
Vậy làm cách nào để trả lời câu hỏi này.
Cách duy nhất là thử với tất cả các trường hợp cho đến khi tìm ra kết quả.
Lạc quan một chút, giả sử sau khoảng vài ngàn phép thử, ta tìm được một con số thoả mãn đề bài là 72533.
Phải mất nhiều thời gian, công sức để tính ra con số đầu vào, nhưng để kiểm tra xem con số đó có thoả mãn hay không thì lại rất dễ dàng, chỉ cần đưa vào chiếc máy, một cách nhanh chóng, ta sẽ có ngay đầu ra.
Điều cốt yếu về cơ chế của cỗ máy (chính là Hàm Băm) là:
Sẽ cực kỳ khó để tính đầu vào cho một đầu ra cho trước.
Nhưng lại cực kỳ dễ để tính đầu ra từ một đầu vào có sẵn.
Sử dụng cỗ máy để niêm phong tờ giấy như thế nào?
Ta sẽ sử dụng cỗ máy trên để tạo ra một dãy kí tự niêm phong cho tờ giấy cũ ở trên.
Lại tiếp tục tưởng tượng một chút.
Giả sử ta có sẵn một con số (ví dụ: 20893). Câu hỏi là:
Hãy tìm một con số để khi cộng con số đó với số có sẵn, rồi đưa vào cỗ máy, ta sẽ được một đầu ra là một dãy ký tự bắt đầu bằng 3 số 0?
Như với những gì ta đã nghiên cứu về hoạt động của cỗ máy, cách duy nhất để tìm ra đáp án là thử với tất cả các trường hợp.
May mắn, sau 1 ngàn phép thử, ta tìm được một số thoả mãn là: 21191.
Trong trường hợp này, 21191 trở thành số để niêm phong số có sẵn: 20893.
Hình dung như việc ta có một tờ giấy ghi số 20893 lên đó, vậy 21191 trở thành ấn để niêm phong. Một khi ấn vẫn còn thì tờ giấy vẫn còn được niêm phong.
Con số niêm phong này được gọi là Proof of Work (Bằng chứng công việc).
Nó minh chứng cho công sức bỏ ra để hoàn thành công việc (chính là tính toán tìm ra con số đó).
Bất kỳ ai muốn kiểm tra xem tờ giấy được niêm phong có bị sửa chữa hay không, chỉ việc đưa nội dung tờ giấy và con số niêm phong vào cỗ máy.
Nếu cỗ máy trả về đầu ra là dãy ký tự đúng với yêu cầu bắt đầu bằng 3 số 0, chứng tỏ tờ giấy không bị thay đổi.
Nếu đầu ra là kết quả không đúng yêu cầu, chứng tỏ nội dung tờ giấy đã bị sửa chữa, tờ giấy không còn giá trị vào phải bỏ đi.
Chúng ta sẽ sử dụng nguyên tắc niêm phong này cho tất cả các tờ giấy và sắp xếp chúng theo thứ tự vào trong túi tài liệu.
Chú ý rằng yêu cầu ký tự bắt đầu bằng 3 số 0 chỉ là một ví dụ cho dễ hiểu.
Trên thực tế thì yêu cầu đầu ra phức tạp hơn nhiều.
Quay trở lại với tình huống của chúng ta về nhóm 10 người thực hiện giao dịch.
Sau khi các giao dịch được viết kín trên tờ giấy đầu tiên, 10 người họ tiến hành tính toán để tìm ra con số nhằm niêm phong tờ giấy.
Tất cả mọi người tiến hành tính toán.
Khi một người tìm ra kết quả, anh ta thông báo kết quả cho tất cả những người còn lại.
Tuy nhiên điều gì sẽ xảy ra nếu giả sử một người trong nhóm không thu được kết quả kiểm tra giống với những người còn lại.
Có một số lí do dẫn đến điều đó như:
- Anh ta nghe nhầm hoặc ghi nhầm nội dung giao dịch.
- Anh ta cố tình gian lận, ghi sai nội dung giao dịch để có lợi cho mình hoặc một ai đó.
- …
Dù bất kỳ lí do gì xảy ra thì anh ta vẫn phải bỏ tờ giấy sai của mình đi và chép lại nguyên văn từ những người khác.
Nếu anh ta không làm vậy, anh ta sẽ không thể ghi chép và thực hiện các giao dịch trong tương lai, nói cách khác, anh ta tạm thời bị kick ra khỏi nhóm.
Con số tìm ra được số đông chấp thuận sẽ là con số chính xác và đáng tin nhất.
Vậy tại sao người ta phải tốn thời gian và công sức để tính toán trong khi có thể ngồi chơi và đợi người khác tính cho mình?
Việc tìm ra con số niêm phong có thể tốn rất nhiều thời gian tính toán.
Do đó người nào tìm được số này đầu tiên sẽ được thưởng một khoản nho nhỏ cho những chi phí anh ta bỏ ra.
Khoản thưởng này không làm ảnh hưởng tới tài khoản của các thành viên còn lại trong nhóm.
Và đây là lúc Bitcoin xuất hiện. Bitcoin là đồng tiền đầu tiên được giao dịch trên Blockchain là cũng chính là phần thưởng cho những người đóng góp công sức tính toán cho mạng lưới.
Số lượng người sở hữu Bitcoin tăng khiến giá trị của Bitcoin cũng tăng theo. Và lúc đó thì lại có thêm nhiều người muốn sở hữu Bitcoin.
Phần thưởng chính là một ràng buộc vô hình khiến tất cả mọi người trong nhóm duy trì làm việc.
Trên thực tế thì mỗi tờ giấy ở trên được coi như một khối các giao dịch – Block of Transaction.
Túi đựng tài liệu chính là Chains of Block, hay còn gọi là Blockchain.
Đó chính là cách Blockchain vận hành.
Ngăn chặn thay đổi lịch sử giao dịch
Tưởng tượng ta đã có 5 tờ giấy, được niêm phong, đựng trong túi tài liệu.
Điều gì sẽ xảy ra nếu một người trong nhóm thay đổi nội dung tờ giấy cũ (giả dụ tờ thứ 2), sau đó tính toán con số niêm phong mới cho phù hợp.
Để ngăn chặn tình huống này xảy ra, có thêm một chút lắt léo trong yêu cầu tính toán con số niêm phong.
Thay vì cộng 2 thành phần là số có sẵn (nội dung tờ giấy cần niêm phong) và số niêm phong, chúng ta sẽ cộng thêm một số thứ 3, chính là đầu ra được tính toán bởi cỗ máy đối với tờ giấy gần nhất trước đó.
Với mẹo nhỏ này, chúng ta hoàn toàn có thể chắc chắn mỗi tờ giấy hiện tại đều có ràng buộc với tờ trước nó.
Do đó, không ai có thể thay đổi nội dung tờ giấy cũ.
Khẳng định không ai có thể có lẽ là chưa chính xác lắm.
Vì xét về mặt lý thuyết, một người vẫn có thể thay đổi nội dung giao dịch trong tờ giấy cũ và tính toán lại con số niêm phong. Nhưng làm như vậy anh ta sẽ phải tính toán lại số niêm phong cho tờ giấy đó và tất cả các tờ giấy phía sau của chuỗi, để đảm bảo chuỗi được thống nhất về quy tắc. Anh ta sẽ có một chuỗi với nội dung khác với những người còn lại.
Như đã biết, việc tính toán lại con số niêm phong là vô cùng khó khăn và tốn kém.
Chuỗi của tên gian lận tạo ra sẽ không thể đuổi kịp chuỗi được tạo bởi những người còn lại về độ dài.
Vì thế dẫn tới một quy tắc:
Chuỗi dài nhất là chuỗi đáng tin nhất
Nếu 6/10 người cùng gian lận thì sao?
Trong trường hợp này, hệ thống coi như thất bại.
Quá nửa số người tham gia cùng thống nhất gian lận và quay lưng lại với những người còn lại.
Đây là lỗ hổng duy nhất được biết đến của Blockchain vì nó hoạt động trên nguyên tắc tin cậy số đông.
Trường hợp này được biết đến với tên gọi: Tấn công 51%. Có thể tìm hiểu thêm ở đây.
Blockchain chậm và đắt đỏ
Bitcoin xử lý tối đa 7 giao dịch mỗi giây, không phải cho từng người tham gia, mà là toàn mạng lưới.
Ethereum xử lý 15 giao dịch chuyển tiền, 3-5 hợp đồng thông minh mỗi giây.
Đây là một con số quá nhỏ so với nhu cầu giao dịch toàn cầu (so sánh với con số giao dịch bằng thẻ Visa trung bình 2000 lượt mỗi giây).
Nếu phải mất hàng giờ (cùng với một khoản phí giao dịch đắt đỏ) để một giao dịch chuyển tiền đơn giản được thực hiện, ai còn muốn sử dụng Bitcoin nữa.
Lighting Network là một trong các ý tưởng về giải pháp cho vấn đề này.
Tìm hiểu thêm về Lighting Network ở đây.