0
Given the following block, how do I verify the proof of work? I got this data from bitcoin-cli getblock and parsed in to a Ruby hash called data:
{"hash"=>"00000000000000001354e21fea9c1ec9ac337c8a6c0bda736ec1096663383429",
"confirmations"=>2, "size"=>529935, "height"=>347928, "version"=>2,
"merkleroot"=>"14b2c974a4f9ab92a68f03a491965063d1f8a2e8b2268fdb4cbce92262bb09c0",
"tx"=>"..removed for space convenience...", "time"=>1426554998,
"nonce"=>3284264479, "bits"=>"18172ec0", "difficulty"=>47427554950.6483,
"chainwork"=>"000000000000000000000000000000000000000000056f68a6406c831f16c1bd",
"previousblockhash"=>"000000000000000007c464352935f12c3695f7de4eee8390f444233682abf8aa",
"nextblockhash"=>"000000000000000016e3530b3a7cdaaa495e6eb70aa8f3f15d02fd078235e931"}
I have tried the following:
version = "02000000"
prev = data["previousblockhash"]
merkle = data["merkleroot"]
time = data["time"].to_s(16) #convert to hex
bits = data["bits"]
nonce = data["nonce"]
hashable = version + prev + merkle + time + bits + nonce
answer = Digest::SHA256.hexdigest hashable
The problem is my answer is this:
b7dc9db86cdf47bf1b13274f88b14211a1ce58c52ac1e41c987b4ad65cf50f4f
but the given answer (in data["hash"]) is
00000000000000001354e21fea9c1ec9ac337c8a6c0bda736ec1096663383429
What am I doing wrong?
Thanks for any help, Kevin
Thanks for this, it looks like either your prev didn't reverse properly or I'm misunderstanding what you're doing: last 5 of prev: bf8aa your rev of prev in header: aaf8a – user1130176 – 2015-03-17T15:31:02.687
You have to list the bytes in reverse order. Each byte is two hex characters. The previous block is
0000...f8aa. You just have to list the bytes in the reverse order asaaf8...0000. i.e. 1234 byte-reversed is 3412. – morsecoder – 2015-03-17T17:36:19.640ok, i see, so it's both byte reversed and Endian reversed? – user1130176 – 2015-03-18T00:32:48.410
Endian reversed just means you need to list the bytes in the opposite order. Remember to mark answers as correct if they answered your question. – morsecoder – 2015-03-18T12:32:12.340
sorry for not being clear, i understand what endian reversed meant, i was attempting get confirmation that two distinct processing steps are required 1) reverse endian (swap the hex bytes) and 2) reverse the string – user1130176 – 2015-03-19T03:12:18.303
Reversing the endianness is the same thing as reversing the bytes in the string. – morsecoder – 2015-03-30T15:24:24.260