2
1
Let's pick an example bitcoin block: #499583
This is the block: https://insight.bitpay.com/api/rawblock/000000000000000000677c4077da7c9f01dde5f332ba2fbff962ee699714d5da
It starts with 00000020164a1e4a7f34b96b0e201d....
I'm trying to hash it so that the hash is 000000000000000000677c4077da7c9f01dde5f332ba2fbff962ee699714d5da again. This is my Javascript-Code:
var Bitcoin = require('bitcoinjs-lib');
var request = require('request');
var crypto = require('crypto');
function getRawBlock(blockHash) {
return new Promise((resolve, reject) => {
request('https://insight.bitpay.com/api/rawblock/' + blockHash, // hitting an insight API to get the full block
(error, response, body) => {
try {
var block = JSON.parse(body); // result is in JSON
resolve(block.rawblock)
} catch (error) {
reject(error)
}
})
})
}
getRawBlock('000000000000000000677c4077da7c9f01dde5f332ba2fbff962ee699714d5da')
.then((rawBlock) => {
var hash = crypto.createHash('sha256').update(rawBlock).digest('hex');
console.log(hash);
})
})
But the result is 484cd10be70dbc7615dd9a71b1f91375b100715d9b2a0ecc6a05b9d247a8cda9.
What am I doing wrong? The result should be 000000000000000000677c4077da7c9f01dde5f332ba2fbff962ee699714d5da. Do I hash something in the wrong format?
What format does the input data need to be? I'm trying to manually plug the data into a sha256 calculator, and not getting the correct result. I know it is a double sha256 but I must be making a mistake somewhere – chytrik – 2017-12-16T21:23:42.893
input is raw binary data 80 bytes length – amaclin – 2017-12-17T04:48:10.027
I thank you amaclin, I did not know that you only need to hash the header. But can someone maybe write such a short program in Javascript or Java or Python? (I can't read C++, I don't know what a QByteArray ist, what MyKey32 ist, what the proramm is really doing.) – ndsvw – 2017-12-17T07:58:43.700