Vì sao địa chỉ của bạn trông không giống của họ: các định dạng địa chỉ và lý do lệnh gửi thất bại

·6 phút đọc·Bởi SSP Editorial Team
Ảnh bìa SSP Academy: các định dạng địa chỉ tiền mã hóa và những lệnh gửi thất bại

Vì sao địa chỉ của bạn trông không giống của họ: các định dạng địa chỉ và lý do lệnh gửi thất bại

Sớm hay muộn, ai tự giữ tài sản cũng gặp đúng một khoảnh khắc bối rối như nhau. Bạn sao chép địa chỉ nhận của mình để tự gửi cho mình chút Bitcoin, và nó chẳng giống những địa chỉ bạn từng thấy. Hoặc một sàn giao dịch từ chối nó. Hoặc bạn gửi Bitcoin Cash tới một thứ trông y hệt địa chỉ Bitcoin rồi mất một giờ khó chịu để tìm hiểu chuyện gì đã xảy ra.

Không điều nào trong đó là tùy tiện. Các định dạng địa chỉ mã hóa thông tin thật về việc tiền có thể được tiêu ra sao, và khi bạn đọc được chúng thì phần lớn nỗi bối rối tan biến.

Một địa chỉ là một tập hợp điều kiện chi tiêu

Mô hình tư duy hữu ích không phải «địa chỉ là một số tài khoản». Mà là thế này: một địa chỉ là bản mô tả nén lại của những gì phải đúng thì số tiền này mới dịch chuyển được.

Gửi tới một địa chỉ bắt đầu bằng 1, điều kiện là một khóa công khai cụ thể phải tạo ra một chữ ký. Gửi tới một địa chỉ bc1q… thuộc loại dài hơn, điều kiện có thể là hai khóa cụ thể phải cùng ký. Cùng một chuỗi, cùng một khoản tiền, những luật hoàn toàn khác nhau — và định dạng địa chỉ chính là cách chuỗi nói cho bạn biết luật nào đang áp dụng.

Đó là lý do các định dạng sinh sôi. Mỗi lần Bitcoin có thêm một cách khóa tiền mới, nó lại cần một cách mới để ghi lại nơi tiền được khóa.

Những định dạng bạn sẽ gặp trên Bitcoin

Legacy — 1… Bản gốc. Trả tới băm của khóa công khai: một khóa, một chữ ký. Được hỗ trợ khắp nơi, và tốn kém nhất khi tiêu, vì dữ liệu chữ ký tính trọn vào kích thước khối.

Kịch bản — 3… Trả tới băm của kịch bản. Tiền bị khóa vào một kịch bản thay vì một khóa — một ngưỡng đa chữ ký, một khóa thời gian, bất cứ gì. Địa chỉ là băm của các điều kiện, nên từ bên ngoài bạn không thể biết chúng là gì. Đây cũng là cách SegWit thời đầu được đưa vào cho tương thích.

SegWit gốc — bc1q… Bech32. Dữ liệu chữ ký chuyển sang một cấu trúc nhân chứng riêng, khiến việc tiêu rẻ hơn và sửa được tính dễ biến dạng của giao dịch. Bech32 viết thường, có mã kiểm tra mạnh hơn base58, và được thiết kế để lỗi gõ bị phát hiện thay vì được lặng lẽ chấp nhận.

SegWit gốc có hai độ dài, và khác biệt ấy quan trọng:

  • Tổng cộng 42 ký tự — P2WPKH. Một khóa, một chữ ký.
  • Tổng cộng 62 ký tựP2WSH. Một kịch bản — ví dụ đa chữ ký hai trên hai.

Taprootbc1p… Mới nhất. Riêng tư hơn và các lệnh chi phức tạp rẻ hơn, đổi lại vài dịch vụ cũ vẫn chưa chấp nhận.

Vì sao một địa chỉ SSP trông lạ

Đây là chỗ khiến người ta bất ngờ, và nó có một lời giải thích thỏa đáng.

SSP là ví đa chữ ký hai trên hai. Tiền của bạn không bị khóa vào một khóa duy nhất — nó bị khóa vào một kịch bản đòi chữ ký từ cả tiện ích trình duyệt lẫn điện thoại của bạn. Điều đó có nghĩa địa chỉ Bitcoin của SSP là P2WSH chứ không phải P2WPKH, tức là dạng bc1q dài: 62 ký tự thay vì 42 mà hầu hết mọi người quen thuộc.

Nếu bạn đang nhìn địa chỉ của mình và nghĩ nó dài quá, thì đúng là nó phải như vậy. Phần dài thêm là băm của một kịch bản hai trên hai thay vì băm của một khóa công khai đơn lẻ. Địa chỉ dài hơn vì các điều kiện phong phú hơn.

Thỉnh thoảng điều này làm vấp những dịch vụ cũ chỉ khớp mẫu dạng ngắn. Đó là hạn chế bên phía họ — P2WSH đã mười năm tuổi — nhưng biết vì sao lỗi xuất hiện vẫn có ích, bởi thông báo thường là câu chẳng giúp được gì: «địa chỉ không hợp lệ».

Mỗi chuỗi đã chọn khác nhau

SSP hỗ trợ vài chuỗi UTXO, và mỗi chuỗi viết địa chỉ đa chữ ký theo cách riêng:

ChuỗiLoại kịch bản trong SSPĐịa chỉ trông như
BitcoinP2WSHbc1q… (62 ký tự)
LitecoinP2WSHltc1q…
Bitcoin CashP2SHbitcoincash:p…
DogecoinP2SHbắt đầu bằng 9 hoặc A
ZcashP2SHt3…
RavencoinP2SHbắt đầu bằng r
FluxP2SHt3…

Litecoin bám sát thiết kế của Bitcoin và chỉ đổi tiền tố dễ đọc, nên địa chỉ của nó trông quen mắt. Zcash và Flux dùng phiên bản hai byte, cho ra tiền tố t3 đặc trưng ở các địa chỉ kịch bản. Dogecoin chọn byte phiên bản riêng, nên địa chỉ kịch bản của nó bắt đầu bằng 9 hoặc A — chẳng giống chút nào với những địa chỉ D… một khóa quen thuộc.

Điều quan trọng là tiền tố địa chỉ của một chuỗi là hằng số ở tầng đồng thuận, không phải chuyện thương hiệu. Chúng là lý do một chiếc ví có thể từ chối một địa chỉ trước khi bạn gửi bất cứ thứ gì.

Cái bẫy Bitcoin Cash, và vì sao CashAddr tồn tại

Có một mẩu lịch sử đáng biết vì nó thật sự có thể khiến bạn mất tiền.

Khi Bitcoin Cash tách khỏi Bitcoin năm 2017, nó thừa hưởng y nguyên định dạng địa chỉ của Bitcoin — cùng những byte phiên bản, 0x00 cho địa chỉ khóa và 0x05 cho địa chỉ kịch bản. Một địa chỉ BCH kiểu cũ và một địa chỉ BTC kiểu cũ là không thể phân biệt. Không phải giống nhau. Mà giống hệt về cấu trúc.

Người ta liên tục gửi BTC tới địa chỉ BCH và BCH tới địa chỉ BTC, vì chẳng phần mềm nào phân biệt nổi. Tiền không bị hủy — cùng một khóa riêng tư điều khiển cả hai — nhưng lấy lại nghĩa là phải nhập khóa vào một chiếc ví của chuỗi bên kia, việc mà nhiều người dùng không làm nổi một cách an toàn.

CashAddr là lời giải: một định dạng kiểu bech32 với tiền tố bitcoincash:, cố ý không tương thích với của Bitcoin để việc gửi xuyên chuỗi thất bại một cách ồn ào thay vì thành công trong im lặng. Đó là lý do SSP hiển thị địa chỉ Bitcoin Cash kèm nguyên tiền tố. Trông có vẻ rườm rà. Sự rườm rà ấy chính là tính năng.

Vì sao lệnh gửi thất bại, và mỗi thất bại nghĩa là gì

«Địa chỉ không hợp lệ». Thường là lỗi mã kiểm tra — gõ sai, dán thiếu, một chuỗi bech32 lẫn lộn chữ hoa chữ thường. Bech32 không phân biệt hoa thường nhưng không được trộn lẫn; vài đường sao chép làm hỏng chỗ này. Đôi khi nó nghĩa là dịch vụ gửi không hỗ trợ định dạng của bạn.

«Loại địa chỉ không được hỗ trợ». Dịch vụ nhận ra địa chỉ nhưng không chịu gửi tới đó — thường là một sàn cũ chưa bao giờ thêm Taproot, hoặc chỉ xử lý SegWit dạng ngắn. Đó không phải việc bạn phải sửa; hãy dùng đường rút khác hoặc một địa chỉ trung gian.

Sai hẳn chuỗi. Ở đây tiền tố dễ đọc của bech32 bảo vệ bạn: bc1ltc1 khác nhau, và các ví có kiểm. Những chuỗi dùng base58 rủi ro hơn, bởi một địa chỉ Dogecoin hợp lệ cũng hợp lệ về cấu trúc trên vài chuỗi khác.

Đã gửi, nhưng chẳng thấy gì tới. Hoặc bạn đang nhìn trình duyệt của sai chuỗi, hoặc tiền đã đi tới một địa chỉ hợp lệ nhưng không phải của bạn. Không có chuyện gọi lại.

Những quy tắc thực dụng

Hãy sao chép, đừng bao giờ gõ tay. Mọi định dạng đều có mã kiểm tra chính vì con người hay gõ sai. Đừng bắt nó làm việc mà lẽ ra nó không phải làm.

Trước hết hãy khớp tiền tố với chuỗi. Bitcoin là bc1, 1 hoặc 3. Litecoin là ltc1, L hoặc M. Bitcoin Cash là bitcoincash:. Chỉ một cái liếc ấy đã bắt được những sai lầm đắt giá.

Hãy chờ đợi địa chỉ đa chữ ký dài hơn. Nếu bạn dùng SSP hay bất kỳ ví dựa trên kịch bản nào, dạng dài mới là đúng. Độ dài không phải triệu chứng của lỗi.

Gửi thử một khoản nhỏ khi đích đến còn mới, nhất là tới một sàn và nhất là với số tiền lớn. Phí chẳng đáng gì so với phương án còn lại.

Dùng địa chỉ nhận mới khi ví của bạn có sẵn. Dùng lại địa chỉ sẽ nối các giao dịch của bạn lại với nhau trong mắt bất cứ ai đang theo dõi chuỗi. Tránh điều đó chẳng tốn gì.

Các định dạng địa chỉ trông như những chi tiết vụn vặt tùy tiện cho tới khi bạn nhận ra mỗi định dạng là một tuyên bố về cách tiền được phép dịch chuyển. Đọc theo lối ấy, việc nhận tiền vào ví của mình thôi là một bước nhảy niềm tin và trở thành thứ bạn thật sự kiểm được — mà đó chính là toàn bộ ý nghĩa của việc tự giữ khóa của mình.

Chia sẻ bài viết này

Bài viết liên quan