modify README and commit examples.md
...to reflect usage of gulp, which automatically builds the examples.md file from the examples in the examples/* directory.
This commit is contained in:
parent
91dd9fcb1e
commit
aaadbc81a1
|
@ -34,7 +34,14 @@ var PeerManager = bitcore.PeerManager;
|
||||||
#Examples
|
#Examples
|
||||||
|
|
||||||
Examples are provided [here](examples.md)
|
Examples are provided [here](examples.md)
|
||||||
Or in form of .js files at [/examples](/examples) folder.
|
Build the examples by installing and running gulp:
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install -g gulp
|
||||||
|
gulp
|
||||||
|
```
|
||||||
|
|
||||||
|
Javascript files available at [/examples](/examples) folder.
|
||||||
|
|
||||||
|
|
||||||
#Security
|
#Security
|
||||||
|
|
297
examples.md
297
examples.md
|
@ -95,11 +95,10 @@
|
||||||
b = b.next();
|
b = b.next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ConnectionTor.js
|
#ConnectionTor.js
|
||||||
var Peer = require('../lib/Peer');
|
var Peer = require('../lib/Peer');
|
||||||
var Connection = require('../lib/Connection');
|
var Connection = require('../lib/Connection');
|
||||||
var dns = require('dns');
|
var dns = require('dns');
|
||||||
|
|
||||||
// get a peer from dns seed
|
// get a peer from dns seed
|
||||||
dns.resolve('dnsseed.bluematt.me', function(err, seeds) {
|
dns.resolve('dnsseed.bluematt.me', function(err, seeds) {
|
||||||
|
@ -108,12 +107,15 @@
|
||||||
|
|
||||||
//Custom peer:
|
//Custom peer:
|
||||||
//var peer = new Peer('180.153.139.246', '8888');
|
//var peer = new Peer('180.153.139.246', '8888');
|
||||||
|
|
||||||
// create a connection without an existing socket
|
// create a connection without an existing socket
|
||||||
// but specify a socks5 proxy to create a socket
|
// but specify a socks5 proxy to create a socket
|
||||||
// that's bound to that proxy in it's place
|
// that's bound to that proxy in it's place
|
||||||
var connection = new Connection(null, peer, {
|
var connection = new Connection(null, peer, {
|
||||||
proxy: { host: '127.0.0.1', port: 9050 }
|
proxy: {
|
||||||
|
host: '127.0.0.1',
|
||||||
|
port: 9050
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
connection.open();
|
connection.open();
|
||||||
|
@ -133,13 +135,14 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
#CreateAndSignTx-Multisig.js
|
#CreateAndSignTx-Multisig.js
|
||||||
|
|
||||||
var run = function() {
|
var run = function() {
|
||||||
bitcore = typeof (bitcore) === 'undefined' ? require('../bitcore') : bitcore;
|
bitcore = typeof(bitcore) === 'undefined' ? require('../bitcore') : bitcore;
|
||||||
var networks = require('../networks');
|
var networks = require('../networks');
|
||||||
var WalletKey = bitcore.WalletKey;
|
var WalletKey = bitcore.WalletKey;
|
||||||
var Builder = bitcore.TransactionBuilder;
|
var Builder = bitcore.TransactionBuilder;
|
||||||
var opts = {network: networks.testnet};
|
var opts = {
|
||||||
|
network: networks.testnet
|
||||||
|
};
|
||||||
|
|
||||||
console.log('## Network: ' + opts.network.name);
|
console.log('## Network: ' + opts.network.name);
|
||||||
|
|
||||||
|
@ -148,8 +151,7 @@
|
||||||
input.priv = "cS62Ej4SobZnpFQYN1PEEBr2KWf5sgRYYnELtumcG6WVCfxno39V";
|
input.priv = "cS62Ej4SobZnpFQYN1PEEBr2KWf5sgRYYnELtumcG6WVCfxno39V";
|
||||||
|
|
||||||
// Complete with the corresponding UTXO you want to use
|
// Complete with the corresponding UTXO you want to use
|
||||||
var utxos = [
|
var utxos = [{
|
||||||
{
|
|
||||||
address: input.addr,
|
address: input.addr,
|
||||||
txid: "39c71ebda371f75f4b854a720eaf9898b237facf3c2b101b58cd4383a44a6adc",
|
txid: "39c71ebda371f75f4b854a720eaf9898b237facf3c2b101b58cd4383a44a6adc",
|
||||||
vout: 1,
|
vout: 1,
|
||||||
|
@ -157,10 +159,9 @@
|
||||||
scriptPubKey: "76a914e867aad8bd361f57c50adc37a0c018692b5b0c9a88ac",
|
scriptPubKey: "76a914e867aad8bd361f57c50adc37a0c018692b5b0c9a88ac",
|
||||||
amount: 0.4296,
|
amount: 0.4296,
|
||||||
confirmations: 2
|
confirmations: 2
|
||||||
}
|
}];
|
||||||
];
|
|
||||||
|
|
||||||
var privs = [
|
var privs = [
|
||||||
"cP6JBHuQf7yqeqtdKRd22ibF3VehDv7G6BdzxSNABgrv3jFJUGoN",
|
"cP6JBHuQf7yqeqtdKRd22ibF3VehDv7G6BdzxSNABgrv3jFJUGoN",
|
||||||
"cQfRwF7XLSM5xGUpF8PZvob2MZyULvZPA2j5cat2RKDJrja7FtCZ",
|
"cQfRwF7XLSM5xGUpF8PZvob2MZyULvZPA2j5cat2RKDJrja7FtCZ",
|
||||||
"cUkYub4jtFVYymHh38yMMW36nJB4pXG5Pzd5QjResq79kAndkJcg",
|
"cUkYub4jtFVYymHh38yMMW36nJB4pXG5Pzd5QjResq79kAndkJcg",
|
||||||
|
@ -171,18 +172,24 @@
|
||||||
var pubkeys = []
|
var pubkeys = []
|
||||||
privs.forEach(function(p) {
|
privs.forEach(function(p) {
|
||||||
var wk = new WalletKey(opts);
|
var wk = new WalletKey(opts);
|
||||||
wk.fromObj({priv: p});
|
wk.fromObj({
|
||||||
|
priv: p
|
||||||
|
});
|
||||||
pubkeys.push(bitcore.buffertools.toHex(wk.privKey.public));
|
pubkeys.push(bitcore.buffertools.toHex(wk.privKey.public));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
var outs = [{nreq:3, pubkeys:pubkeys, amount:0.05}];
|
var outs = [{
|
||||||
|
nreq: 3,
|
||||||
|
pubkeys: pubkeys,
|
||||||
|
amount: 0.05
|
||||||
|
}];
|
||||||
var tx = new Builder(opts)
|
var tx = new Builder(opts)
|
||||||
.setUnspent(utxos)
|
.setUnspent(utxos)
|
||||||
.setOutputs(outs)
|
.setOutputs(outs)
|
||||||
.sign([input.priv])
|
.sign([input.priv])
|
||||||
.build();
|
.build();
|
||||||
var txHex = tx.serialize().toString('hex');
|
var txHex = tx.serialize().toString('hex');
|
||||||
console.log('1) SEND TO MULSISIG TX: ', txHex);
|
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');
|
console.log('[this example originally generated TXID: e4bc22d8c519d3cf848d710619f8480be56176a4a6548dfbe865ab3886b578b5 on testnet]\n\n\thttp://test.bitcore.io/tx/e4bc22d8c519d3cf848d710619f8480be56176a4a6548dfbe865ab3886b578b5\n\n');
|
||||||
|
|
||||||
|
@ -194,31 +201,32 @@
|
||||||
*
|
*
|
||||||
* REDDEEM TX
|
* REDDEEM TX
|
||||||
*/
|
*/
|
||||||
var utxos2 = [
|
var utxos2 = [{
|
||||||
{
|
|
||||||
address: input.addr,
|
address: input.addr,
|
||||||
txid: "e4bc22d8c519d3cf848d710619f8480be56176a4a6548dfbe865ab3886b578b5",
|
txid: "e4bc22d8c519d3cf848d710619f8480be56176a4a6548dfbe865ab3886b578b5",
|
||||||
vout: 0,
|
vout: 0,
|
||||||
ts: 1396288753,
|
ts: 1396288753,
|
||||||
scriptPubKey: scriptPubKey,
|
scriptPubKey: scriptPubKey,
|
||||||
amount: 0.05,
|
amount: 0.05,
|
||||||
confirmations: 2
|
confirmations: 2
|
||||||
}
|
}];
|
||||||
];
|
|
||||||
|
|
||||||
outs = [{address:input.addr, amount:0.04}];
|
outs = [{
|
||||||
|
address: input.addr,
|
||||||
|
amount: 0.04
|
||||||
|
}];
|
||||||
var b = new Builder(opts)
|
var b = new Builder(opts)
|
||||||
.setUnspent(utxos2)
|
.setUnspent(utxos2)
|
||||||
.setOutputs(outs)
|
.setOutputs(outs)
|
||||||
.sign(privs);
|
.sign(privs);
|
||||||
|
|
||||||
|
|
||||||
tx= b.build();
|
tx = b.build();
|
||||||
|
|
||||||
|
|
||||||
var txHex = tx.serialize().toString('hex');
|
var txHex = tx.serialize().toString('hex');
|
||||||
console.log('2) REDEEM SCRIPT: ', txHex);
|
console.log('2) REDEEM SCRIPT: ', txHex);
|
||||||
console.log('=> Is signed status:', b.isFullySigned(), tx.countInputMissingSignatures(0) );
|
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');
|
console.log('[this example originally generated TXID: 1eb388977b2de99562eb0fbcc661a100eaffed99c53bfcfebe5a087002039b83 on testnet]\n\n\thttp://test.bitcore.io/tx/1eb388977b2de99562eb0fbcc661a100eaffed99c53bfcfebe5a087002039b83');
|
||||||
|
|
||||||
|
@ -236,16 +244,12 @@
|
||||||
|
|
||||||
////
|
////
|
||||||
|
|
||||||
|
|
||||||
#CreateAndSignTx-PayToPubkeyHash.js
|
#CreateAndSignTx-PayToPubkeyHash.js
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var run = function() {
|
var run = function() {
|
||||||
bitcore = typeof (bitcore) === 'undefined' ? require('../bitcore') : bitcore;
|
bitcore = typeof(bitcore) === 'undefined' ? require('../bitcore') : bitcore;
|
||||||
|
|
||||||
var priv = 'cTgGUrcro89yUtKeG6gHBAS14r3qp25KwTTxG9d4kEzcFxecuZDm';
|
var priv = 'cTgGUrcro89yUtKeG6gHBAS14r3qp25KwTTxG9d4kEzcFxecuZDm';
|
||||||
var amt = '0.005';
|
var amt = '0.005';
|
||||||
var toAddress = 'myuAQcCc1REUgXGsCTiYhZvPPc3XxZ36G1';
|
var toAddress = 'myuAQcCc1REUgXGsCTiYhZvPPc3XxZ36G1';
|
||||||
var changeAddressString = 'moDz3jEo9q7CxjBDjmb13sL4SKkgo2AACE';
|
var changeAddressString = 'moDz3jEo9q7CxjBDjmb13sL4SKkgo2AACE';
|
||||||
|
|
||||||
|
@ -259,13 +263,20 @@
|
||||||
confirmations: 2
|
confirmations: 2
|
||||||
}];
|
}];
|
||||||
|
|
||||||
console.log('TX Data: BTC:' + amt + ' => '+ toAddress + ', change To:' + changeAddressString ) ;
|
console.log('TX Data: BTC:' + amt + ' => ' + toAddress + ', change To:' + changeAddressString);
|
||||||
console.log('Unspends Outputs:', utxos);
|
console.log('Unspends Outputs:', utxos);
|
||||||
|
|
||||||
|
|
||||||
var outs = [{address:toAddress, amount:amt}];
|
var outs = [{
|
||||||
|
address: toAddress,
|
||||||
|
amount: amt
|
||||||
|
}];
|
||||||
var keys = [priv];
|
var keys = [priv];
|
||||||
var opts = {remainderOut: {address: changeAddressString}};
|
var opts = {
|
||||||
|
remainderOut: {
|
||||||
|
address: changeAddressString
|
||||||
|
}
|
||||||
|
};
|
||||||
var Builder = bitcore.TransactionBuilder;
|
var Builder = bitcore.TransactionBuilder;
|
||||||
|
|
||||||
var tx = new Builder(opts)
|
var tx = new Builder(opts)
|
||||||
|
@ -274,25 +285,25 @@
|
||||||
.sign(keys)
|
.sign(keys)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
/* create and signing can be done in multiple steps using:
|
/* create and signing can be done in multiple steps using:
|
||||||
*
|
*
|
||||||
* var builder = new bitcore.TransactionBuilder(opts)
|
* var builder = new bitcore.TransactionBuilder(opts)
|
||||||
* .setUnspent(utxos)
|
* .setUnspent(utxos)
|
||||||
* .setOutputs(outs);
|
* .setOutputs(outs);
|
||||||
*
|
*
|
||||||
* builder.sign(key1);
|
* builder.sign(key1);
|
||||||
* builder.sign(key2);
|
* builder.sign(key2);
|
||||||
* ...
|
* ...
|
||||||
* if (builder.isFullySigned()){
|
* if (builder.isFullySigned()){
|
||||||
* var tx = builder.build();
|
* var tx = builder.build();
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* The selected Unspent Outputs for the transaction can be retrieved with:
|
* The selected Unspent Outputs for the transaction can be retrieved with:
|
||||||
*
|
*
|
||||||
* var selectedUnspent = build.getSelectedUnspent();
|
* var selectedUnspent = build.getSelectedUnspent();
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var txHex = tx.serialize().toString('hex');
|
var txHex = tx.serialize().toString('hex');
|
||||||
console.log('TX HEX IS: ', txHex);
|
console.log('TX HEX IS: ', txHex);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -308,15 +319,16 @@
|
||||||
|
|
||||||
////
|
////
|
||||||
|
|
||||||
|
|
||||||
#CreateAndSignTx-PayToScriptHash.js
|
#CreateAndSignTx-PayToScriptHash.js
|
||||||
var run = function() {
|
var run = function() {
|
||||||
bitcore = typeof (bitcore) === 'undefined' ? require('../bitcore') : bitcore;
|
bitcore = typeof(bitcore) === 'undefined' ? require('../bitcore') : bitcore;
|
||||||
var networks = require('../networks');
|
var networks = require('../networks');
|
||||||
var WalletKey = bitcore.WalletKey;
|
var WalletKey = bitcore.WalletKey;
|
||||||
var Script = bitcore.Script;
|
var Script = bitcore.Script;
|
||||||
var Builder = bitcore.TransactionBuilder;
|
var Builder = bitcore.TransactionBuilder;
|
||||||
var opts = {network: networks.testnet};
|
var opts = {
|
||||||
|
network: networks.testnet
|
||||||
|
};
|
||||||
|
|
||||||
console.log('## Network: ' + opts.network.name);
|
console.log('## Network: ' + opts.network.name);
|
||||||
|
|
||||||
|
@ -325,19 +337,17 @@
|
||||||
input.priv = "cS62Ej4SobZnpFQYN1PEEBr2KWf5sgRYYnELtumcG6WVCfxno39V";
|
input.priv = "cS62Ej4SobZnpFQYN1PEEBr2KWf5sgRYYnELtumcG6WVCfxno39V";
|
||||||
|
|
||||||
// Complete with the corresponding UTXO you want to use
|
// Complete with the corresponding UTXO you want to use
|
||||||
var utxos = [
|
var utxos = [{
|
||||||
{
|
|
||||||
address: "n2hoFVbPrYQf7RJwiRy1tkbuPPqyhAEfbp",
|
address: "n2hoFVbPrYQf7RJwiRy1tkbuPPqyhAEfbp",
|
||||||
txid: "e4bc22d8c519d3cf848d710619f8480be56176a4a6548dfbe865ab3886b578b5",
|
txid: "e4bc22d8c519d3cf848d710619f8480be56176a4a6548dfbe865ab3886b578b5",
|
||||||
vout: 1,
|
vout: 1,
|
||||||
ts: 1396290442,
|
ts: 1396290442,
|
||||||
scriptPubKey: "76a914e867aad8bd361f57c50adc37a0c018692b5b0c9a88ac",
|
scriptPubKey: "76a914e867aad8bd361f57c50adc37a0c018692b5b0c9a88ac",
|
||||||
amount: 0.3795,
|
amount: 0.3795,
|
||||||
confirmations: 7
|
confirmations: 7
|
||||||
}
|
}];
|
||||||
];
|
|
||||||
|
|
||||||
var privs = [
|
var privs = [
|
||||||
"cMpKwGr5oxEacN95WFKNEq6tTcvi11regFwS3muHvGYVxMPJX8JA",
|
"cMpKwGr5oxEacN95WFKNEq6tTcvi11regFwS3muHvGYVxMPJX8JA",
|
||||||
"cVf32m9MR4vxcPwKNJuPepUe8XrHD2z63eCk76d6njRGyCkXpkSM",
|
"cVf32m9MR4vxcPwKNJuPepUe8XrHD2z63eCk76d6njRGyCkXpkSM",
|
||||||
"cQ2sVRFX4jQYMLhWyzz6jTQ2xju51P36968ecXnPhRLKLH677eKR",
|
"cQ2sVRFX4jQYMLhWyzz6jTQ2xju51P36968ecXnPhRLKLH677eKR",
|
||||||
|
@ -348,29 +358,37 @@
|
||||||
var pubkeys = []
|
var pubkeys = []
|
||||||
privs.forEach(function(p) {
|
privs.forEach(function(p) {
|
||||||
var wk = new WalletKey(opts);
|
var wk = new WalletKey(opts);
|
||||||
wk.fromObj({priv: p});
|
wk.fromObj({
|
||||||
|
priv: p
|
||||||
|
});
|
||||||
pubkeys.push(bitcore.buffertools.toHex(wk.privKey.public));
|
pubkeys.push(bitcore.buffertools.toHex(wk.privKey.public));
|
||||||
});
|
});
|
||||||
|
|
||||||
// multisig p2sh
|
// multisig p2sh
|
||||||
var opts = {nreq:3, pubkeys:pubkeys};
|
var opts = {
|
||||||
|
nreq: 3,
|
||||||
|
pubkeys: pubkeys
|
||||||
|
};
|
||||||
|
|
||||||
// p2scriphash p2sh
|
// p2scriphash p2sh
|
||||||
//var opts = [{address: an_address}];
|
//var opts = [{address: an_address}];
|
||||||
|
|
||||||
var info = Builder.infoForP2sh(opts, 'testnet');
|
var info = Builder.infoForP2sh(opts, 'testnet');
|
||||||
var p2shScript = info.scriptBufHex;
|
var p2shScript = info.scriptBufHex;
|
||||||
var p2shAddress = info.address;
|
var p2shAddress = info.address;
|
||||||
|
|
||||||
|
|
||||||
var outs = [{address:p2shAddress, amount:0.05}];
|
var outs = [{
|
||||||
|
address: p2shAddress,
|
||||||
|
amount: 0.05
|
||||||
|
}];
|
||||||
var tx = new Builder(opts)
|
var tx = new Builder(opts)
|
||||||
.setUnspent(utxos)
|
.setUnspent(utxos)
|
||||||
.setOutputs(outs)
|
.setOutputs(outs)
|
||||||
.sign([input.priv])
|
.sign([input.priv])
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
var txHex = tx.serialize().toString('hex');
|
var txHex = tx.serialize().toString('hex');
|
||||||
|
|
||||||
|
|
||||||
console.log('## p2sh address: ' + p2shAddress); //TODO
|
console.log('## p2sh address: ' + p2shAddress); //TODO
|
||||||
|
@ -384,8 +402,7 @@
|
||||||
*
|
*
|
||||||
* REDDEEM TX
|
* REDDEEM TX
|
||||||
*/
|
*/
|
||||||
var utxos2 = [
|
var utxos2 = [{
|
||||||
{
|
|
||||||
address: p2shAddress,
|
address: p2shAddress,
|
||||||
txid: "c2e50d1c8c581d8c4408378b751633f7eb86687fc5f0502be7b467173f275ae7",
|
txid: "c2e50d1c8c581d8c4408378b751633f7eb86687fc5f0502be7b467173f275ae7",
|
||||||
vout: 0,
|
vout: 0,
|
||||||
|
@ -393,13 +410,15 @@
|
||||||
scriptPubKey: scriptPubKey,
|
scriptPubKey: scriptPubKey,
|
||||||
amount: 0.05,
|
amount: 0.05,
|
||||||
confirmations: 1
|
confirmations: 1
|
||||||
}
|
}];
|
||||||
];
|
|
||||||
|
|
||||||
outs = [{address:input.addr, amount:0.04}];
|
outs = [{
|
||||||
|
address: input.addr,
|
||||||
|
amount: 0.04
|
||||||
|
}];
|
||||||
|
|
||||||
var hashMap = {};
|
var hashMap = {};
|
||||||
hashMap[p2shAddress]=p2shScript;
|
hashMap[p2shAddress] = p2shScript;
|
||||||
|
|
||||||
var b = new Builder(opts)
|
var b = new Builder(opts)
|
||||||
.setUnspent(utxos2)
|
.setUnspent(utxos2)
|
||||||
|
@ -407,21 +426,21 @@
|
||||||
.setOutputs(outs)
|
.setOutputs(outs)
|
||||||
.sign(privs);
|
.sign(privs);
|
||||||
|
|
||||||
tx= b.build();
|
tx = b.build();
|
||||||
|
|
||||||
|
|
||||||
console.log('Builder:');
|
console.log('Builder:');
|
||||||
console.log('\tSignatures:' + tx.countInputMissingSignatures(0) );
|
console.log('\tSignatures:' + tx.countInputMissingSignatures(0));
|
||||||
console.log('\t#isFullySigned:' + b.isFullySigned() );
|
console.log('\t#isFullySigned:' + b.isFullySigned());
|
||||||
|
|
||||||
console.log('TX:');
|
console.log('TX:');
|
||||||
console.log('\t #isComplete:' + tx.isComplete() );
|
console.log('\t #isComplete:' + tx.isComplete());
|
||||||
|
|
||||||
var txHex = tx.serialize().toString('hex');
|
var txHex = tx.serialize().toString('hex');
|
||||||
console.log('2) REDEEM SCRIPT: ', txHex);
|
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');
|
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:
|
// To send TX with RPC:
|
||||||
var RpcClient = bitcore.RpcClient;
|
var RpcClient = bitcore.RpcClient;
|
||||||
var config = {
|
var config = {
|
||||||
|
@ -464,21 +483,23 @@
|
||||||
var networks = require('../networks');
|
var networks = require('../networks');
|
||||||
var WalletKey = bitcore.WalletKey;
|
var WalletKey = bitcore.WalletKey;
|
||||||
|
|
||||||
var opts = {network: networks.testnet};
|
var opts = {
|
||||||
|
network: networks.testnet
|
||||||
|
};
|
||||||
|
|
||||||
function print(wk) {
|
function print(wk) {
|
||||||
|
|
||||||
console.log('\n## Network: ' + wk.network.name);
|
console.log('\n## Network: ' + wk.network.name);
|
||||||
console.log ('\t * Hex Representation');
|
console.log('\t * Hex Representation');
|
||||||
console.log ('\tPrivate: ' + bitcore.buffertools.toHex(wk.privKey.private));
|
console.log('\tPrivate: ' + bitcore.buffertools.toHex(wk.privKey.private));
|
||||||
console.log ('\tPublic : ' + bitcore.buffertools.toHex(wk.privKey.public));
|
console.log('\tPublic : ' + bitcore.buffertools.toHex(wk.privKey.public));
|
||||||
console.log ('\tPublic Compressed : ' + (wk.privKey.compressed?'Yes':'No'));
|
console.log('\tPublic Compressed : ' + (wk.privKey.compressed ? 'Yes' : 'No'));
|
||||||
|
|
||||||
var wkObj = wk.storeObj();
|
var wkObj = wk.storeObj();
|
||||||
console.log ('\n\t * WalletKey Store Object');
|
console.log('\n\t * WalletKey Store Object');
|
||||||
console.log ('\tPrivate: ' + wkObj.priv);
|
console.log('\tPrivate: ' + wkObj.priv);
|
||||||
console.log ('\tPublic : ' + wkObj.pub);
|
console.log('\tPublic : ' + wkObj.pub);
|
||||||
console.log ('\tAddr : ' + wkObj.addr);
|
console.log('\tAddr : ' + wkObj.addr);
|
||||||
};
|
};
|
||||||
|
|
||||||
//Generate a new one (compressed public key, compressed WIF flag)
|
//Generate a new one (compressed public key, compressed WIF flag)
|
||||||
|
@ -488,7 +509,9 @@
|
||||||
|
|
||||||
//Generate from private Key WIF. Compressed status taken from WIF.
|
//Generate from private Key WIF. Compressed status taken from WIF.
|
||||||
var wk2 = new WalletKey(opts);
|
var wk2 = new WalletKey(opts);
|
||||||
wk2.fromObj({priv:'cMpKwGr5oxEacN95WFKNEq6tTcvi11regFwS3muHvGYVxMPJX8JA'});
|
wk2.fromObj({
|
||||||
|
priv: 'cMpKwGr5oxEacN95WFKNEq6tTcvi11regFwS3muHvGYVxMPJX8JA'
|
||||||
|
});
|
||||||
print(wk2);
|
print(wk2);
|
||||||
|
|
||||||
|
|
||||||
|
@ -511,7 +534,9 @@
|
||||||
var buffertools = bitcore.buffertools;
|
var buffertools = bitcore.buffertools;
|
||||||
var Address = bitcore.Address;
|
var Address = bitcore.Address;
|
||||||
var util = bitcore.util;
|
var util = bitcore.util;
|
||||||
var opts = {network: networks.testnet};
|
var opts = {
|
||||||
|
network: networks.testnet
|
||||||
|
};
|
||||||
|
|
||||||
var p = console.log;
|
var p = console.log;
|
||||||
|
|
||||||
|
@ -524,38 +549,38 @@
|
||||||
p('\tHex : ' + buffertools.toHex(s.buffer));
|
p('\tHex : ' + buffertools.toHex(s.buffer));
|
||||||
p('\tHuman : ' + s.toHumanReadable());
|
p('\tHuman : ' + s.toHumanReadable());
|
||||||
p('\tKey -------------------------------');
|
p('\tKey -------------------------------');
|
||||||
console.log ('\tPrivate: ' + wkObj.priv);
|
console.log('\tPrivate: ' + wkObj.priv);
|
||||||
console.log ('\tPublic : ' + wkObj.pub);
|
console.log('\tPublic : ' + wkObj.pub);
|
||||||
console.log ('\tAddr : ' + wkObj.addr);
|
console.log('\tAddr : ' + wkObj.addr);
|
||||||
|
|
||||||
s = Script.createPubKeyHashOut(wk.privKey.public);
|
s = Script.createPubKeyHashOut(wk.privKey.public);
|
||||||
p('\nScript PubKeyHash:');
|
p('\nScript PubKeyHash:');
|
||||||
p('\tHex : ' + buffertools.toHex(s.buffer));
|
p('\tHex : ' + buffertools.toHex(s.buffer));
|
||||||
p('\tHuman : ' + s.toHumanReadable());
|
p('\tHuman : ' + s.toHumanReadable());
|
||||||
p('\tKey -------------------------------');
|
p('\tKey -------------------------------');
|
||||||
console.log ('\tPrivate: ' + wkObj.priv);
|
console.log('\tPrivate: ' + wkObj.priv);
|
||||||
console.log ('\tPublic : ' + wkObj.pub);
|
console.log('\tPublic : ' + wkObj.pub);
|
||||||
console.log ('\tAddr : ' + wkObj.addr);
|
console.log('\tAddr : ' + wkObj.addr);
|
||||||
|
|
||||||
var wks=[];
|
var wks = [];
|
||||||
var pubs = [];
|
var pubs = [];
|
||||||
for (var i =0; i<5; i++) {
|
for (var i = 0; i < 5; i++) {
|
||||||
wks[i] = new WalletKey(opts);
|
wks[i] = new WalletKey(opts);
|
||||||
wks[i].generate();
|
wks[i].generate();
|
||||||
pubs.push(wks[i].privKey.public);
|
pubs.push(wks[i].privKey.public);
|
||||||
}
|
}
|
||||||
|
|
||||||
s = Script.createMultisig(3,pubs);
|
s = Script.createMultisig(3, pubs);
|
||||||
p('\nScript MultiSig (3 out of 5 required signatures):');
|
p('\nScript MultiSig (3 out of 5 required signatures):');
|
||||||
p('\tHex : ' + buffertools.toHex(s.buffer));
|
p('\tHex : ' + buffertools.toHex(s.buffer));
|
||||||
p('\tHuman : ' + s.toHumanReadable());
|
p('\tHuman : ' + s.toHumanReadable());
|
||||||
|
|
||||||
for (i =0; i<5; i++) {
|
for (i = 0; i < 5; i++) {
|
||||||
wkObj = wks[i].storeObj();
|
wkObj = wks[i].storeObj();
|
||||||
p('\tKey ['+i+'] -------------------------------');
|
p('\tKey [' + i + '] -------------------------------');
|
||||||
console.log ('\tPrivate: ' + wkObj.priv);
|
console.log('\tPrivate: ' + wkObj.priv);
|
||||||
console.log ('\tPublic : ' + wkObj.pub);
|
console.log('\tPublic : ' + wkObj.pub);
|
||||||
console.log ('\tAddr : ' + wkObj.addr);
|
console.log('\tAddr : ' + wkObj.addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
var hash = util.sha256ripe160(s.buffer);
|
var hash = util.sha256ripe160(s.buffer);
|
||||||
|
@ -564,10 +589,10 @@
|
||||||
p('\nScript P2SH:');
|
p('\nScript P2SH:');
|
||||||
p('\tHex : ' + buffertools.toHex(s.buffer));
|
p('\tHex : ' + buffertools.toHex(s.buffer));
|
||||||
p('\tHuman : ' + s.toHumanReadable());
|
p('\tHuman : ' + s.toHumanReadable());
|
||||||
p('\tScript Hash: ' + buffertools.toHex(hash));
|
p('\tScript Hash: ' + buffertools.toHex(hash));
|
||||||
var a = new Address(networks.livenet.P2SHVersion,hash);
|
var a = new Address(networks.livenet.P2SHVersion, hash);
|
||||||
p('\tp2sh Addr: ' + a.toString());
|
p('\tp2sh Addr: ' + a.toString());
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.run = run;
|
module.exports.run = run;
|
||||||
|
@ -577,18 +602,18 @@
|
||||||
|
|
||||||
#ECIES.js
|
#ECIES.js
|
||||||
var run = function() {
|
var run = function() {
|
||||||
bitcore = typeof (bitcore) === 'undefined' ? require('../bitcore') : bitcore;
|
bitcore = typeof(bitcore) === 'undefined' ? require('../bitcore') : bitcore;
|
||||||
|
|
||||||
console.log('ECIES: Elliptic Curve Integrated Encryption Scheme');
|
console.log('ECIES: Elliptic Curve Integrated Encryption Scheme');
|
||||||
console.log('A way of encrypting with a public key and decrypting with a private key.');
|
console.log('A way of encrypting with a public key and decrypting with a private key.');
|
||||||
|
|
||||||
var key = bitcore.Key.generateSync();
|
var key = bitcore.Key.generateSync();
|
||||||
console.log('Private key: ' + key.private.toString('hex'));
|
console.log('Private key: ' + key.private.toString('hex'));
|
||||||
console.log('Public key: ' + key.public.toString('hex'));
|
console.log('Public key: ' + key.public.toString('hex'));
|
||||||
|
|
||||||
var message = new Buffer('This is a message to be encrypted');
|
var message = new Buffer('This is a message to be encrypted');
|
||||||
console.log('Message: "' + message.toString() + '"');
|
console.log('Message: "' + message.toString() + '"');
|
||||||
|
|
||||||
var encrypted = bitcore.ECIES.encrypt(key.public, message);
|
var encrypted = bitcore.ECIES.encrypt(key.public, message);
|
||||||
console.log('Encrypted (with public key): ' + encrypted.toString('hex'));
|
console.log('Encrypted (with public key): ' + encrypted.toString('hex'));
|
||||||
|
|
||||||
|
@ -622,7 +647,7 @@
|
||||||
|
|
||||||
#HierarchicalKey.js
|
#HierarchicalKey.js
|
||||||
var run = function() {
|
var run = function() {
|
||||||
bitcore = typeof (bitcore) === 'undefined' ? require('../bitcore') : bitcore;
|
bitcore = typeof(bitcore) === 'undefined' ? require('../bitcore') : bitcore;
|
||||||
var HierarchicalKey = bitcore.HierarchicalKey;
|
var HierarchicalKey = bitcore.HierarchicalKey;
|
||||||
var Address = bitcore.Address;
|
var Address = bitcore.Address;
|
||||||
var networks = bitcore.networks;
|
var networks = bitcore.networks;
|
||||||
|
@ -726,9 +751,11 @@
|
||||||
|
|
||||||
#PeerDiscovery.js
|
#PeerDiscovery.js
|
||||||
var PeerManager = require('../lib/PeerManager');
|
var PeerManager = require('../lib/PeerManager');
|
||||||
var peerman = new PeerManager();
|
var peerman = new PeerManager();
|
||||||
|
|
||||||
peerman.discover({ limit: 12 }).start();
|
peerman.discover({
|
||||||
|
limit: 12
|
||||||
|
}).start();
|
||||||
|
|
||||||
#PeerManager.js
|
#PeerManager.js
|
||||||
'use strict';
|
'use strict';
|
||||||
|
@ -951,7 +978,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var txid = tx.getHash().toString('hex');
|
var txid = tx.getHash().toString('hex');
|
||||||
console.log('Created transaction with txid '+txid);
|
console.log('Created transaction with txid ' + txid);
|
||||||
var raw_tx = tx.serialize().toString('hex');
|
var raw_tx = tx.serialize().toString('hex');
|
||||||
console.log('Transaction raw hex dump:');
|
console.log('Transaction raw hex dump:');
|
||||||
console.log('-------------------------------------');
|
console.log('-------------------------------------');
|
||||||
|
@ -997,16 +1024,17 @@
|
||||||
|
|
||||||
var con = new Connection(socket, peer);
|
var con = new Connection(socket, peer);
|
||||||
|
|
||||||
con.on('error', function (msg) {
|
con.on('error', function(msg) {
|
||||||
var peer = msg.peer, err = msg.err;
|
var peer = msg.peer,
|
||||||
|
err = msg.err;
|
||||||
console.error('Error connecting to peer', peer.host + ':' + peer.port, '(' + err.message + ')');
|
console.error('Error connecting to peer', peer.host + ':' + peer.port, '(' + err.message + ')');
|
||||||
});
|
});
|
||||||
|
|
||||||
con.on('disconnect', function (msg) {
|
con.on('disconnect', function(msg) {
|
||||||
console.log('disconnect: ', msg);
|
console.log('disconnect: ', msg);
|
||||||
});
|
});
|
||||||
|
|
||||||
con.on('connect', function (msg) {
|
con.on('connect', function(msg) {
|
||||||
console.log('Connected to %s', msg.peer.host + ':' + msg.peer.port);
|
console.log('Connected to %s', msg.peer.host + ':' + msg.peer.port);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1015,41 +1043,40 @@
|
||||||
// Make a log function available to all listeners
|
// Make a log function available to all listeners
|
||||||
// The log function is just like console.log except it prefixes
|
// The log function is just like console.log except it prefixes
|
||||||
// messages with [host:port]
|
// messages with [host:port]
|
||||||
function listen (event_name, fn) {
|
function listen(event_name, fn) {
|
||||||
con.on(event_name, function (event) {
|
con.on(event_name, function(event) {
|
||||||
fn(event, function () {
|
fn(event, function() {
|
||||||
var args = Array.prototype.slice.call(arguments);
|
var args = Array.prototype.slice.call(arguments);
|
||||||
var str = args.shift();
|
var str = args.shift();
|
||||||
str = '[%s:%s] ' + str;
|
str = '[%s:%s] ' + str;
|
||||||
args = [ str, event.peer.host, event.peer.port ].concat(args);
|
args = [str, event.peer.host, event.peer.port].concat(args);
|
||||||
console.log.apply(console, args);
|
console.log.apply(console, args);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
listen('getaddr', function (event, log) {
|
listen('getaddr', function(event, log) {
|
||||||
log('Received message getaddr');
|
log('Received message getaddr');
|
||||||
log(event);
|
log(event);
|
||||||
});
|
});
|
||||||
|
|
||||||
listen('verack', function (event, log) {
|
listen('verack', function(event, log) {
|
||||||
log('Received message verack');
|
log('Received message verack');
|
||||||
});
|
});
|
||||||
|
|
||||||
listen('version', function (event, log) {
|
listen('version', function(event, log) {
|
||||||
log('Received message version (%s)', event.message.version);
|
log('Received message version (%s)', event.message.version);
|
||||||
});
|
});
|
||||||
|
|
||||||
listen('addr', function (event, log) {
|
listen('addr', function(event, log) {
|
||||||
log('Received message addr (%s addresses)', event.message.addrs.length);
|
log('Received message addr (%s addresses)', event.message.addrs.length);
|
||||||
});
|
});
|
||||||
|
|
||||||
listen('inv', function (event, log) {
|
listen('inv', function(event, log) {
|
||||||
log('Received message inv (%s invs)', event.message.count);
|
log('Received message inv (%s invs)', event.message.count);
|
||||||
console.log(event.message.invs);
|
console.log(event.message.invs);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
#VanityAddress.js
|
#VanityAddress.js
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
@ -1063,15 +1090,15 @@
|
||||||
// config your regular expression
|
// config your regular expression
|
||||||
var re = /[0-9]{6}$/; // ends in 6 digits
|
var re = /[0-9]{6}$/; // ends in 6 digits
|
||||||
|
|
||||||
var a,k,m;
|
var a, k, m;
|
||||||
while (true) {
|
while (true) {
|
||||||
k = Key.generateSync();
|
k = Key.generateSync();
|
||||||
a = Address.fromKey(k);
|
a = Address.fromKey(k);
|
||||||
m = a.toString().match(re);
|
m = a.toString().match(re);
|
||||||
if (m) break;
|
if (m) break;
|
||||||
}
|
}
|
||||||
console.log('Address: '+a.toString());
|
console.log('Address: ' + a.toString());
|
||||||
console.log('Private Key: '+k.private.toString('hex'));
|
console.log('Private Key: ' + k.private.toString('hex'));
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue