Skip to content

Latest commit

 

History

History
executable file
·
1104 lines (894 loc) · 32.5 KB

examples.md

File metadata and controls

executable file
·
1104 lines (894 loc) · 32.5 KB

#Address.js 'use strict';

var run = function() {
  // Replace '../bitcore' with 'bitcore' if you use this code elsewhere.
  var bitcore = require('../bitcore');
  var Address = bitcore.Address;

  var addrs = [
    '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa',
    '1A1zP1eP5QGefi2DMPTfTL5SLmv7Dixxxx',
    'A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa',
    '1600 Pennsylvania Ave NW',
  ].map(function(addr) {
    return new Address(addr);
  });

  addrs.forEach(function(addr) {
    var valid = addr.isValid();
    console.log(addr.data + ' is ' + (valid ? '' : 'not ') + 'valid');
  });

};

module.exports.run = run;
if (require.main === module) {
  run();
}

#Armory.js var Armory = require('../lib/Armory'); var Address = require('../lib/Address');

// Initial public key can be retrieved from paper backup

var PublicX = '9df5 23e7 18b9 1f59 a790 2d46 999f 9357 ccf8 7208 24d4 3076 4516 b809 f7ab ce4e';
var PublicY = '66ba 5d21 4682 0dae 401d 9506 8437 2516 79f9 0c56 4186 cc50 07df c6d0 6989 1ff4';
var pubkey = '04' + PublicX.split(' ').join('') + PublicY.split(' ').join('');

// Chain code can be generated by entering paper backup
// on brainwallet.org/#chains or by using Armory.fromSeed() below

var chaincode = '84ac14bc4b388b33da099a0b4ee3b507284d99e1476639e36e5ca5e6af86481e';

var armory = new Armory(chaincode, pubkey);

console.log('Deriving public keys for');
console.log('------------------------');
console.log('Chain code: %s', chaincode);
console.log('Public key: %s', pubkey);
console.log('');

for (var i = 0; i < 5; i++) {
  console.log(Address.fromPubKey(armory.pubkey).as('base58'));
  armory = armory.next();
}

// Derive first public key and chain code from seed
var seed = [
  'aagh hjfj sihk ietj giik wwai awtd uodh hnji',
  'soss uaku egod utai itos fijj ihgi jhau jtoo'
];

console.log('');
console.log('');
console.log('Deriving public keys for');
console.log('------------------------');
console.log('Seed: %s', seed.join(' '));
console.log('');

// skip first public key
var a = Armory.fromSeed(seed.join('\n')).next();

for (var i = 0; i < 5; i++) {
  console.log(Address.fromPubKey(a.pubkey).as('base58'));
  a = a.next();
}


var mpk = '045a09a3286873a72f164476bde9d1d8e5c2bc044e35aa47eb6e798e325a86417f7c35b61d9905053533e0b4f2a26eca0330aadf21c638969e45aaace50e4c0c8784ac14bc4b388b33da099a0b4ee3b507284d99e1476639e36e5ca5e6af86481e';

console.log('');
console.log('');
console.log('Deriving public keys for');
console.log('------------------------');
console.log('Master Public Key: %s', mpk);
console.log('');

// skip first public key
var b = Armory.fromMasterPublicKey(mpk).next();

for (var i = 0; i < 5; i++) {
  console.log(Address.fromPubKey(b.pubkey).as('base58'));
  b = b.next();
}

#ConnectionTor.js var Peer = require('../lib/Peer'); var Connection = require('../lib/Connection'); var dns = require('dns');

// get a peer from dns seed
dns.resolve('dnsseed.bluematt.me', function(err, seeds) {
  // use the first peer
  var peer = new Peer(seeds[0], 8333);

  //Custom peer:
  //var peer = new Peer('180.153.139.246', '8888');

  // create a connection without an existing socket
  // but specify a socks5 proxy to create a socket 
  // that's bound to that proxy in it's place
  var connection = new Connection(null, peer, {
    proxy: {
      host: '127.0.0.1',
      port: 9050
    }
  });

  connection.open();

  connection.on('connect', function(data) {
    console.log('connected through socks5!');
  });

  connection.on('error', function(err) {
    console.log('There was an error running this example.');
    console.log('Are you running Tor? Tor must running for this example to work.');
    console.log('If you still get an error, you may need to use a different proxy from here:');
    console.log('http://sockslist.net/');
    //console.log(err);
  });

});

#CreateAndSignTx-Multisig.js var run = function() { bitcore = typeof(bitcore) === 'undefined' ? require('../bitcore') : bitcore; var networks = require('../networks'); var WalletKey = bitcore.WalletKey; var Builder = bitcore.TransactionBuilder; var opts = { network: networks.testnet };

  console.log('## Network: ' + opts.network.name);

  var input = {};
  input.addr = "n2hoFVbPrYQf7RJwiRy1tkbuPPqyhAEfbp";
  input.priv = "cS62Ej4SobZnpFQYN1PEEBr2KWf5sgRYYnELtumcG6WVCfxno39V";

  // Complete with the corresponding UTXO you want to use
  var utxos = [{
    address: input.addr,
    txid: "39c71ebda371f75f4b854a720eaf9898b237facf3c2b101b58cd4383a44a6adc",
    vout: 1,
    scriptPubKey: "76a914e867aad8bd361f57c50adc37a0c018692b5b0c9a88ac",
    amount: 0.4296,
    confirmations: 2
  }];

  var privs = [
    "cP6JBHuQf7yqeqtdKRd22ibF3VehDv7G6BdzxSNABgrv3jFJUGoN",
    "cQfRwF7XLSM5xGUpF8PZvob2MZyULvZPA2j5cat2RKDJrja7FtCZ",
    "cUkYub4jtFVYymHh38yMMW36nJB4pXG5Pzd5QjResq79kAndkJcg",
    "cMyBgowsyrJRufoKWob73rMQB1PBqDdwFt8z4TJ6APN2HkmX1Ttm",
    "cN9yZCom6hAZpHtCp8ovE1zFa7RqDf3Cr4W6AwH2tp59Jjh9JcXu",
  ];

  var pubkeys = []
  privs.forEach(function(p) {
    var wk = new WalletKey(opts);
    wk.fromObj({
      priv: p
    });
    pubkeys.push(bitcore.buffertools.toHex(wk.privKey.public));
  });


  var outs = [{
    nreq: 3,
    pubkeys: pubkeys,
    amount: 0.05
  }];
  var tx = new Builder(opts)
    .setUnspent(utxos)
    .setOutputs(outs)
    .sign([input.priv])
    .build();
  var txHex = tx.serialize().toString('hex');
  console.log('1) SEND TO MULSISIG TX: ', txHex);
  console.log('[this example originally generated TXID: e4bc22d8c519d3cf848d710619f8480be56176a4a6548dfbe865ab3886b578b5 on testnet]\n\n\thttp://test.bitcore.io/tx/e4bc22d8c519d3cf848d710619f8480be56176a4a6548dfbe865ab3886b578b5\n\n');


  //save scriptPubKey
  var scriptPubKey = tx.outs[0].s.toString('hex');

  /* 
   *
   * REDDEEM TX
   */
  var utxos2 = [{
    address: input.addr,
    txid: "e4bc22d8c519d3cf848d710619f8480be56176a4a6548dfbe865ab3886b578b5",
    vout: 0,
    scriptPubKey: scriptPubKey,
    amount: 0.05,
    confirmations: 2
  }];

  outs = [{
    address: input.addr,
    amount: 0.04
  }];
  var b = new Builder(opts)
    .setUnspent(utxos2)
    .setOutputs(outs)
    .sign(privs);


  tx = b.build();


  var txHex = tx.serialize().toString('hex');
  console.log('2) REDEEM SCRIPT: ', txHex);
  console.log('=> Is signed status:', b.isFullySigned(), tx.countInputMissingSignatures(0));

  console.log('[this example originally generated TXID: 1eb388977b2de99562eb0fbcc661a100eaffed99c53bfcfebe5a087002039b83 on testnet]\n\n\thttp://test.bitcore.io/tx/1eb388977b2de99562eb0fbcc661a100eaffed99c53bfcfebe5a087002039b83');

};

// This is just for browser & mocha compatibility
if (typeof module !== 'undefined') {
  module.exports.run = run;
  if (require.main === module) {
    run();
  }
} else {
  run();
}

////

#CreateAndSignTx-PayToPubkeyHash.js var run = function() { bitcore = typeof(bitcore) === 'undefined' ? require('../bitcore') : bitcore;

  var priv = 'cTgGUrcro89yUtKeG6gHBAS14r3qp25KwTTxG9d4kEzcFxecuZDm';
  var amt = '0.005';
  var toAddress = 'myuAQcCc1REUgXGsCTiYhZvPPc3XxZ36G1';
  var changeAddressString = 'moDz3jEo9q7CxjBDjmb13sL4SKkgo2AACE';

  var utxos = [{
    address: "mqSjTad2TKbPcKQ3Jq4kgCkKatyN44UMgZ",
    txid: "2ac165fa7a3a2b535d106a0041c7568d03b531e58aeccdd3199d7289ab12cfc1",
    vout: 1,
    scriptPubKey: "76a9146ce4e1163eb18939b1440c42844d5f0261c0338288ac",
    amount: 0.01,
    confirmations: 2
  }];

  console.log('TX Data: BTC:' + amt + ' => ' + toAddress + ', change To:' + changeAddressString);
  console.log('Unspends Outputs:', utxos);


  var outs = [{
    address: toAddress,
    amount: amt
  }];
  var keys = [priv];
  var opts = {
    remainderOut: {
      address: changeAddressString
    }
  };
  var Builder = bitcore.TransactionBuilder;

  var tx = new Builder(opts)
    .setUnspent(utxos)
    .setOutputs(outs)
    .sign(keys)
    .build();

  /* create and signing can be done in multiple steps using:
   *
   *  var builder = new bitcore.TransactionBuilder(opts)
   *             .setUnspent(utxos)
   *             .setOutputs(outs);
   *
   *  builder.sign(key1);
   *  builder.sign(key2);
   *  ...
   *  if (builder.isFullySigned()){
   *   var tx = builder.build();
   *  }
   *
   *  The selected Unspent Outputs for the transaction can be retrieved with:
   *
   *    var selectedUnspent = build.getSelectedUnspent();
   */

  var txHex = tx.serialize().toString('hex');
  console.log('TX HEX IS: ', txHex);
};

// This is just for browser & mocha compatibility
if (typeof module !== 'undefined') {
  module.exports.run = run;
  if (require.main === module) {
    run();
  }
} else {
  run();
}

////

#CreateAndSignTx-PayToScriptHash.js var run = function() { bitcore = typeof(bitcore) === 'undefined' ? require('../bitcore') : bitcore; var networks = require('../networks'); var WalletKey = bitcore.WalletKey; var Script = bitcore.Script; var Builder = bitcore.TransactionBuilder; var opts = { network: networks.testnet };

  console.log('## Network: ' + opts.network.name);

  var input = {};
  input.addr = "n2hoFVbPrYQf7RJwiRy1tkbuPPqyhAEfbp";
  input.priv = "cS62Ej4SobZnpFQYN1PEEBr2KWf5sgRYYnELtumcG6WVCfxno39V";

  // Complete with the corresponding UTXO you want to use
  var utxos = [{
    address: "n2hoFVbPrYQf7RJwiRy1tkbuPPqyhAEfbp",
    txid: "e4bc22d8c519d3cf848d710619f8480be56176a4a6548dfbe865ab3886b578b5",
    vout: 1,
    scriptPubKey: "76a914e867aad8bd361f57c50adc37a0c018692b5b0c9a88ac",
    amount: 0.3795,
    confirmations: 7
  }];

  var privs = [
    "cMpKwGr5oxEacN95WFKNEq6tTcvi11regFwS3muHvGYVxMPJX8JA",
    "cVf32m9MR4vxcPwKNJuPepUe8XrHD2z63eCk76d6njRGyCkXpkSM",
    "cQ2sVRFX4jQYMLhWyzz6jTQ2xju51P36968ecXnPhRLKLH677eKR",
    "cSw7x9ERcmeWCU3yVBT6Nz7b9JiZ5yjUB7JMhBUv9UM7rSaDpwX9",
    "cRQBM8qM4ZXJGP1De4D5RtJm7Q6FNWQSMx7YExxzgn2ehjM3haxW",
  ];

  var pubkeys = []
  privs.forEach(function(p) {
    var wk = new WalletKey(opts);
    wk.fromObj({
      priv: p
    });
    pubkeys.push(bitcore.buffertools.toHex(wk.privKey.public));
  });

  // multisig p2sh
  var opts = {
    nreq: 3,
    pubkeys: pubkeys
  };

  // p2scriphash p2sh
  //var opts = [{address: an_address}];

  var info = Builder.infoForP2sh(opts, 'testnet');
  var p2shScript = info.scriptBufHex;
  var p2shAddress = info.address;


  var outs = [{
    address: p2shAddress,
    amount: 0.05
  }];
  var tx = new Builder(opts)
    .setUnspent(utxos)
    .setOutputs(outs)
    .sign([input.priv])
    .build();

  var txHex = tx.serialize().toString('hex');


  console.log('## p2sh address: ' + p2shAddress); //TODO
  console.log('\n1) SEND TO P2SH TX: ', txHex);
  console.log('[this example originally generated TXID: c2e50d1c8c581d8c4408378b751633f7eb86687fc5f0502be7b467173f275ae7 on testnet]\n\n\thttp://test.bitcore.io/tx/c2e50d1c8c581d8c4408378b751633f7eb86687fc5f0502be7b467173f275ae7\n\n');

  //save scriptPubKey
  var scriptPubKey = tx.outs[0].s.toString('hex');

  /* 
   *
   * REDDEEM TX
   */
  var utxos2 = [{
    address: p2shAddress,
    txid: "c2e50d1c8c581d8c4408378b751633f7eb86687fc5f0502be7b467173f275ae7",
    vout: 0,
    scriptPubKey: scriptPubKey,
    amount: 0.05,
    confirmations: 1
  }];

  outs = [{
    address: input.addr,
    amount: 0.04
  }];

  var hashMap = {};
  hashMap[p2shAddress] = p2shScript;

  var b = new Builder(opts)
    .setUnspent(utxos2)
    .setHashToScriptMap(hashMap)
    .setOutputs(outs)
    .sign(privs);

  tx = b.build();


  console.log('Builder:');
  console.log('\tSignatures:' + tx.countInputMissingSignatures(0));
  console.log('\t#isFullySigned:' + b.isFullySigned());

  console.log('TX:');
  console.log('\t #isComplete:' + tx.isComplete());

  var txHex = tx.serialize().toString('hex');
  console.log('2) REDEEM SCRIPT: ', txHex);
  console.log('[this example originally generated TXID: 8284aa3b6f9c71c35ecb1d61d05ae78c8ca1f36940eaa615b50584dfc3d95cb7 on testnet]\n\n\thttp://test.bitcore.io/tx/8284aa3b6f9c71c35ecb1d61d05ae78c8ca1f36940eaa615b50584dfc3d95cb7\n\n');

  /*
  // To send TX with RPC:
  var RpcClient = bitcore.RpcClient;
  var config = {
    protocol: 'http',
    user: 'user',
    pass: 'pass',
    host: '127.0.0.1',
    port: '18332',
  };
  var rpc = new RpcClient(config);
  rpc.sendRawTransaction(txHex, function(err, ret) {
    console.log('err', err); //TODO
    console.log('ret', ret); //TODO
    process.exit(-1);
  });
};
*/

};


// This is just for browser & mocha compatibility
if (typeof module !== 'undefined') {
  module.exports.run = run;
  if (require.main === module) {
    run();
  }
} else {
  run();
}

#CreateKey.js 'use strict';

var run = function() {
  // replace '../bitcore' with 'bitcore' if you use this code elsewhere.
  var bitcore = require('../bitcore');
  var networks = require('../networks');
  var WalletKey = bitcore.WalletKey;

  var opts = {
    network: networks.testnet
  };

  function print(wk) {

    console.log('\n## Network: ' + wk.network.name);
    console.log('\t * Hex Representation');
    console.log('\tPrivate: ' + bitcore.buffertools.toHex(wk.privKey.private));
    console.log('\tPublic : ' + bitcore.buffertools.toHex(wk.privKey.public));
    console.log('\tPublic Compressed : ' + (wk.privKey.compressed ? 'Yes' : 'No'));

    var wkObj = wk.storeObj();
    console.log('\n\t * WalletKey Store Object');
    console.log('\tPrivate: ' + wkObj.priv);
    console.log('\tPublic : ' + wkObj.pub);
    console.log('\tAddr   : ' + wkObj.addr);
  };

  //Generate a new one (compressed public key, compressed WIF flag)
  var wk = new WalletKey(opts);
  wk.generate();
  print(wk);

  //Generate from private Key WIF. Compressed status taken from WIF.
  var wk2 = new WalletKey(opts);
  wk2.fromObj({
    priv: 'cMpKwGr5oxEacN95WFKNEq6tTcvi11regFwS3muHvGYVxMPJX8JA'
  });
  print(wk2);


};

module.exports.run = run;
if (require.main === module) {
  run();
}

#CreateScript.js 'use strict';

var run = function() {
  // replace '../bitcore' with 'bitcore' if you use this code elsewhere.
  var bitcore = require('../bitcore');
  var networks = require('../networks');
  var Script = bitcore.Script;
  var WalletKey = bitcore.WalletKey;
  var buffertools = bitcore.buffertools;
  var Address = bitcore.Address;
  var util = bitcore.util;
  var opts = {
    network: networks.testnet
  };

  var p = console.log;

  var wk = new WalletKey(opts);
  wk.generate();
  var wkObj = wk.storeObj();

  var s = Script.createPubKeyOut(wk.privKey.public);
  p('\nScript PubKey:');
  p('\tHex     : ' + buffertools.toHex(s.buffer));
  p('\tHuman   : ' + s.toHumanReadable());
  p('\tKey      -------------------------------');
  console.log('\tPrivate: ' + wkObj.priv);
  console.log('\tPublic : ' + wkObj.pub);
  console.log('\tAddr   : ' + wkObj.addr);

  s = Script.createPubKeyHashOut(wk.privKey.public);
  p('\nScript PubKeyHash:');
  p('\tHex     : ' + buffertools.toHex(s.buffer));
  p('\tHuman   : ' + s.toHumanReadable());
  p('\tKey      -------------------------------');
  console.log('\tPrivate: ' + wkObj.priv);
  console.log('\tPublic : ' + wkObj.pub);
  console.log('\tAddr   : ' + wkObj.addr);

  var wks = [];
  var pubs = [];
  for (var i = 0; i < 5; i++) {
    wks[i] = new WalletKey(opts);
    wks[i].generate();
    pubs.push(wks[i].privKey.public);
  }

  s = Script.createMultisig(3, pubs);
  p('\nScript MultiSig (3 out of 5 required signatures):');
  p('\tHex     : ' + buffertools.toHex(s.buffer));
  p('\tHuman   : ' + s.toHumanReadable());

  for (i = 0; i < 5; i++) {
    wkObj = wks[i].storeObj();
    p('\tKey [' + i + '] -------------------------------');
    console.log('\tPrivate: ' + wkObj.priv);
    console.log('\tPublic : ' + wkObj.pub);
    console.log('\tAddr   : ' + wkObj.addr);
  }

  var hash = util.sha256ripe160(s.buffer);

  s = Script.createP2SH(hash);
  p('\nScript P2SH:');
  p('\tHex     : ' + buffertools.toHex(s.buffer));
  p('\tHuman   : ' + s.toHumanReadable());
  p('\tScript Hash: ' + buffertools.toHex(hash));
  var a = new Address(networks.livenet.P2SHVersion, hash);
  p('\tp2sh Addr: ' + a.toString());

};

module.exports.run = run;
if (require.main === module) {
  run();
}

#ECIES.js var run = function() { bitcore = typeof(bitcore) === 'undefined' ? require('../bitcore') : bitcore;

  console.log('ECIES: Elliptic Curve Integrated Encryption Scheme');
  console.log('A way of encrypting with a public key and decrypting with a private key.');

  var key = bitcore.Key.generateSync();
  console.log('Private key: ' + key.private.toString('hex'));
  console.log('Public key: ' + key.public.toString('hex'));

  var message = new Buffer('This is a message to be encrypted');
  console.log('Message: "' + message.toString() + '"');

  var encrypted = bitcore.ECIES.encrypt(key.public, message);
  console.log('Encrypted (with public key): ' + encrypted.toString('hex'));

  var decrypted = bitcore.ECIES.decrypt(key.private, encrypted);
  console.log('Decrypted (with private key): "' + decrypted.toString() + '"');
};


// This is just for browser & mocha compatibility
if (typeof module !== 'undefined') {
  module.exports.run = run;
  if (require.main === module) {
    run();
  }
} else {
  run();
}

#ElectrumMPK.js var Electrum = require('../lib/Electrum'); var Address = require('../lib/Address');

var mpk = '92eea4d2f5263651db9e3222caded1fd4c89772f79a7c03fb6afc00e9d2c9d2ed9b86c2c95fc1171e49163079dacb7f048b3c509a27a490e1df9e7128362d468';

mpk = new Electrum(mpk);

var key0 = mpk.generatePubKey(0);
var addr0 = Address.fromPubKey(key0);

console.log(addr0.as('base58'));

#HierarchicalKey.js var run = function() { bitcore = typeof(bitcore) === 'undefined' ? require('../bitcore') : bitcore; var HierarchicalKey = bitcore.HierarchicalKey; var Address = bitcore.Address; var networks = bitcore.networks; var coinUtil = bitcore.util; var crypto = require('crypto');

  console.log('HierarchicalKey: Hierarchical Deterministic Wallets (BIP32)');
  console.log('https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\n');
  console.log('1) Make new hkey from randomly generated new seed');

  var randomBytes = crypto.randomBytes(32);
  var hkey = HierarchicalKey.seed(randomBytes);
  console.log('master extended private key: ' + hkey.extendedPrivateKeyString());
  console.log('master extended public key: ' + hkey.extendedPublicKeyString());
  console.log('m/0/3/5 extended private key: ' + hkey.derive('m/0/3/5').extendedPrivateKeyString());
  console.log('m/0/3/5 extended public key: ' + hkey.derive('m/0/3/5').extendedPublicKeyString());
  console.log();

  console.log('2) Make new hkey from known seed');
  var knownBytes = coinUtil.sha256('do not use this password as a brain wallet');
  var hkey = HierarchicalKey.seed(knownBytes);
  console.log('master extended private key: ' + hkey.extendedPrivateKeyString());
  console.log('master extended public key: ' + hkey.extendedPublicKeyString());
  console.log('m/0/3/5 extended private key: ' + hkey.derive('m/0/3/5').extendedPrivateKeyString());
  console.log('m/0/3/5 extended public key: ' + hkey.derive('m/0/3/5').extendedPublicKeyString());
  console.log();

  console.log('3) Make new hkey from known master private key');
  var knownMasterPrivateKey = 'xprv9s21ZrQH143K2LvayFZWVVTomiDKheKWvnupDB8fmjKwxkKG47uvzmFa3vCXoy9fxPJhRYsU19apVfexvMeLpJQuF2XtX1zRF3eao9GqqaQ';
  var hkey = new HierarchicalKey(knownMasterPrivateKey);
  console.log('master extended private key: ' + hkey.extendedPrivateKeyString());
  console.log('master extended public key: ' + hkey.extendedPublicKeyString());
  console.log('m/0/3/5 extended private key: ' + hkey.derive('m/0/3/5').extendedPrivateKeyString());
  console.log('m/0/3/5 extended public key: ' + hkey.derive('m/0/3/5').extendedPublicKeyString());
  console.log();

  console.log('4) Make new hkey from known master public key');
  var knownMasterPublicKey = 'xpub661MyMwAqRbcGpiFufipqsKKBG1NHNwfJKishAEFNqJ6ryLcKeKyFNEZces7gMWd4XGg4uUhXy8DS64o1oPGUECVHeLq957Txjwagxt475H';
  var hkey = new HierarchicalKey(knownMasterPublicKey);
  console.log('master extended private key: cannot derive');
  console.log('master extended public key: ' + hkey.extendedPublicKeyString());
  console.log('m/0/3/5 extended private key: cannot derive');
  console.log('m/0/3/5 extended public key: ' + hkey.derive('m/0/3/5').extendedPublicKeyString());
  console.log();

  console.log('5) Make new hkey from known derived public key');
  var knownPublicKey = 'xpub6CZei1p2zk68UwkcBDqzRonLHJWAiPZZ58sMgHJAn9fmpmnPayVEAvAs3XvTSUMZ1J8dNaxnv4wnt7YpRKr6BsqeWbW8msqeuuhiSzsQEC3';
  var hkey = new HierarchicalKey(knownPublicKey);
  console.log('master extended private key: cannot derive');
  console.log('master extended public key: ' + hkey.extendedPublicKeyString());
  console.log('m/0/3/5 extended private key: cannot derive');
  console.log('m/0/3/5 extended public key: ' + hkey.derive('m/0/3/5').extendedPublicKeyString());
  console.log();

  console.log('6) Make a bunch of new addresses from known public key');
  var knownPublicKey = 'xpub6CZei1p2zk68UwkcBDqzRonLHJWAiPZZ58sMgHJAn9fmpmnPayVEAvAs3XvTSUMZ1J8dNaxnv4wnt7YpRKr6BsqeWbW8msqeuuhiSzsQEC3';
  var hkey = new HierarchicalKey(knownPublicKey);
  console.log('m/0 address: ' + Address.fromPubKey(hkey.derive('m/0').eckey.public).toString());
  //console.log('m/1 extended public key: ' + hkey.derive('m/1').extendedPublicKeyString());
  console.log('m/1 address: ' + Address.fromPubKey(hkey.derive('m/1').eckey.public).toString());
  //console.log('m/2 extended public key: ' + hkey.derive('m/2').extendedPublicKeyString());
  console.log('m/2 address: ' + Address.fromPubKey(hkey.derive('m/2').eckey.public).toString());
  //console.log('m/3 extended public key: ' + hkey.derive('m/3').extendedPublicKeyString());
  console.log('m/3 address: ' + Address.fromPubKey(hkey.derive('m/3').eckey.public).toString());
  console.log('...');
  //console.log('m/100 extended public key: ' + hkey.derive('m/100').extendedPublicKeyString());
  console.log('m/100 address: ' + Address.fromPubKey(hkey.derive('m/100').eckey.public).toString());
  console.log();

};


// This is just for browser & mocha compatibility
if (typeof module !== 'undefined') {
  module.exports.run = run;
  if (require.main === module) {
    run();
  }
} else {
  run();
}

#PayToScriptHashAddress.js var bitcore = require('../bitcore'); var Address = bitcore.Address; var bitcoreUtil = bitcore.util; var Script = bitcore.Script; var network = bitcore.networks.livenet;

var script = ''; // write down your script here
var s = Script.fromHumanReadable(script);
var hash = bitcoreUtil.sha256ripe160(s.getBuffer());
var version = network.addressScript;

var addr = new Address(version, hash);
var addrStr = addr.as('base58');

// This outputs the "address" of thescript
console.log(addrStr);

#PeerDiscovery.js var PeerManager = require('../lib/PeerManager'); var peerman = new PeerManager();

peerman.discover({
  limit: 12
}).start();

#PeerManager.js 'use strict';

var run = function() {
  // Replace '../bitcore' with 'bitcore' if you use this code elsewhere.
  var bitcore = require('../bitcore');
  var Peer = bitcore.Peer;
  var PeerManager = bitcore.PeerManager;

  var handleBlock = function(info) {
    console.log('** Block Received **');
    console.log(info.message);
  };

  var handleTx = function(info) {
    var tx = info.message.tx.getStandardizedObject();

    console.log('** TX Received **');
    console.log(tx);
  };

  var handleInv = function(info) {
    console.log('** Inv **');
    console.log(info.message);

    var invs = info.message.invs;
    info.conn.sendGetData(invs);
  };

  var peerman = new PeerManager({
    network: 'testnet'
  });

  peerman.addPeer(new Peer('127.0.0.1', 18333));

  peerman.on('connection', function(conn) {
    conn.on('inv', handleInv);
    conn.on('block', handleBlock);
    conn.on('tx', handleTx);
  });

  peerman.start();
};

module.exports.run = run;
if (require.main === module) {
  run();
}

#Rpc.js 'use strict';

var run = function() {
  // Replace '../bitcore' with 'bitcore' if you use this code elsewhere.
  var bitcore = require('../bitcore');
  var RpcClient = bitcore.RpcClient;
  var hash = '0000000000b6288775bbd326bedf324ca8717a15191da58391535408205aada4';

  var config = {
    protocol: 'http',
    user: 'user',
    pass: 'pass',
    host: '127.0.0.1',
    port: '18332',
  };

  var rpc = new RpcClient(config);

  rpc.getBlock(hash, function(err, ret) {
    if (err) {
      console.error('An error occured fetching block', hash);
      console.error(err);
      return;
    }
    console.log(ret);
  });
};

module.exports.run = run;
if (require.main === module) {
  run();
}

#Script.js 'use strict';

var run = function() {
  // Replace '../bitcore' with 'bitcore' if you use this code elsewhere.
  var bitcore = require('../bitcore');
  var Address = bitcore.Address;
  var coinUtil = bitcore.util;
  var Script = bitcore.Script;
  var network = bitcore.networks.testnet;

  var getAddrStr = function(s) {
    var addrStrs = [];
    var type = s.classify();
    var addr;

    switch (type) {
      case Script.TX_PUBKEY:
        var chunk = s.captureOne();
        addr = new Address(network.addressVersion, coinUtil.sha256ripe160(chunk));
        addrStrs.push(addr.toString());
        break;
      case Script.TX_PUBKEYHASH:
        addr = new Address(network.addressVersion, s.captureOne());
        addrStrs.push(addr.toString());
        break;
      case Script.TX_SCRIPTHASH:
        addr = new Address(network.P2SHVersion, s.captureOne());
        addrStrs.push(addr.toString());
        break;
      case Script.TX_MULTISIG:
        var chunks = s.capture();
        chunks.forEach(function(chunk) {
          var a = new Address(network.addressVersion, coinUtil.sha256ripe160(chunk));
          addrStrs.push(a.toString());
        });
        break;
      case Script.TX_UNKNOWN:
        console.log('tx type unkown');
        break;
    }
    return addrStrs;
  };

  var script = 'DUP HASH160 0x14 0x3744841e13b90b4aca16fe793a7f88da3a23cc71 EQUALVERIFY CHECKSIG';
  var s = Script.fromHumanReadable(script);
  console.log(getAddrStr(s)[0]); // mkZBYBiq6DNoQEKakpMJegyDbw2YiNQnHT
};

module.exports.run = run;
if (require.main === module) {
  run();
}

#SendTx.js 'use strict';

var run = function() {
  // Replace '../bitcore' with 'bitcore' if you use this code elsewhere.
  var bitcore = require('../bitcore');
  var Peer = bitcore.Peer;

  var TransactionBuilder = bitcore.TransactionBuilder;
  var PeerManager = bitcore.PeerManager;

  // Unspent transactions can be found via the insight.bitcore.io or blockchain.info APIs
  var unspent = [{
      'txid': '707108b5ba4f78dc951df4647a03365bf36432ea57fb641676045c5044daaea7',
      'vout': 0,
      'address': 'n3QDC7DzsMmN4mcyp3k7XGPX7zFXXHG387',
      'scriptPubKey': '76a914f00c4a92ee2314ab08ac0283dc8d07d9bf2be32388ac',
      'amount': 0.12345600,
      'confirmations': 43537
    }, {
      'txid': '87a158d32833cb555aea27b6a21af569ccaeb8f9b19691e05f1e6c2b3440bdb3',
      'vout': 1,
      'address': 'mxdrp9s4mVxS9X4RBYiLe99v59V81XA5C3',
      'scriptPubKey': '76a914bbc87986da6b17c7876db4efacf59a95e14f6cf588ac',
      'amount': 0.05749800,
      'confirmations': 43536
    }

  ];

  // Private keys in WIF format (see TransactionBuilder.js for other options)
  var keys = [
    'cQA75LXhV5JkMT8wkkqjR87SnHK4doh3c21p7PAd5tp8tc1tRBAY',
    'cRz85dz9AiDieRpEwoucfXXQa1jdHHghcv6YnnVVGZ3MQyR1X4u2',
    'cSq7yo4fvsbMyWVN945VUGUWMaSazZPWqBVJZyoGsHmNq6W4HVBV',
    'cPa87VgwZfowGZYaEenoQeJgRfKW6PhZ1R65EHTkN1K19cSvc92G',
    'cPQ9DSbBRLva9av5nqeF5AGrh3dsdW8p2E5jS4P8bDWZAoQTeeKB'
  ];

  var peerman = new PeerManager({
    network: 'testnet'
  });
  peerman.addPeer(new Peer('127.0.0.1', 18333));

  peerman.on('connect', function() {
    var conn = peerman.getActiveConnection();
    if (conn) {
      // define transaction output
      var outs = [{
        address: 'mhNCT9TwZAGF1tLPpZdqfkTmtBkY282YDW',
        amount: 0.1337
      }];
      // set change address
      var opts = {
        remainderOut: {
          address: 'n4g2TFaQo8UgedwpkYdcQFF6xE2Ei9Czvy'
        }
      };
      var tx = new TransactionBuilder(opts)
        .setUnspent(unspent)
        .setOutputs(outs)
        .sign(keys)
        .build();

      /* Create and signing can be done in multiple steps:
       *
       *  var builder = new bitcore.TransactionBuilder(opts)
       *                .setUnspent(utxos)
       *                .setOutputs(outs);
       *
       *  // Sign with the first key
       *  builder.sign(key1);
       *  var tx = builder.build(); // Partially signed transaction
       *
       *  // Sign with the second key
       *  builder.sign(key2);
       *  if (builder.isFullySigned()){
       *   var tx = builder.build();
       *  }
       *
       *  var selectedUnspent = build.getSelectedUnspent(); // Retrieve selected unspent outputs from the transaction
       */

      var txid = tx.getHash().toString('hex');
      console.log('Created transaction with txid ' + txid);
      var raw_tx = tx.serialize().toString('hex');
      console.log('Transaction raw hex dump:');
      console.log('-------------------------------------');
      console.log(raw_tx);
      console.log('-------------------------------------');
      // finally, send transaction to the bitcoin network
      conn.sendTx(tx);

      // for now, the network won't respond in any case
      // (transaction accepted, transaction rejected)
      // in the future, we may listen to 'reject' message
      // see https://gist.github.com/gavinandresen/7079034
    }
  });

  peerman.start();

};

module.exports.run = run;
if (require.main === module) {
  run();
}

#SimpleP2Pmonitor.js /** * This is a simple script that will display network messages. * It users the Peer / Connection classes directly instead of * relying on PeerManager. */

// replace by require('bitcore') if you use somewhere else
var bitcore = require('../');

//bitcore.config.logger = 'debug';

var Peer = bitcore.Peer,
  Connection = bitcore.Connection;

var peer = new Peer('127.0.0.1', 8333);

var socket = peer.createConnection();

var con = new Connection(socket, peer);

con.on('error', function(msg) {
  var peer = msg.peer,
    err = msg.err;
  console.error('Error connecting to peer', peer.host + ':' + peer.port, '(' + err.message + ')');
});

con.on('disconnect', function(msg) {
  console.log('disconnect: ', msg);
});

con.on('connect', function(msg) {
  console.log('Connected to %s', msg.peer.host + ':' + msg.peer.port);
});

/* Listen P2P messages */

// Make a log function available to all listeners
// The log function is just like console.log except it prefixes 
// messages with [host:port]
function listen(event_name, fn) {
  con.on(event_name, function(event) {
    fn(event, function() {
      var args = Array.prototype.slice.call(arguments);
      var str = args.shift();
      str = '[%s:%s] ' + str;
      args = [str, event.peer.host, event.peer.port].concat(args);
      console.log.apply(console, args);
    });
  });
}

listen('getaddr', function(event, log) {
  log('Received message getaddr');
  log(event);
});

listen('verack', function(event, log) {
  log('Received message verack');
});

listen('version', function(event, log) {
  log('Received message version (%s)', event.message.version);
});

listen('addr', function(event, log) {
  log('Received message addr (%s addresses)', event.message.addrs.length);
});

listen('inv', function(event, log) {
  log('Received message inv (%s invs)', event.message.count);
  console.log(event.message.invs);
});

#VanityAddress.js 'use strict';

var run = function() {
  // Replace '../bitcore' with 'bitcore' if you use this code elsewhere.
  var bitcore = require('../bitcore');
  var Key = bitcore.Key;
  var Address = bitcore.Address;

  // config your regular expression
  var re = /[0-9]{6}$/; // ends in 6 digits

  var a, k, m;
  while (true) {
    k = Key.generateSync();
    a = Address.fromKey(k);
    m = a.toString().match(re);
    if (m) break;
  }
  console.log('Address: ' + a.toString());
  console.log('Private Key: ' + k.private.toString('hex'));

};

module.exports.run = run;
if (require.main === module) {
  run();
}