91 lines
2.4 KiB
JavaScript
Executable file
91 lines
2.4 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
|
|
'use strict';
|
|
|
|
var async = require('async');
|
|
var bitcore = require('bitcore');
|
|
var PublicKeyRing = require('../js/models/core/PublicKeyRing');
|
|
var PrivateKey = require('../js/models/core/PrivateKey');
|
|
|
|
var FakeNetwork = require('./mocks/FakeNetwork');
|
|
var Insight = require('../js/models/blockchain/Insight');
|
|
var FakeStorage = require('./mocks/FakeStorage');
|
|
|
|
var WalletFactory = require('soop').load('../js/models/core/WalletFactory', {
|
|
Network: FakeNetwork,
|
|
Blockchain: Insight,
|
|
Storage: FakeStorage,
|
|
});
|
|
var Key = bitcore.Key;
|
|
|
|
|
|
var N_LIMIT = 16;
|
|
var nn = 'livenet';
|
|
|
|
for (var n = 1; n < N_LIMIT; n++) {
|
|
for (var m = 1; m <= n; m++) {
|
|
// case m-of-n
|
|
console.log('case ' + m + '-of-' + n);
|
|
// create full pkr
|
|
var publicKeyRing = new PublicKeyRing({
|
|
networkName: nn,
|
|
requiredCopayers: m,
|
|
totalCopayers: n,
|
|
});
|
|
var privateKey = null;
|
|
var pks = [];
|
|
for (var i = 0; i < n; i++) {
|
|
var pk = new PrivateKey({
|
|
networkName: nn
|
|
});
|
|
if (i === 0) {
|
|
privateKey = pk;
|
|
} else {
|
|
publicKeyRing.addCopayer(pk.getExtendedPublicKeyString(), 'dummy');
|
|
}
|
|
pks.push(pk);
|
|
}
|
|
|
|
var opts = {};
|
|
opts.publicKeyRing = publicKeyRing;
|
|
opts.privateKey = privateKey;
|
|
opts.requiredCopayers = m;
|
|
opts.totalCopayers = n;
|
|
opts.spendUnconfirmed = true;
|
|
opts.version = 'script'
|
|
|
|
var w = new WalletFactory(opts).create(opts);
|
|
var addr = w.generateAddress();
|
|
console.log('\t receive addr=' + addr);
|
|
|
|
|
|
var toAddress = 'msj42CCGruhRsFrGATiUuh25dtxYtnpbTx';
|
|
var amount = '5000000';
|
|
// create fake utxo
|
|
var utxos = [{
|
|
'address': addr,
|
|
'txid': '659e4e6d9c840e57aee6ebe35f2511cdeb848d786938f0b6b4f1b00de09b29da',
|
|
'vout': 1,
|
|
'ts': 1400682132,
|
|
'scriptPubKey': 'a914e4a6744eeed5571cff9e427cbb5dd5e1a2d1b2fa87',
|
|
'amount': 10.000,
|
|
'confirmations': 100
|
|
}];
|
|
var ntxid = w.createTxSync(toAddress, amount, utxos);
|
|
console.log('\t ntxid =' + ntxid);
|
|
var sign = function(pk, cb) {
|
|
w.sign(ntxid, cb);
|
|
}
|
|
async.each(pks, sign, function(err) {
|
|
if (err) {
|
|
throw new Error(err);
|
|
}
|
|
});
|
|
var txp = w.txProposals.txps[ntxid];
|
|
var tx = txp.builder.build();
|
|
console.log(tx.isComplete());
|
|
var scriptSig = tx.ins[0].getScript();
|
|
console.log(scriptSig.toHumanReadable());
|
|
console.log(scriptSig.serialize().length);
|
|
}
|
|
}
|