Năm ngoái, tôi đã viết 5 ý tưởng về Bitcoin ở đây, có vẻ như đây là bài viết đầu tiên về Bitcoin, hôm nay tôi sẽ giới thiệu về giao dịch Bitcoin.
Michael Nielsen là một nhà khoa học, nhà văn và lập trình viên tiên phong trong nghiên cứu tính toán lượng tử, xin xem chi tiết về bản giới thiệu của ông. Dịch bài viết này bởi vì người dịch cho rằng bài viết và thảo luận về Bitcoin có rất nhiều, rất nhiều ủng hộ và rất nhiều phản đối. Nhưng hầu hết đều dừng lại ở khái niệm, giá cả và suy nghĩ chủ quan, tôi muốn dỡ bỏ giá trị hiện tại của Bitcoin và bề mặt của nó, thông qua bài viết này, tôi muốn cho tất cả mọi người biết chi tiết về nguyên tắc làm việc của giao thức Bitcoin. Tôi tin rằng hiểu rõ nguyên tắc làm việc đằng sau một cái gì đó là rất quan trọng đối với tôi.
Chỉ để mọi người biết nó là gì, nơi nó phù hợp với không gian tiền điện tử, không cố gắng thuyết phục họ rằng nó tốt. Một câu nói khác của ông là “Nếu bạn không tin tôi hoặc không nhận được nó, tôi không có thời gian để cố gắng thuyết phục bạn, xin lỗi”.
Hàng ngàn bài viết đã cố gắng giải thích Bitcoin, một loại tiền tệ trực tuyến, ngang hàng (Peer-to-Peer). Hầu hết các bài viết đều có một bản thỏa thuận cơ bản, bỏ qua nhiều chi tiết. Ngay cả những bài viết sâu sắc cũng bị mắc kẹt ở những điểm quan trọng. Mục đích của bài viết này là giải thích các điểm chính đằng sau thỏa thuận Bitcoin một cách rõ ràng và dễ hiểu nhất có thể.
Hiểu được thỏa thuận này một cách sâu sắc là rất khó, bởi vì rất dễ để coi Bitcoin như là một cái gì đó đã được đưa ra, và nghĩ về cách sử dụng nó để làm giàu, suy nghĩ rằng nó có phải là một bong bóng hay không, suy nghĩ rằng Bitcoin có nghĩa là sự kết thúc của thuế hay không, v.v. Những suy nghĩ này rất thú vị, nhưng những suy nghĩ này hạn chế nghiêm trọng sự hiểu biết của bạn.
Tôi sẽ giải thích về kịch bản Bitcoin và hợp đồng thông minh trong bài viết tiếp theo. Trong bài viết này tôi sẽ tập trung vào các chi tiết cụ thể của giao thức Bitcoin. Để hiểu bài viết này, bạn cần phải quen thuộc với mật khẩu khóa công cộng và chữ ký số liên quan, và cũng quen thuộc với hàm Hash (thay đổi đầu vào chiều dài bất kỳ thành đầu ra chiều dài cố định).
Có thể bạn sẽ ngạc nhiên khi biết rằng Bitcoin được xây dựng trên nền tảng mật mã học, không phải là nó là một loại tiền tệ, hay nó là một cách để gửi thông tin bí mật? Thực tế, phần lớn các vấn đề mà Bitcoin muốn giải quyết là về bảo vệ giao dịch, đảm bảo rằng người ta không thể ăn cắp thứ gì đó của người khác, hoặc giả mạo người khác, v.v. Trong thế giới vật chất của nguyên tử, chúng ta đảm bảo an toàn bằng khóa, chữ ký, hộp an toàn ngân hàng, v.v. Trong thế giới thông tin, chúng ta đảm bảo an toàn bằng mật mã học.
Chiến lược của bài viết này là xây dựng Bitcoin từng lớp một. Chúng ta sẽ bắt đầu với một loại tiền kỹ thuật số rất đơn giản, chúng ta tạm thời gọi nó là “Infocoin” để phân biệt nó với Bitcoin. Tất nhiên, phiên bản đầu tiên của Infocoin của chúng ta sẽ có nhiều nhược điểm, vì vậy chúng ta sẽ trải qua một số lần lặp lại, mỗi lần chúng ta sẽ giới thiệu một hoặc hai khái niệm mới.
Cách giải thích Bitcoin một cách chậm hơn so với cách giải thích Bitcoin ngay từ đầu. Tuy nhiên, ngay cả khi bạn có thể hiểu một chút về nguyên tắc của Bitcoin, bạn cũng sẽ khó hiểu tại sao Bitcoin được thiết kế như vậy.
Cuối cùng, tôi nên nói rằng tôi là người tương đối mới trong thế giới Bitcoin. Tôi có một sự quan tâm thô sơ vào năm 2011, nhưng thực sự nghiêm túc nghiên cứu chi tiết của nó là vào đầu năm 2013.
Nếu Alice có thể sử dụng một chuỗi ký tự như tiền, làm sao chúng ta có thể ngăn chặn cô ấy sử dụng cùng một chuỗi ký tự nhiều lần? Nếu chúng ta có thể giải quyết vấn đề này, làm thế nào chúng ta có thể ngăn chặn người khác làm giả một chuỗi ký tự và ăn cắp nó từ Alice?
Đây chỉ là hai trong số rất nhiều vấn đề cần giải quyết bằng thông tin làm tiền. Trong phiên bản đầu tiên của Infocoin, chúng tôi đã tìm cách để Alice cung cấp một chuỗi ký tự làm tiền và tìm cách để bảo vệ nó khỏi bị giả mạo. Giả sử Alice muốn đưa một infocoin cho người khác Bob.
Đây là một phương pháp không quá nổi tiếng, nhưng có một số ưu điểm. Bất kỳ ai trên thế giới cũng có thể sử dụng chìa khóa công khai của Alice để xác nhận Alice là người đã ký tên. Không ai khác có thể tạo ra kết quả của chữ ký đó.
Tôi chưa nói chính xác đồng tiền trong thỏa thuận này là gì. Nói một cách rõ ràng: đồng tiền thực sự là thông điệp chính nó. Đó là một chuỗi ký tên đại diện cho những ký tự mà Alice sẽ đưa cho Bob một infocoin.
Vấn đề của phiên bản đầu tiên của Infocoin là Alice có thể gửi tin nhắn cùng một chữ ký cho Bob nhiều lần. Giả sử Bob nhận được 10 tin nhắn như vậy, Alice sẽ cho Bob một infocoin.
Chúng tôi muốn infocoin có một cái tên duy nhất. Nó cần một thẻ hoặc một số dãy. Alice có thể ký tên vào một trong những tin nhắn của tôi, Alice sẽ cho Bob một số dãy infocoin có số dãy 8740348. Sau đó Alice sẽ ký tên vào một trong những tin nhắn khác.
Để thực hiện kế hoạch này, chúng ta phải có một nguồn số theo thứ tự đáng tin cậy. Một cách để tạo ra số theo thứ tự là thành lập một tổ chức như ngân hàng. Ngân hàng sẽ tạo ra số theo thứ tự cho infocoin, ghi lại những người sở hữu và xác minh tính xác thực của giao dịch.
Cụ thể hơn, giả sử Alice đi đến một ngân hàng và nói rằng tôi muốn lấy một infocoin từ tài khoản của mình. Ngân hàng này đã lấy một infocoin từ tài khoản của cô, và sau đó cho cô một số chuỗi mới chưa bao giờ được sử dụng, giả sử là 1234567. Sau đó, khi Alice muốn gửi một infocoin cho Bob, cô đã ký vào tin nhắn mới này.
Giải pháp trên có vẻ rất tiềm năng. Tuy nhiên, chúng ta có thể làm điều gì đó đầy tham vọng hơn. Chúng ta có thể loại bỏ các ngân hàng khỏi thỏa thuận. Điều này thay đổi đáng kể các thuộc tính của tiền tệ.
Phương pháp này là để mọi người hợp tác với nhau để trở thành một ngân hàng. Đặc biệt, chúng ta giả sử rằng mỗi người sử dụng infocoin giữ một bản ghi đầy đủ, bao gồm những gì infocoin thuộc về ai. Bạn có thể tưởng tượng nó như một sổ sách công khai được chia sẻ, trong đó ghi lại tất cả các giao dịch của infocoin.
Bây giờ, giả sử rằng Alice muốn gửi một infocoin cho Bob. Cô ấy sẽ ký tên tôi vào một hộp infocoin có số chuỗi 1234567 trong hộp tin nhắn. Và sẽ xuất ra một tin nhắn đã ký tên cho Bob, Bob có thể kiểm tra bằng blockchain của riêng mình, OK, đó là một infocoin mà Alice đã gửi cho tôi.
Chúng ta vẫn còn vấn đề về nơi mà số lượng mã số được tạo ra, nhưng vấn đề này thực sự rất dễ giải quyết, vì vậy tôi sẽ giải thích sau. Vấn đề khó khăn hơn là thỏa thuận này cho phép Alice lặp lại chi tiêu cho infocoin của cô ấy. Cô ấy có thể đăng một tin nhắn có chữ ký rằng Alice sẽ cung cấp cho Bob một số lượng mã số 1234567 của infocoin, và cô ấy cũng có thể đăng một tin nhắn có chữ ký rằng Alice sẽ cung cấp cho Charlie một số lượng mã số 1234567 của infocoin. Bob và Charlie đều sử dụng blockchain của họ để kiểm tra xem infocoin đó có thực sự đến từ Alice.
Chúng tôi gọi vấn đề này là “đồng chi tiêu đôi” (sau đây gọi là “đồng chi tiêu đôi”), và có vẻ như rất khó để thành công. Sau tất cả, nếu Alice gửi tin nhắn cho Bob trước và Bob gửi tin nhắn cho tất cả mọi người khác (bao gồm cả Charlie), những người khác đã cập nhật blockchain của họ.
Cách đơn giản nhất là khi Alice gửi infocoin cho Bob, Bob không nên kiểm tra giao dịch một mình. Thay vào đó, anh ta nên công bố giao dịch này cho toàn bộ mạng Infocoin, để người khác giúp đánh giá xem giao dịch có hợp lý hay không. Nếu họ cùng nhau quyết định giao dịch là hợp lý, Bob có thể chấp nhận Infocoin và tất cả mọi người sẽ cập nhật blockchain của họ.
Cụ thể hơn, giả sử Alice muốn cho Bob một infocoin. Như trước, cô ký tên một tin nhắn, và Alice sẽ cho Bob một con infocoin có số chuỗi là 1234567 và sẽ ký tên tin nhắn cho Bob. Cũng như trước, Bob sử dụng blockchain của riêng mình để kiểm tra, đồng tiền này thực sự thuộc về Alice.
Có rất nhiều yếu tố không chắc chắn về giao thức này. Ví dụ, nếu có đủ người công bố thông tin này, thì có bao nhiêu người là đủ? Không thể là toàn bộ mạng infocoin, vì chúng ta không biết trước ai đang trên mạng infocoin.
Giả sử Alice muốn hai con trong thỏa thuận nói trên, anh ta cần phải kiểm soát toàn bộ mạng infocoin. Giả sử cô ấy sử dụng một hệ thống tự động để tạo ra nhiều tài khoản với nhiều danh tính khác nhau trên mạng infocoin, giả sử có một tỷ. Như trước đây, cô ấy đã cố gắng thực hiện hai con, trao cùng một infocoin cho Bob và Charlie, nhưng khi Bob và Charlie hỏi mạng infocoin để kiểm tra giao dịch, Alice đã ngập tràn toàn bộ mạng, nói với Bob và Charlie rằng họ có thể thông qua giao dịch và có thể lừa một hoặc cả hai người trong số họ chấp nhận giao dịch.
Có một cách thông minh, sử dụng một phương pháp gọi là làm việc bằng chứng của công việc. Phương pháp này không trực quan, cần kết hợp hai khái niệm, 1) nhân tạo để quá trình kiểm tra giao dịch chi phí tính toán cao; 2) thưởng cho họ giúp kiểm tra giao dịch. Sử dụng phương pháp thưởng để khuyến khích mọi người trên mạng để xác minh giao dịch.
Đây là điểm mấu chốt của giấy chứng nhận làm việc. Nhưng để thực sự hiểu được giấy chứng nhận làm việc, chúng ta cần phải đi sâu vào những chi tiết cụ thể hơn.
Giả sử Alice đã công bố tin nhắn cho toàn bộ mạng. Giả sử Alice muốn đưa cho Bob một infocoin có số chuỗi là 1234567. Khi những người khác trên mạng nghe tin nhắn này, mỗi người sẽ thêm nó vào một hàng giao dịch đang chờ, những giao dịch chưa được toàn bộ mạng thông qua. Giả sử một người tên là David trên mạng có thể có hàng giao dịch đang chờ sau:

David kiểm tra blockchain của mình và thấy rằng các giao dịch trên là hợp lý. Ông sẽ giúp công bố thông tin xác thực này cho toàn bộ mạng. Nhưng trước đó, thỏa thuận giao dịch kiểm tra yêu cầu David giải quyết một câu đố tính toán khó khăn là bằng chứng làm việc. Nếu anh ta không giải quyết câu đố, các thành viên khác trên mạng sẽ không chấp nhận xác thực của anh ta.
Để giải thích điều này, chúng ta sử dụng hàm băm cố định mà mọi người trên mạng đều biết và bao gồm nó trong giao thức. Bitcoin sử dụng hàm băm SHA-256 nổi tiếng, nhưng bất kỳ hàm băm mật mã học nào cũng có thể được sử dụng ở đây. Chúng ta cho David một dấu hiệu giao dịch đang chờ trong tập hợp này, L, để sau này có thể được tham khảo.

Vấn đề David sẽ giải quyết là tìm ra một số x ngẫu nhiên, khi chúng ta thêm x này vào sau L và hash kết hợp, kết quả bắt đầu bằng một số 0s. Khó khăn của vấn đề này có thể được điều chỉnh bằng cách điều chỉnh số lượng các số bắt đầu bằng 0s.
Bạn có thể thấy rằng x = 1 cũng không đúng.

Sau đó chúng ta thử x = 2, x = 3, 4, 5… và cuối cùng, khi chúng ta thấy x = 4350, chúng ta có

Số x ngẫu nhiên này cho chúng ta một kết quả là bốn hash bắt đầu bằng 0. Điều này đủ để giải quyết một câu hỏi đơn giản về việc làm chứng minh hàm chi.
Điều làm cho câu đố này không dễ giải quyết là kết quả của hàm hash mật mã luôn luôn ngẫu nhiên, và bất kỳ thay đổi nhỏ nào đối với giá trị đầu vào sẽ hoàn toàn khác với kết quả đầu ra của hàm hash toàn bộ, rất khó để dự đoán. Vì vậy, nếu chúng ta cần kết quả đầu ra phải bắt đầu từ 10 số 0, thì David sẽ cần trung bình 1610 ≈ 1012 x khác nhau để tìm ra giá trị phù hợp. Đây là một nhiệm vụ rất thách thức, đòi hỏi rất nhiều khả năng tính toán.
Rõ ràng, chúng ta có thể kiểm soát mức độ khó của bài toán chứng minh công việc bằng cách quy định bao nhiêu số 0 cần thiết. Trên thực tế, giao thức Bitcoin có thể kiểm soát tốt hơn mức độ khó của bài toán bằng cách sửa đổi một chút về chứng minh công việc trên. Không còn quy định bao nhiêu số 0 cần thiết để bắt đầu, mà là quy định kết quả xuất ra của khối nhỏ hơn hoặc bằng một giá trị mục tiêu, giá trị mục tiêu được điều chỉnh tự động để đảm bảo mỗi khối của Bitcoin sẽ mất trung bình 10 phút để giải quyết.
Được rồi, giả sử David may mắn tìm được một nonce x, chúc mừng anh ta! Anh ta sẽ được thưởng cho việc tìm ra câu trả lời này. Anh ta sẽ công bố rằng anh ta đã chứng minh các giao dịch trong khối này là hợp lý, và đồng thời công bố giá trị x mà cô ấy tìm thấy, và những người tham gia khác trong infocoin có thể chứng minh rằng x làm việc.
Để làm việc chứng minh rằng chương trình này hoạt động, người tham gia mạng sẽ cần có một cơ chế khuyến khích để giúp xác minh giao dịch. Nếu không có cơ chế khuyến khích, không ai sẽ sẵn sàng chi tiêu điện toán của riêng mình để giúp kiểm tra giao dịch. Nếu người tham gia mạng không sẵn sàng chi tiêu điện toán, thì toàn bộ hệ thống sẽ không hoạt động.
Trong giao thức của Bitcoin, quá trình xác minh này được gọi là mining (khai thác). Người xác minh thành công của mỗi khối giao dịch sẽ nhận được bitcoin như một phần thưởng. Ban đầu, phần thưởng là 50 bitcoin. Tuy nhiên, phần thưởng sẽ giảm một nửa cho mỗi 210.000 khối được xác minh.
Bạn có thể xem chứng minh công việc như một quá trình xác minh giao dịch cạnh tranh. Mỗi người tham gia sẽ chi một phần công suất máy tính. Cơ hội của một thợ mỏ để giành chiến thắng có thể bằng với tỷ lệ công suất tính toán mà họ kiểm soát so với toàn bộ mạng. Ví dụ, một thợ mỏ kiểm soát một phần trăm công suất tính toán của toàn bộ mạng, thì khả năng của anh ta là một phần trăm. Vì vậy, cung cấp một lượng lớn công suất tính toán là yếu tố hỗ trợ khả năng cạnh tranh, một thợ mỏ không trung thực có rất ít cơ hội phá hoại quá trình xác minh, trừ khi họ chi tiêu rất nhiều tài nguyên máy tính.
Tất nhiên, ngay cả khi một thợ mỏ không trung thực có cơ hội rất nhỏ để phá hủy toàn bộ blockchain, chúng tôi cũng không đủ tự tin để coi nó như một loại tiền tệ.
Tôi sẽ phân tích vấn đề của đôi hoa ngay, nhưng trước khi đó, tôi muốn bổ sung một chi tiết quan trọng trong khái niệm của Infocoin. Lý tưởng nhất, chúng tôi muốn mạng Infocoin có thể thống nhất thứ tự giao dịch xảy ra. Nếu chúng tôi không có thứ tự thống nhất, thì không rõ ai có một infocoin nào tại một thời điểm nhất định. Để giúp giải quyết vấn đề này.

Trong trường hợp ngẫu nhiên, một blockchain sẽ tạo ra một nhánh. Điều này là do đôi khi hai thợ mỏ xác nhận giao dịch của một khối gần như cùng một lúc. Họ công bố cùng một lúc trên mạng, một số người cập nhật blockchain của họ bằng một phương pháp và một số người khác cập nhật blockchain của họ bằng phương pháp khác.

Điều này tạo ra một tình huống mà chúng ta muốn tránh, đó là không rõ thứ tự giao dịch, và không rõ ai sở hữu cái nào là infocoin. May mắn thay, có một cách đơn giản để di chuyển các nhánh. Quy tắc là: nếu có sự phân tách, mọi người trên mạng tiếp tục giữ hai nhánh, và trong mọi trường hợp, thợ mỏ chỉ làm việc trên blockchain dài nhất.
Giả sử chúng ta có một nhánh, và một số thợ mỏ nhận được khối A trước, và một số thợ mỏ khác nhận được khối B. Những thợ mỏ nhận được khối A sẽ tiếp tục khai thác theo nhánh của họ, trong khi những người khác khai thác theo nhánh của khối B. Chúng ta giả sử rằng thợ mỏ trên nhánh B đã thành công trong việc khai thác khối tiếp theo:

Khi họ nhận được thông báo này, những người ở nhánh A sẽ nhận thấy rằng nhánh B hiện tại là dài nhất, vì vậy họ sẽ chuyển sang nhánh B. Công việc trên nhánh A sẽ nhanh chóng dừng lại, vì vậy mọi người sẽ làm việc trên cùng một blockchain theo thứ tự.
Tương tự như vậy, nếu một thợ đào trên nhánh A đào đến khối tiếp theo, thì người đang làm việc trên nhánh B sẽ dừng lại và chuyển sang nhánh A.
Bất kể kết quả là gì, quá trình này đảm bảo blockchain có thứ tự thống nhất. Trong Bitcoin, một giao dịch không được coi là xác nhận cho đến khi 1) nó tồn tại trong khối trong nhánh dài nhất, và 2) có ít nhất 5 khối xác nhận được xác nhận sau đó. Trong trường hợp này, chúng ta nói rằng giao dịch này có 6 chuỗi xác nhận.
Bây giờ chúng ta đã hiểu được thời gian, chúng ta hãy quay lại và nghĩ về những gì sẽ xảy ra nếu một người không trung thực muốn chi tiêu gấp đôi. Giả sử Alice muốn giao dịch cùng một giao dịch cho Bob và Charlie. Một khả năng là để cô ấy xác minh một khối với hai giao dịch cùng một lúc. Giả sử cô ấy có một phần trăm khả năng tính toán, thì cô ấy có thể đã xác minh được một khối.
Nhưng một khả năng khác là, cô ấy cố gắng công bố hai giao dịch riêng biệt. Cô ấy có thể công bố một giao dịch cho một nhóm thợ mỏ và một giao dịch khác cho một nhóm thợ mỏ khác, cô ấy muốn cả hai giao dịch được xác nhận.
Một khả năng khác là, Alice = Bob, nghĩa là Alice cố gắng đưa một đồng xu cho Charlie, và cô ấy cũng đưa đồng xu đó cho mình, vì cô ấy có thể có nhiều tài khoản. Trong trường hợp này, chiến lược của Alice là đợi cho đến khi Charlie nhận được Infocoin, có lẽ sau khi giao dịch được xác nhận 6 lần trong blockchain dài nhất.

Thật không may, vào thời điểm này Alice đã trễ 6 bước so với blockchain dài nhất. Cô ấy rất khó để theo kịp với nhánh dài nhất. Các thợ mỏ khác sẽ không giúp cô ấy vì họ đều cần làm việc trên nhánh dài nhất để được thưởng. Trừ khi Alice có thể kết hợp nhanh hơn bất kỳ ai khác trên mạng trong việc giải quyết bằng chứng về công việc (có nghĩa là cô ấy có thể có nhiều hơn 50% khả năng tính toán của toàn bộ mạng).
Tất nhiên, đó không phải là một sự nghiêm ngặt rằng Alice chắc chắn không thể bị lôi cuốn. Đó chỉ là một kết luận hợp lý. Bản gốc của sách trắng về Bitcoin không thực hiện phân tích bảo mật nghiêm ngặt, chỉ là một kết luận không chính thức tương tự như tôi.
Michael đã bỏ qua khái niệm của Infocoin để giải thích chi tiết hơn về giao thức của Bitcoin thông qua giao dịch Bitcoin. Nếu bạn thấy nó ở đây, bạn có thể theo dõi blog của tôi, và blog của tôi.
Ngoài ra, nếu bạn thấy nó hữu ích, tôi khuyên bạn nên gửi lời khuyên cho tác giả của bài viết, Michael Nielsen, 17ukkKt1bNLAqdJ1QQv8v9Askr6vy3MzTZ, bạn cũng có thể theo dõi anh ấy trên Twitter 。 hoặc theo dõi chương đầu tiên của cuốn sách sắp xuất bản của anh ấy về mạng lưới thần kinh và học tập sâu.
Bài viết được trích dẫn từ Jan-Buk Chan