Post
Topic
Board Mining (Bahasa Indonesia)
Merits 7 from 2 users
Re: [FAQS][Tips] Tanya Jawab Seputar Mining
by
abhiseshakana
on 04/12/2018, 13:10:52 UTC
⭐ Merited by dbshck (5) ,Kriss.Kross (2)
Sekalian mau nanya neh bang, sebenarnya proses verifikasi atau konfirmasi pada block itu prosesnya seperti apa dan apakah hanya miner saja yg bisa melakukannya? ane penasaran karena kapan hari pas ngirim btc ke indodax prosesnya sampe 4 jam, padahal biasanya gak selama itu
menurut gw yg bisa melakukan verifikasi hanya peminer gan.

Sebelumnya ada yg perlu dipahami mengenai apa saja yg berhubungan dengan verifikasi, validasi dan konfirmasi. Baik transaksi maupun block keduanya sama-sama melalui proses verifikasi/validasi, dan semua full node yang terhubung dengan jaringan P2P dapat melakukan proses tersebut (jadi bukan hanya node miner saja). Jadi pada saat sebuah/beberapa transaksi dibuat, selanjutnya transaksi tersebut akan dipropagasi ke jaringan P2P dan setiap node (full node, node miner) yang mengenali transaksi tersebut akan melakukan proses verifikasi/validasi untuk mengetahui apakah transaksi tersebut valid atau tidak (verifikasi ScriptPubKey, ScriptSig, Pubkey hash, etc). Setelah melalui proses verifikasi, transaksi-transaksi yg valid akan disimpan ke dalam memory/transaction pool.

Pada saat node miner membuat sebuah block, mereka akan mengambil transaksi-transaksi yg ada di memory pool tersebut (diurutkan berdasarkan besaran fee transaksi) dan selanjutnya akan dimasukkan kedalam block yg mereka buat. Setelah block tersebut selesai diproses maka node miner tersebut akan mempropagasi calon block tersebut ke jaringan P2P, yg selanjutnya calon block tersebut akan diverifikasi/validasi oleh node-node lainnya (full node dan node miner). Jika calon block tsb dianggap valid, maka block tersebut akan didistribusikan ke jaringan blockchain dengan status 1 konfirmasi block. Dan pada saat block selanjutnya dibuat dan berhasil didistribusikan ke jaringan blockchain, maka block yg sebelumnya tadi akan mendapatkan status 2 konfirmasi block. Proses ini akan terus terjadi terus menerus untuk block-block selanjutnya (untuk proses konfirmasi block hanya node miner yang bisa melakukannya, karena konfirmasi block hanya akan bertambah saat block baru selesai dibuat).

Untuk lebih mudah memahami silahkan dilihat gambar dibawah ini :





Tambahan :
Proses verifikasi tidaklah sesulit proses pembuatan sebuah block, maka oleh karena itu setiap full node bisa melakukan proses tersebut. Untuk melakukan verifikasi pada sebuah block, dibutuhkan 6 fields sebagai berikut : version, Hash Previous Block, Hash merkle root, Timestamp, Bits (target) dan nonce. Dari ke 6 komponen tersebut akan diproses supaya diketahui apakah hash dari block tersebut valid atau tidak (untuk proses verifikasi block pernah saya bahas pada challenge mining quiz periode 5)


Quote
Diketahui sebuah Coin mempunyai algoritma mining Sha256, dengan data-data Block header sebagai berikut :

Version536870912
Previous Block00000000000000002ac7f20c4b909f5857d3363700d3648958fd4675beb534a2
Merkle Roote04a3b043d76ace078283db0ff61910f61cb06a685f5a3dee0701d48c064c9f4
Time2018-Nov-08 22:28:09 (UTC)
Bits420106321
Nonce3021489935

1. Dengan ke-6 data diatas, sebuah node dapat melakukan proses verifikasi dengan cara mencari hash dari Block tersebut. Berapakah nilai Hash dari Block yang dimaksud ?


1. Merubah ke-6 fields diatas dengan melakukan swap endian (reverse per Byte). Supaya tidak terjadi kesalahan penulisan data, lebih mudah jika Hex digit dipisahkan per 1 byte (2 Hex digits)

- Convert Version ke hex, lalu lakukan swap endian (reverse per Byte)
Version536870912
Version (Hex)20 00 00 00
Reverse00 00 00 20

- Lakukan swap endian (reverse per Byte) pada Previous Block
Previous Block00 00 00 00 00 00 00 00 2a c7 f2 0c 4b 90 9f 58 57 d3 36 37 00 d3 64 89 58 fd 46 75 be b5 34 a2
Reversea2 34 b5 be 75 46 fd 58 89 64 d3 00 37 36 d3 57 58 9f 90 4b 0c f2 c7 2a 00 00 00 00 00 00 00 00
Reversea234b5be7546fd588964d3003736d357589f904b0cf2c72a0000000000000000

- Reverse Merkle Root (swap endian)
Merkle Roote0 4a 3b 04 3d 76 ac e0 78 28 3d b0 ff 61 91 0f 61 cb 06 a6 85 f5 a3 de e0 70 1d 48 c0 64 c9 f4
Reversef4 c9 64 c0 48 1d 70 e0 de a3 f5 85 a6 06 cb 61 0f 91 61 ff b0 3d 28 78 e0 ac 76 3d 04 3b 4a e0
Reversef4c964c0481d70e0dea3f585a606cb610f9161ffb03d2878e0ac763d043b4ae0


- Merubah bentuk waktu ke (epoch) timestamp, lalu convert to Hex dan lakukan swap endian (reverse).
Time2018-Nov-08 22:28:09
Timestamp1541716089 (https://timestampgenerator.com)
Timestamp (Hex)5be4b879
Reverse79b8e45b

- Merubah Bits ke bentuk Hex, lalu lakukan swap endian (reverse)
Bits420106321
Bits (Hex)190a5051
Reverse51500a19

- Merubah Nonce ke bentuk Hex, lalu lakukan swap endian (reverse)
Nonce3021489935
Nonce (Hex)b418470f
Reverse0f4718b4

- Mencari nilai Header_Hex = Rev Version + Rev Prev Block + Rev Merkle Root + Rev Timestamp + Rev Rev Bits + Rev Nonce
Header_Hex = 00000020 + a234b5be7546fd588964d3003736d357589f904b0cf2c72a0000000000000000 + f4c964c0481d70e0dea3f585a606cb610f9161ffb03d2878e0ac763d043b4ae0 + 79b8e45b + 51500a19 + 0f4718b4

- Melakukan double hashing pada Header_Hex, dan untuk final hash harus dilakukan swap endian (reverse)
Double Hashing Sha256= Sha256 (sha256 (Header_Hex))
Block hash= Reverse (Double Hashing Sha256)

# Cara 1 menggunakan calculator dari http://extranet.cryptomathic.com/hashcalc/index
sha256 (Header_Hex) = Sha256(00000020a234b5be7546fd588964d3003736d357589f904b0cf2c72a0000000000000000f4c964c 0481d70e0dea3f585a606cb610f9161ffb03d2878e0ac763d043b4ae079b8e45b51500a190f4718 b4)

sha256 (Header_Hex) = 9693d04d327f184ebf97e70995ac1b844cf79c9231b449095a1030887c8e2732



Sha256 (Sha256 (Header_Hex) = Sha256 (9693d04d327f184ebf97e70995ac1b844cf79c9231b449095a1030887c8e2732)
Double Hashing Sha256    = 04b1bccf8b83dbac2921233c100132d07515ecbfd18f23cc0100000000000000
Double Hashing Sha256    = 04 b1 bc cf 8b 83 db ac 29 21 23 3c 10 01 32 d0 75 15 ec bf d1 8f 23 cc 01 00 00 00 00 00 00 00



Lalu lakukan swap endian (reverse per Byte) untuk Final Hash
Block hash      = 00 00 00 00 00 00 00 01 cc 23 8f d1 bf ec 15 75 d0 32 01 10 3c 23 21 29 ac db 83 8b cf bc b1 04
Block hash      = 0000000000000001cc238fd1bfec1575d03201103c232129acdb838bcfbcb104



# Cara 2 melakukan double Hashing dengan Python :

>>> import hashlib, binascii
>>> from binascii import unhexlify
>>> from hashlib import sha256
>>> header = unhexlify("00000020a234b5be7546fd588964d3003736d357589f904b0cf2c72a0000000000000000f4c964c 0481d70e0dea3f585a606cb610f9161ffb03d2878e0ac763d043b4ae079b8e45b51500a190f4718 b4")
>>> sha256(sha256(header).digest()).hexdigest()



Result       = '04b1bccf8b83dbac2921233c100132d07515ecbfd18f23cc0100000000000000' >>> (Swap endian / Reverse per Byte)
Block hash   = 0000000000000001cc238fd1bfec1575d03201103c232129acdb838bcfbcb104


Valid Proof :

https://explorer.litecoinca.sh/block/0000000000000001cc238fd1bfec1575d03201103c232129acdb838bcfbcb104



- snip -