◉ Membuat transaksi dengan RPC CommandsMembuat sebuah transaksi menggunakan RPC Commands bisa dilakukan dengan beberapa cara, contoh seperti halnya menggunakan perintah
send,
sendtoaddress, dan
createrawtransaction. Untuk sebuah alasan, saya memilih untuk menggunakan
createrawtransaction karena dalam prosesnya kita bisa memilih UTXO yang akan dijadikan input buat transaksi tersebut.
- Jalankan Bitcoin Core dan buka RPC Console (Pada contoh kali ini saya menggunakan Bitcoin Core Testnet)
- Untuk mengetahui UTXO yang bisa digunakan, pakai perintah listunspent
listunspent
- Didapatkan hasil sebagai berikut
"txid": "2675704bb770f99cb0063cf8355da88b5941014e2d883b94d977407626fecd9b",
"vout": 0,
"address": "mx2f9C4cL1cABKG6om5eHbvpe6ueXjZCyK",
"label": "",
"scriptPubKey": "76a914b5202c46e31f0627702e57a6640545b5048e2c3788ac",
"amount": 0.00065240,
"confirmations": 5,
"spendable": true,
"solvable": true,
- Selanjutnya membuat transaksi menggunakan perintah createrawtransaction
createrawtransaction [{"txid":"hex","vout":n}] [{"address":amount}] ( locktime replaceable )
createrawtransaction '[{"txid":"2675704bb770f99cb0063cf8355da88b5941014e2d883b94d977407626fecd9b","vout":0}]' '[{"mv4rnyY3Su5gjcDNzbMLKBQkBicCtHUtFB":0.0001},{"n1sQo7UFrRD5KzjXCUyQCrjQs4zaXuFcgt":0.0004524}]'
- Karena parameter locktime dan replaceable tidak diisi, maka secara default nilai dari locktime = 0, dan replaceable = true (menyatakan jika transaksi adalah RBF)- Address pertama pada Output (mv4rnyY3Su5gjcDNzbMLKBQkBicCtHUtFB) merupakan address dari penerima (address testnet milik https://coinfaucet.eu/en/btc-testnet/)- Address kedua pada Output (n1sQo7UFrRD5KzjXCUyQCrjQs4zaXuFcgt) merupakan change address dari pengirim- Didapatkan hasil sebagai berikut
02000000019bcdfe26764077d9943b882d4e0141598ba85d35f83c06b09cf970b74b7075260000000000fdffffff0210270000000000001976a9149f9a7abd600c0caa03983a77c8c3df8e062cb2fa88acb8b00000000000001976a914df40f4f3462b1e69902f921405e8f2e3bb12005888ac00000000
- Menandatangani Transaksi menggunakan perintah signrawtransactionwithwallet
signrawtransactionwithwallet "hexstring"
signrawtransactionwithwallet 02000000019bcdfe26764077d9943b882d4e0141598ba85d35f83c06b09cf970b74b7075260000000000fdffffff0210270000000000001976a9149f9a7abd600c0caa03983a77c8c3df8e062cb2fa88acb8b00000000000001976a914df40f4f3462b1e69902f921405e8f2e3bb12005888ac00000000
- Didapatkan hasil sebagai berikut
"hex": "02000000019bcdfe26764077d9943b882d4e0141598ba85d35f83c06b09cf970b74b707526000000006a47304402202261d1a8dd3009427036b569948ece8fb8732d8211770f7405cf3e777a1ed8400220773ab906cba6817fa1da7e9d8077ba1206ba80bd735809f7eb1405bb8486643b012103b0044231eac1e3495cc0a3769cf14dc1fefa5163c40a40b0ea0e9c8ec747e2dffdffffff0210270000000000001976a9149f9a7abd600c0caa03983a77c8c3df8e062cb2fa88acb8b00000000000001976a914df40f4f3462b1e69902f921405e8f2e3bb12005888ac00000000",
"complete": true
Status boolean "complete": true, menyatakan jika transaksi telah memiliki Signature- Mengirimkan transaksi yang telah ditandatangani ke jaringan blockchain
sendrawtransaction "signed_hex"
sendrawtransaction 02000000019bcdfe26764077d9943b882d4e0141598ba85d35f83c06b09cf970b74b707526000000006a47304402202261d1a8dd3009427036b569948ece8fb8732d8211770f7405cf3e777a1ed8400220773ab906cba6817fa1da7e9d8077ba1206ba80bd735809f7eb1405bb8486643b012103b0044231eac1e3495cc0a3769cf14dc1fefa5163c40a40b0ea0e9c8ec747e2dffdffffff0210270000000000001976a9149f9a7abd600c0caa03983a77c8c3df8e062cb2fa88acb8b00000000000001976a914df40f4f3462b1e69902f921405e8f2e3bb12005888ac00000000
- Didapatkan hasil sebagai berikut
e9fa95bdb80bc780ed92bc865d9b6ec07ba0c42a06d34009d6d0bef84a1ad793
TXID e9fa95bdb80bc780ed92bc865d9b6ec07ba0c42a06d34009d6d0bef84a1ad793 bisa dicek disini
https://tbtc.bitaps.com/e9fa95bdb80bc780ed92bc865d9b6ec07ba0c42a06d34009d6d0bef84a1ad793Image dari keseluruhan proses dari Cara kedua (Membuat transaksi dengan RPC Commands)
◉ Membuat transaksi secara manual (Create Transaction from the Scratch)Ini merupakan cara yang paling rumit dan bahkan bisa dibilang jarang sekali yang menggunakan cara ini untuk membuat sebuah transaksi. Namun dalam hal ini, saya akan menguraikan caranya, sehingga bisa diketahui bagaimana sebuah RAW Transaction dibuat, disusun, ditandangani dan dikirimkan ke Jaringan blockchain (ini juga merupakan penjelasan secara detail dari membuat transaksi menggunakan cara kedua).
◉ Membuat Transaksi Non-Segwit
- Pertama-tama harus diketahui Struktur dan susunan dari Transaksi Non-Segwit
Version >> Input Count >> Inputs (TXID > Index UTXO > Scriptsig Size > Scriptsig > nSequence) >> Output Count >> Outputs (Value > ScriptPubKey Size > ScriptPubKey) >> Locktime
- Menentukan Version
Misal dipilih Versi 2, jika direpresentasikan dalam bentuk Hex (4 bytes) Little-endian Format maka akan seperti ini : 02000000
- Menentukan Jumlah Input
Untuk 1 Input jika direpresentasikan ke bentuk Hex : 01
- Menentukan UTXO (TXID) yang akan digunakan pada Input
Untuk mengetahui UTXO/TXID beserta value amount dan indeknya bisa menggunakan perintah listunspent
"txid": "e9fa95bdb80bc780ed92bc865d9b6ec07ba0c42a06d34009d6d0bef84a1ad793",
"vout": 1,
"address": "n1sQo7UFrRD5KzjXCUyQCrjQs4zaXuFcgt",
"label": "",
"scriptPubKey": "76a914df40f4f3462b1e69902f921405e8f2e3bb12005888ac",
"amount": 0.00045240,
- In-case kita tidak memiliki Bitcoin Core atau software wallet lainnya, maka untuk mengetahui TXID dari UTXO yang akan digunakan beserta Indeksnya, maka kita bisa melihatnya melalui situs Block Explorer. Yang terpenting kita memiliki Private Key dari address yang related dengan UTXO/TXID tersebut.
[/b][/i]

- TXID harus direpresentasikan dalam bentuk format Little-Endian : 93d71a4af8bed0d60940d3062ac4a07bc06e9b5d86bc92ed80c70bb8bd95fae9
- Menentukan Index UTXO
Diketahui Index (vout) dari TXID diatas adalah 1, jika direpresentasikan dalam bentuk Hex (4 bytes) Little-endian Format maka akan seperti ini : 01000000
- Mengisi (sementara) ScriptSig Size dan ScriptSig menggunakan data ScriptPubKey address pengirim
ScriptPubKey bisa diketahui dari output TXID yang ditampilkan oleh situs Blockchain explorer

- Diketahui ScriptPubKey adalah 76a914df40f4f3462b1e69902f921405e8f2e3bb12005888ac dengan ukuran 25 bytes, maka
ScriptSig Size direpresentasikan dengan 19 (bentuk hex dari 25 bytes)
ScriptSig direpresentasikan dengan 76a914df40f4f3462b1e69902f921405e8f2e3bb12005888ac
- Menentukan nSequence
Untuk transaksi RBF gunakan fdffffff, untuk transaksi non-RBF gunakan ffffffff
- Menentukan jumlah Output
Jika Output yang dipilih cuma 1 maka direpresentasikan ke bentuk Hex : 01
- Menentukan jumlah amount pada Output
Amount yang akan digunakan adalah 0.00033333 BTC = 33333 satoshis, maka harus dirubah ke bentuk 8 bytes Hex dan format Little-Endian : 3582000000000000
- Mencari ScriptPubKey dan ScriptPubKey size dari address penerima
Misal Address Penerima adalah mx2f9C4cL1cABKG6om5eHbvpe6ueXjZCyK, maka untuk mengetahui ScriptPubKey dari address tersebut bisa menggunakan perintah getaddressinfo atau mencari informasinya melalui situs Blockchain Explorer

- Diketahui ScriptPubKey size adalah 25 bytes, maka direpresentasikan ke bentuk Hex : 19
- Diketahui ScriptPubKey adalah 76a914b5202c46e31f0627702e57a6640545b5048e2c3788ac
- Menentukan LockTime
Dipilih Locktime = 0, maka direpresentasikan ke bentuk Hex (4 bytes) : 00000000
- Menambahkan 4 bytes hash code type 01000000
tanpa private key apa bisa masih tetap jalan om variabel di console bitcoincore nya, saya heran koq private key saya tidak muncul padahal sudah null