Giải thích OP_RETURN Bitcoin: data carrier, nulldata và đầu ra không thể chi tiêu
Tìm hiểu OP_RETURN ghi dữ liệu công khai thế nào, vì sao đầu ra không thể chi tiêu, chính sách chuyển tiếp của Bitcoin Core 31.1 khác đồng thuận ra sao và khác inscription trong witness như thế nào.
Trong hướng dẫn nàyOP_RETURN đặt dữ liệu trong tập lệnh khóa
Tóm tắt ngắn
OP_RETURN gắn dữ liệu công khai vào tập lệnh đầu ra của giao dịch Bitcoin. Bitcoin Core xem đầu ra có tập lệnh bắt đầu bằng OP_RETURN là chắc chắn không thể chi tiêu và loại khỏi tập UTXO. Giới hạn chuyển tiếp hiện nay là chính sách riêng của từng nút, không phải giới hạn payload theo đồng thuận áp dụng cho toàn mạng.
OP_RETURN đặt dữ liệu trong tập lệnh khóa
Đầu ra Bitcoin có giá trị và tập lệnh khóa gọi là scriptPubKey. Đầu ra OP_RETURN, còn được phân loại là nulldata, bắt đầu bằng opcode OP_RETURN và có thể đẩy một chuỗi byte phía sau. Khi giao dịch vào một khối, các byte đó được ghi công khai như một phần của đầu ra. Cấu trúc này không tạo lớp dữ liệu riêng, số dư token hay tin nhắn riêng tư.
Vì sao đầu ra không thể được chi tiêu lần nữa
OP_RETURN là opcode khiến tập lệnh thất bại nếu quá trình thực thi đi đến đó. Vì vậy, cố chi tiêu đầu ra có tập lệnh bắt đầu bằng opcode này sẽ không thể thỏa điều kiện. Bitcoin Core xếp đầu ra vào loại không thể chi tiêu và có thể bỏ ngay khỏi tập UTXO thay vì lưu một đồng tiền không bao giờ dùng được. Xem script.h của Bitcoin Core 31.1. Bitcoin Core 31.1 script implementation.
Kích thước tập lệnh lớn hơn payload
Giới hạn data carrier có thể không chỉ đếm byte dữ liệu ứng dụng. Tập lệnh đầu ra thô gồm opcode OP_RETURN, lệnh push cùng mã hóa độ dài và payload. Payload 80 byte có thể tạo tập lệnh 83 byte: một byte opcode, hai byte đầu OP_PUSHDATA1 và 80 byte dữ liệu. Hướng dẫn cũ nói “80 byte” thường ám chỉ payload; tùy chọn mới có thể đo toàn bộ tập lệnh.
Chính sách data carrier mặc định của Bitcoin Core 31.1
Bitcoin Core 31.1 bật -datacarrier theo mặc định; -datacarriersize mặc định là 100.000 byte và tính tổng kích thước scriptPubKey thô của mọi đầu ra data carrier trong một giao dịch. Nhiều đầu ra NULL_DATA dùng chung giới hạn, bao gồm cả opcode và mã hóa push. Core 30.0 thay giới hạn tập lệnh cũ 83 byte bằng giới hạn gộp 100.000 byte và cho phép nhiều đầu ra; Core 31.1 giữ thiết lập này. Xem tùy chọn Core 31.1, triển khai chính sách và ghi chú phát hành 30.0.

Chính sách chuyển tiếp và đồng thuận trả lời câu hỏi khác nhau
Mỗi nút có thể tắt chuyển tiếp data carrier hoặc hạ giới hạn cục bộ; nút và phiên bản phần mềm khác có thể đặt khác. Một nút từ chối đưa giao dịch vào mempool có thể chỉ đang không chuyển tiếp theo chính sách cục bộ, chứ không có nghĩa đồng thuận cấm giao dịch. Bitcoin Core áp dụng giới hạn dữ liệu khi kiểm tra tính tiêu chuẩn và kiểm tra riêng quy tắc đồng thuận khi xác thực khối. Core consensus transaction checks. See Bitcoin Core 31.1 mempool standardness implementation.
Giá trị đầu ra bị mất; phí được tính riêng
Có thể gán giá trị cho đầu ra OP_RETURN nhưng không thể lấy lại, nên giá trị đó vĩnh viễn không thể chi tiêu. Ví thường đặt giá trị bằng 0. Nếu gán 1.000 sat, chúng không tự động trở thành phí thợ đào. Phí vẫn là tổng đầu vào trừ tổng tất cả đầu ra. Byte tập lệnh chiếm trọng lượng giao dịch và có thể làm phí tăng ở cùng mức sat/vB. Xem hướng dẫn phí giao dịch Bitcoin.
Nhiều đầu ra dữ liệu không nhân giới hạn lên
Bitcoin Core 31.1 cho phép nhiều đầu ra NULL_DATA tiêu chuẩn nhưng cộng kích thước tập lệnh của chúng vào cùng giới hạn mỗi giao dịch. Chia payload ra nhiều đầu ra không tăng dung lượng; mỗi đầu ra bổ sung dữ liệu giao dịch và trọng lượng khối. Chuyển tiếp còn phụ thuộc trọng lượng, phí và các chính sách tiêu chuẩn khác của nút. Một ví hay trình khám phá chấp nhận không đảm bảo giao dịch lan truyền toàn mạng.
OP_RETURN khác inscription Taproot trong witness
Dữ liệu OP_RETURN nằm trong scriptPubKey của đầu ra khi tạo giao dịch. Dữ liệu witness SegWit được tuần tự hóa riêng cho từng đầu vào; BIP 141 mô tả đó là dữ liệu ngăn xếp theo đầu vào. Chi tiêu theo đường tập lệnh Taproot có thể tiết lộ tập lệnh và control block trong witness đầu vào. Phần mềm Ordinals có thể nhận dạng cấu trúc envelope ở đó theo quy ước ứng dụng, nhưng đây không phải đầu ra nulldata. Xem BIP 141, BIP 341 và [hướng dẫn Bitcoin Ordinals và inscription](/learn/bitcoin-ordinals-inscriptions-satoshi-numbering-witness-data-explained).
Hãy kiểm tra chính sách, giá trị và quyền riêng tư trước khi dùng
Xác định phiên bản Bitcoin Core và tùy chọn cục bộ mà bạn dựa vào. Tính riêng kích thước toàn bộ tập lệnh đầu ra thô, trọng lượng giao dịch, giá trị gán cho đầu ra không thể chi tiêu và phí thợ đào. Đồng thuận không gán ý nghĩa cho byte payload tùy ý; hãy kiểm tra giao thức hoặc người nhận có nhận dạng định dạng không. Dữ liệu trên chuỗi là công khai. Để hiểu đầu ra và tiền thừa, xem hướng dẫn Bitcoin UTXO và coin control.
Câu hỏi thường gặp
Q1Đồng thuận Bitcoin có giới hạn OP_RETURN ở 80 byte dữ liệu không?
Không. 80 byte là kích thước payload trong ví dụ chính sách tiêu chuẩn cũ, không phải giới hạn đồng thuận chung. Bitcoin Core 31.1 mặc định dùng giới hạn tổng 100.000 byte cho tập lệnh dữ liệu thô; mỗi nút có thể đổi chính sách.
Q2OP_RETURN lớn hơn có làm tăng phí giao dịch không?
Có thể. Byte tập lệnh làm tăng trọng lượng giao dịch nên phí có thể tăng ở cùng mức sat/vB. Sat gán cho đầu ra không thể chi tiêu bị mất riêng và không phải phí thợ đào.
Q3OP_RETURN có giống inscription Ordinals không?
Không. OP_RETURN nằm trong tập lệnh đầu ra và khiến đầu ra không thể chi tiêu. Inscription Taproot thường đặt nội dung trong dữ liệu đường tập lệnh của witness đầu vào, được phần mềm Ordinals diễn giải theo quy ước riêng.
Nguồn và tài liệu đọc thêm
Báo lỗi
Chúng tôi sẽ soạn email kèm liên kết bài viết này. Mark chỉ nhận được báo cáo sau khi bạn gửi email
Kiểm tra nhanh
Đọc xong hướng dẫn? Hãy kiểm tra với 3 câu hỏi
Câu hỏi 01
-datacarriersize mặc định của Bitcoin Core 31.1 đo gì?
Chọn một đáp án để xem giải thích
Bảng thuật ngữ quyền chọn
A call or put whose strike is near the underlying price; it has little intrinsic value and often substantial sensitivity to time and volatility.
Đọc hướng dẫn chuyên sâuCall optionA contract that gives its holder the right, but not the obligation, to buy the underlying at the strike before or at expiration under the contract terms.
Đọc hướng dẫn chuyên sâuPut optionA contract that gives its holder the right, but not the obligation, to sell the underlying at the strike before or at expiration under the contract terms.
Đọc hướng dẫn chuyên sâu