getblocktemplate adalah antarmuka bagi perangkat lunak untuk memperoleh informasi dari node Bitcoin guna menyusun calon blok. Antarmuka ini memakai JSON-RPC, yaitu permintaan dan jawaban terstruktur antarprogram. Mode biasa memberikan templat; mode terpisah dapat menilai rancangan blok sendiri terlebih dahulu. Kedua mode itu sendiri tidak mencari bukti kerja.
Dalam mode biasa mode=template, program Peter menerima antara lain blok pendahulu, transaksi, dan imbalan yang diizinkan. Ini rancangan pekerjaan, bukan blok yang sudah ditemukan. Perangkat lunak perlu membuat coinbase, transaksi pertama khusus yang mengalokasikan imbalan, lalu menyelesaikan penyusunan blok. Header adalah ringkasan singkat data blok. Setelah itu perangkat lunak mencari hash, sidik jari kriptografis berupa angka dari header tersebut, yang memenuhi target penambangan dan menjadi Proof of Work, bukti pekerjaan komputasi. getblocktemplate sendiri tidak menerima alamat pembayaran atau memulai perhitungan mesin tambang. Jawaban yang berhasil belum berarti Peter sedang menambang. [1]
Bayangkan node mengirim data dalam bentuk yang tidak dipahami program Peter. Karena itu, permintaan menyatakan aturan yang didukung dalam kolom rules. Bitcoin Core v29.0, versi yang diperiksa di sini, mewajibkan segwit serta signet untuk jaringan uji Signet. SegWit antara lain mengubah penanganan data untuk memverifikasi transaksi. Menambahkan kata yang tepat saja tidak cukup: program harus benar-benar mampu mengolahnya. capabilities menyatakan kemampuan antarmuka lainnya dan tidak menggantikan rules. Persyaratan tepatnya bergantung pada implementasi dan versi yang digunakan. [2]
Kolom data memuat seluruh transaksi yang disusun agar dapat dikirim antarprogram. Penyusunan ini disebut serialisasi. Byte, unit dasar data ini, ditulis dalam heksadesimal menggunakan angka 0–9 dan huruf a–f. Jawaban juga memuat pengenal singkat transaksi. Menurut dokumen teknis BIP 145, txid dihitung tanpa data witness, sedangkan hash memasukkannya. Witness memuat antara lain tanda tangan yang membuktikan hak membelanjakan dana. Merkle root utama, sidik jari gabungan transaksi dalam header blok, menggunakan txid, bukan witness hash. Tertukarnya kolom ini bukan sekadar kesalahan nama: hasil sidik jari gabungan bisa keliru dan membuat blok yang disusun tidak valid. [3]
Peter tidak perlu membanjiri node dengan pertanyaan apakah ada perubahan. Long polling membiarkan permintaan terbuka sampai server ingin mengganti bahan sebelumnya. Program menerima longpollid dan mengirimkannya kembali tanpa perubahan. Nilai ini memberi tahu server perubahan apa yang ditunggu program. Program tidak boleh menebak makna dari karakter di dalamnya. BIP 22 mengatur waktu tunggu yang panjang. Jawaban tidak lengkap atau tidak valid yang berulang memerlukan jeda antarpercobaan, bukan pengulangan seketika tanpa henti. Jadi, menunggu tanpa jawaban belum dengan sendirinya berarti gangguan. [4]
Mengulangi permintaan biasa pun tidak menjamin isi yang baru dipilih. Bitcoin Core v29.0 menyimpan templat yang telah disiapkan dalam cache. Ia menyusunnya kembali jika blok pendahulu berubah, atau jika mempool, kumpulan transaksi lokal yang belum dikonfirmasi, berubah dan lebih dari lima detik telah berlalu sejak persiapan. Waktu dalam header dapat diperbarui secara terpisah. Jadi Peter mungkin menerima pilihan transaksi yang sama lagi; itu tidak berarti node macet. Perilaku versi tertentu ini juga tidak menjanjikan tugas penambangan unik pada setiap panggilan. [2]
Peter mengubah cara menyusun blok dan ingin menemukan kesalahan sebelum pencarian yang menghabiskan sumber daya. Dalam mode proposal, ia menyerahkan seluruh blok dalam heksadesimal melalui data. Bitcoin Core v29.0 juga memeriksa Merkle root, tetapi tidak mensyaratkan Proof of Work yang valid, bukti pekerjaan komputasi, sudah ditemukan. Jika rancangan tidak melanjutkan blok terakhir dari rantai yang sedang diikuti node, hasilnya adalah inconclusive-not-best-prevblk. Artinya, prasyarat pemeriksaan ini tidak terpenuhi; ini bukan penilaian validitas secara lengkap. Pemeriksaan awal juga tidak menyebarkan blok ke jaringan. [2]
Setelah perangkat lunak menemukan bukti kerja yang diperlukan, ia dapat menyerahkan seluruh blok melalui submitblock. hexdata membawa blok lengkap yang telah diserialisasi dalam heksadesimal, bukan hanya header atau sidik jarinya. Dokumentasi Bitcoin Core 29 menyebut null jika diterima dan hasil teks sesuai spesifikasi untuk kasus lain. Parameter kedua yang opsional, dummy, diabaikan; parameter ini tidak menetapkan imbalan. Penerimaan oleh node tidak menjamin konfirmasi permanen: perkembangan rantai berikutnya dapat mengubah cabang mana yang tetap menjadi rantai utama. [5]
Node yang baru dijalankan mungkin belum mengunduh dan memverifikasi riwayat yang dibutuhkan. Di jaringan utama, mainnet, Bitcoin Core v29.0 menolak memberikan templat jika tidak ada peer yang terhubung atau selama sinkronisasi awal IBD (initial block download). Ini menyangkut kesiapan node bekerja dengan jaringan terkini, bukan penolakan suatu blok tertentu. Saat mencari penyebab masalah, bedakan long poll yang menunggu, node yang belum siap, dan hasil pemeriksaan rancangan. Semuanya bisa terlihat seperti “belum ada pekerjaan baru”, tetapi memerlukan penanganan berbeda. [2]
Untuk gambaran yang lebih utuh, baca entri ini bersama Block Template, Penambangan, Stratum V2, Extranonce, Bitcoin, Bitcoin Core. Entri ini juga dirujuk dari ASIC Miner, Solo Mining, Job Negotiation.