Trong bài viết này mình sẽ chia sẻ về nguyên lý hoạt động của blockchain và cryptocurrency qua một câu chuyện đơn giản và dễ hiểu.
Tại sao lại có Cryptocurrency
Chúng ta không cần phải học tài chính để có thể nhận ra được tiền là một loại hàng hóa đặc biệt, dùng để làm phương tiện trao đổi trung gian. Chúng ta quy mọi giá trị của hàng hóa cần trao đổi thành tiền thì từ đó sẽ dễ dàng trao đổi hơn.
Mỗi một quốc gia lại ban hành một đơn vị tiền tệ khác nhau. Chúng không cùng tỉ giá và khi có một giao dịch chuyển tiền thì cần phải thông qua một tổ chức trung gian (trusted 3rd party), thường là các ngân hàng.
Giao dịch qua ngân hàng đảm bảo giao dịch trở "đáng tin" hơn, giảm thiểu rủi ro các bên bị lừa đảo. Tuy nhiên đổi lại thời gian sẽ lâu hơn, các bên phải tốn phí và thông tin của người giao dịch có thể bị rò rỉ.
Câu hỏi đáng giá lúc này là: Liệu ta có thể thực hiện các giao dịch mà không cần phải thông qua các bên trung gian và vẫn đảm bảo tính tin cậy hay không ? Đó cũng là ý tưởng chính cho việc hình thành Cryptocurrency.
Khái niệm sổ cái (ledger)
Bỏ chuyện tiền tệ giữa các quốc gia qua một bên. Mình xin kể lại câu chuyện về: Tí, Tèo, Nam và Minh. Bốn bạn này có đặt điểm chung là rất hay mượn tiền nhau nhưng lại thấy việc xài tiền mặt khá phiền phức nên đã nảy ra ý tưởng dùng tiền trung gian và họ thống nhất gọi nó là Coin.
Mỗi đầu tháng bốn bạn này cùng bỏ vào 1 triệu đồng, họ quy ước 1 Coin = 1000 đồng, tương đương mỗi người sẽ có 1000 Coin. Vào cuối tháng họ sẽ dùng số Coin này đổi ra tiền mặt. Như vậy trong suốt một tháng họ sẽ không cần tới tiền mặt nữa.
Nhưng làm thế nào để biết số Coin còn lại của mỗi người là bao nhiêu !? Họ quyết định dùng chung một cuốn sổ ghi chép lại tất cả các giao dịch trong một tháng qua. Khái niệm sổ cái (ledger) từ đó mà ra đời.
Ledger |
---|
Tí bỏ vào 1000 Coins |
Tèo bỏ vào 1000 Coins |
Nam bỏ vào 1000 Coins |
Minh bỏ vào 1000 Coins |
Tí ------> Tèo 50 Coins |
Tèo ------> Nam 100 Coins |
Nam ------> Minh 40 Coins |
Sổ cái và chữ ký số
Tới đây phát sinh một vấn đề đó là vì sổ cái ai cũng có thể ghi lại giao dịch của mình nên bất kỳ ai cũng có thể "ghi khống" vào. Ví dụ Nam tự ghi vào "Minh --> Nam 200 Coins" trong khi không hề có giao dịch đó diễn ra.
Để giải quyết tình trạng trên, cả bốn bạn sẽ dùng thêm chữ ký cá nhân của mình, ý tưởng cũng giống như việc chúng ta hay ký các loại hóa đơn tiền điện nước, tiền net hàng tháng.
Ledger | Signature |
---|---|
Tí ------> Tèo 50 Coins | Tí |
Tèo ------> Nam 100 Coins | Tèo |
Nam ------> Minh 40 Coins | Nam |
Tuy nhiên đây là chữ ký tay, rất dễ làm giả. Lúc này bốn bạn quyết định ứng dụng chữ ký số (Digital Signature). Cụ thể ở đây các bạn ấy chọn mã hóa SHA-256. Cách hoạt động của loại mã hóa này khá dễ hiểu là mỗi bạn sẽ có một cặp khóa (key pair): public key (pk) và secret key (sk). SK của ai người đó giữ, PK thì ai giữ của ai cũng được, nhưng ít ra cũng phải giữ PK của nhau có để xác nhận chữ ký.
Quá trình mã hóa và xác nhận thế nào thì mình xin được bỏ qua. Tóm gọn là chúng có dạng như sau:
Sign("Message", sk) = Signature
Verify("Message", Signature, pk) = TRUE/FALSE
Như vậy không ai có thể tự ghi khống giao dịch được nữa. Vì đơn giản là nếu không có SK, chúng ta không thể tạo được một chữ ký hợp lệ. Các giao dịch cũ cũng lại càng không thể sửa đổi vì chỉ cần 1 chút thay đổi là chữ ký sẽ khác hoàn toàn. Xem ra chỉ còn một cách là copy lại một giao dịch trước đó.
Điều này có thể được hóa giải hoàn toàn với việc mỗi giao dịch bây giờ sẽ có một Unique ID (UID). UID sẽ trở thành một phần của thông tin giao dịch luôn nên lúc này thông tin trên sổ cái là rất đáng tin cậy.
UID | Ledger | Digital Signature |
---|---|---|
1 | Tí ------> Tèo 50 Coins | 001100101010111110100001000110000100... |
2 | Tèo ------> Nam 100 Coins | 110000000010101011111010010001100110... |
3 | Nam ------> Minh 40 Coins | 101010110010101011100101001000110011... |
Quản lý phi tập trung (Decentralization)
Vấn đề tiếp theo bây giờ là "Ai sẽ là người giữ sổ cái", nếu lỡ làm mất sổ cái, cả bốn bạn sẽ mất hết Coin và không thể lấy lại tiền. Nhưng không sao, cái khó ló cái khôn, chính khoảnh khắc quan trọng này Tèo đã đưa ra một sáng kiến: "Cả bốn người chúng ta sẽ sao chép sổ cái cho mỗi người một bản". Bây giờ thay vì sổ cái tập trung ở một nơi nhất định thì nó lại trở thành phi tập trung.
Có điều là bây giờ cứ mỗi khi có một giao dịch thì tất cả sổ cái phải được cập nhật lại và phải giống nhau y chang nhau từ thông tin cho tới thứ tự. Điều này thoạt nghe khá là tệ vì nếu Tí chuyển cho Tèo 100 Coins thì Tí sẽ thắc mắc không biết ba sổ cái còn lại đã được cập nhật hay chưa. Hoặc nếu Minh nghe được vài thông tin giao dịch thì Minh sẽ có chắc rằng mọi người sẽ cập nhật lại sổ cái đúng thứ tự giống như Minh đang làm.
Với chỉ bốn người thì vấn đề này rất đơn giản nhưng với rất nhiều người thì đây là một việc hết sức khó khăn. Và đây chính là điểm mấu chốt của cả hệ thống Cryptocurrency.
Blockchain và proof of work
Bây giờ vấn đề là xác định các giao dịch hợp lệ và đáng tin như thế nào. Nam, một chuyên gia về mã hóa để đề xuất một ý tưởng đó là:
"Chúng ta hãy xem mỗi giao dịch là một block, chúng ta có thể nhận được nhiều blocks nhưng hãy tin vào block có proof of work."
Mọi người nghe xong chả hiểu ất giáp gì cả. Nam từ từ giải thích:
"Cụ thể ta sẽ ứng dụng Cryptographic Hash Function SHA256. Giả sử nếu có ai đó thông báo giao dịch mới, họ phải tìm được con số bất kỳ. Con số này cùng với sổ cái khi qua hàm SHA256 chắc chắn sẽ là dãy số nhị phân có 256 chữ số. Chúng ta quy định con số hợp lệ sau khi SHA256 phải có 60 chữ số đầu tiên đều là số 0."
SHA256(Ledger + Số hợp lệ) = 00000000000000000000...
Như vậy block hợp lệ sẽ phải có đính kèm con số này, người nhận chỉ cần chạy hàm SHA256 là có thể check được kết quả ngay, quá trình này gọi là proof of work. Ngoài ra cách thức thêm block vào sổ cái sẽ thay đổi, block mới sẽ nối đuôi vào block cũ tạo thành một dãy mắc xích các blocks. Từ lúc này sổ cái còn được gọi là Blockchain.
Trên header của block sẽ có chứa hash của block ngay trước nó, hash này tham gia vào proof of work cho block tiếp theo. Vì thế block một khi đã thêm vào thì không thể thay đổi thứ tự được nữa.
Miner
Câu hỏi tiếp theo đó là việc verify block thì dễ rồi nhưng việc tìm được con số hợp lệ để tạo block là rất khó. Việc này không có cách nào khác là dùng máy tính để đoán mò liên tục cho tới khi tìm được thì thôi.
Xác xuất để tìm được con số thỏa mãn điều kiện đi qua hàm SHA256 để có 60 chữ số đầu tiên là số 0 chỉ là 1 trên 2^60. Có nghĩa là trong điều kiện xui nhất, máy tính phải đoán tới 2^60 lần. Điều này đòi hỏi nhiều sự tính toán của máy tính nên quá trình này còn được gọi là "computation work".
Nam với công việc là lập trình viên nên có máy tính để làm việc này nhưng Tí, Tèo và Minh thì không. Cả ba quyết định mời thêm người tham gia vào hệ thống.
Những người này cũng bình thường thôi, họ vẫn có thể thực hiện giao dịch với bốn người cũ. Nhưng có điều là họ sở hữu những cỗ máy có cấu hình rất khủng. Họ lắng nghe tất cả các giao dịch, sử dụng sức mạnh máy tính của mình để tìm ra con số hợp lệ và tạo block. Họ có thể đoán số với bất kỳ hình thức nào nhưng ai ra đáp án nhanh nhất là người chiến thắng và sẽ có phần thưởng (block reward). Và họ chính là những thợ mỏ (miners) trong thế giới Cryptocurrency.
Block Reward
Mặt khác Block Reward cũng rất đặc biệt. Đó là khi có một Miner tìm được con số hợp lý, tạo block và thông báo tới tất cả mọi người thì anh ta cũng sẽ được chèn một giao dịch vào đầu của block hiện tại. Giao dịch đó chính là số Coin thưởng cho Miner từ hệ thống.
Tuy nhiên đây là một giao dịch đặc biệt với các đặc tính sau đây:
- Giao dịch này không có sender (người gởi).
- Giao dịch này không có chữ ký số (do không có sender).
- Giao dịch này làm tăng tổng lượng tiền lưu hành của hệ thống.
Xung đột Blockchain
Đối với những người dùng bình thường, họ chỉ việc thực hiện các giao dịch, thông báo chúng cho các Miners và lắng nghe block từ Miners để cập nhập Blockchain của họ. Thế nhưng một ngày nọ Tèo lại nhận 2 phiên bản blockchain với lịch sử giao dịch hoàn toàn khác nhau. Chà hẳn là đã có một ai đó đã cố tình làm giả sổ sách với sức mạnh tính toán của họ.
Công việc của Tèo lúc này khá đơn giản là chỉ cần kiên nhẫn chờ đợi các block tiếp theo từ các miners. Lúc này có 2 nhánh blockchain được cập nhật, Tèo vẫn chưa biết nên tin vào nhánh nào. Sau vài block khác được thêm vào, Tèo quyết định tin nhánh dài nhất và ngừng lắng nghe block từ miner ở nhánh ít ngắn hơn.
Lý giải cho việc này đó là khi có một ai đó thông báo một block gian lận. Họ sẽ phải so sức mạnh tính toán với toàn bộ các Miners còn lại của hệ thống. Các Miners bình thường vẫn làm công việc của họ để tạo block vào nhánh đúng. Như vậy người gian lận phải giữ công việc tính toán trên nhánh gian lận của mình để đánh lừa hệ thống.
Như vậy trừ khi người đó sở hữu sức mạnh tính toán khủng tới mức "cân" được phần còn lại. Chưa kể việc mining rất hên xui, may mắn thì vài hash là ra, xui thì phải chạy hết tất cả trường hợp.
Thêm vào đó là khi có rất nhiều Miner tham gia hệ thống, đây sẽ là một trận chiến không có cửa thắng cho bên gian lận.
Điều này giúp xóa bỏ tư tưởng "giao dịch cần niềm tin" một cách cảm tính mà thay vào đó là công việc tính toán có thể chứng minh được. Đó cũng chính là một trong những đặc điểm quan trọng của Cryptocurrency.
Kết
Tới đây vì thấy hệ thống hoạt động quá tốt, càng ngày có thêm nhiều người tham gia thì tất cả đã quyết định xài luôn đồng Coin của họ cho tiện, không ai còn muốn đổi ra tiền mặt làm gì nữa. Vì loại tiền Coin này có liên quan tới Bit trong máy tính, họ đặt tên lại cho nó là BitCoin.
Khoan đã, câu truyện trên hoàn toàn là hư cấu cho mình tự bịa ra kể lại. BitCoin do ai nghĩ ra chúng ta vẫn chưa có câu trả lời. Dựa trên BitCoin Pager ta chỉ biết là ai đó hoặc một tổ chức nào đó có tên Satoshi Nakamoto.
Dù là câu chuyện bịa đặt nhưng các kỹ thuật về Blockchain thì đúng là như thế. Đây là một công nghệ rất hay, đáng để ta tìm hiểu và ứng dụng vào các lĩnh vực khác. Dù mã hóa có có từ lâu đời nhưng Satoshi Nakamoto như một nghệ nhân đã nâng tầm nó lên thành một tác phẩm nghệ thuật, đánh dấu bước ngoặc phát triển cho thế giới tiền điện tử.
Việt Trần
Yêu thích tìm hiểu các công nghệ cốt lõi, kỹ thuật lập trình và thích chia sẻ chúng tới cộng đồng
follow me :
Bài viết liên quan
Kiểu dữ liệu là gì? Static, Dynamic, Strong & Weak?
Jul 08, 2021 • 12 min read
Tư duy kiến trúc thông qua các trò chơi mà rất nhiều bạn không biết
Jul 02, 2021 • 4 min read