an image on a post about transaksi bitcoin

Sama ada anda berminat untuk menjadi developers aplikasi blockchain, atau anda hanya ingin memahami apa yang berlaku disebalik tabir Bitcoin, anda patut mempunyai pengetahuan tentang apa yang berlaku apabila anda membuat transaksi Bitcoin. Mengapa?

Ini adalah kerana transaksi adalah salah satu entiti asas bagi blockchain di mana blockchain Bitcoin dibina. Urusniaga adalah hasil daripada kombinasi kriptografi yang baik, struktur data, dan skrip yang tidak begitu rumit. Programming yang digunakan cukup mudah untuk menjadikan transaksi biasa tidak terlalu kompleks, tetapi cukup fleksibel bagi membolehkan developers untuk mengubahsuai transaksi sedia ada menjadi lebih kompleks.

Dalam post kali ini, penulis akan cuba menjawab dua soalan penting dalam proses transaksi Bitcoin:

  • Bagaimanakah node membuat transaksi baru dan menyiarkannya rangkaian (dan apa yang berlaku apabila ia diterima)?
  • Apakah sebenarnya yang berlaku apabila sejumlah Bitcoin dihantar kepada seorang kawan yang lain?

Artikel ini mengandaikan bahawa pembaca sudah mempunyai pemahaman asas tentang hashing, asymmetric crytography, dan rangkaian P2P. Jika pembaca sudah memahami apa sebenarnya yang dimaksudkan dengan blockchain, ia merupakan satu kelebihan walaupun tidak memahami secara mendalam bagi sesuatu topik crypto.

Transaksi Bitcoin dan peranan mereka secara lebih meluas

Bitcoin terdiri daripada beberapa bahagian utama: node dan blockchain. Peranan node adalah untuk mengekalkan versi blockchainnya sendiri dan mengemas kini apabila ia mendapat versi “lebih baik” (lebih panjang). Secara ringkas, blockchain mempunyai blok, dan setiap blok mempunyai transaksi.

Dengan gambaran yang mudah dan tepat ini, anda mungkin tertanya-tanya apakah itu transaksi Bitcoin sebenarnya.

  • Bagaimanakah pemahaman urus niaga membantu saya untuk menjadi developer blockchain yang lebih baik?
  • Bagaimanakah transaksi membolehkan saya memindahkan beberapa Bitcoin kepada rakan?

Ternyata jawapan kepada soalan-soalan ini berbeza-beza berdasarkan banyak perkara. Sebenarnya selain daripada Bitcoin, kita boleh menggunakan transaksi dalam beberapa cara kreatif untuk mencapai pelbagai matlamat peribadi. Kita mulakan dengan melihat kepada jenis transaksi cara lama iaitu pay-to-PK-hash. Jenis transaksi inilah yang digunakan dalam hampir 99% daripada semua transaksi di dalam blockchain Bitcoin.

Ramai yang menganggap Bitcoin ini sebagai satu sistem berasaskan konsep akaun. Apabila anda menghantar Bitcoin kepada seseorang, orang itu menerima wang dan anda ditinggalkan dengan baki Bitcoin tadi. Di dunia sebenar, perkara ini tidaklah seperti itu.

Secara umumnya, apabila anda menghantar Bitcoin kepada seseorang, anda sebenarnya telah membelanjakan Bitcoin anda tadi (tolak caj transaksi). Sebahagian daripada wang itu akan dibelanjakan kembali ke akaun peribadi anda jika ada baki yang tinggal. Konsep ‘membelanjakan’ ini penting kerana asasnya adalah semua wang bergerak setiap masa.

Oleh kerana itu, kita boleh  mengatakan bahawa transaksi bitcoin mempunyai beberapa input dan output. Grafik ringkas mungkin kelihatan seperti ini:

Transaksi Bitcoin dengan input i dan input j

Ini agak mengelirukan apabila anda mula-mula melihatnya, jadi penulis  akan cuba memberi penerangan lebih jelas. Apabila anda menghantar transaksi, anda pada dasarnya “menuntut” output dan membuktikan bahawa anda mempunyai kebenaran untuk membelanjakan jumlah wang pada output itu.

Contohnya, jika Bob ingin membayar Alice, input tersebut adalah bukti bahawa Bob telah diberikan sejumlah wang (walaupun ini mungkin hanya sebahagian dari jumlah keseluruhan baki Bob), dan output akan disesuaikan dengan akaun Alice. Kes ini mudah, kerana hanya terdapat satu input dan output tunggal.

Penerangan yang lebih mendalam tentang transaksi Bitcoin

Mari kita fahami mekanisme transaksi bitcoin sebenar. Penulis akan menggunakan gambar rajah di atas tadi sebagai rujukan.

Sekiranya anda memeriksa  transaksi bitcoin biasa, anda akan melihat tiga bahagian utama: header, input, dan output. Dalam setiap bahagian akan ada pecahan bahagian mereka sendiri dan penulis akan menerangkan satu-persatu seperti di bawah:

Header
  • hash: hash sepanjang transaksi ini. Bitcoin secara amnya menggunakan nilai hash sebagai penunjuk dan cara untuk memeriksa integriti sekeping data. Kita akan melihat dengan lebih lanjut di bahagian seterusnya.
  • ver: Nombor versi yang sepatutnya digunakan untuk mengesahkan blok ini. Versi terbaru diperkenalkan dalam soft fork yang menjadi aktif pada bulan Disember 2015.
  • vin_sz: Bilangan input untuk transaksi ini. Manakala vout_sz pula mengira bilangan output.
  • lock_time: Ia menerangkan masa paling awal di mana blok boleh ditambahkan ke blockchain. Ia boleh menjadi sama ada ketinggian blok atau cap waktu unix (unix timestamp).
Input
  • Hash output sebelumnya: Ini adalah penunjuk hash ke output transaksi yang belum dijelaskan (unspent trasaction output-UTXO). Pada dasarnya, ini adalah wang yang dimiliki oleh anda yang akan dibelanjakan untuk transaksi ini.
  • N: Indeks senarai output transaksi sebelumnya. Inilah output sebenar yang anda belanjakan.
  • ScriptSig: Ini adalah skrip perbelanjaan yang membuktikan bahawa pencipta transaksi ini mempunyai izin untuk membelanjakan wang yang dirujuk oleh 1. dan 2.

Output

  • Nilai: Jumlah Satoshi yang dibelanjakan (1 BTC = 100,000,000 Satoshi).
  • ScriptPubKey: Skrip kedua dari dua skrip yang disediakan dalam transaksi bitcoin, yang menunjukkan public key penerima. Lebih lanjut mengenai ini di bahagian terakhir artikel ini.
Sumber: https://en.bitcoin.it/wiki/Transaction

Gambar rajah di atas menggambarkan apa yang berlaku kepada transaksi Bitcoin. Dalam transaksi A, 100 BTC dihantar ke C dan pada masa sama C menerima 50 BTC dari transaksi B. C pula menghantar 101 BTC daripada keseluruhan Bitcoin (150 BTC) ke D. Disebabkan setiap output dalam satu transaksi hanya boleh dirujuk sekali sahaja oleh input transaksi seterusnya, jumlah keseluruhan input (150 BTC) perlu dihantar oleh C. Oleh kerana itu, sistem Bitcoin akan membuat dua output yang bernilai 49 BTC dan 101 BTC, di mana 101 BTC dihantar ke D, dan 49 BTC dihantar kembali kepada anda.

Pengesahan transaksi

Salah satu pekerjaan node Bitcoin adalah mengesahkan bahawa transaksi masuk adalah betul (data tidak diganggu, wang tidak dicipta, hanya penerima yang disahkan untuk membelanjakan UTXOs, dll). Senarai yang lebih lengkap boleh didapati online, tetapi saya akan menyenaraikan beberapa yang penting sahaja di sini:

  • Semua output yang dituntut oleh input transaksi ini adalah dalam UTXO (Unspent Transaction Outputs) pool. Output yang belum dibelanjakan hanya boleh dituntut sekali sahaja.
  • Tanda tangan digital pada setiap input adalah sah.
  • Semua nilai output bagi setiap transaksi adalah tidak negatif.
  • Jumlah nilai input bagi transaksi ini adalah lebih besar daripada jumlah nilai output. Jika nombor kedua-duanya berbeza, perbezaannya dianggap sebagai bayaran transaksi yang boleh dituntut oleh miners. 

Asas kepada urus niaga pay-to-PK-hash

Bitcoin mempunyai bahasa skrip tersendiri (Forth-like) yang cukup kuat untuk membolehkan developers membuat jenis transaksi yang lebih rumit. Terdapat lima jenis transaksi standard yang diterima oleh node bitcoin, namun terdapat node lain yang akan menerima jenis transaksi lain dengan bayaran tambahan. Penulis hanya akan membincangkan mekanisme pay-to-PK-hash di sini.

Untuk mana-mana transaksi menjadi sah, pasangan skripSig/scriptPubKey yang digabungkan mesti disahkan. Secara lebih khusus, pembuat transaksi menyediakan skripSig yang dilaksanakan dan diikuti oleh scriptPubKey output transaksi yang dituntut (ingat bagaimana penulis menyebut input adalah tuntutan transaksi output yang tidak dibelanjakan?). Kedua-dua skrip berkongsi tindanan yang sama.

Untuk memudahkan penerangan, penulis akan merujuk kepada official bitcoin wiki. Jika anda melawat laman web tersebut, cuba cari jadual yang mengandungi 7 baris. Jadual ini menunjukkan bagaimana skrip digabungkan, bagaimana pelaksanaan berlaku, dan rupa tindanan pada setiap langkah.

Satu perkara yang perlu diperhatikan ialah, kerana alamat Bitcoin sebenarnya adalah hashes, tidak ada cara untuk pengirim mengetahui public key sebenar untuk mengesahkan private key. Oleh itu, penerima transaksi menentukan kedua-dua public key dan private key, dan skripPubKey akan menduplikasi dan menambah hash kepada public key untuk memastikan bahawa penerima adalah penerima yang betul.

Semasa perlaksanaan, anda dapat melihat bahawa kod yang telah ditentukan (constants) diletakkan terus ke timbunan semasa mereka ditemui. Sebagai contoh, OP_HASH160 akan mengambil item teratas dari timbunan, dan menambah hash sebanyak dua kali, pertama dengan SHA-256 dan kemudian dengan RIPEMD-160. Apabila semua item dalam skrip telah dinilai, skrip keseluruhan kami akan menilai benar jika benar maka ia masih kekal pada timbunan, dan sebaliknya jika tidak.

Secara keseluruhannya, pay-to-PK-hash adalah jenis transaksi yang agak mudah. Ia memastikan bahawa hanya penerima dengan pasangan public/private key yang sesuai boleh menuntut dan seterusnya membelanjakan Bitcoin. Dengan mengandaikan bahawa semua kriteria lain dipenuhi, transaksi itu adalah transaksi yang baik dan ia boleh dimasukkan ke dalam blok.

LEAVE A REPLY

Please enter your comment!
Please enter your name here