Pengantar Bahasa Scripting Bitcoin

Dalam pengantar berikut, BTCManager akan menyelidiki bahasa pengkodean yang sederhana, namun kuat, yang digunakan dalam Jaringan Bitcoin . Bahasa Bitcoin Scripting, atau Bitcoin Script, dirancang dengan hanya beberapa fungsi dalam pikiran; itu kompak, Turing tidak lengkap, dan berbasis tumpukan. Dengan cara ini, bahasa melayani tujuan ini secara efisien dan aman.

Meskipun fungsinya minimal, dibandingkan dengan jaringan seperti Ethereum , ia telah membuktikan sendiri selama satu dekade menjadi cukup kuat untuk mendukung transaksi dalam nilai yang memadai.

Bahasa pemrograman di belakang cryptocurrency perintis, di mata banyak orang, adalah contoh sempurna dari Occam's Razor .

Ini dasar, bahkan dibandingkan dengan bahasa pengkodean pra-cryptocurrency. Lebih penting lagi, Satoshi Nakamoto sengaja merancang kesederhanaan ini. Bahasa yang memiliki banyak kemampuan dan memungkinkan untuk transaksi data yang kompleks juga memungkinkan lebih banyak vektor serangan. Para kritikus telah menjelaskan bahwa bahasa seperti Solidity , meskipun mengesankan dalam cakupannya, tidak memenuhi persyaratan keamanan.

Bergerak sepanjang titik ini, Bitcoin Script adalah Turing tidak lengkap. Sebagai perbandingan, Solidity adalah Turing lengkap, artinya dapat mereplikasi mesin Turing atau mesin abstrak yang mampu secara mandiri mengikuti algoritma tertentu. Dengan memahami konsep ini, orang dapat mulai memahami bagaimana kontrak yang cerdas beroperasi.

Kembali ke fokus utama, Bitcoin Script tidak menawarkan fitur ini, atau tidak dengan cara yang sama, menyelam lebih dalam ke dalam kontrak pintar menggunakan Bitcoin Blockchain akan menjadi subjek artikel selanjutnya.

Kasing utama Bitcoin selalu berupa cryptocurrency dan transfer nilai. Karakteristik tambahan Turing bahasa lengkap, dengan demikian, tidak perlu. Namun, itu tidak berarti Skrip terbatas.

Selain itu, batasan dalam Bitcoin Script mencegah "bom logika," atau loop tak terbatas untuk dimasukkan dalam transaksi tunggal. Pembatasan ini menghilangkan kemungkinan serangan denial-of-service (DoS) pada jaringan. Tingkat kendala ini, seperti transaksi yang melampaui hanya mengirim nilai ke X dan Y , akan dibahas dalam angsuran mendatang.

Bahasa pengkodean Bitcoin menggunakan "reverse polish" sebagai sistem notasi, artinya baris seperti "3 + 4" akan muncul sebagai "3 4+" dengan kompleksitas yang semakin meningkat. Fitur lain mengingatkan kembali pada akar Bitcoin Script di “Forth-like.” Fitur ini hanya relevan karena kedua bahasa ini keduanya “berbasis stack.”

Tumpukan adalah struktur data yang sangat umum yang, dalam kata - kata Andreas Antonopolous, memungkinkan informasi di "atas tumpukan" baik "mendorong" atau "pop." Operasi sebelumnya menjelaskan proses menambahkan informasi ke tumpukan, sedangkan yang terakhir menjelaskan menghapus informasi dari tumpukan. Selain itu, urutan di mana informasi muncul atau didorong mengikuti prinsip " LIFO ", atau Last-In, First-Out.

Dalam Bitcoin Script, operasi ini akan mengikuti langkah yang sama, tetapi juga akan menyertakan awalan "OP" sebelum setiap variabel. Mari kita selanjutnya melihat bagaimana semua kosakata baru ini bersatu dalam transaksi Bitcoin nyata.

Mayoritas operasi adalah transaksi tanda tangan. Ini termasuk pembayaran, pertukaran, dan sebagian besar pekerjaan yang melibatkan kunci publik dan pribadi. Demi artikel ini, mari kita tukar pertukaran antara penulis dan rekannya, Eddie Mitchell . Di sini penulis (pengirim) akan menentukan kunci publik dari Mitchell (penerima), yang akan menebus bitcoin yang dikirim dengan menentukan tanda tangan menggunakan kunci publik yang sama.

Setelah ini, dua instruksi pertama dari transaksi tersebut adalah tanda tangan dan kunci publik yang digunakan untuk menghasilkan tanda tangan itu. Informasi ini diidentifikasi sebagai "" dan "" dan didorong ke tumpukan. Mitchell menentukan nilai-nilai ini karena ia adalah penerima. Bagian pertama dari transaksi ini sering disebut "scriptSig" atau "Unlocking Script." Di bagian operasi ini, ada juga referensi untuk Output Transaksi Unspent Transaction ( UTXO ) yang sudah ada sebelumnya .

Dimasukkannya UTXO memastikan bahwa penulis memang memiliki jumlah bitcoin yang ia ingin kirim ke Mitchell. Jaringan Bitcoin menyelesaikan validasi ini melalui penambang dan simpul penuh Bitcoin. Dalam Menguasai Bitcoin , penulis Andreas Antonopoulos menjelaskannya sebagai berikut:

“Setiap input berisi skrip pembuka kunci dan merujuk ke UTXO yang sudah ada sebelumnya. Perangkat lunak validasi akan menyalin skrip pembuka kunci, mengambil UTXO yang dirujuk oleh input, dan menyalin skrip penguncian dari UTXO itu. "

Bagian kedua dari transaksi, "Locking Script" atau "scriptPubkey," kemudian dieksekusi oleh penulis. Berdasarkan gambar di atas, instruksi selanjutnya "OP_DUP" mengeluarkan dari stack, menduplikatnya, lalu mengembalikannya ke stack.

Nilai teratas ini, atau duplikat dari , kemudian secara kriptografis di hash oleh instruksi "OP_HASH160" dan menjadi "."

Fungsi hashing khusus yang digunakan untuk transaksi Bitcoin disebut SHA-256 (Secure Hash Algorithm) dan merupakan bagian dari kelompok fungsi yang lebih besar yang dikenal sebagai SHA-2, yang berasal dari pengembangan Badan Keamanan Nasional pada tahun 1993. Anggota lain dari SHA- 2 keluarga termasuk SHA-224, SHA-256, SHA-384, dan SHA-512 dengan masing-masing nomor mewakili panjang bit dari pesan yang mereka hasilkan.

Aplikasi yang luas dalam bidang keamanan informasi, dengan menjadi Bitcoin dan paling relevan Haschash ini Proof-of-Work ( POW mekanisme konsensus). Fitur yang paling menonjol dari SHA-256 adalah kemampuannya untuk mencegah serangan DoS seperti yang disebutkan di atas.

Kembali ke transaksi antara penulis dan rekannya, pengguna masih perlu menambahkan sepotong data ke tumpukan. Ini sedikit informasi selanjutnya adalah kunci publik yang ditentukan penulis pada awal transaksi. Diperlukan untuk menghasilkan tanda tangan untuk menebus bitcoin yang diminta.

Pada titik ini, ada dua bagian penting dari data hash di atas tumpukan: hash kunci publik seperti yang ditentukan oleh penulis dan hash kunci publik yang digunakan oleh Mitchell. Dari sana perintah "OP_EQUALVERIFY" diaktifkan yang memastikan bahwa penulis memang menggunakan kunci publik yang benar. Mengikuti beberapa transaksi bitcoin yang gagal di masa-masa awalnya, penulis telah melakukan tiga kali pengecekan bahwa kunci publik adalah milik Mitchell. Ketika kunci publik cocok, perintah OP_EQUALVERIFY mengeluarkan titik data ini. Pengguna sekarang hanya dibiarkan dengan tanda tangan dan kunci publik. Langkah terakhir adalah memverifikasi bahwa tanda tangan transaksi ini memang benar.

Bahasa scripting Bitcoin menguntungkan di sini karena tidak perlu menarik dari perpustakaan yang luas untuk mengkonfirmasi validitas tanda tangan. Semua ini dibangun ke dalam bahasa.

Instruksi “OP_CHECKSIG” di bagian akhir, kemudian mengeluarkan dua item yang tersisa dari stack, dan jika cocok dengan , maka operasi akan dianggap sah.

Meskipun pengantar berikut singkat, itu harus memberikan ide dasar tentang bagaimana transaksi Bitcoin dieksekusi. Berdasarkan hal ini, pengembang dan peminat dapat mulai bereksperimen dengan operasi yang lebih maju, yang akan menjadi bahan pengarahan selanjutnya.

Artikel yang akan datang yang membangun ini akan menyelam lebih dalam ke tanda tangan digital ( ECDSA ), operasi multi-signature, Pay-to-Script-Hash (P2SH), dan Timelocks.

Untuk informasi lebih lanjut tentang bahasa blockchain lainnya, silakan merujuk cakupan BTCManager untuk platform pemrograman EOS , Ethereum , dan TRON.
Share: