Blockchain và bitcoin, những ứng dụng và ý nghĩa kinh tế (phần 1)
Blockchain
34
Bitcoin
16
Cryptocurrency
7
White

Dang Thanh Tung viết ngày 03/09/2018

Loạt bài viết này mình sẽ giải thích từ khái quát đến cụ thể, bóc tách từng phần trong cách thức hoạt động của blockchain và bitcoin để làm rõ những vấn đề blockchain đã và đang giải quyết cũng như phải đối mặt, cùng với đó là phân tích tính ứng dụng cũng như ý nghĩa của nó trong nền kinh tế trong tương lai.

PHẦN 1 (Blockchain và Bitcoin)

Về cơ bản blockchain là cơ sở dữ liệu (database) và là 1 sự tiến hoá trong cách lưu trữ dữ liệu. Thay vì dữ liệu được lưu tập trung do 1 đơn vị cụ thể toàn quyền quản lý cập nhật thêm bớt như cách truyền thống, blockchain cho phép dữ liệu được lưu trữ phân tán có nghĩa là bất kì ai cũng có thể tham gia vào việc quản lý dữ liệu bằng cách sao chép lại bán sao của dữ liệu và chạy phần mềm định sẵn để tham gia mạng lưới, hay rút lui bất kì lúc nào mà ko ảnh hưởng đến hoạt động của toàn hệ thống. Cơ sở dữ liệu phân tán ngang hàng (decentralized) này này đem lại khá nhiều ích lợi như sau:

  • Truy cập nhanh hơn
  • Tránh điểm chết tập trung (point of failure)
  • Dữ liệu minh bạch rõ ràng và ko ai có quyền tự ý thay đổi kể cả người tạo ra ứng dụng

Xác minh danh tính dùng mật mã học

Ở đây chúng ta sẽ đề cập mô hình (model) căn bản của các ứng dụng có tương tác của người dùng server/client để phân tích khác biệt giữa việc ứng dụng blockchain và cách thức truyền thống. Cụ thể hơn đó là những yêu cầu (request) để cập nhật dữ liệu (update) tức là khi người dùng gửi 1 yêu cầu thay đổi dữ liệu, server sẽ kiểm tra xem yêu cầu có hợp lệ hay ko thì mới cho phép yêu cầu đó được thực hiện để phản ánh vào trong database. Vấn đề quan trọng trong việc kiểm tra request có hợp lệ ko đó là phần xác minh danh tính (identity authorization) tức là xác định request đó đến từ ai. Với kỹ thuật truyền thống sử dụng xác minh danh tính bằng username/password máy chủ trung tâm sẽ chịu trách nhiệm việc này bằng cách truy cập vào dữ liệu người dùng đang nắm giữ. Việc cho phép bất kỳ ai (untrusted person) hay còn gọi là bên thứ ba (third party) tham gia xác minh danh tính là điều có thể nói là bất khả thi đối với kỹ thuật truyền thống sử dụng username/pasword đơn thuần vì đây là dữ liệu bảo mật mà chỉ nhà cung cấp dịch vụ mới có quyền truy cập.

Blockchain có thể làm được điều này tức là phân tán dữ liệu của nó cho 1 bên thứ 3 bất kỳ (untrusted third party) quản lý, nghĩa là bên thứ 3 này có thể xác định tính hợp lệ của request để cập nhật chính xác vào database mà ko thể làm giả request, bằng cách sử dụng xác minh danh tính dùng chữ ký điện tử (digital signature) hay chính là công nghệ mật mã học mã hoá 1 chiều cryptography.

Người dùng sẽ nắm giữ 1 chuỗi gọi là khoá bí mật (private key), từ khoá bí mật này sinh ra khoá công khai tương ứng (public key). Với mỗi request được gửi đi chữ ký điện tử tương ứng đc tạo ra từ private key và nội dung request và đc gửi kèm theo request cùng với public key. Public key ở đây là ko đổi và sẽ đóng vai trò như là username cùng với chữ ký điện tử đóng vai trò như là password nhưng thay đổi dựa trên nội dung request. Với public key và chữ ký điện tử này bất kỳ ai cũng có thể xác minh tính đúng đắn của request nhưng ko thể thay đổi nội dung request vì ko thể tạo ra chữ ký điện tử tương ứng mà không có private key.

Kỹ thuật mật mã học mã hoá 1 chiều sử private / public key cho phép việc xác minh danh tính được thực hiện ở phía client mà k cần thông qua một máy chủ trung tâm như cách thông thường dùng username / password. Từ đó cho phép việc quản trị dữ liệu có thể phân tán 1 cách linh hoạt.

Ứng dụng mật mã học trong bitcoin

Cụ thể hơn với ứng dụng bitcoin, dữ liệu trong bitcoin hay cũng chính là các request của người dùng được tổ chức thuộc dạng khá đơn giản và sơ khai nhất, đó là các giao dịch transaction. Một transaction mang ý nghĩa ‘A chuyển cho B x bitcoin’, trong đó A, B là địa chỉ hay chính là public key. Các transaction này được đính kèm chữ ký điện tử tương ứng với pubic key A và như vậy transaction hoàn toàn được xác định có đúng là gửi từ người A hay không.

Các transaction được gửi lên trực tiếp từ người dùng và được lưu nguyên trạng như vậy trong database. Ở đây bitcoin sử dụng cách thức gần như tương đồng với kỹ thuật event sourcing tức là data lưu dưới dạng chuỗi các event bất biến (immutable) và từ các event này có thể suy ra trạng thái (state) của data ở bất kỳ thời điểm nào mong muốn mà ko phải lưu lại trạng thái tổng hợp (aggregated data) như cách thông thường. Database của bitcoin sẽ chứa 1 loạt các transaction như vậy do người dùng gửi lên (đã được kiểm tra hợp lệ) và ứng dụng (như ví điện tử) có thể tính toán trạng thái hiện tại (tài khoản A có bao nhiêu tiền) bằng cách tổng hợp các transaction trong database.

Cấu trúc của 1 transaction

1 transaction trong dữ liệu bitcoin được cấu thành từ các input và output, trong đó các input chính là output được tạo ra từ các transaction trước đó, tổng giá trị của các input bằng tổng giá trị các output nhằm đảm bảo tổng lượng tiền ko đổi mà chỉ chuyển từ địa chỉ này sang địa chỉ khác sau khi transaction được thực hiện. Ngoài ra sẽ có 1 transaction đặc biệt thưởng cho người tìm ra khối (quá trình chúng ta sẽ đề cập đến sau đây, gọi là đào - mining), transaction này ko có input mà vẫn tạo ra 1 output được coi là hợp lệ để sẵn sàng cho các giao dịch sau này.

1 output hợp lệ chứa 1 giá trị bitcoin hoàn toàn xác định, khi dùng output này làm input của 1 transaction mà giá trị vượt quá giá trị cần chuyển đi chúng ta sẽ tạo ra 2 output

  • Output với số lượng cần chuyển cho địa chỉ muốn chuyển
  • Output với số lượng còn lại chuyển cho chính địa chỉ ban đầu (gọi là tiền thối lại)

Ví dụ Satoshi Nakamoto tạo ra transaction đầu tiên chuyển 50 btc từ không khí vào địa chỉ A của ông, ta có output hợp lệ đầu tiên A-50btc là kết quả của transaction 1. Và Satoshi muống chuyển 1btc cho địa chỉ B ông sẽ tạo ra 1 transaction với 1 input và 2 output. Các transaction được thực hiện như sau:

Transaction-1: => A-50btc
Transaction-2: A-50btc-Transaction-1 => B-1btc, A-49btc
Transaction-3: B-1btc-Transaction-2 => C-0.6btc, B-0.4btc
...

Các output khi mới được tạo ra gọi là các output chưa được sử dụng (unspent output). Các unspent output này chỉ có thể được sử dụng 1 lần duy nhất để làm input trong 1 transaction khác, do đó sau khi Transaction-2 được chấp nhận, output A-50btc-Transaction-1 sẽ trở nên vô hiệu thay vào đó ta có 2 unspent output mới là B-1btc-Transaction-2 và A-49btc-Transaction-2 sẵn sàng để sử dụng cho các giao dịch sau. Số dư của 1 địa chỉ là tổng giá trị của tất cả các unspent output thuộc địa chỉ đó vào thời điểm hiện tại.

Ở đây chúng ta thấy các mẩu giá trị bitcoin (các unspent output) trong database là hoàn toàn xác định và riêng biệt có thể so sánh giống như là các mẩu tiền giấy khác nhau ở ngoài đời vậy, chỉ khác là từ 1 mẩu có thể đập ra thành các mẩu giá trị nhỏ hơn kích thước khác nhau bất kỳ và có tổng giá trị không đổi.

Blockchain

Các cá nhân độc lập tham gia quản lý dữ liệu của bitcoin gọi là các full node hay là các node. Ở trên ta đã phân tích trường hợp của 1 node duy nhất khi hoạt động, cách mà nó quản lý data của bitcoin với xác minh danh tính dùng chữ ký điện tử, vậy thì khi có rất nhiều node cùng tham gia quản lý data thì sẽ như nào, làm thế nào để nhiều node cùng hoạt động mà vẫn đảm bảo tính đồng bộ (sync) ở mọi thời điểm và sai lệch nếu có sẽ ở mức thấp nhất và nhanh chóng được đồng bộ trở lại nhanh nhất.

Giả sử ở 1 thời điểm ta có database bitcoin gồm 1 tập các transaction hợp lệ và thống nhất ở tất cả các node đang hoạt động. Các transaction mới được gửi lên mạng lưới 1 cách liên tục trong đó có 2 transaction như sau sử dụng cùng 1 unspent output:

OutputA => X
OutputA => Y

Bằng kỹ thuật mật mã học chúng ta xác định được cả 2 transaction này đúng là đc gửi từ A (chữ ký hợp lệ), đối chiếu với database hiện có OutputA là hợp lệ vì chưa đc sử dụng tuy nhiên dễ thấy 2 transaction này mâu thuẫn với nhau vì cùng sử dụng cùng một unspent ouput . Nếu transaction 1 đc chấp nhận thì transaction 2 trở nên ko hợp lệ và ngược lại. Nếu chỉ có 1 node quản lý thì chọn cái nào cũng được ko thành vấn đề nhưng khi có nhiều node đồng thời tham gia quản lý 1 bản copy data riêng, toàn mạng lưới phải thống nhất 1 phương án để data được đồng bộ cho tất cả các node.

Để giải quyết vấn đề này trước hết các transaction mới sau khi đc xác nhận ở host của 1 node sẽ được đóng vào 1 khối (block - để tiện cho việc xác minh hàng loạt), và khi được đưa lên mạng lưới sẽ có rất nhiều khối như vậy và bài toán về sự đồng thuận (consensus) được đặt ra tức là chọn khối nào để thống nhất cho tất cả các node tham gia mạng lưới.

Thuật toán giải quyết sự đồng thuận Prove Of Work (pow) và mining

Dữ liệu bitcoin đc tạo thành từ các khối chứa lịch sử 1 tập các transaction đã được xác nhận hợp lệ, Các khối này được sắp xếp theo 1 trình tự xác định và chặt chẽ theo qui tắc header của khối trước cùng với số nonce đem mã hoá theo công thức xác định (thuật toán sha256) ra đc header của khối sau. Do vậy các khối được liên kết với nhau theo trình tự chặt chẽ tạo thành chuỗi gọi là chuỗi khối (blockchain), để tìm được khối tiếp theo bắt buộc phải dựa trên khối ngay trước nó. Quá trình tìm ra khối này được gọi là đào (mining).

Các transaction khi mới đc đưa lên mạng lưới sẽ được đưa vào pool cho các transaction chưa được xác nhận tức là chưa đc đưa vào khối nào, sau đó nó sẽ đc chọn để đưa vào khối bởi thợ đào miner.

Ở đây là việc xác minh các transaction hợp lệ và đưa vào để tạo khối là việc rất nhanh chóng mà ai cũng có thể làm đc. Cho nên để thống nhất cho toàn mạng lưới (network) chọn khối nào người ta đặt ra 1 bài toán khó hơn. Trong công thức:

Current header, nonce =>(sha256) Next header

Với header block hiện tại đã xác định, người đào phải tìm ra số nonce sao cho header đc tạo ra chứa X ký tự 0 ở đầu tiên. Như ta đã biết thuật toán mã hoá 1 chiều cho phép xác định kết quả output từ input 1 cách nhanh chóng nhưng ko thể suy ngược input từ output. Do đó cách duy nhất để tìm ra số nonce ở trên là thử vét cạn sao cho kết quả header tìm được thoả mãn X ký tự 0 ở đầu tiên. Số X ở trên gọi là độ khó của việc đào bitcoin và sẽ được điều chỉnh theo qui luật (sau mỗi 2 tuần tuỳ vào tốc độ bitcoin đc tạo ra để tăng hoặc giảm). Người đầu tiên tìm ra khối thoả mãn điều kiện trên sẽ được mạng lưới chấp nhận kèm theo 1 transaction thưởng trong khối đó và khi đó 1 vòng đào mới bắt đầu lại với header của block mới nhất. Khi mà càng nhiều người tham gia đào bitcoin thì độ khó bitcoin sẽ ngày càng tăng để điều chỉnh sao cho tốc độ sinh bitcoin được ổn định khoảng vào khoảng 10 phút 1 block.

Với mỗi phép thử cho 1 số nonce người ta gọi là 1 hash, hash rate là tốc độ của máy đào có khả năng tính ra bao nhiêu hash trong 1s. Tổng hash rate của toàn mạng lưới càng lớn thì tốc độ đào được 1 block cũng tăng lên do đó độ khó cũng sẽ được điều chỉnh tăng theo để kìm hãm tốc độ sinh bitcoin.

Có thể thấy việc đào bitcoin tức là quá trình cạnh tranh nhằm lấy quyền tạo block xác nhận giao dịch là quá trình tốn kém, chậm và ko thực sự trực tiếp liên quan đến việc xác nhận giao dịch. Mục đích chính của việc này là thống nhất cho mạng lưới chọn ra ai là người được phép xác nhận giao dịch tại 1 thời điểm trong bối cảnh bất kỳ ai cũng có thể làm đc điều này nhưng phải chọn 1 mà thôi. Thực ra nếu chỉ đơn thuần là chọn ra như vậy 1 cách đơn giản và trực diện nhất ta hoàn toàn có thể chọn ngẫu nhiên 1 block hợp lệ bất kỳ hay trao quyền cho 1 người bất kỳ để tạo block. Tuy nhiên vấn đề k đơn giản như vậy ở trên mạng lưới phân tán làm thế nào để việc chọn ngẫu nhiên này thống nhất cho toàn mạng lưới, làm sao biết việc chọn ngẫu nhiên là thực sự ngẫu nhiên mà ko có sắp đặt ?

Một vài thuật toán consensus:

Việc chọn ngẫu nhiên là ý tưởng thuật toán giải quyết bài toán đồng thuận của đồng Cardano tên gọi là Ouroboros, ngoài ra còn có thuật toán Prove Of Stake (POS - chế độ cổ phần) với ý tưởng những người giữ coin cùng tham gia xác nhận giao dịch tạo block sau đó thưởng sẽ được chia theo tỉ lệ coin nắm giữ, hay như là mở rộng của nó thuật toán DPOS (Delegated Prove Of Stake) được áp dụng trong đồng EOS với cách thức là toàn mạng lưới dùng số coin mình nắm giữ để bầu cho 1 nhóm xác định sẽ có quyền tạo block (cách làm này đang bị chỉ trích là trao quyền lực cho 1 nhóm và làm giảm tính decentralized)

Thực ra việc đào coin bằng POW mặc dù tỏ ra chậm và ngày càng tốn kém nhưng chính điều đó cũng có ý nghĩa trong việc đảm bảo tính security tức là dữ liệu blockchain an toàn và khó bị sửa đổi hơn (điều này có thể được làm rõ hơn ở phần sau) và là phương thức thành công nhất cho các coin decentralized vẫn được áp dụng cho tới hiện tại.

Tổng kết

Như vậy bằng cách áp dụng các kỹ thuật ở trên bitcoin trở thành đồng tiền thuần kỹ thuật số đầu tiên thành công bởi nó đã giải quyết 2 vấn đề căn bản sau để có thể được sử dụng làm tiền:

  • Không thể bị làm giả: kỹ thuật xác minh danh tính dùng mật mã học cùng việc phân tán dữ liệu ngang hàng cho nhiều node quản lý khiến cho các giao dịch ko thể bị làm giả cũng như ko có đơn vị trung tâm nào có thể tự ý thay đổi dữ liệu.
  • Không thể sử dụng 2 lần: việc gom các giao dịch hợp lệ thành khối liên kết theo trình tự chặt chẽ và giải quyết bài toán về sự đồng thuận giúp cho dữ liệu đúng và đồng nhất trên toàn mạng lưới.

Ở những phần sau mình sẽ đi sâu hơn vào 1 số khái niệm căn bản (segwit, hardfork..) trong bitcoin cũng như giải thích khái quát những vấn đề về lập trình(orphant block, 51% attack..) khi bitcoin đi vào hoạt động, sau đó là những ứng dụng mở rộng hợp đồng thông minh smart contract cũng như phân tích ý nghĩa vai trò của nó.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Dang Thanh Tung

3 bài viết.
11 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
4 2
Ứng dụng phi tập trung ( decentralized application ) Phương thức xác minh danh tính phía client sử dụng chữ ký điện tử và lưu trữ quản trị databas...
Dang Thanh Tung viết 11 tháng trước
4 2
White
1 3
KonnectUIKit KonnectUIKit is a UIFramework for Konnect client in browser. Philosophy Reactive UIKit is based on Bacon and Vue. Message fro...
Dang Thanh Tung viết hơn 4 năm trước
1 3
Bài viết liên quan
Male avatar
17 0
Giới thiệu Bitcoin là gì? Bitcoin là tập hợp của nhiều khái niệm và công nghệ tạo nên thành phần cơ bản cho hệ thống tiền điện tử. Đơn vị tiền t...
Nguyen Quang Phuong viết hơn 1 năm trước
17 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
3 bài viết.
11 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!