bitpay / bitcore-p2p

Interface to the bitcoin P2P network for bitcore
MIT License
80 stars 276 forks source link

add support for passing an array of block hashes to getblocks #63

Closed maraoz closed 9 years ago

maraoz commented 9 years ago

This allows a user of GetBlocks to do:

      var starts = ['000000004ff664bfa7d217f6df64c1627089061429408e1da5ef903b8f3c77db',
        '00000000806df68baab17e49e567d4211177fef4849ffd8242d095c6a1169f45',
        '00000000693a6d6b068cab3e207d570764f6bad293e3e98920246eeda81c496a',
        '00000000c39ea29ad310c1f80409e24b3fbfd671c0b3599198b7cfdebf790bde',
        '00000000b0c5a240b2a61d2e75692224efd4cbecdf6eaf4cc2cf477ca7c270e7',
        '00000000e47349de5a0193abc5a2fe0be81cb1d1987e45ab85f3289d54cddc4d',
        '000000004fb61ae8e99040c4e1e3b4d333dbe867f97f63ab4238cba80f59204a',
        '0000000008884067dbe80128da09a16315bb208a69e9894287a3c9e0fb671f8b',
        '000000008d9b5010b996bbab558e88e9fe8a8b42751dfcaa79217f9a66642e65',
        '00000000244c1b0da1196b989d7557168c5e1b4253f253f2aa8bffd05c7f67b4',
        '0000000020b23d4bcb733afc7c28ad9eff58e1f8108a15bfd8477cbdcb9bf3a0',
        '000000007f20688b2b5c654489c4d3b69196eba0129a364f89b97ae8e4cb0e33',
        '000000009c0f206254fa93fb756b3809c653fcd0a1ebb0caacc5b72e88e29a53',
        '00000000ecffce6482a68bcd4f82511cbad2afd94d71469432501ca6a5f4811a',
        '00000000db64cbf7545cc66bc9a9eeb6f5ab53f843144be6f1932ac36fd72c04',
        '00000000b03379dd693686ed84a33b5086d9770f1f08c6951a9e3fc40b06e7cf',
        '00000000d3f81421d484c4d27f2c3c31a82f33850eb483926f8e0297070f5de3',
        '00000000128007ab3db907e5142718fe41ee551535e1f68e2931f15f80603f41',
        '000000006006272b61243f806117f2b4d4482e1d3e83ee799b00015e551b81d2'
      ];
      var message = messages.GetBlocks(starts);
coveralls commented 9 years ago

Coverage Status

Coverage remained the same at 100.0% when pulling c8fd0e91349bbd6c743de3c65915b9c044a6ef1a on maraoz:fix/getblocks into 8313c4df5bf1a071758b044b7ade3741e9008321 on bitpay:master.

braydonf commented 9 years ago

I think it's more simple to use an object argument since there are multiple params 'starts' and 'stop', rather than having multiple types that are handled in different ways.

var message = messages.GetBlocks({starts: starts});

Though since stop may often be omitted, optionally using an array may make sense. I think it would be better to handle this earlier in lib/messages/commands/getblocks.js:

function GetblocksMessage(arg, options) {
  Message.call(this, options);
  this.command = 'getblocks';
  this.version = options.protocolVersion;
  this.magicNumber = options.magicNumber;
  if (Array.isArray(arg)) {
    arg = { 
      starts: arg
    }
  } else if (!arg) {
    arg = {};
  }
  arg = utils.sanitizeStartStop(arg);
  this.starts = arg.starts;
  this.stop = arg.stop;
}

And we'll need to update the JSDocs for arg to indicate that an object or array can be used, and if it's an array it will be considered "starts".