guerrerocarlos / bitcoin-miner

Super-slow yet very educative Bitcoin miner in Javascript/NodeJS
MIT License
250 stars 35 forks source link

Hashing random blocks failures and hard errors #1

Open DawBin opened 6 years ago

DawBin commented 6 years ago

I'm running a script that selects random historical blocks. For each random block I am passing the correct nonce. Sometimes the hash is correct, sometimes it is not correct and other times there is an error. Here are repeatable samples using the example code...

CORRECT HASH:

    //
    //Target Block: 0000000099e42d2610bde471f80267d6e3393f8b653a45c3cb409ae870d4cdb1
    //Correct nonce will be: 1655861781
    //

    const block = {
            version: 1
            ,previousblockhash: '000000004b163c55c375213d53647f16d89fc6918b60afeaedc5bef848f813b5'
            ,merkleroot: 'b1ea695ce6cdd3acfdd4f59d247590a857ea02d3b7f99cff12a596f0bde62d49'
            ,time: 1259804330
            ,bits: '1d00ffff'
    }
    0000000099e42d2610bde471f80267d6e3393f8b653a45c3cb409ae870d4cdb1 1655861781 <-SUCCESS

INCORRECT HASH:

    //
    //Target Block: 000000000000000000937fa8b710d4acbe9dea7eb8f252b880f37d4439ccce19
    //Correct nonce will be: 2005385666
    //

    const block = {
            version: 536870914
            ,previousblockhash: '0000000000000000011449a27a730a8d03011dcd1eaec65c1b7f1c04649cd150'
            ,merkleroot: 'b80ece38e5be35fb7bceff6fb6754d876945ec917081aeab51dc9a91a6f36ba1'
            ,time: 1501985653
            ,bits: '18014735'
    }
    d8f689fb65f1d798c4827ba81d8ec740f37dd2d5158948b3636d0015d59c6393 2005385666 <-FAIL

ERROR (seems to be related to nonce value):

  //
    //Target Block: 000000000000000002c098e283d0f186e3f0d591839c875572f8d0d02e08f35a
    //Correct nonce will be: 2382794207
    //

    const block = {
            version: 536870912
            ,previousblockhash: '000000000000000002c91a74eff899976e9738554f51c5673dbb4f4de3764b1f'
            ,merkleroot: '1ff8c9595b935f4566b0ef28a4304c06e98d4f3074c838a1b87453b23e9728da'
            ,time: 1485910721
            ,bits: '1802cc47'
    }
    TypeError: "value" argument is out of bounds
        at checkInt (buffer.js:1185:11)
        at Buffer.writeInt32LE (buffer.js:1375:5)
        at Miner.getHash (C:\Users\corbi\OneDrive\Documents\NodeJS\node_modules\bitcoin-miner\index.js:56:28)
        at miner (C:\Users\corbi\OneDrive\Documents\NodeJS\Miner\index.js:67:21)
        at C:\Users\corbi\OneDrive\Documents\NodeJS\Miner\index.js:50:11
        at C:\Users\corbi\OneDrive\Documents\NodeJS\node_modules\bitcoin\lib\index.js:37:8
        at C:\Users\corbi\OneDrive\Documents\NodeJS\node_modules\bitcoin\lib\jsonrpc.js:138:13
        at Array.forEach (<anonymous>)
        at IncomingMessage.<anonymous> (C:\Users\corbi\OneDrive\Documents\NodeJS\node_modules\bitcoin\lib\jsonrpc.js:127:15)
        at emitNone (events.js:111:20)
    buffer.js:405
        throw new TypeError('Arguments must be Buffers or Uint8Arrays');
        ^

    TypeError: Arguments must be Buffers or Uint8Arrays
        at Function.compare (buffer.js:405:11)
        at Miner.checkHash (C:\Users\corbi\OneDrive\Documents\NodeJS\node_modules\bitcoin-miner\index.js:93:17)
        at miner (C:\Users\corbi\OneDrive\Documents\NodeJS\Miner\index.js:68:16)
        at C:\Users\corbi\OneDrive\Documents\NodeJS\Miner\index.js:50:11
        at C:\Users\corbi\OneDrive\Documents\NodeJS\node_modules\bitcoin\lib\index.js:37:8
        at C:\Users\corbi\OneDrive\Documents\NodeJS\node_modules\bitcoin\lib\jsonrpc.js:138:13
        at Array.forEach (<anonymous>)
        at IncomingMessage.<anonymous> (C:\Users\corbi\OneDrive\Documents\NodeJS\node_modules\bitcoin\lib\jsonrpc.js:127:15)
        at emitNone (events.js:111:20)
        at IncomingMessage.emit (events.js:208:7)
unitof commented 6 years ago

Could you upload the code or snippet you're using to pull the random historic blocks? Going to take a crack at replicating.

DawBin commented 6 years ago

Certainly, here it is...

test.txt

JMoli commented 6 years ago

the timestamp in mined blocks is often wrong