Mặc dù chúng tôi biết việc ký giao dịch với quá nhiều UTXO có thể gây ra lỗi thiết bị, nhưng tuyên bố chung này vẫn để lại một số câu hỏi: liệu có một số lượng UTXO nhất định có thể khiến ví phần cứng bị lỗi khi ký không? Một số UTXO nhất định có thể gây ra nhiều khó khăn hơn những UTXO khác không?
Trong khi nghiên cứu câu trả lời cho những câu hỏi như vậy, tôi phát hiện ra rằng thời gian và công sức mà ví phần cứng yêu cầu để ký một giao dịch không chỉ phụ thuộc vào số lượng UTXO được gửi và số lượng địa chỉ nhận sẽ có. Nó cũng phụ thuộc vào các chi tiết tương tự xung quanh các giao dịch trước đó mà mỗi UTXO xuất phát, một hiện tượng mà tôi gọi là “ký hàng loạt”. Tôi không biết bất kỳ ấn phẩm nào khác đề cập đến khái niệm này.
Nói cách khác, các UTXO có khối lượng ký lớn hơn—được giải thích chi tiết hơn bên dưới—có thể khó ký hơn các UTXO khác. Mặc dù hai UTXO có thể sử dụng cùng một lượng dữ liệu trên blockchain, nhưng một UTXO có thể yêu cầu xử lý nhiều hơn đáng kể để ký bằng ví phần cứng.
Thực tế này vượt ra ngoài các loại địa chỉ và số đại biểu nhiều chữ ký; một UTXO trên địa chỉ có 2/3 chữ ký có thể mất nhiều công sức hơn để ký so với một UTXO khác trên cùng địa chỉ đó (hoặc một địa chỉ tương đương và ngay cả khi số lượng bitcoin và địa chỉ đích hoàn toàn giống nhau).
Để hiểu lý do tại sao hai UTXO trông giống nhau có thể có khối lượng ký khác nhau đáng kể, bạn phải hiểu phương pháp vòng xoay mà ví phần cứng sử dụng để xác minh số tiền đầu vào mà không cần kết nối internet và mức độ phức tạp của giao dịch có thể khác nhau giữa các phương thức nhận bitcoin khác nhau vào ví của bạn.
Đối với bất kỳ giao dịch bitcoin nào, việc xác minh số lượng đầu vào là rất quan trọng; nếu không, một lượng lớn bitcoin của bạn có thể vô tình được trả cho người khai thác. Tại sao? Bởi vì phí mà thợ mỏ phải trả không được nêu rõ ràng trong giao dịch mà được tính toán ngầm bằng cách trừ giá trị đầu ra khỏi giá trị đầu vào. Vì vậy, nếu có sự chênh lệch lớn giữa hai con số thì mức phí phải trả cũng sẽ lớn.
Ví dụ: nếu bạn có UTXO tổng cộng 0,8 BTC và sử dụng chúng để gửi 0,3 BTC đi đâu đó, nếu bạn không gửi lại ~0,5 BTC còn lại cho chính mình dưới dạng tiền lẻ, thì người khai thác khối hiện có thể nhận 0,5 BTC làm tiền lẻ một phần phí họ kiếm được.
Đừng lo lắng! Tất cả các công cụ bitcoin hiện đại và được đánh giá cao đều có cơ chế an toàn tự động, do đó, việc mắc lỗi này sẽ khá khó khăn (nếu không muốn nói là không thể). Quá trình này có thể đơn giản như tìm kiếm trên blockchain để xác minh số lượng đầu vào và sau đó so sánh tổng của chúng với tổng đầu ra đã chọn để xác định xem mức phí có hợp lý hay không.
Nhưng tất nhiên, ví phần cứng được thiết kế để hoạt động độc lập với Internet, điều này đặc biệt rõ ràng đối với các thiết bị có air-gap. Nếu không có internet hoặc kết nối nút, không thể quan sát được chuỗi khối. Do đó, hầu hết các ví phần cứng phải sử dụng phương pháp thay thế, xoay vòng để xác minh số tiền đầu vào. Về cơ bản, thiết bị không chỉ cần nhập thông tin mô tả giao dịch mà nó sẽ ký mà còn phải nhập lịch sử nguồn gốc của mỗi đầu vào.
Nói cách khác, đối với mỗi UTXO được di chuyển, thiết bị sẽ muốn kiểm tra kỹ các chi tiết giao dịch ngay trước đó, điều này dẫn đến việc tạo ra UTXO đó. Nếu giao dịch đó phức tạp, nó sẽ liên quan đến việc nhập thêm dữ liệu, điều này sẽ được phản ánh dưới dạng kích thước như kích thước của tệp PSBT. Chúng ta hãy xem xét độ phức tạp của giao dịch.
Hầu hết mọi người nhận bitcoin vào ví của họ theo một trong ba cách: từ sàn giao dịch, từ nhóm khai thác hoặc trực tiếp từ người khác trong giao dịch ngang hàng (P2P). Các giao dịch ngang hàng thường có độ phức tạp rất thấp và kết quả là UTXO sẽ có khối lượng ký tương đối nhỏ.
Tuy nhiên, các sàn giao dịch và nhóm khai thác có xu hướng phân phối tiền theo đợt, gửi bitcoin cho nhiều người cùng một lúc trong cùng một giao dịch. Các giao dịch này phức tạp hơn và UTXO thu được sẽ có khối lượng ký lớn hơn.
Tôi đã điều tra xu hướng phân phối của một số nhóm khai thác và sàn giao dịch phổ biến ở Mỹ và những phát hiện của tôi được trình bày trong biểu đồ bên dưới. Số lượng đầu ra cho biết số lượng người thường gửi bitcoin trong mỗi lần phân phối. Con số cao hơn có nghĩa là giao dịch phức tạp hơn và gánh nặng ký kết lớn hơn đáng kể đối với người nhận.
Những con số này là gần đúng tại thời điểm viết bài và có thể thay đổi tùy theo cách mỗi nhóm hoặc sàn giao dịch thực hiện phân phối trong tương lai.
Lưu ý rằng mức phân phối của các nhóm khai thác thường lớn hơn so với các sàn giao dịch và một số nhóm khai thác nhất định như F2Pool sử dụng mức phân phối cực kỳ lớn. Do đó, nếu bạn nhận được UTXO trực tiếp từ khoản thanh toán F2Pool, UTXO đó có nhiều khả năng khiến một số ví phần cứng nhất định gặp khó khăn khi ký.
Vào năm 2017, soft fork nhân chứng tách biệt đã diễn ra và quy trình ký kết đã được thay đổi đối với các giao dịch SegWit. Một yêu cầu đã được đưa ra để bao gồm số lượng đầu vào trong dữ liệu mà người dùng cam kết bằng chữ ký. Do đó, người ta tin rằng mọi nỗ lực lừa người dùng hoặc thiết bị vô tình ký một giao dịch với mức phí cao vô lý sẽ bị ngăn chặn. Hầu hết các nhà sản xuất ví phần cứng đã hành động tương ứng, loại bỏ các biện pháp kiểm tra an toàn số tiền đầu vào và đơn giản hóa quy trình ký cho các giao dịch SegWit.
Tuy nhiên, vào giữa năm 2020, một lỗ hổng đã được tìm thấy trong BIP 143, khiến nhiều nhà sản xuất ví phần cứng phải áp dụng lại các biện pháp kiểm tra an toàn số tiền đầu vào cho các giao dịch SegWit. Tại thời điểm viết bài, việc kiểm tra an toàn số tiền đầu vào vẫn là một quy trình bình thường trong quá trình ký ví phần cứng. Có một số cuộc thảo luận trong cộng đồng về những thay đổi trong tương lai có thể loại bỏ hiệu quả hơn nhu cầu kiểm tra an toàn số tiền đầu vào, chẳng hạn như đưa ra các khoản phí rõ ràng trong mỗi giao dịch thay vì ngầm định.
Sự khác biệt trong việc ký kết số lượng lớn có nghĩa là khi bạn đang cố gắng rút bitcoin ra khỏi ví lưu trữ lạnh tự quản lý của mình, thì có một số liên quan đến cách bạn nhận được bitcoin ngay từ đầu. Các phương pháp bạn sử dụng để mua bitcoin có thể tạo ra sự khác biệt khi cần phê duyệt chuyển khoản.
Nếu bạn giữ UTXO được chuyển từ ví khác mà bạn kiểm soát hoặc nhận được từ giao dịch ngang hàng, rất có thể giao dịch đó là một giao dịch tương đối đơn giản. UTXO sẽ có khối lượng ký nhỏ hơn và dễ ký hơn trong lần chi tiêu trong tương lai. Mặt khác, nếu bạn nhận được UTXO trực tiếp từ nhóm khai thác hoặc đặc biệt là nhóm khai thác có mức phân phối rất lớn (như được hiển thị trong biểu đồ trước đó), bạn có thể mong đợi rằng UTXO đó sẽ khó ký hơn.
May mắn thay, nếu ví phần cứng của bạn không ký được vì bạn đang cố gắng di chuyển quá nhiều UTXO khối lượng lớn cùng một lúc, điều này không có nghĩa là bitcoin của bạn bị kẹt vĩnh viễn. Một giải pháp nhanh chóng và dễ dàng là chia giao dịch của bạn thành nhiều giao dịch, di chuyển bitcoin của bạn thành nhiều phần. Mỗi đoạn sẽ chỉ chứa một phần dữ liệu và thiết bị của bạn có nhiều khả năng cung cấp chữ ký thành công hơn.
Một chiến lược khác là ngăn chặn việc ký kết thất bại ngay từ đầu bằng cách kiểm soát số lượng UTXO bạn đang nắm giữ và khối lượng ký kết của các UTXO đó. Mặc dù bạn không thể thay đổi cách các nhóm khai thác và sàn giao dịch phân phối tiền, nhưng điều cần thiết là phải nhớ rằng khối lượng ký kết của UTXO được xác định bởi giao dịch ngay trước đó chứ không phải bất kỳ lịch sử giao dịch nào trước đó. Điều này có nghĩa là bạn có thể nhận được UTXO từ nhóm khai thác và ngay lập tức chuyển nó sang ví khác hoặc địa chỉ mà bạn kiểm soát, bắt chước giao dịch ngang hàng. UTXO thu được tại địa chỉ mới sẽ có khối lượng ký nhỏ thay vì khối lượng lớn.
Điều quan trọng cần nhấn mạnh là việc ký số lượng lớn chỉ ảnh hưởng đến thời gian và công sức mà ví phần cứng yêu cầu để ký một giao dịch chứ không ảnh hưởng đến phí mạng mà bạn sẽ phải trả. Điều này là do khối lượng ký chỉ có liên quan trong quá trình ký và sẽ không khiến giao dịch của bạn chiếm nhiều dữ liệu hơn trên blockchain.
Điều này có nghĩa là bạn sẽ không nhất thiết phải trả nhiều phí giao dịch hơn nếu bạn nhận được bitcoin từ nhóm khai thác như F2Pool, cũng như phí giao dịch của bạn sẽ không giảm bằng cách chọn dịch vụ sử dụng ít đầu ra hơn để phân phối.
Mặc dù chúng tôi biết việc ký giao dịch với quá nhiều UTXO có thể gây ra lỗi thiết bị, nhưng tuyên bố chung này vẫn để lại một số câu hỏi: liệu có một số lượng UTXO nhất định có thể khiến ví phần cứng bị lỗi khi ký không? Một số UTXO nhất định có thể gây ra nhiều khó khăn hơn những UTXO khác không?
Trong khi nghiên cứu câu trả lời cho những câu hỏi như vậy, tôi phát hiện ra rằng thời gian và công sức mà ví phần cứng yêu cầu để ký một giao dịch không chỉ phụ thuộc vào số lượng UTXO được gửi và số lượng địa chỉ nhận sẽ có. Nó cũng phụ thuộc vào các chi tiết tương tự xung quanh các giao dịch trước đó mà mỗi UTXO xuất phát, một hiện tượng mà tôi gọi là “ký hàng loạt”. Tôi không biết bất kỳ ấn phẩm nào khác đề cập đến khái niệm này.
Nói cách khác, các UTXO có khối lượng ký lớn hơn—được giải thích chi tiết hơn bên dưới—có thể khó ký hơn các UTXO khác. Mặc dù hai UTXO có thể sử dụng cùng một lượng dữ liệu trên blockchain, nhưng một UTXO có thể yêu cầu xử lý nhiều hơn đáng kể để ký bằng ví phần cứng.
Thực tế này vượt ra ngoài các loại địa chỉ và số đại biểu nhiều chữ ký; một UTXO trên địa chỉ có 2/3 chữ ký có thể mất nhiều công sức hơn để ký so với một UTXO khác trên cùng địa chỉ đó (hoặc một địa chỉ tương đương và ngay cả khi số lượng bitcoin và địa chỉ đích hoàn toàn giống nhau).
Để hiểu lý do tại sao hai UTXO trông giống nhau có thể có khối lượng ký khác nhau đáng kể, bạn phải hiểu phương pháp vòng xoay mà ví phần cứng sử dụng để xác minh số tiền đầu vào mà không cần kết nối internet và mức độ phức tạp của giao dịch có thể khác nhau giữa các phương thức nhận bitcoin khác nhau vào ví của bạn.
Đối với bất kỳ giao dịch bitcoin nào, việc xác minh số lượng đầu vào là rất quan trọng; nếu không, một lượng lớn bitcoin của bạn có thể vô tình được trả cho người khai thác. Tại sao? Bởi vì phí mà thợ mỏ phải trả không được nêu rõ ràng trong giao dịch mà được tính toán ngầm bằng cách trừ giá trị đầu ra khỏi giá trị đầu vào. Vì vậy, nếu có sự chênh lệch lớn giữa hai con số thì mức phí phải trả cũng sẽ lớn.
Ví dụ: nếu bạn có UTXO tổng cộng 0,8 BTC và sử dụng chúng để gửi 0,3 BTC đi đâu đó, nếu bạn không gửi lại ~0,5 BTC còn lại cho chính mình dưới dạng tiền lẻ, thì người khai thác khối hiện có thể nhận 0,5 BTC làm tiền lẻ một phần phí họ kiếm được.
Đừng lo lắng! Tất cả các công cụ bitcoin hiện đại và được đánh giá cao đều có cơ chế an toàn tự động, do đó, việc mắc lỗi này sẽ khá khó khăn (nếu không muốn nói là không thể). Quá trình này có thể đơn giản như tìm kiếm trên blockchain để xác minh số lượng đầu vào và sau đó so sánh tổng của chúng với tổng đầu ra đã chọn để xác định xem mức phí có hợp lý hay không.
Nhưng tất nhiên, ví phần cứng được thiết kế để hoạt động độc lập với Internet, điều này đặc biệt rõ ràng đối với các thiết bị có air-gap. Nếu không có internet hoặc kết nối nút, không thể quan sát được chuỗi khối. Do đó, hầu hết các ví phần cứng phải sử dụng phương pháp thay thế, xoay vòng để xác minh số tiền đầu vào. Về cơ bản, thiết bị không chỉ cần nhập thông tin mô tả giao dịch mà nó sẽ ký mà còn phải nhập lịch sử nguồn gốc của mỗi đầu vào.
Nói cách khác, đối với mỗi UTXO được di chuyển, thiết bị sẽ muốn kiểm tra kỹ các chi tiết giao dịch ngay trước đó, điều này dẫn đến việc tạo ra UTXO đó. Nếu giao dịch đó phức tạp, nó sẽ liên quan đến việc nhập thêm dữ liệu, điều này sẽ được phản ánh dưới dạng kích thước như kích thước của tệp PSBT. Chúng ta hãy xem xét độ phức tạp của giao dịch.
Hầu hết mọi người nhận bitcoin vào ví của họ theo một trong ba cách: từ sàn giao dịch, từ nhóm khai thác hoặc trực tiếp từ người khác trong giao dịch ngang hàng (P2P). Các giao dịch ngang hàng thường có độ phức tạp rất thấp và kết quả là UTXO sẽ có khối lượng ký tương đối nhỏ.
Tuy nhiên, các sàn giao dịch và nhóm khai thác có xu hướng phân phối tiền theo đợt, gửi bitcoin cho nhiều người cùng một lúc trong cùng một giao dịch. Các giao dịch này phức tạp hơn và UTXO thu được sẽ có khối lượng ký lớn hơn.
Tôi đã điều tra xu hướng phân phối của một số nhóm khai thác và sàn giao dịch phổ biến ở Mỹ và những phát hiện của tôi được trình bày trong biểu đồ bên dưới. Số lượng đầu ra cho biết số lượng người thường gửi bitcoin trong mỗi lần phân phối. Con số cao hơn có nghĩa là giao dịch phức tạp hơn và gánh nặng ký kết lớn hơn đáng kể đối với người nhận.
Những con số này là gần đúng tại thời điểm viết bài và có thể thay đổi tùy theo cách mỗi nhóm hoặc sàn giao dịch thực hiện phân phối trong tương lai.
Lưu ý rằng mức phân phối của các nhóm khai thác thường lớn hơn so với các sàn giao dịch và một số nhóm khai thác nhất định như F2Pool sử dụng mức phân phối cực kỳ lớn. Do đó, nếu bạn nhận được UTXO trực tiếp từ khoản thanh toán F2Pool, UTXO đó có nhiều khả năng khiến một số ví phần cứng nhất định gặp khó khăn khi ký.
Vào năm 2017, soft fork nhân chứng tách biệt đã diễn ra và quy trình ký kết đã được thay đổi đối với các giao dịch SegWit. Một yêu cầu đã được đưa ra để bao gồm số lượng đầu vào trong dữ liệu mà người dùng cam kết bằng chữ ký. Do đó, người ta tin rằng mọi nỗ lực lừa người dùng hoặc thiết bị vô tình ký một giao dịch với mức phí cao vô lý sẽ bị ngăn chặn. Hầu hết các nhà sản xuất ví phần cứng đã hành động tương ứng, loại bỏ các biện pháp kiểm tra an toàn số tiền đầu vào và đơn giản hóa quy trình ký cho các giao dịch SegWit.
Tuy nhiên, vào giữa năm 2020, một lỗ hổng đã được tìm thấy trong BIP 143, khiến nhiều nhà sản xuất ví phần cứng phải áp dụng lại các biện pháp kiểm tra an toàn số tiền đầu vào cho các giao dịch SegWit. Tại thời điểm viết bài, việc kiểm tra an toàn số tiền đầu vào vẫn là một quy trình bình thường trong quá trình ký ví phần cứng. Có một số cuộc thảo luận trong cộng đồng về những thay đổi trong tương lai có thể loại bỏ hiệu quả hơn nhu cầu kiểm tra an toàn số tiền đầu vào, chẳng hạn như đưa ra các khoản phí rõ ràng trong mỗi giao dịch thay vì ngầm định.
Sự khác biệt trong việc ký kết số lượng lớn có nghĩa là khi bạn đang cố gắng rút bitcoin ra khỏi ví lưu trữ lạnh tự quản lý của mình, thì có một số liên quan đến cách bạn nhận được bitcoin ngay từ đầu. Các phương pháp bạn sử dụng để mua bitcoin có thể tạo ra sự khác biệt khi cần phê duyệt chuyển khoản.
Nếu bạn giữ UTXO được chuyển từ ví khác mà bạn kiểm soát hoặc nhận được từ giao dịch ngang hàng, rất có thể giao dịch đó là một giao dịch tương đối đơn giản. UTXO sẽ có khối lượng ký nhỏ hơn và dễ ký hơn trong lần chi tiêu trong tương lai. Mặt khác, nếu bạn nhận được UTXO trực tiếp từ nhóm khai thác hoặc đặc biệt là nhóm khai thác có mức phân phối rất lớn (như được hiển thị trong biểu đồ trước đó), bạn có thể mong đợi rằng UTXO đó sẽ khó ký hơn.
May mắn thay, nếu ví phần cứng của bạn không ký được vì bạn đang cố gắng di chuyển quá nhiều UTXO khối lượng lớn cùng một lúc, điều này không có nghĩa là bitcoin của bạn bị kẹt vĩnh viễn. Một giải pháp nhanh chóng và dễ dàng là chia giao dịch của bạn thành nhiều giao dịch, di chuyển bitcoin của bạn thành nhiều phần. Mỗi đoạn sẽ chỉ chứa một phần dữ liệu và thiết bị của bạn có nhiều khả năng cung cấp chữ ký thành công hơn.
Một chiến lược khác là ngăn chặn việc ký kết thất bại ngay từ đầu bằng cách kiểm soát số lượng UTXO bạn đang nắm giữ và khối lượng ký kết của các UTXO đó. Mặc dù bạn không thể thay đổi cách các nhóm khai thác và sàn giao dịch phân phối tiền, nhưng điều cần thiết là phải nhớ rằng khối lượng ký kết của UTXO được xác định bởi giao dịch ngay trước đó chứ không phải bất kỳ lịch sử giao dịch nào trước đó. Điều này có nghĩa là bạn có thể nhận được UTXO từ nhóm khai thác và ngay lập tức chuyển nó sang ví khác hoặc địa chỉ mà bạn kiểm soát, bắt chước giao dịch ngang hàng. UTXO thu được tại địa chỉ mới sẽ có khối lượng ký nhỏ thay vì khối lượng lớn.
Điều quan trọng cần nhấn mạnh là việc ký số lượng lớn chỉ ảnh hưởng đến thời gian và công sức mà ví phần cứng yêu cầu để ký một giao dịch chứ không ảnh hưởng đến phí mạng mà bạn sẽ phải trả. Điều này là do khối lượng ký chỉ có liên quan trong quá trình ký và sẽ không khiến giao dịch của bạn chiếm nhiều dữ liệu hơn trên blockchain.
Điều này có nghĩa là bạn sẽ không nhất thiết phải trả nhiều phí giao dịch hơn nếu bạn nhận được bitcoin từ nhóm khai thác như F2Pool, cũng như phí giao dịch của bạn sẽ không giảm bằng cách chọn dịch vụ sử dụng ít đầu ra hơn để phân phối.