Tác giả: Ẩn danh
Khi người dùng tiếp xúc với Bitcoin, họ thường gặp ngay khái niệm “địa chỉ”. Khi bạn cố gắng nhận thanh toán Bitcoin, bạn cần cung cấp địa chỉ của mình. Khi kiểm tra xem khoản thanh toán đã được nhận trong Block Explorer hay chưa, địa chỉ cụ thể thường được sử dụng làm điều kiện tìm kiếm.
Bạn có thể nghĩ: “Một địa chỉ tương đương với một tài khoản ngân hàng trong thế giới Bitcoin và có thể dùng để nhận Bitcoin”. Nhưng cách hiểu này có thể vẫn khiến bạn bối rối khi đối diện một số tình huống trong quá trình sử dụng ví. Ví dụ: khi bạn sử dụng ví phần mềm Bitcoin lần đầu tiên, nó có thể yêu cầu bạn chọn một "loại" địa chỉ, chẳng hạn như: "Bech32 (SegWit)", "P2PKH", "Nested-SegWit (P2SH)", v.v. Ngay cả khi bạn muốn chuyển sang ví phần mềm khác, điều đó sẽ khiến bạn lo sợ: ví phần mềm mới có thể cung cấp cho bạn một bộ địa chỉ Bitcoin hoàn toàn khác với ví phần mềm ban đầu; bạn nên làm gì lúc này?
Bài viết này nhằm giải thích sâu hơn một chút về khái niệm địa chỉ Bitcoin và loại địa chỉ nhằm giúp người đọc giải quyết một số vấn đề có thể gặp phải trong quá trình giữ Bitcoin độc lập, bao gồm nhưng không giới hạn ở việc lựa chọn loại địa chỉ và phần mềm những rắc rối di chuyển ví có thể phát sinh trong quá trình này.
Chương cuối sẽ tập trung mô tả đặc điểm và tính kinh tế của các địa chỉ khác nhau mà độc giả có thể tiếp cận; nếu bạn không quan tâm đến chi tiết kỹ thuật hoặc chỉ muốn xác minh nhanh thông tin, bạn có thể chuyển sang chương cuối; nhưng nếu bạn muốn lập kế hoạch cho phương pháp tự quản lý thì bạn nên đọc lại từ đầu.
Nói một cách đơn giản, địa chỉ Bitcoin thực chất là kết quả của quá trình mã hóa (dịch thuật) đặc biệt dữ liệu chính được sử dụng trong các tập lệnh Bitcoin được tiêu chuẩn hóa ; phương pháp mã hóa đặc biệt giúp nó phù hợp hơn cho việc truyền tải và cung cấp khả năng cảnh báo lỗi. sự khác biệt về mặt kinh tế của tập lệnh Bitcoin cơ bản của nó.
Tập lệnh Bitcoin được tiêu chuẩn hóa
Như chúng ta đã biết, Bitcoin là một loại tiền điện tử chạy trên mạng ngang hàng. Khi phát triển Bitcoin, Satoshi Nakamoto đã thiết kế một hình thức tồn tại cho loại tiền tệ được gọi là “UTXO”. Định dạng này làm cho quỹ Bitcoin không giống như tiền nằm trong tài khoản này sang tài khoản khác sụp đổ một tấm séc độc lập nối tiếp một tài khoản khác. Những "kiểm tra" này ghi lại hai thông tin chính: mệnh giá của số tiền (bằng "sats"); và khóa công khai của tập lệnh (scriptPubkey), được sử dụng để xác định các trường hợp mà số tiền có thể được chi tiêu. Khóa công khai của tập lệnh giống như một ổ khóa cần có một khóa cụ thể để mở.
Satoshi Nakamoto nhận ra rằng nếu chúng ta có thể tùy chỉnh các ổ khóa khéo léo, Bitcoin có thể được sử dụng linh hoạt hơn trong các tình huống khác nhau. Do đó, anh ấy cũng đã thiết kế một ngôn ngữ lập trình có tên là "Bitcoin Script" và chế độ xác minh giao dịch dựa trên UTXO, do đó, chúng ta có thể viết một chương trình được sử dụng làm khóa chung của tập lệnh và khi số tiền liên quan được chi tiêu, nó có thể được xác minh; dựa trên các thủ tục như vậy được xác nhận.
Sự đổi mới này mang đến một khó khăn thực tế: khi một giao dịch lan truyền trong mạng ngang hàng, nút nhận giao dịch trước tiên sẽ thực hiện một số công việc xác minh. Nếu ngôn ngữ lập trình và lập trình có lỗ hổng cố hữu cho phép nút gặp sự cố trong quá trình xác thực giao dịch thì các giao dịch khai thác lỗ hổng này có thể được sử dụng để làm sập toàn bộ mạng. Làm cách nào để đạt được sự cân bằng giữa mức độ lan truyền miễn phí của các giao dịch và tính bảo mật của mạng?
Ngoài việc cố tình hạn chế tính linh hoạt của Bitcoin Script, Satoshi Nakamoto nghĩ ra cách xác định một số tập lệnh được biết là đủ ngắn gọn và sẽ không gây ra lỗi như "các tập lệnh Bitcoin được tiêu chuẩn hóa" [1] ; một tập lệnh, giao dịch được coi là "giao dịch Bitcoin tiêu chuẩn" và có thể lan truyền không bị cản trở trên mạng. Ngược lại, nếu tập lệnh tiêu chuẩn hóa như vậy không được sử dụng, ngay cả khi giao dịch hợp lệ, nó chỉ có thể được gửi trực tiếp cho thợ đào, thợ đào sẽ đóng gói nó thành các khối và đào chúng ra, sau đó lan truyền ra toàn bộ mạng. Điều này hạn chế các giao dịch có thể gây ra sự cố bảo mật lan truyền trong mạng và gây ra sự cố nút.
Có hai tập lệnh Bitcoin được tiêu chuẩn hóa sớm nhất được triển khai: "P2PKH" và "P2PK"; như tên cho thấy, chúng đặt khóa chung (hoặc hàm băm của khóa chung) vào khóa chung của tập lệnh và yêu cầu giao dịch phải tiêu tiền. Chữ ký của khóa chung đó (đằng sau private key ).
Khóa công khai của tập lệnh P2PKH trông như thế này:
OP_DUP OP_HASH160 55ae51684c43435da751ac8d2173b2652eb64105 OP_EQUALVERIFY OP_CHECKSIG
(Từ trang web phổ cập Bitcoin nổi tiếng: tìm hiểu cho tôi về bitcoin )
Khái niệm địa chỉ
Các tập lệnh được tiêu chuẩn hóa cho phép hệ thống Bitcoin có các chức năng cơ bản (cá nhân có thể giữ Bitcoin và bắt đầu thanh toán bằng tiền điện tử cho người khác bằng cách giữ private key ). Tuy nhiên, đó vẫn là dữ liệu được thiết kế cho máy tính - đối tượng phải hiểu các chuỗi này chính là máy tính. Máy tính không nhạy cảm với độ dài của chuỗi và sẽ không mắc lỗi khi sao chép dữ liệu. Và mọi người thì ngược lại về nhiều mặt.
Vấn đề là mọi người, với tư cách là người dùng hệ thống này, phải xử lý dữ liệu này: khi một người nhận được khoản thanh toán Bitcoin, điều TA yêu cầu là bên kia gửi một khoản tiền Bitcoin đến ngân hàng do TA kiểm soát (hoặc TA có thể mở khóa thành công ); ngoài ra, khi TA muốn giữ tiền của mình trong thời gian dài, TA có thể cần sao lưu tập lệnh Bitcoin của riêng họ.
Chúng ta nên làm gì vào lúc này? Một chuỗi dài như trên rõ ràng là không phù hợp để truyền tải (quá dài), cũng như không phù hợp để sao lưu (dễ sao chép sai).
Như chúng tôi đã đề cập trước đó, các tập lệnh hữu ích cho hầu hết mọi người đều được tiêu chuẩn hóa . Tiêu chuẩn hóa này có nghĩa là hai tập lệnh chỉ khác nhau trong đó một dữ liệu chính: đối với hai tập lệnh P2PKH, điểm khác biệt duy nhất của chúng là các giá trị băm khóa công khai được ghi lại là khác biệt. Vì vậy, khi thu tiền chúng ta chỉ cần cung cấp giá trị hash này và loại script (là script P2PKH) là đủ. Người trả tiền (phần mềm) sẽ sử dụng thông tin này để khôi phục tập lệnh Bitcoin hoàn chỉnh và gửi Bitcoin đến đúng địa điểm trong giao dịch.
Hơn nữa, (Satoshi Nakamoto kỹ thuật, nhận ra), chúng ta không thể chuyển dạng thập lục phân của giá trị băm này ( 55ae51684c43435da751ac8d2173b2652eb64105
, 40 ký tự). Với sự trợ giúp của phương pháp mã hóa được thiết kế đặc biệt, chúng ta có thể chuyển đổi nó thành dạng ngắn hơn, dễ đọc hơn.
Đây là "địa chỉ": dữ liệu được mã hóa mang thông tin chính cho phép chúng tôi khôi phục chính xác tập lệnh Bitcoin .
Phương pháp mã hóa
cơ sở58
"Base58" [2] là một phương pháp mã hóa được phát minh Satoshi Nakamoto , được sửa đổi từ phương pháp mã hóa nổi tiếng "Base64". Bộ ký tự của Base64 bao gồm: tất cả các số và chữ hoa và chữ thường, cũng như hai ký hiệu ("+" và "/"); Satoshi Nakamoto đã xóa số 0, chữ I và O viết hoa, chữ l viết thường và các ký hiệu khỏi nó, và nó trở thành Base58.
Việc xóa này là có chủ ý. Tự mô tả của Satoshi Nakamoto là:
Tại sao nên sử dụng base58 thay vì base64?
- 0OIl không được sử dụng vì các ký tự này trông giống nhau và có thể được sử dụng để tạo các tài khoản trông gần giống nhau.
- Không dễ để mọi người chấp nhận rằng trong số tài khoản của mình sẽ có những ký tự khác ngoài chữ và số.
- Nếu bạn không sử dụng dấu câu, email của bạn thường sẽ không bị gián đoạn do ngắt dòng.
- Bấm đúp để chọn toàn bộ chuỗi vì chỉ có chữ cái và số.
–Satoshi Satoshi Nakamoto, Bitcoin v0.1 (base58.h)
Địa chỉ cần được khôi phục về tập lệnh Bitcoin, do đó, chỉ cần một ký tự sai, số tiền có thể được gửi đến tập lệnh Bitcoin hoàn toàn khác (có thể là tập lệnh hoàn toàn không thể mở khóa!), dẫn đến mất thậm chí tiền;
Do đó, những cân nhắc của Satoshi Nakamoto là hoàn toàn hợp lý.
Trước khi thực hiện mã hóa Base58, chúng ta cũng cần thêm mã loại làm tiền tố cho dữ liệu chính (chẳng hạn như giá trị băm trong tập lệnh P2PKH ở trên) và sử dụng 4 byte đầu tiên của kết quả của lần thao tác SHA256 liên tiếp của tiền tố dữ liệu chính dưới dạng hậu tố .
- Tiền tố có thể nhanh chóng chỉ ra loại và mục đích của dữ liệu; và chính xác là do tiền tố được thêm vào, cùng một loại dữ liệu sẽ luôn có cùng phần đầu trong kết quả được mã hóa Base58. Đây là lý do tại sao chúng ta chỉ cần nhìn vào phần đầu của địa chỉ Bitcoin để biết đó là loại địa chỉ nào.
- Hậu tố có thể hoạt động như một tổng kiểm tra: nếu bạn nhập địa chỉ có lỗi phiên âm vào phần mềm, phần mềm sẽ nhắc nhở bạn rằng có thể bạn đã mắc lỗi (mặc dù nó không thể chỉ rõ lỗi xảy ra ở đâu).
Nghĩa là, trước khi bắt đầu mã hóa, chúng ta cần xây dựng một chuỗi như thế này:
类型码+ 关键数据+ SHA256(SHA256(类型码+ 关键数据))[0:4](这里的“+” 是字符串拼接的意思)
Lấy tập lệnh P2PKH ở trên làm ví dụ, trước tiên chúng ta cần thêm tiền tố 00
vào dữ liệu chính ( 55ae51684c43435da751ac8d2173b2652eb64105
); sau đó chạy lần phép tính SHA256 liên tiếp trên dữ liệu này và lấy 4 byte đầu tiên (8 ký tự ở dạng thập lục phân, 96ab3cb1
), làm hậu tố, chúng ta nhận được 0055ae51684c43435da751ac8d2173b2652eb6410596ab3cb1
. Cuối cùng, chạy mã hóa Base58 và nhận được: 18p3G8gQ3oKy4U9EqnWs7UZswdqAMhE3r8
.
Chuỗi này không chỉ chứa thông tin chính được sử dụng trong tập lệnh Bitcoin(giá trị băm khóa công khai) mà còn giải thích cách sử dụng nó (tiền tố 1
cho biết rằng nó cần được khôi phục thành tập lệnh P2PKH) và còn có khả năng phát hiện phiên âm Hàm sai vẫn chỉ có 34 ký tự, ngắn hơn giá trị băm ban đầu.
Bech32
"Bech32" là phương pháp mã hóa được xác định bởi BIP 0173 [3] , hai tác giả của BIP này là Pieter Wuille và Greg Maxwell. Tuy nhiên, cách mã hóa này cũng có nguồn gốc riêng: “Bech” dùng để chỉ “BCH” [4] , là thuật toán mã hóa sửa lỗi tuần hoàn được phát minh bởi ba nhà toán học lần lượt vào năm 1959 và 1960 (tên BCH xuất phát từ (họ của ba nhà toán học này). Còn “32” có nghĩa là bộ ký tự của phương pháp mã hóa này chỉ có 32 ký tự: chữ và số tiếng Anh viết thường, không bao gồm số “1”, các chữ cái “b”, “i” và “o”.
Việc xem xét BIP này là tận dụng cơ hội nâng cấp"SegWit" để sử dụng phương pháp mã hóa mới cho địa chỉ của hai tập lệnh chuẩn hóa mới "P2WPKH" và "P2WSH".
Khi bắt đầu BIP 0173, các tác giả đã chỉ ra những khuyết điểm của Base58:
- Base58 sử dụng cả chữ cái tiếng Anh viết hoa và viết thường, điều này khiến dữ liệu của nó không thể sử dụng chế độ "bảng chữ cái số" nhỏ hơn khi vẽ thành Mã QR và chỉ có thể sử dụng chế độ "dữ liệu byte" lớn hơn.
- Việc sử dụng cả chữ hoa và chữ thường cũng gây khó khăn cho việc sao chép, gõ trên bàn phím di động và đọc to.
- Tổng kiểm tra yêu cầu lần thao tác SHA256 liên tiếp, tốc độ chậm và không có chức năng xác định lỗi.
- Hầu hết phương pháp mã hóa có thể xác định lỗi chỉ hoạt động khi kích thước bộ ký tự là lũy thừa nguyên tố và 58 không phải là lũy thừa nguyên tố.
- Giải mã Base58 phức tạp hơn và hoạt động chậm hơn.
Vì vậy, phương pháp mới này của Bech32 chỉ sử dụng chữ thường và số; khi cần thiết (chẳng hạn như khi vẽ Mã QR), các chữ cái này có thể đổi thành toàn chữ hoa để có được cách trình bày gọn hơn. Đồng thời, Bech32 còn có khả năng xác định lỗi: nó không chỉ có thể phát hiện bạn đã sao chép lỗi mà còn chỉ ra những từ bạn đã sao chép sai (khả năng tìm lỗi này tốt hơn nhiều so với Base58).
Trên thực tế, thuật toán BCH còn có chức năng "sửa lỗi": nó không chỉ có thể chỉ ra những ký tự bạn sao chép sai mà còn có thể chỉ ra những ký tự đó là gì. Tuy nhiên, các tác giả của BIP 0173 đã phát hiện ra những nguy hiểm cố hữu của nó: một mặt, việc tăng cường chức năng sửa lỗi sẽ làm suy yếu chức năng định vị lỗi; mặt khác, nếu người dùng quá tin tưởng vào khả năng sửa lỗi của phần mềm; phần mềm có thể đánh lừa người dùng. Dữ liệu không chính xác đã nhập sẽ được sửa thành dữ liệu"hợp lệ nhưng vô dụng" - mặc dù là một phần dữ liệu được mã hóa BCH, nó hợp lệ, tuy nhiên, người nhận thanh toán có thể không kiểm soát được tập lệnh Bitcoin ; thậm chí không phải thứ mà bất cứ ai cũng có thể kiểm soát được. Điều này cực kỳ nguy hiểm. Do đó, BIP 0173 cảnh báo: “Ngoài việc nhắc nhở người dùng những ký tự nào có thể đã bị sao chép sai, phần mềm không nên triển khai khả năng sửa lỗi (đưa ra gợi ý sửa)”.
Mặt khác, Bech32 tuân theo mẫu trong mã hóa Base58:
- Sẽ có một đoạn " dữ liệu có ý nghĩa (hrp)" ở đầu dữ liệu Bech32, tương tự như tiền tố trong Base58 và có thể giải thích đó là loại dữ liệu gì.
- hrp có thể sử dụng nhiều hơn 32 ký tự; do đó, Bech32 cũng sử dụng số "1" làm dấu phân cách để phân tách hrp và dữ liệu thực tế cần giải mã.
- Ngoài Bitcoin, còn có nhiều dự án khác cũng sử dụng Bech32; dữ liệu của các dự án khác nhau sử dụng hrp để phân biệt lẫn nhau. Đây là danh sách các HRP đã đăng ký rất thú vị (nhưng chỉ thú vị) [5] .
- Bech32 cũng thiết kế tổng kiểm tra chiếm 6 ký tự cuối cùng của dữ liệu được mã hóa.
Giả sử chúng ta sử dụng cùng một giá trị băm khóa công khai như trong trường hợp trên, tập lệnh P2WPKH của nó sẽ như sau: 0 55ae51684c43435da751ac8d2173b2652eb64105
(vâng, nó đơn giản và trừu tượng hơn P2PKH ban đầu); và mã hóa Bech32 của nó là: bc1q2kh9z6zvgdp4mf634jxjzuajv5htvsg9ulykp8
, độ dài là 42 ký tự.
Bech32m
"Bech32m" là phương pháp mã hóa được xác định bởi BIP 0350 [6] . Nó được đề xuất vì các nhà phát triển đã phát hiện ra lỗ hổng trong mã hóa Bech32:
Khi ký tự cuối cùng là "p", việc chèn hoặc xóa bất kỳ số "q" nào trước ký tự sẽ không gây ra lỗi tổng kiểm tra và cơ chế tổng kiểm tra sẽ hoàn toàn vô dụng.
Nếu không cần thêm tập lệnh Bitcoin được tiêu chuẩn hóa, vấn đề này có thể được giải quyết dễ dàng: Địa chỉ P2WPKH và địa chỉ P2WSH có độ dài nhất định, chỉ cần thêm xác minh độ dài. Tuy nhiên, vì trong tương lai chúng tôi sẽ thêm các tập lệnh chuẩn hóa mới có độ dài địa chỉ có thể thay đổi nên cần phải khắc phục vấn đề này.
Bech32m khắc phục sự cố này bằng cách thay đổi một tham số trong trình tạo tổng kiểm tra Bech32.
Hiện tại, Bech32m chỉ được sử dụng để mã hóa địa chỉ của tập lệnh "P2TR" được thêm vào khi nâng cấp"Taproot". Nó có thể được sử dụng trong việc mã hóa địa chỉ của các tập lệnh được tiêu chuẩn hóa khác trong tương lai.
Kinh tế
Sau khi chúng tôi hiểu rằng địa chỉ là sự thể hiện đặc biệt của tập lệnh Bitcoin được tiêu chuẩn hóa và các loại địa chỉ thực sự đến từ các loại tập lệnh Bitcoin được tiêu chuẩn hóa, các loại địa chỉ khác nhau có tính kinh tế khác nhau như thế nào - chúng có thể có tác dụng khác nhau khi sử dụng? giá phí xử lý - vấn đề sẽ được giải quyết dễ dàng. Điều này là do các tập lệnh Bitcoin khác nhau có tính kinh tế khác nhau.
Để duy trì phi tập trung và bảo mật của mạng, kích thước khối của Bitcoin bị giới hạn và các tập lệnh cho phép khối lượng giao dịch nhỏ hơn sẽ có lợi thế về mặt kinh tế.
Về vấn đề này, thay đổi lớn nhất chắc chắn là soft fork“SegWit” được kích hoạt vào năm 2017. Trong khi Segregated Witness mang đến hai tập lệnh chuẩn hóa mới "P2WPKH" và "P2WSH", nó cũng thiết kế chế độ xác minh giao dịch mới cho hai tập lệnh này:
Trong các tập lệnh Bitcoin kế thừa, dữ liệu(chẳng hạn như chữ ký số) được sử dụng cho quá trình xác minh được xác định bởi khóa chung của tập lệnh sẽ được đặt trong giao dịch ( trường scriptSignature
) ; 7] ngăn chúng tôi sử dụng tập lệnh Bitcoin để lập trình các ứng dụng bên long và thậm chí khiến ví không thể theo dõi các giao dịch.
Chế độ xác minh giao dịch của Segregated Witness sẽ đặt phần dữ liệu này bên ngoài giao dịch ( trường witness
). Hơn nữa, Segregated Witness giới thiệu một đơn vị đo lường mới ("byte ảo (vByte)"), được đặt trong trường nhân chứng; Dữ liệu tại hiện trường sẽ được giảm giá khi đo khối lượng (đây là thiết kế có chủ ý, nhằm giúp giao dịch SegWit tiết kiệm hơn so với giao dịch truyền thống).
Kết quả cuối cùng là các tập lệnh loại SegWit P2WPKH và P2WSH tiết kiệm hơn đáng kể so với các tập lệnh truyền thống P2PKH và P2SH: một mặt, khóa chung của tập lệnh của tập lệnh SegWit ngắn gọn hơn; tập lệnh truyền thống Đặt nó vào giao dịch và đặt chữ ký của tập lệnh Segregated Witness bên ngoài giao dịch. Ngay cả khi khối lượng dữ liệu giống nhau, vByte của tập lệnh sau sẽ nhỏ hơn.
Dưới đây là bảng minh họa các loại tập lệnh khác nhau chiếm bao nhiêu dung lượng khi được sử dụng làm đầu vào và đầu ra cho giao dịch.
- Ảnh từ: Optech Limited Weekly·Đang chờ xác nhận-
Sau đó, đây là công cụ tính khối lượng giao dịch cho bạn biết khối lượng giao dịch khác nhau của một loại tập lệnh nhất định sẽ tạo ra bao nhiêu.
Lưu ý: Khi xem xét tính kinh tế, bạn không thể chỉ so sánh kích thước của tập lệnh khi được sử dụng làm đầu vào, vì nói chung, các giao dịch Bitcoin sẽ có "đầu ra thay đổi" (số tiền bạn cung cấp cho giao dịch thường lớn hơn số tiền thanh toán , như vậy sẽ được chuyển lại một ít tiền cho chính bạn). Đầu ra thay đổi thường sẽ sử dụng cùng loại tập lệnh với địa chỉ thanh toán của ví này.
Loại địa chỉ
Phần này mô tả các đặc điểm và tính kinh tế của các loại địa chỉ khác nhau mà người dùng có thể tiếp cận.
P2PKH
- Sử dụng mã hóa Base58. Nó bắt đầu bằng số "1" và thường dài 34 ký tự.
- Đối với ví chữ ký duy nhất.
- Ít kinh tế hơn.
- Ví dụ (tương tự như trên):
18p3G8gQ3oKy4U9EqnWs7UZswdqAMhE3r8
P2SH
- Sử dụng mã hóa Base58. Nó bắt đầu bằng số "3" và thường dài 34 ký tự.
- Địa chỉ P2SH mà người dùng thường gặp nhất thực tế là địa chỉ của tập lệnh có tên "Nested SegWit (P2SH)". Tên này có nghĩa là "tập lệnh P2SH đóng gói tập lệnh Segregated Witness".
- Khả năng triển khai kiểu đóng gói này là khả năng của chính P2SH, nhưng mục đích cơ bản của việc xác định kiểu đóng gói này là giải quyết vấn đề tương thích của phần mềm ví. Vì địa chỉ Segregated Witness sử dụng phương pháp mã hóa mới nên phần mềm ví không triển khai phương pháp mới sẽ nhận ra địa chỉ Segregated Witness là đầu vào không chính xác và không thể khôi phục tập lệnh Bitcoin hợp lệ từ địa chỉ đó. Tập lệnh Nested SegWit P2SH cung cấp một sự thỏa hiệp thích hợp: ví của người trả tiền (bất kể nó có nâng cấp hay không) sẽ hiểu địa chỉ đó là địa chỉ P2SH thông thường, sau đó khôi phục tập lệnh P2SH và xây dựng chính xác giao dịch của người nhận sau đó; tiêu tiền, bạn có thể thu được một số lợi ích do Segwit mang lại (với phần mềm ví hỗ trợ Segwit).
- Khi là ví một chữ ký, nền kinh tế sẽ tốt hơn P2PKH.
- Có thể được sử dụng với ví đa chữ ký (có hoặc không có tính năng Segregated Witness).
- Ví dụ:
38Y2PBD1mihxtoVncaSz3oC2vRrjNF8sA2
(Tập lệnh P2SH này bao bọc tập lệnh P2PKH tương tự như trên, mặc dù điều này không có lợi thế)
P2WPKH
- Tập lệnh SegWit gốc. Sử dụng mã hóa Bech32, bắt đầu bằng số và chữ cái "bc1q" và dài 42 ký tự.
- Đối với ví chữ ký duy nhất.
- Nền kinh tế tốt hơn đáng kể so với P2PKH và tốt hơn Nested SegWit P2SH.
- Ví dụ (tương tự như trên):
bc1q2kh9z6zvgdp4mf634jxjzuajv5htvsg9ulykp8
P2WSH
- Tập lệnh SegWit gốc. Sử dụng mã hóa Bech32, bắt đầu bằng số và chữ cái "bc1q" và dài 62 ký tự.
- Thường được sử dụng trong ví đa chữ ký.
- Là ví đa chữ ký, nền kinh tế tốt hơn đáng kể so với P2SH.
- Ví dụ:
bc1q56cuwyqlmq64aq0y3c8swd8a9gefe4wf7faxe2uyatyahfrly5aq0e6mfc
(Tập lệnh P2WSH này bao bọc tập lệnh P2PKH tương tự như trên, mặc dù điều này không có lợi thế)
P2TR
- Tập lệnh SegWit gốc (Taproot là "SegWit v1"). Sử dụng mã hóa Bech32m, bắt đầu bằng "bc1p" và dài 62 ký tự.
- Nó có thể được sử dụng trong cả ví chữ ký đơn và ví đa chữ ký.
- Khi được sử dụng làm ví một chữ ký, nền kinh tế tốt hơn một chút so với P2WPKH, nhưng hầu như không có sự khác biệt (ở đây người ta giả định rằng một đầu vào và một đầu ra thay đổi được sử dụng làm chi phí vốn có của giao dịch; càng sử dụng nhiều đầu vào, lợi thế của P2TR càng lớn).
- Khi được sử dụng làm ví đa chữ ký, với sự trợ giúp của một số thuật toán tổng hợp chữ ký Schnorr, nền kinh tế thậm chí có thể tốt hơn P2WSH. Tuy nhiên, tại thời điểm viết bài này (tháng 11 năm 2024), phần mềm ví hiếm khi triển khai các thuật toán tổng hợp như vậy vì tính phức tạp trong tương tác của các thuật toán này.
- Sự khác biệt chính giữa P2TR và các tập lệnh tiêu chuẩn Bitcoin trước đây là các tập lệnh gốc được phân biệt giữa người dùng ví chữ ký đơn và người dùng các chức năng tập lệnh nâng cao ("hợp đồng thông minh"). ví đa chữ ký) Các thiết bị nâng cao như thiết bị chữ ký và kênh sét) sẽ sử dụng tập lệnh giá trị băm tập lệnh quy đổi lần đầu tiên, P2TR hợp nhất cả hai lần, khiến chúng tôi không thể suy ra trực tiếp việc sử dụng nó từ dạng tập lệnh bên ngoài; /Địa chỉ. Vì vậy, P2TR sẽ có quyền riêng tư tốt hơn về lâu dài.
- Cho đến nay, không phải tất cả các ví đều hỗ trợ địa chỉ P2TR (nhưng hầu như tất cả các ví đều hỗ trợ P2WPKH và P2WSH). Phạm vi lựa chọn và khả năng di chuyển của người dùng tương đối hạn chế. Ngoài ra, khả năng hỗ trợ cho các thiết bị đa chữ ký dựa trên P2TR thậm chí còn thưa thớt.
- Ví dụ (được chọn ngẫu nhiên):
bc1pxy5r3slcqc2nhc0r5698gmsqwruenj9c8pzmsy5cedp3649wyktstc6z3c
Phần kết luận
Một địa chỉ đại diện cho một tập lệnh Bitcoin cụ thể; tập lệnh Bitcoin như vậy được chuẩn hóa và có thể được khôi phục hoàn toàn dựa trên thông tin trong địa chỉ. Phương pháp mã hóa đặc biệt được sử dụng để làm cho địa chỉ gọn hơn và có các tính năng kiểm tra lỗi phiên mã. Tính kinh tế của các loại địa chỉ khác nhau xuất phát từ tính kinh tế của các tập lệnh Bitcoin được tiêu chuẩn hóa đằng sau chúng.
Phụ lục A. Mô tả
Trong phần "Khái niệm về địa chỉ", chúng tôi đã đề cập rằng có hai trường hợp trong đó người dùng có thể cần một bản ghi tập lệnh nhỏ gọn và đáng tin cậy: kịch bản thanh toán (giao hàng) và kịch bản lưu ký dài hạn.
Trong phần "Phương pháp mã hóa", chúng ta có thể thấy rằng thiết kế của phương pháp mã hóa này chủ yếu dựa trên quá trình truyền tải hơn là các kịch bản lưu trữ dài hạn. Vì vậy, địa chỉ nên được lưu như thế nào trong kịch bản lưu ký?
May mắn thay, bây giờ chúng ta có một phương pháp thích hợp để biểu diễn một nhóm địa chỉ (chứ không phải chỉ một), đó là "bộ mô tả đầu ra (địa chỉ) (bộ mô tả đầu ra)".
Kể từ khi Bitcoin ra đời và sự xuất hiện của khái niệm địa chỉ, công nghệ và thực tiễn bảo mật về quyền tự quản lý đã được cải thiện rất nhiều. Một cải tiến lớn là cái gọi là "ví xác định phân cấp (HD)". Ý tưởng là sử dụng một phần tài liệu bí mật để suy ra nhiều private key theo thuật toán ngẫu nhiên xác định, sau đó lấy ra nhiều địa chỉ, sao cho trên một địa chỉ. tay nó có thể đáp ứng yêu cầu "không sử dụng lại" thói quen bảo mật cũng có thể giảm bớt gánh nặng sao private key nhiều nhất có thể.
Bộ mô tả cũng dựa trên khái niệm này. Nó thể hiện loại địa chỉ và các bước để tạo tập hợp địa chỉ này ở dạng văn bản thuần túy, cộng với tổng kiểm tra. Ví dụ:
wpkh([8b47f816/84h/0h/0h]xpub6C8vwWQ[...]NgW2SnfL/<0;1>/*)#c38kz2nr
Từ văn bản trên, chúng ta có thể thấy rằng nó đại diện cho một tập hợp địa chỉ P2WPKH và khóa chung được sử dụng trong tập hợp địa chỉ này được lấy từ khóa chung chính có dấu vân tay 8b47f816
dựa trên 84h/0h/0h
Bắt nguồn từ BIP32 đường dẫn phái sinh và sử dụng đường dẫn phái sinh 0
và 1
để phân biệt địa chỉ thanh toán và địa chỉ thay đổi. Cuối cùng, c38kz2nr
là tổng kiểm tra, có thể xác minh xem có bất kỳ lỗi phiên âm nào hay không.
Chuỗi như vậy rất phù hợp để lưu trữ lâu dài và cũng rất phù hợp cho việc di chuyển ví vì nó mô tả đầy đủ quá trình tạo bộ địa chỉ này.
chú thích cuối trang
1. https://en.bitcoin.it/wiki/Script#Script_examples ↩
2. https://learnmeabitcoin.com/Technology/keys/base58/ ↩
3. https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki ↩
4. https://en.wikipedia.org/wiki/BCH_code ↩
5. https://github.com/satoshilabs/slips/blob/master/slip-0173.md ↩
6. https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki ↩
7. https://www.btcstudy.org/2022/10/07/segregated-witness-benefits/#%E4%BF%AE%E5%A4%8D%E7%86%94%E8%9E%8D%E6% 80%A7%E9%97%AE%E9%A2%98 ↩