+16

Blockchain mà thiên hạ đang nhắc đến là cái khỉ gì !?

Chắc hẳn mọi người không ít thì nhiều cũng đã từng nghe về thứ đồng tiền ảo mang tên Bitcoin , không phải là thứ gì quá đỗi mới mẻ, xuất hiện từ năm 2009, nhưng đến gần đây người ta mới nhắc đến nó nhiều hơn, đặc biệt là khi giá trị của nó gia tăng 1 cách chóng mặt trong vòng 1 năm. Càng ngày càng nhiều người tò mò và nhắc đến nó, trong đó có mình. Có một điều thú vị là những người quan tâm đến Bitcoin phần lớn chẳng phải dân công nghệ. Còn dân công nghệ thì biết đến sự tồn tại của nó nhưng với 1 thái độ khá là thờ ơ và có vài phần e dè khi nhắc đến như là nhắc đến đa cấp, mặc dù thứ đứng sau Bitcoin - công nghệ Blockchain cũng là một thứ công nghệ hay ho.

Hôm nay không code 1 hôm đi xem cái Blockchain kia nó là cái gì mà thần thánh thế.

Blockchain: Tại sao chúng ta cần đến thứ phức tạp như nó !?

“For every complex problem there is an answer that is clear, simple, and wrong.” — H. L. Mencken

Không giống như những bài đăng khác, thay vì định nghĩa Blockchain là cái gì, chúng ta sẽ đi tìm hiều vấn đề mà nó giải quyết trước.

Tưởng tượng, Joe là bạn tốt của bạn. Cậu ta đang đi du lịch nước ngoài, và vào ngày thứ 5 của kì nghỉ, cậu ta gọi cho bạn và nói "Ê, tao hết tiền rồi, gửi cho tao ít được không."

Vì bạn giàu sụ nhưng gấu không có, chó không nuôi, nên lúc nào cũng dư dả, bạn nhắn lại trong 1 nốt nhạc "Ô kê, gửi ngay đây."

Sau đó bạn gọi người quản lý tài khoản ở ngân hàng và nói với hắn "Chuyển $1000 từ tài khoản của tôi sang tài khoản của Joe."

“Vâng, thưa anh.” - hắn đáp và mở sổ đăng ký của bạn, kiểm tra số dư. Và tất nhiên, bạn giàu sụ nên chắc chắn là đủ để chuyển rồi, hắn làm cho bạn một mục trong sổ như sau:

Lưu ý là chúng ta không nói về máy tính và ứng dụng nhé (lol)

Bạn gọi cho Joe và bảo "Gửi $1000 rồi nhé, ra mà rút".

Chuyện quái gì vừa xảy ra vậy !? Cả bạn và Joe đều mặc nhiên tin tưởng ngân hàng quản lý tiền của cả hai.

Và đó chính là vấn đề của hệ thống hiện tại.

Để tạo nên sự tin tưởng với nhau, chúng ta phụ thuộc vào một bên thứ 3 (Third-party)

Trong nhiều năm, chúng ta phụ thuộc vào một bên thứ 3 để tin tưởng lẫn nhau. Có thể bạn sẽ hỏi "Phụ thuộc vào bên thứ 3 thì có vấn đề gì ?"

Vấn đề là họ chỉ là số ít. Chỉ cần 1 cá nhân/tổ chức nào đó vô ý hay cố ý tham nhũng là đủ để gây ra 1 sự hỗn loạn. Và còn nhiều vấn đề khác như:

  • Điều gì sẽ xảy ra nếu bản ghi giao dịch bị cháy, bị mất ?
  • Điều gì sẽ xảy ra nếu người quản lý tài khoản vô ý ghi nhầm chuyển $1500 thay vì $1000 ?
  • Điều gì sẽ xảy ra nếu anh ta làm điều đó có mục đích ?

Trong nhiều năm, chúng ta đã đặt tất cả số trứng của mình trong 1 cái giỏ, mà nó là của người khác.

Liệu có một hệ thống nào mà chúng ta có thể chuyển tiền mà không cần ngân hàng.

Để trả lời câu hỏi này chúng ta cần nghiên cứu kĩ hơn và đặt 1 câu hỏi hay hơn (cuối cùng thì 1 câu hỏi hay mới có 1 câu trả lời tốt hơn).

Hãy suy nghĩ về nó trong 1 giây, chuyển tiền có nghĩa là gì ? Chỉ cần 1 mục trong sổ đăng ký. Câu hỏi hay có thể là -

Có cách nào để duy trì đăng ký giữa chúng ta thay vì để ai đó làm việc đó ?

Bây giờ, đó là một câu hỏi đáng để khám phá. Và câu trả lời là gì chắc bạn đã đoán ra. Blockchain chính là câu trả lời cho câu xuất sắc.

Nó là 1 phương pháp duy trì đăng ký giữa chúng ta thay vì phụ thuộc vào người khác làm điều đó.

Bạn vẫn còn đây chứ ? Tốt. Bởi vì bây giờ, khi một vài câu hỏi bắt đầu xuất hiện trong tâm trí bạn, chúng ta sẽ học cách mà hệ thống đăng ký phân tán này hoạt động.

À vâng, nhưng hay cho tôi biết, nó hoạt động như thế nào ?

Yêu cầu của phương pháp này đó là phải có đủ người không muốn phụ thuộc vào bên thứ 3. Chỉ khi đó nhóm này mới có thể tự duy trì đăng ký của mình.

“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.” — Satoshi Nakamoto in 2009

Vậy bao nhiều là đủ ? Ít nhất là 3. Ví dụ, 10 cá nhân muốn từ bỏ ngân hàng hoặc bất kì bên thứ 3 nào. Theo thỏa thuận họ luôn có thông tin về tài khoản của nhau mà không biết danh tính của người khác.

1. Một thư mục rỗng

Mọi người đều có 1 thư mục rỗng của mình để bắt đầu. Khi chúng ta tiến hành, tất cả 10 cá nhân này sẽ tiếp tục thêm các trang (page) vào thư mục của họ. Tập hợp các trang này sẽ tạo thành bản ghi để theo dõi các giao dịch.

2. Khi một giao dịch xảy ra

Tiếp theo, tất cả mọi người trong mạng sẽ bắt đầu với trang trắng (blank page) và bút trong tay. Mọi người đều sẵn sàng ghi bất kì giao dịch nào xảy ra trong hệ thống.

Bây giờ, nếu #2 muốn chuyển $10 cho #9.

Để thực hiện giao dịch, #2 phải thông báo với mọi người "Tôi muốn gửi $10 cho #9. Vì vậy, mọi người, vui lòng ghi lại lên trang của mình"

Mọi người đểu kiểm tra xem liệu #2 có đủ số dư để chuyển $10 cho #9. Nếu có, mọi người sẽ ghi lại giao dịch trên trang của mình Giao dịch sau đó được coi là hoàn thành.

3. Các giao dịch tiếp tục diễn ra

Thời gian trôi qua, khi mọi người cảm thấy cần chuyển tiền cho người khác. Bất cứ khi nào muốn thực hiện giao dịch, họ thông báo nó với tất cả những người khác. Khi một người lắng nghe thông báo thì sẽ viết lên trang của mình.

Bài tập này sẽ tiếp tục đến khi một người hết dung lượng trang hiện tại. Giả sử 1 trang có 10 không gian để ghi giao dịch, khi giao dịch thứ 10 kết thúc, tất cả mọi người đều hết dung lượng của trang.

Đã đến lúc đưa trang vào thư mục và đưa ra 1 trang mới và lặp lại quá trình ở bước 2.

4. Đưa trang đầy đi

Trước khi đặt 1 page vào trong thư mục của mình, chúng ta cần seal nó lại với một unique key mà tất cả mọi người đều đồng ý. Bằng cách seal nó, chúng ta đảm bảo rằng không ai có thể thực hiện bất kì thay đổi nào khi bản sao của nó đã được cất trong thư mục của mọi người.

Một khi ở trong thư mục, nó sẽ luôn ở trong đó. Hơn nữa, nếu mọi người tin tưởng vào seal, mọi người sẽ tin tưởng vào nội dung của page. Và việc seal là mấu chốt của phương pháp này.

[Jargon Box] thực tế công việc này được gọi là 'mining' , nhưng để đơn giản chúng ta sẽ tiếp tục gọi là ‘sealing.’

Trước đây bên thứ 3 cho chúng ta niềm tin rằng tất cả những gì họ viết ra sẽ không bị thay đổi. Còn trong hệ thống phân tán, phân cấp như của chúng ta thì 'seal' sẽ thay thế cho niềm tin (lol)

Thú vị đấy! Vậy chúng ta 'seal' chúng như thế nào ?

Trước khi chúng ta tìm hiểu làm thế nào chúng ta có thể seal 1 page, chúng ta sẽ tìm hiểu về cách hoạt động của seal nói chung. Và như một điều kiện tiên quyết đó là học về cái gì mà tôi gọi là ...

The Magic Machine

Tưởng tượng, có 1 cái máy được bao bởi tường dày xung quanh, khi bạn đưa 1 cái hộp chứa gì đó từ bên trái, nó sẽ đưa ra 1 cái hộp chứa cái gì đó khác ở phía bên kia.

[Jargon Box] Cái máy này được gọi là Hash Function nhưng hôm nay chúng ta không có tâm trạng cho quá nhiều kỹ thuật, nên chúng ta sẽ có 1 cái ‘Magic Machines’.

Ví dụ, bạn gửi số 4 trong hộp từ bên trái, thì bên phải chúng ta sẽ nhận được từ 'dcbea' ở bên phải.

Làm sao mà nó chuyển số 4 sang 'dcbea' ? Chẳng ai biết. Hơn nữa, đó là một quá trình không thể đảo ngược. Với từ 'dcbea' chẳng thể biết cái máy đã nhận được cái gì từ đầu kia. Nhưng mỗi lần bạn đưa vào số 4 nó luôn trả ra cùng từ 'dcbea'.

Thử với số khác thì sao, 26 chẳng hạn? Lần này chúng ta nhận được '94c8e'. Tuyệt vời, vậy là đầu ra cũng có thể chứa số.

Nếu tôi hỏi bạn một câu hỏi:

“Bạn có thể cho tôi biết tôi nên gửi gì từ bên trái để mà tôi nhận được một từ mà bắt đầu với ba số 0 ở phía bên phải của nó không ? Ví dụ, 000ab hay 00068 chẳng hạn.

Nghĩ về câu hỏi 1 chút.

Tôi đã nói với bạn, cái máy của chúng ta không thể tính được những gì chúng ta phải gửi từ bên trái sau khi chúng ta đưa ra kết quả dự kiến ở bên phải. Vậy với những gì cái máy có thể làm, làm sao chúng ta trả lời câu hỏi trên ?

Tôi có thể nghĩ ra 1 phương pháp. Tại sao lại không thử từng số một cho đến khi chúng ta lấy được từ bắt đầu với 3 số 0 ?

Lạc quan 1 chút, sau vài nghìn lần thử, chúng ta sẽ kết thúc với một số mang lại đầu ra yêu cầu ở bên phải.

Rất khó để tính đầu vào khi biết đầu ra. Nhưng đồng thời, nó sẽ luôn rất dễ dàng để xác minh nếu đầu vào được dự đoán sinh ra output yêu cầu. Hãy nhớ rằng, cái máy luôn cho ra cùng kết quả với mỗi số.

Bạn nghĩ câu trả lời là gì nếu tôi đưa cho bạn số 72533, và hỏi bạn câu hỏi, "Số này khi được đưa vào máy có cho ra một từ bắt đầu bằng ba số 0 không?"

Tất cả những gì bạn cần làm là, ném số kia vào cái máy và xem nhận được đầu ra là cái gì.

Đặc tính quan trọng nhất của những máy đó là:

"Cho một đầu ra, rất khó để tính toán đầu vào, nhưng cho đầu vào và đầu ra, nó là khá dễ dàng để xác minh nếu đầu vào dẫn đến đầu ra."

Chúng ta sẽ nhớ thuộc tính này của Magic Machines (hoặc Hash Functions) xuyên suốt phần còn lại của bài viết.

Làm sao dùng những cái máy này để seal một page ?

Chúng ta sẽ sử dụng Magic Machine này để tạo seal cho page của chúng ta. Giống như mọi khi, chúng ta sẽ bắt đầu với một tình huống tưởng tượng.

Hãy tưởng tượng tôi cung cấp cho bạn hai hộp. Hộp đầu tiên có số 20893. Tôi hỏi bạn, "Bạn có thể tìm ra một con số mà khi thêm vào số trong hộp đầu tiên và cho vào máy sẽ cho chúng ta một từ bắt đầu bằng ba số 0?" Tình huống này tương tự như chúng ta đã thấy trước đây và chúng ta đã học được rằng cách duy nhất để tính toán số lượng như vậy là bằng cách thử mọi số có sẵn.

Sau vài nghìn lần thử, chúng ta sẽ nhận được số 21191, mà khi thêm vào 20893 (tức là 21191 + 20893 = 42084) và cho vào máy, sẽ mang lại một lời đáp ứng yêu cầu của chúng tôi.

Trong trường hợp này, số 21191 trở thành 'seal' cho số 20893. Giả sử có một page có số 20893 viết trên đó. Để seal page này lại, chúng ta sẽ đặt một biển hiệu có nhãn '21191' lên trên nó. Ngay khi sealing number (tức là 21191) đính lên page thì page đó đã được seal.

[Jargon Box] 'Số seal' (sealing number) được gọi là 'Bằng chứng công việc' (Proof Of Work), có nghĩa là con số này là bằng chứng cho thấy những nỗ lực đã được tính toán. Chúng ta vẫn ổn khi gọi nó là 'số seal' cho mục đích của chúng ta.

Nếu ai đó muốn xác minh xem page đã bị thay đổi hay không, tất cả những gì họ cần làm là - thêm nội dung của page với sealing number và nguồn cấp dữ liệu vào magic machine. Nếu máy đưa ra một từ bắt đầu với ba số 0, nội dung không bị ảnh hưởng. Nếu ngược lại, chúng ta có thể loại bỏ page đó vì nội dung page đã bị tổn hại, và không có giá trị.

Chúng ta sẽ sử dụng một cơ chế seal tương tự để seal tất cả các page của chúng ta và sắp xếp chúng trong các thư mục tương ứng của chúng ta.

Cuối cùng, seal các page của chúng ta...

Để seal các page có chứa các giao dịch của mạng, chúng ta cần phải tìm ra một con số khi nối vào danh sách các giao dịch và đưa vào máy, chúng ta nhận được một từ bắt đầu bằng ba số 0 ở phía bên phải.

Lưu ý: Tôi đã sử dụng cụm từ 'từ bắt đầu bằng ba 3 số 0' chỉ như là một ví dụ. Nó minh họa chức năng Hashing hoạt động như thế nào. Những thách thức thực sự phức tạp hơn nhiều so với điều này.

Một khi số đó được tính sau khi tiêu tốn thời gian và điện trên máy, page được seal với số đó. Nếu lúc nào đó, có ai đó cố gắng thay đổi nội dung của page, 'sealing number' sẽ cho phép mọi người kiểm tra tính toàn vẹn của page.

Bây giờ chúng ta đã biết về việc seal page, chúng ta sẽ quay trở lại thời điểm chúng ta đã viết xong giao dịch thứ mười trên trang, và chúng ta đã hết chỗ để viết nhiều hơn.

Ngay khi mọi người hết chỗ trống của page để ghi giao dịch khác, họ tự do tính toán sealing numbẻ cho page để có thể đưa nó vào trong thư mục. Mọi người trong mạng đều tính toán. Người đầu tiên trong mạng tìm ra sealing number sẽ thông báo với tất cả mọi người.

Ngay khi nghe sealing number, tất cả mọi người xác minh nó có mang lại đầu ra yêu cầu hay không. Nếu có, tất cả mọi người sẽ dán nhãn page của họ với con số này và đặt nó trong các thư mục của họ.

Nhưng nếu #7 nói 'sealing number' đã được công bố không mang lại đầu ra yêu cầu? Các trường hợp như vậy không phải là bất thường. Những lý do có thể cho điều này có thể là:

  • Có thể anh ta đã nghe thiếu các giao dịch đã được công bố trong mạng.
  • Có thể anh ta đã ghi thiếu các giao dịch đã được công bố trong mạng,
  • Anh ta cố gắng gian lận hoặc không trung thực khi viết giao dịch, hay thiên vị bản thân hoặc ai đó trong mạng.

Bất kể lý do là gì, #7 chỉ có 1 lựa chọn - loại bỏ page của mình và sao chép nó từ người khác để cũng có thể đặt nó vào trong thư mục. Nếu không anh ta không thể đưa page của mình vào thư mục, anh ta không thể tiếp tục viết thêm các giao dịch nữa, do đó anh ta bị cấm tham gia mạng lưới.

Sealing number được đa số đồng ý sẽ trở thành sealing number chân thật.

Thế thì tại sao tất cả mọi người dành nguồn lực thực hiện việc tính toán khi họ biết rằng người khác sẽ tính toán và công bố cho họ? Tại sao không ngồi nhàn rỗi và chờ đợi thông báo?

Một câu hỏi tuyệt vời. Đây là nơi mà các ưu đãi đi vào trong bức tranh. Tất cả mọi người là thành viên của Blockchain đều đủ điều kiện để nhận phần thưởng. Người đầu tiên tính ra sealing number được nhận phần thưởng cho những nỗ lực của anh ta (tức là sử dụng điện và điện CPU).

Đơn giản chỉ cần tưởng tượng, nếu #5 tính ra sealing number của page, anh ta nhận được $1, nó được tạo ra từ không khí. Hay nói cách khác, số dư tài khoản của #5 được tăng $1 mà không làm giảm số dư của bất kì ai trong mạng.

Đó là cách Bitcoin ra đời. Đó là đơn vị tiền tệ đầu tiên được giao dịch trên một Blockchain (tức là các sổ đăng ký phân phối). Và để đổi lại, để giữ những nỗ lực đang diễn ra trên mạng, mọi người nhận được Bitcoins.

Khi có đủ người sở hữu Bitcoins, họ phát triển về giá trị, làm cho những người khác muốn sở hữu Bitcoins, làm cho Bitcoins phát triển về giá trị hơn nữa, làm cho nhiều người muốn Bitcoins hơn nữa; làm cho chúng tăng trưởng về giá trị hơn nữa. Và cứ tiếp tục như vậy.

Phần thưởng làm cho mọi người tiếp tục làm việc trong mạng.

Và một khi mọi người lưu page trong các thư mục của họ, họ đưa ra một trang trống mới và lặp lại toàn bộ quá trình trên một lần nữa - làm nó mãi mãi.

[Jargon Box] Hãy nghĩ mỗi page như một khối giao dịch (Block of transactions) và mỗi folder như một Chuỗi các page (Chain of Blocks), do đó nó trở thành Blockchain.

Và đó là cách mà BlockChain hoạt động.

Ngoại trừ một điều nhỏ nhặt mà tôi không nói với bạn. Chưa.

Hãy tưởng tượng có năm page trong thư mục, tất cả đã được seal với sealing number. Điều gì sẽ xảy ra nếu tôi quay trở lại trang thứ hai và sửa đổi một giao dịch để thiên vị bản thân mình ? Sealing number sẽ cho phép bất cứ ai phát hiện ra sự không thống nhất trong các giao dịch, phải không? Điều gì sẽ xảy ra nếu tôi tiếp tục tính toán một sealing number mới cho các giao dịch đã sửa đổi và gắn nhãn cho page đó?

Để ngăn chặn vấn đề ai đó quay trở lại và sửa đổi một trang (Block) cũng như sealing number, có một chút thay đổi cách mà sealing number được tính toán.

Bảo vệ sealing number khỏi sự sửa đổi

Bạn có nhớ tôi đã nói với bạn rằng tối cung cấp cho bạn 2 cái hộp - một chứa số 20893 và một số khác trống để bạn tính ? Trong thực tế, để tính ra sealing number trong Blockchain, thay vì 2 chúng ta có 3 hộp - 2 điền sẵn và 1 hộp để tính.

Và khi nội dung của cả ba hộp này được thêm vào và đưa vào máy, câu trả lời xuất phát từ phía bên phải phải đáp ứng các điều kiện yêu cầu. Chúng ta đã biết rằng một hộp chứa danh sách các giao dịch và một hộp sẽ chứa sealing number. Hộp thứ ba chứa đầu ra của Magic Machine cho page trước đó.

Với thủ thuật nhỏ này, chúng ta đã đảm bảo rằng mọi page đều phụ thuộc vào page trước. Vì vậy, nếu ai đó phải sửa đổi một page, anh ta cũng phải thay đổi nội dung và sealing number của tất cả các trang sau đó, để giữ cho chuỗi phù hợp.

Nếu 1 cá nhân trong số 10 người tưởng tượng ban đầu, cố gắng gian lận và sửa đổi nội dung của Blockchain (thư mục chứ các page với danh sách giao dịch), anh ta sẽ phải điều chỉnh nhiều page và cũng có thể phải tính toán sealing number mới cho tất cả các page đó. Chúng ta biết tính sealing number khó khăn thế nào. Vì vậy, 1 anh chàng không trung thực trong mạng không thể đánh bại 9 anh chàng trung thực.

Điều sẽ xảy ra là, từ page mà kẻ không trung thực cố gian lận, anh ta sẽ tạo ra một chuỗi khác trong mạng. Nhưng chuỗi đó sẽ không bao giờ có thể bắt kịp với chuỗi trung thực - đơn giản vì nỗ lực của một người và tốc độ không thể đánh bại những nỗ lực tích lũy và tốc độ chín người. What will happen is, from the page the dishonest guy tries to cheat, he would be creating another chain in the network, but that chain would never be able to catch up with the honest chain — simply because one guy’s efforts and speed cannot beat cumulative efforts and speed of nine. Hence, guaranteeing that the longest chain in a network is the honest chain. Do đó, đảm bảo rằng chuỗi dài nhất trong mạng lưới là chuỗi trung thực.

Chuỗi dài nhất là chuỗi trung thực.

Khi tôi nói với bạn rằng một người không trung thực không thể đánh bại chín người trung thực, nó có làm nảy ra ý tưởng gì trong đầu bạn không?

Nếu thay vì 1 mà là 6 người không trung thực ?

Trong trường hợp này thì hệ thống sẽ "sấp mặt". Và nó được gọi là "51% Attack". Nếu phần lớn các cá nhân trong mạng quyết định quay đầu không trung thực và ăn gian phần còn lại của mạng, giao thức sẽ không thành công . Và đó là lý do duy nhất tại sao Blockchains có thể sụp đổ nếu họ muốn. Biết rằng, nó không xảy ra nhưng chúng ta đều phải biết những điểm dễ bị tổn thương của hệ thống. Nó được xây dựng trên giả định rằng đa số đám đông luôn luôn là trung thực.

Và đó, bạn của tôi, đây là tất cả về Blockchains. Nếu có ai đó hỏi bạn rằng "WTF, Blockchain là cái khỉ gì ?" thì chia sẻ với họ nhé.

Source

https://hackernoon.com/wtf-is-the-blockchain-1da89ba19348


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí