createTX to wallet
This commit is contained in:
parent
cf1732fc44
commit
88d8ad285c
2 changed files with 63 additions and 13 deletions
|
|
@ -6,6 +6,7 @@ var Address = bitcore.Address;
|
||||||
var Script = bitcore.Script;
|
var Script = bitcore.Script;
|
||||||
var coinUtil = bitcore.util;
|
var coinUtil = bitcore.util;
|
||||||
var Transaction = bitcore.Transaction;
|
var Transaction = bitcore.Transaction;
|
||||||
|
var buffertools = bitcore.buffertools;
|
||||||
|
|
||||||
var Storage = imports.Storage || require('./Storage');
|
var Storage = imports.Storage || require('./Storage');
|
||||||
var log = imports.log || console.log;
|
var log = imports.log || console.log;
|
||||||
|
|
@ -47,7 +48,7 @@ function Wallet(opts) {
|
||||||
|
|
||||||
|
|
||||||
Wallet.getRandomId = function () {
|
Wallet.getRandomId = function () {
|
||||||
return coinUtil.generateNonce().toString('hex');
|
return buffertools.toHex(coinUtil.generateNonce());
|
||||||
};
|
};
|
||||||
|
|
||||||
Wallet.decrypt = function (passphrase, encPayload) {
|
Wallet.decrypt = function (passphrase, encPayload) {
|
||||||
|
|
@ -265,9 +266,9 @@ Wallet.prototype.getAddresses = function() {
|
||||||
return ret;
|
return ret;
|
||||||
};
|
};
|
||||||
|
|
||||||
Wallet.prototype.createTx = function(utxos,outs) {
|
Wallet.prototype.createTx = function(utxos,outs, changeAddress) {
|
||||||
var opts = {
|
var opts = {
|
||||||
remainderAddress: this.createAddress(1),
|
remainderAddress: changeAddress || this.createAddress(1),
|
||||||
};
|
};
|
||||||
return Transaction.create(utxos, outs, opts);
|
return Transaction.create(utxos, outs, opts);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,33 +1,40 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var chai = chai || require('chai');
|
var chai = chai || require('chai');
|
||||||
var should = chai.should();
|
var should = chai.should();
|
||||||
var bitcore = bitcore || require('../node_modules/bitcore');
|
var bitcore = bitcore || require('../node_modules/bitcore');
|
||||||
|
var Address = bitcore.Address;
|
||||||
|
var buffertools = bitcore.buffertools;
|
||||||
|
var cosign = cosign || {};
|
||||||
|
var fakeStorage = require('./FakeStorage');
|
||||||
|
var Wallet = cosign.Wallet || require('soop').load('../js/models/Wallet', {Storage: fakeStorage});
|
||||||
|
|
||||||
var cosign = cosign || {};
|
var aMasterPrivKey = 'tprv8ZgxMBicQKsPdSVTiWXEqCCzqRaRr9EAQdn5UVMpT9UHX67Dh1FmzEMbavPumpAicsUm2XvC6NTdcWB89yN5DUWx5HQ7z3KByUg7Ht74VRZ';
|
||||||
|
|
||||||
var Address = bitcore.Address;
|
|
||||||
var fakeStorage = require('./FakeStorage');
|
|
||||||
var Wallet = cosign.Wallet || require('soop').load('../js/models/Wallet', {Storage: fakeStorage});
|
|
||||||
|
|
||||||
|
|
||||||
var config = {
|
var config = {
|
||||||
network:'livenet',
|
network:'livenet',
|
||||||
};
|
};
|
||||||
|
|
||||||
var createW = function () {
|
var createW = function (network, bytes) {
|
||||||
|
|
||||||
|
var config = {
|
||||||
|
network: network || 'livenet',
|
||||||
|
};
|
||||||
|
if (bytes) config.bytes = bytes;
|
||||||
|
|
||||||
var w = new Wallet(config);
|
var w = new Wallet(config);
|
||||||
should.exist(w);
|
should.exist(w);
|
||||||
|
|
||||||
var cosigners = [];
|
var cosigners = [];
|
||||||
for(var i=0; i<4; i++) {
|
for(var i=0; i<4; i++) {
|
||||||
|
delete config['bytes'];
|
||||||
var c = new Wallet(config);
|
var c = new Wallet(config);
|
||||||
w.haveAllRequiredPubKeys().should.equal(false);
|
w.haveAllRequiredPubKeys().should.equal(false);
|
||||||
|
|
||||||
w.addCosignerExtendedPubKey(c.getMasterExtendedPubKey());
|
w.addCosignerExtendedPubKey(c.getMasterExtendedPubKey());
|
||||||
cosigners.push(c);
|
cosigners.push(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {w:w, cosigners: cosigners};
|
return {w:w, cosigners: cosigners};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -142,6 +149,48 @@ describe('Wallet model', function() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
it('should create a TX', function () {
|
||||||
|
var k = createW('testnet', aMasterPrivKey);
|
||||||
|
var w = k.w;
|
||||||
|
var as=[], j=0;
|
||||||
|
for(var isChange=0; isChange<2; isChange++)
|
||||||
|
for(var i=0; i<6; i++)
|
||||||
|
as[j++] = w.createAddress(isChange);
|
||||||
|
|
||||||
|
var utxos = [
|
||||||
|
{
|
||||||
|
address: as[0],
|
||||||
|
txid: "2ac165fa7a3a2b535d106a0041c7568d03b531e58aeccdd3199d7289ab12cfc1",
|
||||||
|
scriptPubKey: "76a9146ce4e1163eb18939b1440c42844d5f0261c0338288ac",
|
||||||
|
vout: 1,
|
||||||
|
amount: 1,
|
||||||
|
confirmations: 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: as[1],
|
||||||
|
txid: "2ac165fa7a3a2b535d106a0041c7568d03b531e58aeccdd3199d7289ab12cfc1",
|
||||||
|
scriptPubKey: "76a9146ce4e1163eb18939b1440c42844d5f0261c0338288ac",
|
||||||
|
vout: 1,
|
||||||
|
amount: 1.01,
|
||||||
|
confirmations: 7
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
var outs=[{
|
||||||
|
address: 'mfwSGKeLEGdd1YwsZ1TkoEeKNk8TTWqXLC',
|
||||||
|
amount: 1.5,
|
||||||
|
}];
|
||||||
|
var ret = w.createTx(utxos, outs, '2Mu1GwdF9X1LLxXNxtfNChi5ngBMJxi2csv');
|
||||||
|
var tx=ret.tx;
|
||||||
|
should.exist(tx);
|
||||||
|
tx.ins.length.should.equal(2);
|
||||||
|
tx.outs.length.should.equal(2);
|
||||||
|
buffertools.toHex(tx.serialize()).should.equal('0100000002c1cf12ab89729d19d3cdec8ae531b5038d56c741006a105d532b3a7afa65c12a0100000000ffffffffc1cf12ab89729d19d3cdec8ae531b5038d56c741006a105d532b3a7afa65c12a0100000000ffffffff0280d1f008000000001976a91404a154d56e5455dc87f15e293b8872f31d03a12c88acb00b0a030000000017a914134ce4e4ea92b6cb0008803cafe25f197ff1dcb98700000000');
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue