SegWit, viết đầy đủ là Segregated Witness, là một nâng cấp quan trọng của Bitcoin nhằm tách dữ liệu chữ ký khỏi phần giao dịch cơ sở. Nhờ đó, Bitcoin giảm vấn đề transaction malleability, thay đổi cách tính kích thước giao dịch và mở đường cho các lớp thanh toán như Lightning Network.
Vì sao SegWit ra đời?
Trước SegWit, dữ liệu chữ ký nằm trong phần input của giao dịch và có thể ảnh hưởng đến TXID, tức mã định danh giao dịch. Điều này tạo ra vấn đề transaction malleability: một số dữ liệu chứng minh có thể bị thay đổi theo cách không làm giao dịch mất hiệu lực, nhưng lại làm thay đổi TXID. Với những hệ thống cần tham chiếu chắc chắn đến giao dịch chưa xác nhận, đây là một trở ngại lớn.
Bên cạnh đó, chữ ký chiếm phần đáng kể trong dung lượng giao dịch. Khi mọi dữ liệu đều được tính gần như như nhau trong giới hạn block truyền thống, khả năng mở rộng của Bitcoin bị hạn chế. SegWit giải quyết đồng thời hai vấn đề: ổn định TXID bằng cách tách witness ra khỏi phần tính TXID, và đưa vào khái niệm block weight để sử dụng không gian khối hiệu quả hơn.
Witness là gì?
Witness là dữ liệu chứng minh quyền tiêu một UTXO. Nó thường bao gồm chữ ký số, khóa công khai hoặc các dữ liệu cần thiết để thỏa mãn điều kiện script. Trong giao dịch không SegWit, dữ liệu này thường nằm trong ScriptSig. Với SegWit, phần chứng minh được đưa vào một khu vực riêng gọi là witness data.
Điểm quan trọng là witness data vẫn được full node xác minh đầy đủ. SegWit không loại bỏ chữ ký khỏi giao dịch; nó chỉ thay đổi vị trí và cách dữ liệu chữ ký được băm, truyền và tính trọng lượng.
TXID và WTXID
SegWit tạo ra sự khác biệt giữa TXID và WTXID. TXID được tính từ base transaction, không bao gồm witness data. WTXID được tính từ toàn bộ giao dịch, bao gồm cả witness. Nhờ đó, dữ liệu chữ ký không còn làm thay đổi TXID, nhưng mạng vẫn có thể cam kết và xác minh witness thông qua WTXID.
Sự ổn định của TXID đặc biệt quan trọng với các giao thức lớp hai. Lightning Network cần xây dựng các giao dịch phụ thuộc lẫn nhau; nếu TXID có thể bị thay đổi sau khi ký, các giao dịch tiếp theo có thể trở nên vô dụng. SegWit làm cho nền tảng này an toàn và thực dụng hơn.
Transaction Serialization: giao dịch được mã hóa ra sao?
Transaction Serialization là cách một giao dịch Bitcoin được biểu diễn thành chuỗi byte. Chuỗi byte này được dùng để truyền qua mạng, lưu trong block, tính hash và xác minh. Với giao dịch truyền thống, định dạng cơ bản gồm version, danh sách input, danh sách output và locktime.
Giao dịch SegWit thêm marker và flag để báo hiệu rằng giao dịch có witness. Sau phần output, dữ liệu witness cho từng input được đưa vào. Cách sắp xếp này giúp các node cũ vẫn có thể nhận biết giao dịch theo cơ chế soft fork, trong khi node nâng cấp có thể xác minh đầy đủ witness.
Native SegWit và Nested SegWit
SegWit có nhiều cách sử dụng trong ví và địa chỉ. Native SegWit thường dùng địa chỉ Bech32, chẳng hạn các dạng P2WPKH và P2WSH. P2WPKH là dạng thanh toán tới hash khóa công khai trong mô hình witness. P2WSH là dạng thanh toán tới hash của witness script, thường dùng cho điều kiện phức tạp hơn như multisig.
Nested SegWit bọc witness program bên trong P2SH để tương thích với các ví và dịch vụ cũ. Cách này giúp SegWit được triển khai dần mà không yêu cầu toàn bộ hệ sinh thái nâng cấp cùng lúc.
- P2WPKH: dạng SegWit cho thanh toán khóa đơn.
- P2WSH: dạng SegWit cho script phức tạp hơn.
- Native SegWit: sử dụng witness program trực tiếp, thường qua địa chỉ Bech32.
- Nested SegWit: bọc SegWit trong P2SH để tăng tương thích.
Block Weight và Virtual Size
Trước SegWit, người dùng thường nói đến giới hạn block theo byte. Sau SegWit, Bitcoin dùng khái niệm block weight. Dữ liệu cơ sở của giao dịch được tính nặng hơn witness data, còn witness data được hưởng mức chiết khấu. Điều này tạo động lực để chuyển dữ liệu chữ ký sang witness và giúp block chứa được nhiều giao dịch hữu ích hơn trong thực tế.
Virtual size, hay vsize, là kích thước quy đổi từ weight. Fee rate thường được tính theo satoshi trên mỗi vbyte. Vì vậy, người dùng không chỉ quan tâm mình gửi bao nhiêu BTC, mà còn phải quan tâm giao dịch chiếm bao nhiêu vbyte trong block space.
BIP143 và cách ký giao dịch SegWit
SegWit đi kèm cải tiến trong cách tính signature digest qua BIP143. Signature digest là thông điệp được ký bởi khóa riêng tư. Cách tính mới làm rõ hơn những phần nào của giao dịch được cam kết trong chữ ký, đồng thời cải thiện hiệu quả xác minh cho một số trường hợp.
Một điểm thực dụng quan trọng là amount commitment. Với giao dịch SegWit, giá trị của UTXO được tiêu có thể được đưa vào dữ liệu ký. Điều này giúp ví phần cứng xác minh số tiền đang được ký mà không cần tải toàn bộ giao dịch trước đó, từ đó cải thiện bảo mật khi ký ngoại tuyến.
Tác động đến phí và mempool
SegWit thay đổi cách thị trường phí nhìn nhận giao dịch. Vì witness data được tính nhẹ hơn trong block weight, giao dịch SegWit thường có lợi thế phí so với giao dịch legacy tương đương. Người dùng ví hiện đại có thể trả ít phí hơn nếu dùng Native SegWit hoặc Taproot, tùy loại giao dịch và điều kiện mạng.
Đối với mempool, các node vẫn cần xác minh witness data để đảm bảo giao dịch hợp lệ. Tuy nhiên, cách tính weight và fee rate khiến thợ đào lựa chọn giao dịch dựa trên lợi nhuận theo vbyte, thay vì chỉ nhìn tổng phí tuyệt đối.
SegWit không chỉ “tăng dung lượng block”; nó tái cấu trúc cách Bitcoin định danh, ký, tính phí và mở rộng giao dịch.
SegWit và Lightning Network
Lightning Network phụ thuộc mạnh vào khả năng tạo các chuỗi giao dịch cam kết an toàn. Trước SegWit, transaction malleability làm cho các giao dịch chưa xác nhận khó được tham chiếu một cách chắc chắn. Khi TXID ổn định hơn, Lightning có nền tảng kỹ thuật tốt hơn để xây dựng kênh thanh toán ngoài chuỗi.
Điều này cho thấy SegWit không phải một thay đổi đơn lẻ. Nó là nâng cấp hạ tầng, tạo tiền đề cho nhiều cải tiến khác trong hệ sinh thái Bitcoin.
Kết luận
SegWit, Witness và Transaction Serialization là ba mảnh ghép giúp hiểu Bitcoin hiện đại. SegWit tách dữ liệu chữ ký khỏi giao dịch cơ sở; witness chứa bằng chứng mở khóa UTXO; còn serialization quy định cách giao dịch được mã hóa thành byte. Sự kết hợp này giúp TXID ổn định hơn, phí linh hoạt hơn, block space hiệu quả hơn và các giao thức lớp hai như Lightning Network trở nên khả thi hơn.