You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1082 lines
32 KiB
1082 lines
32 KiB
11 years ago
|
#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,
|
||
|
ts: 1396288753,
|
||
|
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,
|
||
|
ts: 1396288753,
|
||
|
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,
|
||
|
ts: 1394719301,
|
||
|
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,
|
||
|
ts: 1396290442,
|
||
|
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,
|
||
|
ts: 1396375187,
|
||
|
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();
|
||
|
}
|
||
|
|