createTX to wallet

This commit is contained in:
Matias Alejo Garcia 2014-03-27 12:14:49 -03:00
parent cf1732fc44
commit 88d8ad285c
2 changed files with 63 additions and 13 deletions

View File

@ -6,6 +6,7 @@ var Address = bitcore.Address;
var Script = bitcore.Script;
var coinUtil = bitcore.util;
var Transaction = bitcore.Transaction;
var buffertools = bitcore.buffertools;
var Storage = imports.Storage || require('./Storage');
var log = imports.log || console.log;
@ -47,7 +48,7 @@ function Wallet(opts) {
Wallet.getRandomId = function () {
return coinUtil.generateNonce().toString('hex');
return buffertools.toHex(coinUtil.generateNonce());
};
Wallet.decrypt = function (passphrase, encPayload) {
@ -265,9 +266,9 @@ Wallet.prototype.getAddresses = function() {
return ret;
};
Wallet.prototype.createTx = function(utxos,outs) {
Wallet.prototype.createTx = function(utxos,outs, changeAddress) {
var opts = {
remainderAddress: this.createAddress(1),
remainderAddress: changeAddress || this.createAddress(1),
};
return Transaction.create(utxos, outs, opts);
};

View File

@ -1,33 +1,40 @@
'use strict';
var chai = chai || require('chai');
var should = chai.should();
var bitcore = bitcore || require('../node_modules/bitcore');
var chai = chai || require('chai');
var should = chai.should();
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 = {
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);
should.exist(w);
var cosigners = [];
for(var i=0; i<4; i++) {
delete config['bytes'];
var c = new Wallet(config);
w.haveAllRequiredPubKeys().should.equal(false);
w.addCosignerExtendedPubKey(c.getMasterExtendedPubKey());
cosigners.push(c);
}
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');
});
});