Baik Anda tertarik menjadi pengembang untuk aplikasi blockchain, atau Anda hanya ingin memahami apa yang terjadi di balik terpal ketika Anda mengirim bitcoin ke teman, ada baiknya memiliki pengetahuan yang bekerja tentang apa yang terjadi ketika Anda membuat dan menyiarkan Bitcoin transaksi ke jaringan Bitcoin. Mengapa?

Karena transaksi adalah entitas dasar di atasnya blockchain bitcoin dibangun. Transaksi adalah hasil dari tabrakan brilian antara kriptografi, struktur data, dan skrip sederhana yang tidak lengkap. Itu cukup sederhana sehingga jenis transaksi umum tidak terlalu rumit, tetapi cukup fleksibel untuk memungkinkan pengembang juga mengenkode jenis transaksi yang cukup disesuaikan. Hari ini kita akan mengikuti tur yang pertama.

Sebagai pengembang, bagaimana klien bitcoin Anda memposting transaksi baru ke jaringan (dan apa yang terjadi ketika transaksi itu diterima)?

Apa yang sebenarnya terjadi saat Anda mengirim bitcoin ke teman?

Posting ini akan mengasumsikan bahwa pembaca memiliki pemahaman dasar tentang hashing, kriptografi asimetris, dan jaringan P2P. Ada baiknya juga untuk memahami apa sebenarnya blockchain itu, meskipun Anda tidak terbiasa dengan mekanisme tertentu..

Transaksi Bitcoin dan perannya dalam gambaran yang lebih besar

Bitcoin terdiri dari beberapa bagian utama: node dan blockchain. Peran node biasa adalah mempertahankan versi blockchainnya sendiri dan memperbaruinya setelah mendengar versi “lebih baik” (lebih lama). Sederhananya, blockchain memiliki blok, dan blok memiliki transaksi.

Dengan gambaran yang disederhanakan namun akurat ini, Anda mungkin bertanya-tanya dari apa sebenarnya sebuah transaksi dibuat.

  • Bagaimana memahami transaksi akan membantu saya menjadi pengembang blockchain yang lebih baik?
  • Bagaimana transaksi memungkinkan saya mentransfer beberapa bitcoin ke teman?

Ternyata jawaban atas pertanyaan tersebut berbeda-beda berdasarkan banyak hal. Bahkan dengan asumsi bahwa kita hanya berbicara tentang bitcoin, kita dapat menggunakan transaksi dengan sejumlah cara kreatif untuk mencapai berbagai tujuan yang dipersonalisasi. Mari kita mulai dari awal, yaitu, mari kita lihat jenis transaksi pay-to-PK-hash kuno yang bagus. Bagaimanapun, jenis transaksi ini menyumbang lebih dari 99% dari semua transaksi di blockchain bitcoin.

Pertama, mari membangun model mental. Sangat menggoda untuk menganggap bitcoin sebagai sistem berbasis akun. Bagaimanapun, ketika saya mengirim bitcoin ke seseorang, orang itu menerima uang dan saya memiliki sisa saldo. Di dunia nyata, hal-hal direpresentasikan sedikit berbeda. Secara umum, ketika saya mengirim uang ke seseorang yang saya kirim menghabiskan semua uang itu (dikurangi biaya transaksi). Sebagian dari uang itu akan dibelanjakan kembali ke rekening pribadi saya jika ada sisa saldo. Intinya adalah bahwa semua uang bergerak setiap saat. Anda dapat melompat ke bagian 3.1 dari untuk penjelasan mengapa model ini lebih disukai.

Dengan pemikiran tersebut, kita dapat menggeneralisasi dan mengatakan bahwa transaksi bitcoin memiliki beberapa masukan dan keluaran. Representasi grafis mungkin terlihat seperti ini:

Bagaimana Sebenarnya Transaksi Bitcoin Bekerja?

Ini agak membingungkan saya saat pertama kali melihatnya, jadi saya akan menjelaskan sedikit. Saat saya memposting transaksi, pada dasarnya saya “mengklaim” sebuah keluaran dan membuktikan bahwa saya memiliki izin untuk membelanjakan sejumlah uang pada keluaran tersebut. Jadi jika saya Bob dan saya ingin membayar Alice, masukan tersebut adalah bukti saya bahwa saya telah diberi sejumlah uang (walaupun ini mungkin hanya sebagian dari saldo total saya), dan hasilnya akan sesuai dengan akun Alice . Dalam kasus sederhana ini, hanya akan ada satu masukan dan satu keluaran.

Melihat lebih dalam tentang transaksi Bitcoin

Mari kita pahami mekanisme transaksi bitcoin nyata. Kami akan menggunakan gambar di atas sebagai referensi.

Jika Anda memotong transaksi bitcoin biasa, Anda akan mendapatkan tiga bagian utama: tajuk, masukan, dan keluaran. Mari kita lihat sekilas bidang yang tersedia untuk kita di bagian ini, karena itu penting untuk diskusi. Perhatikan bahwa ini adalah bidang yang disebut transaksi mentah. Transaksi mentah disiarkan antar rekan ketika transaksi dibuat.

Header

  • hash: Hash untuk seluruh transaksi ini. bitcoin umumnya menggunakan nilai hash, baik sebagai penunjuk maupun alat untuk memeriksa integritas suatu data. Kita akan melihat ini lebih lanjut di bagian selanjutnya.
  • ver: Nomor versi yang harus digunakan untuk memverifikasi blok ini. Versi terbaru diperkenalkan di garpu lunak yang mulai aktif pada Desember 2015.
  • vin_sz: Jumlah input untuk transaksi ini. Demikian pula, vout_sz menghitung jumlah keluaran.
  • lock_time: Kita akan melihat ini lebih lanjut di artikel selanjutnya, tetapi ini pada dasarnya menjelaskan waktu paling awal di mana sebuah blok dapat ditambahkan ke blockchain. Ini bisa berupa tinggi blok atau stempel waktu unix.

Memasukkan

  • hash keluaran sebelumnya: Ini adalah penunjuk hash ke keluaran transaksi yang sebelumnya tidak digunakan (UTXO). Pada dasarnya, ini adalah uang milik Anda yang akan Anda belanjakan dalam transaksi ini.
  • n: Indeks ke dalam daftar keluaran dari transaksi sebelumnya. Ini adalah hasil aktual yang Anda belanjakan.
  • scriptSig: Ini adalah skrip pengeluaran yang membuktikan bahwa pembuat transaksi ini memiliki izin untuk membelanjakan uang yang dirujuk oleh 1. dan 2.

Keluaran

  • nilai: Jumlah Satoshi yang dibelanjakan (1 BTC = 100.000.000 Satoshi).
  • scriptPubKey: Skrip kedua dari dua skrip yang disediakan dalam transaksi bitcoin, yang mengarah ke kunci publik berciri penerima. Lebih lanjut tentang ini di bagian terakhir artikel ini.

Verifikasi transaksi

Salah satu tugas node bitcoin adalah memverifikasi bahwa transaksi masuk sudah benar (data belum diubah, uang tidak dibuat, hanya penerima yang dituju yang membelanjakan UTXO, dll). Daftar yang lebih lengkap dapat ditemukan online, tetapi saya akan mencantumkan beberapa yang penting di sini:

  • Semua keluaran yang diklaim oleh masukan dari transaksi ini ada di kumpulan UTXO. Keluaran yang tidak terpakai hanya dapat diklaim sekali.
  • Tanda tangan pada setiap masukan valid. Lebih tepatnya, kami mengatakan bahwa skrip gabungan mengembalikan true setelah mengeksekusinya satu demi satu. Lebih lanjut tentang ini di bagian terakhir.
  • Tidak ada UTXO yang dibelanjakan lebih dari sekali oleh transaksi ini. Perhatikan bagaimana ini berbeda dari item pertama.
  • Semua nilai keluaran transaksi adalah non-negatif.
  • Jumlah nilai masukan transaksi ini lebih besar dari jumlah nilai keluarannya. Perhatikan bahwa jika jumlahnya berbeda, perbedaan tersebut dianggap sebagai biaya transaksi yang dapat diklaim oleh penambang.

Transaksi dasar bayar-untuk-PK-hash

bitcoin memiliki bahasa skrip (seperti Keempat) sendiri yang cukup kuat untuk memungkinkan pengembang membuat jenis transaksi yang rumit dan khusus. Ada lima atau lebih jenis transaksi standar yang diterima oleh klien bitcoin standar [5], namun, ada klien lain yang akan menerima jenis transaksi lain dengan biaya tertentu. Kami hanya akan membahas mekanisme bayar-untuk-PK-hash di sini.

Agar setiap transaksi valid, pasangan scriptSig / scriptPubKey gabungan harus bernilai true. Lebih khusus lagi, pemboros transaksi menyediakan scriptSig yang dijalankan dan diikuti oleh scriptPubKey dari keluaran transaksi yang diklaim (ingat bagaimana kita mengatakan masukan mengklaim keluaran transaksi yang tidak terpakai sebelumnya?). Kedua skrip berbagi tumpukan yang sama.

Demi kepentingan efisiensi, mari gunakan (wiki bitcoin resmi) referensi saat kita membahas. Saat Anda mengunjungi tautan tersebut, lakukan sekitar setengah jalan untuk menemukan tabel yang berisi 7 baris. Tabel ini menunjukkan bagaimana skrip digabungkan, bagaimana eksekusi terjadi, dan seperti apa tampilan tumpukan di setiap langkah.

Satu hal yang perlu diperhatikan adalah, karena alamat bitcoin sebenarnya adalah hash (yah, ini menjadi sedikit lebih rumit. Lihat ), tidak ada cara bagi pengirim untuk mengetahui kunci publik sebenarnya untuk memeriksa kunci privat tersebut. Oleh karena itu, Penebus menentukan kunci publik dan kunci pribadi, dan scriptPubKey akan menduplikasi dan mencirikan kunci publik untuk memastikan bahwa Penebus memang penerima yang dimaksud..

Selama eksekusi, Anda dapat melihat bahwa konstanta ditempatkan langsung ke tumpukan saat ditemukan. Operasi menambah atau menghapus item dari tumpukan saat dievaluasi. Misalnya, OP_HASH160 akan mengambil item teratas dari tumpukan, dan memilikinya dua kali, pertama dengan SHA-256 dan kemudian dengan RIPEMD-160. Ketika semua item dalam skrip kami telah dievaluasi, seluruh skrip kami akan dievaluasi menjadi benar jika benar tetap ada di tumpukan, dan salah jika sebaliknya.

Secara keseluruhan, pay-to-PK-hash adalah jenis transaksi yang cukup mudah. Ini memastikan bahwa hanya penebus dengan pasangan kunci publik / pribadi yang sesuai yang dapat mengklaim dan kemudian membelanjakan bitcoin. Dengan asumsi bahwa semua kriteria lainnya terpenuhi (lihat bagian sebelumnya), maka transaksi tersebut adalah baik dan dapat ditempatkan dalam satu blok..

Di artikel mendatang, saya akan menjelaskan jenis transaksi yang lebih rumit. Kami akan melihat bagaimana lebih dari dua pihak dapat berpartisipasi dalam sebuah transaksi, dan kami akan melihat bagaimana jenis transaksi yang berjalan lebih lama dapat diterapkan.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me