OP_RETURN adalah instruksi Bitcoin Script dengan kode 0x6a. Pada awal skrip output, instruksi ini membuat output terbukti tidak dapat dibelanjakan: tanda tangan apa pun tidak bisa membukanya. Data dapat ditempatkan sesudahnya. Ini bukan alamat pembayaran atau uang yang dikirim kepada penerima, melainkan cara menambahkan catatan data ke transaksi.
Jana ingin melampirkan informasi, bukan mengirim jumlah tambahan kepada seseorang. Ia memulai sebuah output dengan OP_RETURN. Jika output hendak dibelanjakan, menjalankan instruksi tersebut akan menggagalkan pemeriksaan skrip, apa pun tanda tangannya. Nama teknis skrip output adalah scriptPubKey. Posisi dan pelaksanaan penting: byte yang sama di dalam data bukan perintah yang sedang dijalankan. OP_RETURN pada cabang yang tidak dijalankan juga tidak sama dengan OP_RETURN pada awal skrip. Jadi, menemukan nama atau byte tersebut di sembarang bagian transaksi belum cukup. [1] [5]
Bitcoin Core menggolongkan bentuk lazimnya sebagai NULL_DATA. Namanya tidak berarti tanpa isi. Fungsi Solver mensyaratkan OP_RETURN di awal dan bagian berikutnya lolos IsPushOnly, yakni hanya berisi instruksi untuk memasukkan data. Isinya dapat berupa teks, hash—sidik jari pendek hasil perhitungan—atau catatan untuk protokol lain. Penggolongan itu tidak mengesahkan makna pesan dan tidak otomatis menjamin masuk ke antrean node. Catatan juga tidak langsung membuktikan kepemilikan berkas, penulis atau akibat hukum; klaim semacam itu membutuhkan aturan dan bukti tambahan. [3]
Node memelihara kumpulan UTXO, yaitu output yang belum dibelanjakan dan masih dapat digunakan. Untuk output yang diawali OP_RETURN, node sudah tahu tidak ada yang dapat membelanjakannya. IsUnspendable mengenalinya dan AddCoin tidak memasukkannya ke cache UTXO. Yang dihemat adalah pencatatan keadaan kerja, bukan ruang di seluruh riwayat: transaksi terkonfirmasi tetap berada dalam blok, dan datanya ditransfer serta disimpan dalam salinan historis. Tidak masuk UTXO bukan berarti data dihapus. Jika seseorang menetapkan uang pada output itu, uang tersebut bukan imbalan penambang. Nilainya tidak dapat dibelanjakan; tanda tangan kemudian tidak dapat menyelamatkannya. [2] [6] [1]
Konsensus menentukan blok mana yang dianggap sah oleh node. Kebijakan lokal memilih apa yang masuk ke mempool, antrean transaksi belum terkonfirmasi, serta apa yang diteruskan atau ditawarkan untuk penambangan. Begitulah node melindungi sumber dayanya. Pengelola dapat memilih pengaturan berbeda: menolak meneruskan transaksi tidak berarti blok yang memuatnya melanggar konsensus. Masuk mempool juga bukan janji konfirmasi. datacarriersize menetapkan anggaran data lokal; pengaturan itu sendiri tidak mengubah keabsahan blok atau menghapus konten yang sudah dikonfirmasi. [8]
Pengaturan lama yang sering dikutip mengizinkan 1 output data dengan skrip hingga 83 byte, biasanya 80 byte isi ditambah instruksi. Bitcoin Core 30.0 menaikkan datacarriersize bawaan menjadi 100000 dan mengizinkan beberapa output data. Kode mengurangi anggaran bersama dengan panjang seluruh scriptPubKey masing-masing output. Yang dihitung bukan hanya isi pesan, dan bidang luar yang mencatat panjang skrip tidak ikut dihitung. Batas transaksi lainnya tetap berlaku. Mengatur 83 mengembalikan besar anggaran, tetapi bukan aturan lama tentang satu output saja. Angka ini menjelaskan perubahan versi tertentu, bukan hukum jaringan yang tidak pernah berubah. [7] [4] [8]
Jana dapat memasukkan hash dokumen ke OP_RETURN, bukan dokumennya. Saat ia menunjukkan berkas asli nanti, orang dapat menghitung ulang sidik jarinya dengan metode yang sama dan membandingkannya. Ia harus menyimpan byte berkas yang tepat serta metodenya; sidik jari tidak menggantikan dokumen. Kecocokan tidak membuktikan isi itu benar, Jana penulisnya, atau kapan tepatnya berkas dibuat. Catatan publik juga bisa menghubungkan identitas, dan data yang di-hash tidak otomatis bersifat privat. Biaya bergantung pada seluruh transaksi dan permintaan ruang blok, bukan hanya panjang pesan. [1] [8]
Ada pengecualian penting yang didefinisikan secara tepat dari pesan aplikasi biasa. BIP 141 memakai OP_RETURN dalam coinbase, transaksi pertama blok, untuk witness commitment: ikatan kriptografis dengan data pendamping yang diperlukan untuk memverifikasi transaksi. ScriptPubKey yang sesuai setidaknya 38 byte dan diawali 0x6a24aa21a9ed. Jika beberapa output cocok, indeks tertinggi yang dipilih, yakni output cocok terakhir dalam urutannya. Bila blok tidak memiliki data witness, komitmen itu opsional. Jaringan memeriksa struktur khusus tersebut; bukan berarti ia memeriksa kebenaran teks sembarang setelah OP_RETURN. [9]
Tanyakan dahulu klien, versi dan konfigurasi yang dimaksud oleh batas tersebut. Lalu uraikan transaksi sebenarnya dan bedakan scriptPubKey dari bidang pembungkusnya dalam pengodean byte. Pengujian mempool_datacarrier.py menunjukkan kasus batas implementasi; artikel ini tidak menjalankannya. BIP 110 mengusulkan pembatasan konsensus tambahan, tetapi merupakan proposal tertutup, bukan aturan yang dinyalakan oleh datacarriersize. Penjelasan versi lama tidak menjamin semua node atau versi mendatang bertindak sama. Pengaturan tertentu dan konfirmasi transaksi yang benar-benar terjadi adalah informasi berbeda. [10] [8] [11]
Mengapa panjang pesan dan skrip berbeda
Jana ingin melampirkan 32 byte data. Skrip sederhananya memuat OP_RETURN, instruksi pemasukan langsung dan data itu sendiri: 1 + 1 + 32 = 34 byte. Itulah panjang scriptPubKey. Bidang jumlah uang dan panjang skrip adalah bagian lain dalam pengodean output, bukan bagian penjumlahan ini. Anggaran data mengukur skrip, sedangkan biaya dinilai berdasarkan seluruh transaksi. Contoh ini tidak menyiarkan apa pun atau membuktikan penerimaan oleh node tertentu.
Untuk gambaran yang lebih utuh, baca entri ini bersama Bitcoin Script, Transaksi, UTXO, Mempool, Transaction Fees, BIP 110. Entri ini juga dirujuk dari Runes, BRC-20.
01Jika saya menetapkan bitcoin pada output itu, apakah penambang menerimanya?+
Tidak. Uang pada output yang terbukti tidak dapat dibelanjakan tetap tidak dapat digunakan. Biaya adalah selisih nilai seluruh input dan seluruh output. Menetapkan uang pada OP_RETURN tidak dengan sendirinya mengubahnya menjadi biaya.
02Apakah pesan yang diizinkan lebih besar mengubah aturan seluruh Bitcoin?+
Belum tentu. Node dapat mengubah kebijakan lokal untuk meneruskan lebih banyak transaksi tanpa mengubah aturan keabsahan blok. Bedakan pengaturan klien, aturan konsensus, dan apakah transaksi tertentu benar-benar dikonfirmasi.