transaction: switch to use bitcore node getDetailedTransaction
This commit is contained in:
parent
ae9f6a2c2f
commit
0465179a93
@ -26,81 +26,71 @@ TxController.prototype.transaction = function(req, res, next) {
|
||||
var self = this;
|
||||
var txid = req.params.txid;
|
||||
|
||||
this.node.getTransactionWithBlockInfo(txid, function(err, transaction) {
|
||||
this.node.getDetailedTransaction(txid, function(err, transaction) {
|
||||
if (err && err.code === -5) {
|
||||
return self.common.handleErrors(null, res);
|
||||
} else if(err) {
|
||||
return self.common.handleErrors(err, res);
|
||||
}
|
||||
|
||||
transaction.populateInputs(self.node.services.bitcoind, [], function(err) {
|
||||
if(err) {
|
||||
return res.send({
|
||||
error: err.toString()
|
||||
});
|
||||
self.transformTransaction(transaction, function(err, transformedTransaction) {
|
||||
if (err) {
|
||||
return self.common.handleErrors(err, res);
|
||||
}
|
||||
|
||||
self.transformTransaction(transaction, function(err, transformedTransaction) {
|
||||
if (err) {
|
||||
return self.common.handleErrors(err, res);
|
||||
}
|
||||
req.transaction = transformedTransaction;
|
||||
next();
|
||||
});
|
||||
|
||||
req.transaction = transformedTransaction;
|
||||
next();
|
||||
});
|
||||
|
||||
});
|
||||
};
|
||||
|
||||
TxController.prototype.transformTransaction = function(transaction, callback) {
|
||||
$.checkArgument(_.isFunction(callback));
|
||||
var self = this;
|
||||
var txid = transaction.id;
|
||||
var txObj = transaction.toObject();
|
||||
|
||||
var confirmations = 0;
|
||||
if(transaction.__height >= 0) {
|
||||
confirmations = this.node.services.bitcoind.height - transaction.__height + 1;
|
||||
if(transaction.height >= 0) {
|
||||
confirmations = this.node.services.bitcoind.height - transaction.height + 1;
|
||||
}
|
||||
|
||||
var transformed = {
|
||||
txid: txObj.hash,
|
||||
version: txObj.version,
|
||||
locktime: txObj.nLockTime
|
||||
txid: transaction.hash,
|
||||
version: transaction.version,
|
||||
locktime: transaction.locktime
|
||||
};
|
||||
|
||||
if(transaction.isCoinbase()) {
|
||||
if(transaction.coinbase) {
|
||||
transformed.vin = [
|
||||
{
|
||||
coinbase: txObj.inputs[0].script,
|
||||
sequence: txObj.inputs[0].sequenceNumber,
|
||||
coinbase: transaction.inputs[0].script,
|
||||
sequence: transaction.inputs[0].sequence,
|
||||
n: 0
|
||||
}
|
||||
];
|
||||
} else {
|
||||
transformed.vin = txObj.inputs.map(this.transformInput.bind(this));
|
||||
transformed.vin = transaction.inputs.map(this.transformInput.bind(this));
|
||||
}
|
||||
|
||||
transformed.vout = transaction.outputs.map(this.transformOutput.bind(this));
|
||||
|
||||
transformed.blockhash = transaction.__blockHash;
|
||||
transformed.blockheight = transaction.__height;
|
||||
transformed.blockhash = transaction.blockHash;
|
||||
transformed.blockheight = transaction.height;
|
||||
transformed.confirmations = confirmations;
|
||||
var time = transaction.__timestamp ? transaction.__timestamp : Math.round(Date.now() / 1000);
|
||||
// TODO consider mempool txs with receivedTime?
|
||||
var time = transaction.blockTimestamp ? transaction.blockTimestamp : Math.round(Date.now() / 1000);
|
||||
transformed.time = time;
|
||||
if (transformed.confirmations) {
|
||||
transformed.blocktime = transformed.time;
|
||||
}
|
||||
|
||||
if(transaction.isCoinbase()) {
|
||||
if(transaction.coinbase) {
|
||||
transformed.isCoinBase = true;
|
||||
}
|
||||
|
||||
transformed.valueOut = transaction.outputAmount / 1e8;
|
||||
transformed.size = transaction.toBuffer().length;
|
||||
if(transaction.hasAllUtxoInfo()) {
|
||||
transformed.valueIn = transaction.inputAmount / 1e8;
|
||||
transformed.fees = transaction.getFee() / 1e8;
|
||||
transformed.valueOut = transaction.outputSatoshis / 1e8;
|
||||
transformed.size = transaction.hex.length / 2; // in bytes
|
||||
if (!transaction.coinbase) {
|
||||
transformed.valueIn = transaction.inputSatoshis / 1e8;
|
||||
transformed.fees = transaction.feeSatoshis / 1e8;
|
||||
}
|
||||
|
||||
callback(null, transformed);
|
||||
@ -108,27 +98,24 @@ TxController.prototype.transformTransaction = function(transaction, callback) {
|
||||
|
||||
TxController.prototype.transformInput = function(input, index) {
|
||||
// Input scripts are validated and can be assumed to be valid
|
||||
var script = new bitcore.Script(input.script);
|
||||
var transformed = {
|
||||
txid: input.prevTxId,
|
||||
vout: input.outputIndex,
|
||||
scriptSig: {
|
||||
asm: script.toASM(),
|
||||
asm: input.scriptAsm,
|
||||
hex: input.script
|
||||
},
|
||||
sequence: input.sequenceNumber,
|
||||
sequence: input.sequence,
|
||||
n: index
|
||||
};
|
||||
|
||||
if(input.output) {
|
||||
transformed.addr = bitcore.Script(input.output.script).toAddress(this.node.network).toString();
|
||||
transformed.valueSat = input.output.satoshis;
|
||||
transformed.value = input.output.satoshis / 1e8;
|
||||
transformed.doubleSpentTxID = null; // TODO
|
||||
//transformed.isConfirmed = null; // TODO
|
||||
//transformed.confirmations = null; // TODO
|
||||
//transformed.unconfirmedInput = null; // TODO
|
||||
}
|
||||
transformed.addr = input.address;
|
||||
transformed.valueSat = input.satoshis;
|
||||
transformed.value = input.satoshis / 1e8;
|
||||
transformed.doubleSpentTxID = null; // TODO
|
||||
//transformed.isConfirmed = null; // TODO
|
||||
//transformed.confirmations = null; // TODO
|
||||
//transformed.unconfirmedInput = null; // TODO
|
||||
|
||||
return transformed;
|
||||
};
|
||||
@ -138,23 +125,20 @@ TxController.prototype.transformOutput = function(output, index) {
|
||||
value: (output.satoshis / 1e8).toFixed(8),
|
||||
n: index,
|
||||
scriptPubKey: {
|
||||
hex: output._scriptBuffer.toString('hex'),
|
||||
hex: output.script,
|
||||
asm: output.scriptAsm
|
||||
//reqSigs: null, // TODO
|
||||
},
|
||||
spentTxId: output.__spentTxId || null,
|
||||
spentIndex: _.isUndefined(output.__spentIndex) ? null : output.__spentIndex,
|
||||
spentHeight: output.__spentHeight || null
|
||||
spentTxId: output.spentTxId || null,
|
||||
spentIndex: _.isUndefined(output.spentIndex) ? null : output.spentIndex,
|
||||
spentHeight: output.spentHeight || null
|
||||
//spentTs: undefined // TODO
|
||||
};
|
||||
|
||||
var script = output.script;
|
||||
if (script) {
|
||||
transformed.scriptPubKey.asm = script.toASM();
|
||||
var address = script.toAddress(this.node.network);
|
||||
if (address) {
|
||||
transformed.scriptPubKey.addresses = [address.toString()];
|
||||
transformed.scriptPubKey.type = address.type;
|
||||
}
|
||||
if (output.address) {
|
||||
transformed.scriptPubKey.addresses = [output.address];
|
||||
var address = bitcore.Address(output.address); //TODO return type from bitcore-node
|
||||
transformed.scriptPubKey.type = address.type;
|
||||
}
|
||||
return transformed;
|
||||
};
|
||||
@ -226,59 +210,40 @@ TxController.prototype.list = function(req, res) {
|
||||
var pagesTotal = 1;
|
||||
|
||||
if(blockHash) {
|
||||
self.node.getBlock(blockHash, function(err, block) {
|
||||
if(err && err.message === 'Block not found.') {
|
||||
self.node.getBlockOverview(blockHash, function(err, block) {
|
||||
if(err && err.code === -5) {
|
||||
return self.common.handleErrors(null, res);
|
||||
} else if(err) {
|
||||
return self.common.handleErrors(err, res);
|
||||
}
|
||||
|
||||
self.node.services.bitcoind.getBlockHeader(block.hash, function(err, blockInfo) {
|
||||
if (err) {
|
||||
var totalTxs = block.txids.length;
|
||||
var txids;
|
||||
|
||||
if(!_.isUndefined(page)) {
|
||||
var start = page * pageLength;
|
||||
txids = block.txids.slice(start, start + pageLength);
|
||||
pagesTotal = Math.ceil(totalTxs / pageLength);
|
||||
} else {
|
||||
txids = block.txids;
|
||||
}
|
||||
|
||||
async.mapSeries(txids, function(txid, next) {
|
||||
self.node.getDetailedTransaction(txid, function(err, transaction) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
self.transformTransaction(transaction, next);
|
||||
});
|
||||
}, function(err, transformed) {
|
||||
if(err) {
|
||||
return self.common.handleErrors(err, res);
|
||||
}
|
||||
var totalTxs = block.transactions.length;
|
||||
var txs;
|
||||
|
||||
if(!_.isUndefined(page)) {
|
||||
var start = page * pageLength;
|
||||
txs = block.transactions.slice(start, start + pageLength);
|
||||
pagesTotal = Math.ceil(totalTxs / pageLength);
|
||||
} else {
|
||||
txs = block.transactions;
|
||||
}
|
||||
|
||||
async.mapSeries(txs, function(tx, next) {
|
||||
tx.__blockHash = block.hash;
|
||||
tx.__height = blockInfo.height;
|
||||
tx.__timestamp = block.header.time;
|
||||
|
||||
// get previous outputs
|
||||
tx.populateInputs(self.node.services.bitcoind, [], function(err) {
|
||||
if(err) {
|
||||
return self.common.handleErrors(err, res);
|
||||
}
|
||||
|
||||
// get spent info
|
||||
tx.populateSpentInfo(self.node.services.bitcoind, {}, function(err) {
|
||||
if (err) {
|
||||
return self.common.handleErrors(err, res);
|
||||
}
|
||||
self.transformTransaction(tx, next);
|
||||
});
|
||||
|
||||
});
|
||||
}, function(err, transformed) {
|
||||
if(err) {
|
||||
return self.common.handleErrors(err, res);
|
||||
}
|
||||
|
||||
res.jsonp({
|
||||
pagesTotal: pagesTotal,
|
||||
txs: transformed
|
||||
});
|
||||
res.jsonp({
|
||||
pagesTotal: pagesTotal,
|
||||
txs: transformed
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@ -91,53 +91,56 @@ var txinfos = {
|
||||
]
|
||||
};
|
||||
|
||||
var tx = bitcore.Transaction().fromObject({
|
||||
'hash': '63b68becb0e514b32317f4b29a5cf0627d4087e54ac17f686fcb1d9a27680f73',
|
||||
'version': 1,
|
||||
'inputs': [
|
||||
var tx = {
|
||||
height: 534181,
|
||||
blockTimestamp: 1441116143,
|
||||
blockHash: '0000000000000041ddc94ecf4f86a456a83b2e320c36c6f0c13ff92c7e75f013',
|
||||
hex: '0100000002f379708395d0a0357514205a3758a0317926428356e54a09089852fc6f7297ea010000008a473044022054233934268b30be779fad874ef42e8db928ba27a1b612d5f111b3ee95eb271c022024272bbaf2dcc4050bd3b9dfa3c93884f6ba6ad7d257598b8245abb65b5ab1e40141040682fdb281a8533e21e13dfd1fcfa424912a85b6cdc4136b5842c85de05ac1f0e4a013f20702adeb53329de13b2ef388e5ed6244676f4f1ee4ee685ab607964dffffffffb758ffd4c31693d9620f326385404530a079d5e60a90b94e46d3c2dbc29c0a98020000008a473044022044938ac3f8fcb8da29011df6397ed28cc7e894cdc35d596d4f3623bd8c7e465f022014829c6e0bd7ee97a1bcfef6b85c5fd232653f289394fc6ce6ebb41c73403f1b014104d9ccf88efc6e5be3151fae5e848efd94c91d75e7bf621f9f724a8caff51415338525d3239fae6b93826edf759dd562f77693e55dfa852ffd96a92d683db590f2ffffffff03605b0300000000001976a914b9bbd76588d9e4e09f0369a9aa0b2749a11c4e8d88ac40992d03000000001976a914d2ec20bb8e5f25a52f730384b803d95683250e0b88ac256c0400000000001976a914583df9fa56ad961051e00ca93e68dfaf1eab9ec588ac00000000',
|
||||
hash: '63b68becb0e514b32317f4b29a5cf0627d4087e54ac17f686fcb1d9a27680f73',
|
||||
version: 1,
|
||||
inputSatoshis: 53839829,
|
||||
outputSatoshis: 53829829,
|
||||
feeSatoshis: 10000,
|
||||
inputs: [
|
||||
{
|
||||
'prevTxId': 'ea97726ffc529808094ae5568342267931a058375a20147535a0d095837079f3',
|
||||
'outputIndex': 1,
|
||||
'sequenceNumber': 4294967295,
|
||||
'script': '473044022054233934268b30be779fad874ef42e8db928ba27a1b612d5f111b3ee95eb271c022024272bbaf2dcc4050bd3b9dfa3c93884f6ba6ad7d257598b8245abb65b5ab1e40141040682fdb281a8533e21e13dfd1fcfa424912a85b6cdc4136b5842c85de05ac1f0e4a013f20702adeb53329de13b2ef388e5ed6244676f4f1ee4ee685ab607964d',
|
||||
'scriptString': '71 0x3044022054233934268b30be779fad874ef42e8db928ba27a1b612d5f111b3ee95eb271c022024272bbaf2dcc4050bd3b9dfa3c93884f6ba6ad7d257598b8245abb65b5ab1e401 65 0x040682fdb281a8533e21e13dfd1fcfa424912a85b6cdc4136b5842c85de05ac1f0e4a013f20702adeb53329de13b2ef388e5ed6244676f4f1ee4ee685ab607964d',
|
||||
'output': {
|
||||
'satoshis': 53540000,
|
||||
'script': '76a91454dcfbff9e109bf369e457f6b0f869f4e647076488ac'
|
||||
}
|
||||
address: 'moFfnRwt77pApKnnU6m5uocFaa43aAYpt5',
|
||||
prevTxId: 'ea97726ffc529808094ae5568342267931a058375a20147535a0d095837079f3',
|
||||
outputIndex: 1,
|
||||
sequence: 4294967295,
|
||||
script: '473044022054233934268b30be779fad874ef42e8db928ba27a1b612d5f111b3ee95eb271c022024272bbaf2dcc4050bd3b9dfa3c93884f6ba6ad7d257598b8245abb65b5ab1e40141040682fdb281a8533e21e13dfd1fcfa424912a85b6cdc4136b5842c85de05ac1f0e4a013f20702adeb53329de13b2ef388e5ed6244676f4f1ee4ee685ab607964d',
|
||||
scriptAsm: '71 0x3044022054233934268b30be779fad874ef42e8db928ba27a1b612d5f111b3ee95eb271c022024272bbaf2dcc4050bd3b9dfa3c93884f6ba6ad7d257598b8245abb65b5ab1e401 65 0x040682fdb281a8533e21e13dfd1fcfa424912a85b6cdc4136b5842c85de05ac1f0e4a013f20702adeb53329de13b2ef388e5ed6244676f4f1ee4ee685ab607964d',
|
||||
satoshis: 53540000,
|
||||
},
|
||||
{
|
||||
'prevTxId': '980a9cc2dbc2d3464eb9900ae6d579a03045408563320f62d99316c3d4ff58b7',
|
||||
'outputIndex': 2,
|
||||
'sequenceNumber': 4294967295,
|
||||
'script': '473044022044938ac3f8fcb8da29011df6397ed28cc7e894cdc35d596d4f3623bd8c7e465f022014829c6e0bd7ee97a1bcfef6b85c5fd232653f289394fc6ce6ebb41c73403f1b014104d9ccf88efc6e5be3151fae5e848efd94c91d75e7bf621f9f724a8caff51415338525d3239fae6b93826edf759dd562f77693e55dfa852ffd96a92d683db590f2',
|
||||
'scriptString': '71 0x3044022044938ac3f8fcb8da29011df6397ed28cc7e894cdc35d596d4f3623bd8c7e465f022014829c6e0bd7ee97a1bcfef6b85c5fd232653f289394fc6ce6ebb41c73403f1b01 65 0x04d9ccf88efc6e5be3151fae5e848efd94c91d75e7bf621f9f724a8caff51415338525d3239fae6b93826edf759dd562f77693e55dfa852ffd96a92d683db590f2',
|
||||
'output': {
|
||||
'satoshis': 299829,
|
||||
'script': '76a914db731c9ebf3874d75ee26b9c19b692d278c283f788ac'
|
||||
}
|
||||
address: 'n1XJBAyU4hNR4xRtY3UxnmAteoJX83p5qv',
|
||||
prevTxId: '980a9cc2dbc2d3464eb9900ae6d579a03045408563320f62d99316c3d4ff58b7',
|
||||
outputIndex: 2,
|
||||
sequence: 4294967295,
|
||||
script: '473044022044938ac3f8fcb8da29011df6397ed28cc7e894cdc35d596d4f3623bd8c7e465f022014829c6e0bd7ee97a1bcfef6b85c5fd232653f289394fc6ce6ebb41c73403f1b014104d9ccf88efc6e5be3151fae5e848efd94c91d75e7bf621f9f724a8caff51415338525d3239fae6b93826edf759dd562f77693e55dfa852ffd96a92d683db590f2',
|
||||
scriptAsm: '71 0x3044022044938ac3f8fcb8da29011df6397ed28cc7e894cdc35d596d4f3623bd8c7e465f022014829c6e0bd7ee97a1bcfef6b85c5fd232653f289394fc6ce6ebb41c73403f1b01 65 0x04d9ccf88efc6e5be3151fae5e848efd94c91d75e7bf621f9f724a8caff51415338525d3239fae6b93826edf759dd562f77693e55dfa852ffd96a92d683db590f2',
|
||||
satoshis: 299829,
|
||||
}
|
||||
],
|
||||
'outputs': [
|
||||
outputs: [
|
||||
{
|
||||
'satoshis': 220000,
|
||||
'script': '76a914b9bbd76588d9e4e09f0369a9aa0b2749a11c4e8d88ac'
|
||||
satoshis: 220000,
|
||||
script: '76a914b9bbd76588d9e4e09f0369a9aa0b2749a11c4e8d88ac',
|
||||
address: 'mxT2KzTUQvsaYYothDtjcdvyAdaHA9ofMp'
|
||||
},
|
||||
{
|
||||
'satoshis': 53320000,
|
||||
'script': '76a914d2ec20bb8e5f25a52f730384b803d95683250e0b88ac'
|
||||
satoshis: 53320000,
|
||||
address: 'mzkD4nmQ8ixqxySdBgsXTpgvAMK5iRZpNK',
|
||||
script: '76a914d2ec20bb8e5f25a52f730384b803d95683250e0b88ac'
|
||||
},
|
||||
{
|
||||
'satoshis': 289829,
|
||||
'script': '76a914583df9fa56ad961051e00ca93e68dfaf1eab9ec588ac'
|
||||
address: 'moZY18rGNmh4YCPeugtGW46AkkWMQttBUD',
|
||||
satoshis: 289829,
|
||||
script: '76a914583df9fa56ad961051e00ca93e68dfaf1eab9ec588ac'
|
||||
}
|
||||
],
|
||||
'nLockTime': 0
|
||||
});
|
||||
locktime: 0
|
||||
};
|
||||
|
||||
tx.__height = 534181;
|
||||
tx.__timestamp = 1441116143;
|
||||
tx.__blockHash = '0000000000000041ddc94ecf4f86a456a83b2e320c36c6f0c13ff92c7e75f013';
|
||||
var txinfos2 = {
|
||||
totalCount: 1,
|
||||
items: [
|
||||
|
||||
@ -94,44 +94,56 @@ describe('Transactions', function() {
|
||||
'fees': 0.0003
|
||||
};
|
||||
|
||||
var bitcoreTxObj = {
|
||||
'hash': 'b85334bf2df35c6dd5b294efe92ffc793a78edff75a2ca666fc296ffb04bbba0',
|
||||
'version': 1,
|
||||
'inputs': [
|
||||
var spentTxId = '614fe1708825f9c21732394e4784cc6808ac1d8b939736bfdead970567561eec';
|
||||
var spentIndex = 1;
|
||||
var detailedTransaction = {
|
||||
hex: '7b5485d3628922f004f470f497f6a83f6df4df347e1bce15831a964623f8072b565f7c7bc5dcbc717c6e2a2301a2f6b4a19e65042ad88c9f5d037628de38603c4f137f625e135691e2bd0169cab74e1368abe858f3c3d116e9d13c4c85ead129d9edf0245a3fb1b35561bd230607dca0dcaf3cffc735a3982d8384a1ecc5d622a7bb4db8b5d47d061701978b1f45e2e39946d66c3394f8a20b8ac8c931a6786f761da2d0f3fa2c7c93edee9f2a94de7c47510498767c3d87afe68815bd6058710bf5d8c850a5d20fc217943d9c00da58a4908d92a0912578247746f2086e54cb7b81b6a9e3cc1741457e956d41bdeaae06c441db96ec39a2d17147dd8f468eeaeaaa78dc2e53d66188a791c46b2a4965639ad72a2b90ee52786e36db1a8cf924346b105a40b41a3027dae657782ef7e8b56d6da86062184cb5366d4886cd2ce27471d9d62d1df447f2e5a9641e1f8d1f2b628054d3bd915bf7932bcec6f2dd4965e2406b1dba445b5493ee475757de332618220318dd806b880a7364370c5c0c3b736a653f97b2901fdb5cf4b5b2230b09b2d7bd324a392633d51c598765f9bd286421239a1f25db34a9a61f645eb601e59f10fc1b',
|
||||
hash: 'b85334bf2df35c6dd5b294efe92ffc793a78edff75a2ca666fc296ffb04bbba0',
|
||||
version: 1,
|
||||
blockHash: '0000000000000afa0c3c0afd450c793a1e300ec84cbe9555166e06132f19a8f7',
|
||||
height: 533974,
|
||||
blockTimestamp: 1440987503,
|
||||
inputSatoshis: 34955390,
|
||||
outputSatoshis: 34925390,
|
||||
feeSatoshis: 30000,
|
||||
inputs: [
|
||||
{
|
||||
'prevTxId': '87c9b0f27571fff14b8c2d69e55614eacedd0f59fcc490b721320f9dae145aad',
|
||||
'outputIndex': 0,
|
||||
'sequenceNumber': 4294967295,
|
||||
'script': '4830450221008e5df62719cd92d7b137d00bbd27f153f2909bcad3a300960bc1020ec6d5e961022039df51600ff4fb5da5a794d1648c6b47c1f7d277fd5877fb5e52a730a3595f8c014104eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307',
|
||||
'scriptString': '72 0x30450221008e5df62719cd92d7b137d00bbd27f153f2909bcad3a300960bc1020ec6d5e961022039df51600ff4fb5da5a794d1648c6b47c1f7d277fd5877fb5e52a730a3595f8c01 65 0x04eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307',
|
||||
'output': {
|
||||
'satoshis': 18535505,
|
||||
'script': '76a9146efcf883b4b6f9997be9a0600f6c095fe2bd2d9288ac'
|
||||
}
|
||||
address: 'mqdofsXHpePPGBFXuwwypAqCcXi48Xhb2f',
|
||||
prevTxId: '87c9b0f27571fff14b8c2d69e55614eacedd0f59fcc490b721320f9dae145aad',
|
||||
outputIndex: 0,
|
||||
sequence: 4294967295,
|
||||
script: '4830450221008e5df62719cd92d7b137d00bbd27f153f2909bcad3a300960bc1020ec6d5e961022039df51600ff4fb5da5a794d1648c6b47c1f7d277fd5877fb5e52a730a3595f8c014104eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307',
|
||||
scriptAsm: '30450221008e5df62719cd92d7b137d00bbd27f153f2909bcad3a300960bc1020ec6d5e961022039df51600ff4fb5da5a794d1648c6b47c1f7d277fd5877fb5e52a730a3595f8c01 04eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307',
|
||||
satoshis: 18535505,
|
||||
},
|
||||
{
|
||||
'prevTxId': 'd8a10aaedf3dd33b5ddf8979273f3dbf61e4638d1aa6a93c59ea22bc65ac2196',
|
||||
'outputIndex': 0,
|
||||
'sequenceNumber': 4294967295,
|
||||
'script': '4730440220761464d7bab9515d92260762a97af82a9b25d202d8f7197b1aaec81b6fed541f022059f99606de6b06e17b2cd102dceb3807ebdd9e777a5b77c9a0b3672f5eabcb31014104eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307',
|
||||
'scriptString': '71 0x30440220761464d7bab9515d92260762a97af82a9b25d202d8f7197b1aaec81b6fed541f022059f99606de6b06e17b2cd102dceb3807ebdd9e777a5b77c9a0b3672f5eabcb3101 65 0x04eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307',
|
||||
'output': {
|
||||
'satoshis': 16419885,
|
||||
'script': '76a9146efcf883b4b6f9997be9a0600f6c095fe2bd2d9288ac'
|
||||
}
|
||||
address: 'mqdofsXHpePPGBFXuwwypAqCcXi48Xhb2f',
|
||||
prevTxId: 'd8a10aaedf3dd33b5ddf8979273f3dbf61e4638d1aa6a93c59ea22bc65ac2196',
|
||||
outputIndex: 0,
|
||||
sequence: 4294967295,
|
||||
script: '4730440220761464d7bab9515d92260762a97af82a9b25d202d8f7197b1aaec81b6fed541f022059f99606de6b06e17b2cd102dceb3807ebdd9e777a5b77c9a0b3672f5eabcb31014104eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307',
|
||||
scriptAsm: '30440220761464d7bab9515d92260762a97af82a9b25d202d8f7197b1aaec81b6fed541f022059f99606de6b06e17b2cd102dceb3807ebdd9e777a5b77c9a0b3672f5eabcb3101 04eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307',
|
||||
satoshis: 16419885,
|
||||
}
|
||||
],
|
||||
'outputs': [
|
||||
outputs: [
|
||||
{
|
||||
'satoshis': 21247964,
|
||||
'script': '76a9144b7b335f978f130269fe661423258ae9642df8a188ac'
|
||||
satoshis: 21247964,
|
||||
script: '76a9144b7b335f978f130269fe661423258ae9642df8a188ac',
|
||||
scriptAsm: 'OP_DUP OP_HASH160 4b7b335f978f130269fe661423258ae9642df8a1 OP_EQUALVERIFY OP_CHECKSIG',
|
||||
address: 'mnQ4ZaGessNgdxmWPxbTHcfx4b8R6eUr1X'
|
||||
},
|
||||
{
|
||||
'satoshis': 13677426,
|
||||
'script': '76a9146efcf883b4b6f9997be9a0600f6c095fe2bd2d9288ac'
|
||||
address: 'mqdofsXHpePPGBFXuwwypAqCcXi48Xhb2f',
|
||||
satoshis: 13677426,
|
||||
scriptAsm: 'OP_DUP OP_HASH160 6efcf883b4b6f9997be9a0600f6c095fe2bd2d92 OP_EQUALVERIFY OP_CHECKSIG',
|
||||
script: '76a9146efcf883b4b6f9997be9a0600f6c095fe2bd2d9288ac',
|
||||
spentTxId: spentTxId,
|
||||
spentIndex: spentIndex,
|
||||
spentHeight: 10
|
||||
}
|
||||
],
|
||||
'nLockTime': 0
|
||||
locktime: 0
|
||||
};
|
||||
|
||||
var todos = {
|
||||
@ -162,22 +174,8 @@ describe('Transactions', function() {
|
||||
]
|
||||
};
|
||||
|
||||
var spentTxId = '614fe1708825f9c21732394e4784cc6808ac1d8b939736bfdead970567561eec';
|
||||
var spentIndex = 1;
|
||||
|
||||
var bitcoreTx = bitcore.Transaction(bitcoreTxObj);
|
||||
bitcoreTx.__blockHash = '0000000000000afa0c3c0afd450c793a1e300ec84cbe9555166e06132f19a8f7';
|
||||
bitcoreTx.__height = 533974;
|
||||
bitcoreTx.__timestamp = 1440987503;
|
||||
bitcoreTx.populateInputs = sinon.stub().callsArg(2);
|
||||
bitcoreTx.toObject = sinon.stub().returns(bitcoreTxObj);
|
||||
|
||||
bitcoreTx.outputs[1].__spentTxId = spentTxId;
|
||||
bitcoreTx.outputs[1].__spentIndex = spentIndex;
|
||||
bitcoreTx.outputs[1].__spentHeight = 10;
|
||||
|
||||
var node = {
|
||||
getTransactionWithBlockInfo: sinon.stub().callsArgWith(1, null, bitcoreTx),
|
||||
getDetailedTransaction: sinon.stub().callsArgWith(1, null, detailedTransaction),
|
||||
services: {
|
||||
bitcoind: {
|
||||
height: 534203
|
||||
@ -187,6 +185,7 @@ describe('Transactions', function() {
|
||||
};
|
||||
|
||||
var transactions = new TxController(node);
|
||||
var txid = 'b85334bf2df35c6dd5b294efe92ffc793a78edff75a2ca666fc296ffb04bbba0';
|
||||
var req = {
|
||||
params: {
|
||||
txid: txid
|
||||
@ -198,7 +197,6 @@ describe('Transactions', function() {
|
||||
should(merged).eql(insight);
|
||||
done();
|
||||
};
|
||||
var txid = 'b85334bf2df35c6dd5b294efe92ffc793a78edff75a2ca666fc296ffb04bbba0';
|
||||
|
||||
transactions.transaction(req, res, next);
|
||||
});
|
||||
@ -210,72 +208,162 @@ describe('Transactions', function() {
|
||||
sandbox.restore();
|
||||
});
|
||||
it('by block hash', function(done) {
|
||||
var blockHex = '07000020a491892cca9f143f7f00b8d65bbce0204bb32e17e914325fa5010000000000003e28f0519ecf01f7f01ea8da61084b2e4741a18ce1f3738117b84458353764b06fb9e35567f20c1a78eb626f0301000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2303d6250800feb0aae355fe263600000963676d696e6572343208ae5800000000000000ffffffff01c018824a000000001976a91468bedce8982d25c3b6b03f6238cbad00378b8ead88ac000000000100000002ad5a14ae9d0f3221b790c4fc590fddceea1456e5692d8c4bf1ff7175f2b0c987000000008b4830450221008e5df62719cd92d7b137d00bbd27f153f2909bcad3a300960bc1020ec6d5e961022039df51600ff4fb5da5a794d1648c6b47c1f7d277fd5877fb5e52a730a3595f8c014104eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307ffffffff9621ac65bc22ea593ca9a61a8d63e461bf3d3f277989df5d3bd33ddfae0aa1d8000000008a4730440220761464d7bab9515d92260762a97af82a9b25d202d8f7197b1aaec81b6fed541f022059f99606de6b06e17b2cd102dceb3807ebdd9e777a5b77c9a0b3672f5eabcb31014104eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307ffffffff02dc374401000000001976a9144b7b335f978f130269fe661423258ae9642df8a188ac72b3d000000000001976a9146efcf883b4b6f9997be9a0600f6c095fe2bd2d9288ac000000000100000002060d3cb6dfb7ffe85e2908010fea63190c9707e96fc7448128eb895b5e222771030000006b483045022100f67cffc0ae23adb236ff3edb4a9736e277605db30cc7708dfab8cf1e1483bbce022052396aa5d664ec1cb65992c423fd9a17e94dc7af328d2d559e90746dd195ca5901210346134da14907581d8190d3980caaf46d95e4eb9c1ca8e70f1fc6007fefb1909dfeffffff7b2d8a8263cffbdb722e2a5c74166e6f2258634e277c0b08f51b578b667e2fba000000006a473044022077222a91cda23af69179377c62d84a176fb12caff6c5cbf6ae9e5957ff3b1afe0220768edead76819228dcba18cca3c9a5a5d4c32919720f21df21a297ba375bbe5c012103371ea5a4dfe356b3ea4042a537d7ab7ee0faabd43e21b6cc076fda2240629eeefeffffff02209a1d00000000001976a9148e451eec7ca0a1764b4ab119274efdd2727b3c8588ac40420f00000000001976a914d0fce8f064cd1059a6a11501dd66fe42368572b088accb250800';
|
||||
var blockIndex = {
|
||||
'hash': '0000000000000afa0c3c0afd450c793a1e300ec84cbe9555166e06132f19a8f7',
|
||||
'blockheight': 533974,
|
||||
'chainwork': '0000000000000000000000000000000000000000000000054626b1839ade284a',
|
||||
'previousblockhash': '00000000000001a55f3214e9172eb34b20e0bc5bd6b8007f3f149fca2c8991a4',
|
||||
'height': 533974
|
||||
var blockOverview = {
|
||||
hash: '0000000000000afa0c3c0afd450c793a1e300ec84cbe9555166e06132f19a8f7',
|
||||
height: 533974,
|
||||
chainWork: '0000000000000000000000000000000000000000000000054626b1839ade284a',
|
||||
prevHash: '00000000000001a55f3214e9172eb34b20e0bc5bd6b8007f3f149fca2c8991a4',
|
||||
txids: [
|
||||
'25a988e54b02e0e5df146a0f8fa7b9db56210533a9f04bdfda5f4ceb6f77aadd',
|
||||
'b85334bf2df35c6dd5b294efe92ffc793a78edff75a2ca666fc296ffb04bbba0',
|
||||
'2e01c7a4a0e335112236b711c4aaddd02e8dc59ba2cda416e8f80ff06dddd7e1'
|
||||
]
|
||||
};
|
||||
|
||||
var block = bitcore.Block.fromBuffer(new Buffer(blockHex, 'hex'));
|
||||
var transactionDetails = {
|
||||
'25a988e54b02e0e5df146a0f8fa7b9db56210533a9f04bdfda5f4ceb6f77aadd': {
|
||||
hex: '01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2303d6250800feb0aae355fe263600000963676d696e6572343208ae5800000000000000ffffffff01c018824a000000001976a91468bedce8982d25c3b6b03f6238cbad00378b8ead88ac00000000',
|
||||
coinbase: true,
|
||||
version: 1,
|
||||
blockTimestamp: 1440987503,
|
||||
blockHash: '0000000000000afa0c3c0afd450c793a1e300ec84cbe9555166e06132f19a8f7',
|
||||
height: 533974,
|
||||
inputSatoshis: 0,
|
||||
outputSatoshis: 1250040000,
|
||||
feeSatoshis: 0,
|
||||
locktime: 0,
|
||||
hash: '25a988e54b02e0e5df146a0f8fa7b9db56210533a9f04bdfda5f4ceb6f77aadd',
|
||||
inputs: [
|
||||
{
|
||||
script: '03d6250800feb0aae355fe263600000963676d696e6572343208ae5800000000000000',
|
||||
sequence: 4294967295
|
||||
}
|
||||
],
|
||||
outputs: [
|
||||
{
|
||||
address: 'mq4oDPjmNWnBxbzx7qouzhpCSTMePUtYDF',
|
||||
script: '76a91468bedce8982d25c3b6b03f6238cbad00378b8ead88ac',
|
||||
scriptAsm: 'OP_DUP OP_HASH160 68bedce8982d25c3b6b03f6238cbad00378b8ead OP_EQUALVERIFY OP_CHECKSIG',
|
||||
satoshis: 1250040000
|
||||
}
|
||||
]
|
||||
},
|
||||
'b85334bf2df35c6dd5b294efe92ffc793a78edff75a2ca666fc296ffb04bbba0': {
|
||||
hex: '0100000002ad5a14ae9d0f3221b790c4fc590fddceea1456e5692d8c4bf1ff7175f2b0c987000000008b4830450221008e5df62719cd92d7b137d00bbd27f153f2909bcad3a300960bc1020ec6d5e961022039df51600ff4fb5da5a794d1648c6b47c1f7d277fd5877fb5e52a730a3595f8c014104eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307ffffffff9621ac65bc22ea593ca9a61a8d63e461bf3d3f277989df5d3bd33ddfae0aa1d8000000008a4730440220761464d7bab9515d92260762a97af82a9b25d202d8f7197b1aaec81b6fed541f022059f99606de6b06e17b2cd102dceb3807ebdd9e777a5b77c9a0b3672f5eabcb31014104eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307ffffffff02dc374401000000001976a9144b7b335f978f130269fe661423258ae9642df8a188ac72b3d000000000001976a9146efcf883b4b6f9997be9a0600f6c095fe2bd2d9288ac00000000',
|
||||
inputSatoshis: 34955390,
|
||||
outputSatoshis: 34925390,
|
||||
feeSatoshis: 30000,
|
||||
version: 1,
|
||||
hash: 'b85334bf2df35c6dd5b294efe92ffc793a78edff75a2ca666fc296ffb04bbba0',
|
||||
blockTimestamp: 1440987503,
|
||||
height: 533974,
|
||||
blockHash: '0000000000000afa0c3c0afd450c793a1e300ec84cbe9555166e06132f19a8f7',
|
||||
locktime: 0,
|
||||
inputs: [
|
||||
{
|
||||
satoshis: 18535505,
|
||||
address: 'mqdofsXHpePPGBFXuwwypAqCcXi48Xhb2f',
|
||||
script: '4830450221008e5df62719cd92d7b137d00bbd27f153f2909bcad3a300960bc1020ec6d5e961022039df51600ff4fb5da5a794d1648c6b47c1f7d277fd5877fb5e52a730a3595f8c014104eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307',
|
||||
scriptAsm: '30450221008e5df62719cd92d7b137d00bbd27f153f2909bcad3a300960bc1020ec6d5e961022039df51600ff4fb5da5a794d1648c6b47c1f7d277fd5877fb5e52a730a3595f8c01 04eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307',
|
||||
prevTxId: '87c9b0f27571fff14b8c2d69e55614eacedd0f59fcc490b721320f9dae145aad',
|
||||
outputIndex: 0,
|
||||
sequence: 4294967295
|
||||
},
|
||||
{
|
||||
address: 'mqdofsXHpePPGBFXuwwypAqCcXi48Xhb2f',
|
||||
script: '4730440220761464d7bab9515d92260762a97af82a9b25d202d8f7197b1aaec81b6fed541f022059f99606de6b06e17b2cd102dceb3807ebdd9e777a5b77c9a0b3672f5eabcb31014104eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307',
|
||||
scriptAsm: '30440220761464d7bab9515d92260762a97af82a9b25d202d8f7197b1aaec81b6fed541f022059f99606de6b06e17b2cd102dceb3807ebdd9e777a5b77c9a0b3672f5eabcb3101 04eb1e0ccd9afcac42229348dd776e991c69551ae3474340fada12e787e51758397e1d3afdba360d6374261125ea3b6ea079a5f202c150dfd729e1062d9176a307',
|
||||
satoshis: 16419885,
|
||||
sequence: 4294967295,
|
||||
prevTxId: 'd8a10aaedf3dd33b5ddf8979273f3dbf61e4638d1aa6a93c59ea22bc65ac2196',
|
||||
outputIndex: 0
|
||||
}
|
||||
],
|
||||
outputs: [
|
||||
{
|
||||
address: 'mnQ4ZaGessNgdxmWPxbTHcfx4b8R6eUr1X',
|
||||
script: '76a9144b7b335f978f130269fe661423258ae9642df8a188ac',
|
||||
scriptAsm: 'OP_DUP OP_HASH160 4b7b335f978f130269fe661423258ae9642df8a1 OP_EQUALVERIFY OP_CHECKSIG',
|
||||
satoshis: 21247964
|
||||
},
|
||||
{
|
||||
script: '76a9146efcf883b4b6f9997be9a0600f6c095fe2bd2d9288ac',
|
||||
scriptAsm: 'OP_DUP OP_HASH160 6efcf883b4b6f9997be9a0600f6c095fe2bd2d92 OP_EQUALVERIFY OP_CHECKSIG',
|
||||
address: 'mqdofsXHpePPGBFXuwwypAqCcXi48Xhb2f',
|
||||
satoshis: 13677426,
|
||||
spentTxId: '614fe1708825f9c21732394e4784cc6808ac1d8b939736bfdead970567561eec',
|
||||
spentIndex: 1,
|
||||
spentHeight: 200
|
||||
}
|
||||
]
|
||||
},
|
||||
'2e01c7a4a0e335112236b711c4aaddd02e8dc59ba2cda416e8f80ff06dddd7e1': {
|
||||
hex: '0100000002060d3cb6dfb7ffe85e2908010fea63190c9707e96fc7448128eb895b5e222771030000006b483045022100f67cffc0ae23adb236ff3edb4a9736e277605db30cc7708dfab8cf1e1483bbce022052396aa5d664ec1cb65992c423fd9a17e94dc7af328d2d559e90746dd195ca5901210346134da14907581d8190d3980caaf46d95e4eb9c1ca8e70f1fc6007fefb1909dfeffffff7b2d8a8263cffbdb722e2a5c74166e6f2258634e277c0b08f51b578b667e2fba000000006a473044022077222a91cda23af69179377c62d84a176fb12caff6c5cbf6ae9e5957ff3b1afe0220768edead76819228dcba18cca3c9a5a5d4c32919720f21df21a297ba375bbe5c012103371ea5a4dfe356b3ea4042a537d7ab7ee0faabd43e21b6cc076fda2240629eeefeffffff02209a1d00000000001976a9148e451eec7ca0a1764b4ab119274efdd2727b3c8588ac40420f00000000001976a914d0fce8f064cd1059a6a11501dd66fe42368572b088accb250800',
|
||||
blockHash: '0000000000000afa0c3c0afd450c793a1e300ec84cbe9555166e06132f19a8f7',
|
||||
blockTimestamp: 1440987503,
|
||||
height: 533974,
|
||||
locktime: 533963,
|
||||
inputSatoshis: 2950000,
|
||||
outputSatoshis: 2940000,
|
||||
feeSatoshis: 10000,
|
||||
version: 1,
|
||||
hash: '2e01c7a4a0e335112236b711c4aaddd02e8dc59ba2cda416e8f80ff06dddd7e1',
|
||||
inputs: [
|
||||
{
|
||||
address: 'mgZK8zpudWoAaAwpLQSgc9t9PJJyEBpBdJ',
|
||||
satoshis: 990000,
|
||||
script: '483045022100f67cffc0ae23adb236ff3edb4a9736e277605db30cc7708dfab8cf1e1483bbce022052396aa5d664ec1cb65992c423fd9a17e94dc7af328d2d559e90746dd195ca5901210346134da14907581d8190d3980caaf46d95e4eb9c1ca8e70f1fc6007fefb1909d',
|
||||
scriptAsm: '3045022100f67cffc0ae23adb236ff3edb4a9736e277605db30cc7708dfab8cf1e1483bbce022052396aa5d664ec1cb65992c423fd9a17e94dc7af328d2d559e90746dd195ca5901 0346134da14907581d8190d3980caaf46d95e4eb9c1ca8e70f1fc6007fefb1909d',
|
||||
sequence: 4294967294,
|
||||
outputIndex: 3,
|
||||
prevTxId: '7127225e5b89eb288144c76fe907970c1963ea0f0108295ee8ffb7dfb63c0d06'
|
||||
},
|
||||
{
|
||||
address: 'n4oM7bPuC4ZPdCEDvtw9xGYQC7jmi5S6F4',
|
||||
satoshis: 1960000,
|
||||
script: '473044022077222a91cda23af69179377c62d84a176fb12caff6c5cbf6ae9e5957ff3b1afe0220768edead76819228dcba18cca3c9a5a5d4c32919720f21df21a297ba375bbe5c012103371ea5a4dfe356b3ea4042a537d7ab7ee0faabd43e21b6cc076fda2240629eee',
|
||||
scriptAsm: '3044022077222a91cda23af69179377c62d84a176fb12caff6c5cbf6ae9e5957ff3b1afe0220768edead76819228dcba18cca3c9a5a5d4c32919720f21df21a297ba375bbe5c01 03371ea5a4dfe356b3ea4042a537d7ab7ee0faabd43e21b6cc076fda2240629eee',
|
||||
prevTxId: 'ba2f7e668b571bf5080b7c274e6358226f6e16745c2a2e72dbfbcf63828a2d7b',
|
||||
sequence: 4294967294,
|
||||
outputIndex : 0
|
||||
}
|
||||
],
|
||||
outputs: [
|
||||
{
|
||||
spentTxId: '9a213b879da9073a9a30606f9046f35f36f268cbf03f6242993a97c4c07c00b9',
|
||||
spentIndex: 1,
|
||||
spentHeight: 200,
|
||||
satoshis: 1940000,
|
||||
script: '76a9148e451eec7ca0a1764b4ab119274efdd2727b3c8588ac',
|
||||
scriptAsm: 'OP_DUP OP_HASH160 8e451eec7ca0a1764b4ab119274efdd2727b3c85 OP_EQUALVERIFY OP_CHECKSIG',
|
||||
address: 'mtVD3tdifBNujYzZ5N7PgXfKk4Bc85tDKA'
|
||||
},
|
||||
{
|
||||
spentTxId: '418d3eb60275957b3456b96902e908abf962e71be4c4f09486564254664951bc',
|
||||
spentIndex: 34,
|
||||
spentHeight: 200,
|
||||
script: '76a914d0fce8f064cd1059a6a11501dd66fe42368572b088ac',
|
||||
scriptAsm: 'OP_DUP OP_HASH160 d0fce8f064cd1059a6a11501dd66fe42368572b0 OP_EQUALVERIFY OP_CHECKSIG',
|
||||
address: 'mzZypShcs1B35udnkqeYeJy8rUdgHDDvKG',
|
||||
satoshis: 1000000
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
var node = {
|
||||
getBlock: sinon.stub().callsArgWith(1, null, block),
|
||||
getBlockOverview: sinon.stub().callsArgWith(1, null, blockOverview),
|
||||
getDetailedTransaction: function(txid, callback) {
|
||||
callback(null, transactionDetails[txid]);
|
||||
},
|
||||
services: {
|
||||
bitcoind: {
|
||||
getBlockHeader: sinon.stub().callsArgWith(1, null, blockIndex),
|
||||
height: 534209
|
||||
}
|
||||
},
|
||||
network: 'testnet'
|
||||
};
|
||||
|
||||
bitcore.Transaction.prototype.populateSpentInfo = _.noop();
|
||||
sandbox.stub(bitcore.Transaction.prototype, 'populateSpentInfo', function(db, options, callback) {
|
||||
if (this.hash === 'b85334bf2df35c6dd5b294efe92ffc793a78edff75a2ca666fc296ffb04bbba0') {
|
||||
this.outputs[1].__spentTxId = '614fe1708825f9c21732394e4784cc6808ac1d8b939736bfdead970567561eec';
|
||||
this.outputs[1].__spentIndex = 1;
|
||||
this.outputs[1].__spentHeight = 200;
|
||||
} else if (this.hash === '2e01c7a4a0e335112236b711c4aaddd02e8dc59ba2cda416e8f80ff06dddd7e1') {
|
||||
this.outputs[0].__spentTxId = '9a213b879da9073a9a30606f9046f35f36f268cbf03f6242993a97c4c07c00b9';
|
||||
this.outputs[0].__spentIndex = 1;
|
||||
this.outputs[0].__spentHeight = 200;
|
||||
|
||||
this.outputs[1].__spentTxId = '418d3eb60275957b3456b96902e908abf962e71be4c4f09486564254664951bc';
|
||||
this.outputs[1].__spentIndex = 34;
|
||||
this.outputs[1].__spentHeight = 200;
|
||||
}
|
||||
callback();
|
||||
});
|
||||
|
||||
bitcore.Transaction.prototype.populateInputs = _.noop();
|
||||
sandbox.stub(bitcore.Transaction.prototype, 'populateInputs', function(db, pool, callback) {
|
||||
if(this.hash === 'b85334bf2df35c6dd5b294efe92ffc793a78edff75a2ca666fc296ffb04bbba0') {
|
||||
this.inputs[0].output = new bitcore.Transaction.Output({
|
||||
satoshis: 18535505,
|
||||
script: '76a9146efcf883b4b6f9997be9a0600f6c095fe2bd2d9288ac'
|
||||
});
|
||||
|
||||
this.inputs[1].output = new bitcore.Transaction.Output({
|
||||
satoshis: 16419885,
|
||||
script: '76a9146efcf883b4b6f9997be9a0600f6c095fe2bd2d9288ac'
|
||||
});
|
||||
} else if(this.hash === '2e01c7a4a0e335112236b711c4aaddd02e8dc59ba2cda416e8f80ff06dddd7e1') {
|
||||
this.inputs[0].output = new bitcore.Transaction.Output({
|
||||
satoshis: 990000,
|
||||
script: '76a9140b6a5b76fab66d809e0f9e9336c79011880ba96188ac'
|
||||
});
|
||||
this.inputs[1].output = new bitcore.Transaction.Output({
|
||||
satoshis: 1960000,
|
||||
script: '76a914ff6498e8c2498cbad016e1bf3a28cfb178995dbd88ac'
|
||||
});
|
||||
}
|
||||
|
||||
callback();
|
||||
});
|
||||
|
||||
var transactions = new TxController(node);
|
||||
|
||||
var insight = {
|
||||
@ -550,64 +638,77 @@ describe('Transactions', function() {
|
||||
|
||||
var txinfos = [
|
||||
{
|
||||
tx: bitcore.Transaction().fromObject({
|
||||
'hash': 'bb0ec3b96209fac9529570ea6f83a86af2cceedde4aaf2bfcc4796680d23f1c7',
|
||||
'version': 1,
|
||||
'inputs': [
|
||||
tx: {
|
||||
hex: '010000000125c46caa6d839435b43c20d6d48978e677841244b37a09f6f6cd29bfaf5b5eea010000006b483045022100f4d169783bef70e3943d2a617cce55d9fe4e33fc6f9880b8277265e2f619a97002201238648abcdf52960500664e969046d41755f7fc371971ebc78002fc418465a6012103acdcd31d51272403ce0829447e59e2ac9e08ed0bf92011cbf7420addf24534e6feffffff02a913dda5000000001976a9143583efb5e64a4668c6c54bb5fcc30af4417b4f2d88ac809fd500000000001976a9149713201957f42379e574d7c70d506ee49c2c8ad688ac49260800',
|
||||
hash: 'bb0ec3b96209fac9529570ea6f83a86af2cceedde4aaf2bfcc4796680d23f1c7',
|
||||
version: 1,
|
||||
inputs: [
|
||||
{
|
||||
'prevTxId': 'ea5e5bafbf29cdf6f6097ab344128477e67889d4d6203cb43594836daa6cc425',
|
||||
'outputIndex': 1,
|
||||
'sequenceNumber': 4294967294,
|
||||
'script': '483045022100f4d169783bef70e3943d2a617cce55d9fe4e33fc6f9880b8277265e2f619a97002201238648abcdf52960500664e969046d41755f7fc371971ebc78002fc418465a6012103acdcd31d51272403ce0829447e59e2ac9e08ed0bf92011cbf7420addf24534e6',
|
||||
'scriptString': '72 0x3045022100f4d169783bef70e3943d2a617cce55d9fe4e33fc6f9880b8277265e2f619a97002201238648abcdf52960500664e969046d41755f7fc371971ebc78002fc418465a601 33 0x03acdcd31d51272403ce0829447e59e2ac9e08ed0bf92011cbf7420addf24534e6',
|
||||
'output': {
|
||||
'satoshis': 2796764565,
|
||||
'script': '76a91488b1fe8aec5ae4358a11447a2f22b2781faedb9b88ac'
|
||||
}
|
||||
prevTxId: 'ea5e5bafbf29cdf6f6097ab344128477e67889d4d6203cb43594836daa6cc425',
|
||||
outputIndex: 1,
|
||||
sequence: 4294967294,
|
||||
script: '483045022100f4d169783bef70e3943d2a617cce55d9fe4e33fc6f9880b8277265e2f619a97002201238648abcdf52960500664e969046d41755f7fc371971ebc78002fc418465a6012103acdcd31d51272403ce0829447e59e2ac9e08ed0bf92011cbf7420addf24534e6',
|
||||
scriptAsm: '3045022100f4d169783bef70e3943d2a617cce55d9fe4e33fc6f9880b8277265e2f619a97002201238648abcdf52960500664e969046d41755f7fc371971ebc78002fc418465a601 03acdcd31d51272403ce0829447e59e2ac9e08ed0bf92011cbf7420addf24534e6',
|
||||
satoshis: 2796764565,
|
||||
address: 'msyjRQQ88MabQmyafpKCjBHUwuJ49tVjcb'
|
||||
}
|
||||
],
|
||||
'outputs': [
|
||||
outputs: [
|
||||
{
|
||||
'satoshis': 2782729129,
|
||||
'script': '76a9143583efb5e64a4668c6c54bb5fcc30af4417b4f2d88ac'
|
||||
satoshis: 2782729129,
|
||||
address: 'mkPvAKZ2rar6qeG3KjBtJHHMSP1wFZH7Er',
|
||||
script: '76a9143583efb5e64a4668c6c54bb5fcc30af4417b4f2d88ac',
|
||||
scriptAsm: 'OP_DUP OP_HASH160 3583efb5e64a4668c6c54bb5fcc30af4417b4f2d OP_EQUALVERIFY OP_CHECKSIG'
|
||||
},
|
||||
{
|
||||
'satoshis': 14000000,
|
||||
'script': '76a9149713201957f42379e574d7c70d506ee49c2c8ad688ac'
|
||||
satoshis: 14000000,
|
||||
address: 'muHmEsjhjmATf9i3T9gHyeQoce9LXe2dWz',
|
||||
script: '76a9149713201957f42379e574d7c70d506ee49c2c8ad688ac',
|
||||
scriptAsm: 'OP_DUP OP_HASH160 9713201957f42379e574d7c70d506ee49c2c8ad6 OP_EQUALVERIFY OP_CHECKSIG'
|
||||
}
|
||||
],
|
||||
'nLockTime': 534089
|
||||
})
|
||||
inputSatoshis: 2796764565,
|
||||
outputSatoshis: 2796729129,
|
||||
feeSatoshis: 35436,
|
||||
locktime: 534089
|
||||
}
|
||||
},
|
||||
{
|
||||
tx: bitcore.Transaction().fromObject({
|
||||
'hash': '01f700df84c466f2a389440e5eeacdc47d04f380c39e5d19dce2ce91a11ecba3',
|
||||
'version': 1,
|
||||
'inputs': [
|
||||
tx: {
|
||||
hex: '0100000001c7f1230d689647ccbff2aae4ddeeccf26aa8836fea709552c9fa0962b9c30ebb000000006a47304402201ee69281db6b95bb1aa3074059b67581635b719e8f64e4c2694db6ec56ad9447022011e91528996ea459b1fb2c0b59363fecbefe4bc2ca90f7b2382bdaa358f2d5640121034cc057b12a68ee79df998004b9a1341bbb18b17ea4939bebaa3bac001e940f24feffffff02bce0c9a4000000001976a91456e446bc3489543d8324c6d0271524c0bd0506dd88ac80a81201000000001976a914011d2963b619186a318f768dddfd98cd553912a088ac53260800',
|
||||
hash: '01f700df84c466f2a389440e5eeacdc47d04f380c39e5d19dce2ce91a11ecba3',
|
||||
version: 1,
|
||||
inputs: [
|
||||
{
|
||||
'prevTxId': 'bb0ec3b96209fac9529570ea6f83a86af2cceedde4aaf2bfcc4796680d23f1c7',
|
||||
'outputIndex': 0,
|
||||
'sequenceNumber': 4294967294,
|
||||
'script': '47304402201ee69281db6b95bb1aa3074059b67581635b719e8f64e4c2694db6ec56ad9447022011e91528996ea459b1fb2c0b59363fecbefe4bc2ca90f7b2382bdaa358f2d5640121034cc057b12a68ee79df998004b9a1341bbb18b17ea4939bebaa3bac001e940f24',
|
||||
'scriptString': '71 0x304402201ee69281db6b95bb1aa3074059b67581635b719e8f64e4c2694db6ec56ad9447022011e91528996ea459b1fb2c0b59363fecbefe4bc2ca90f7b2382bdaa358f2d56401 33 0x034cc057b12a68ee79df998004b9a1341bbb18b17ea4939bebaa3bac001e940f24',
|
||||
'output': {
|
||||
'satoshis': 2782729129,
|
||||
'script': '76a9143583efb5e64a4668c6c54bb5fcc30af4417b4f2d88ac'
|
||||
}
|
||||
prevTxId: 'bb0ec3b96209fac9529570ea6f83a86af2cceedde4aaf2bfcc4796680d23f1c7',
|
||||
outputIndex: 0,
|
||||
sequence: 4294967294,
|
||||
script: '47304402201ee69281db6b95bb1aa3074059b67581635b719e8f64e4c2694db6ec56ad9447022011e91528996ea459b1fb2c0b59363fecbefe4bc2ca90f7b2382bdaa358f2d5640121034cc057b12a68ee79df998004b9a1341bbb18b17ea4939bebaa3bac001e940f24',
|
||||
scriptAsm: '304402201ee69281db6b95bb1aa3074059b67581635b719e8f64e4c2694db6ec56ad9447022011e91528996ea459b1fb2c0b59363fecbefe4bc2ca90f7b2382bdaa358f2d56401 034cc057b12a68ee79df998004b9a1341bbb18b17ea4939bebaa3bac001e940f24',
|
||||
satoshis: 2782729129,
|
||||
address: 'mkPvAKZ2rar6qeG3KjBtJHHMSP1wFZH7Er'
|
||||
}
|
||||
],
|
||||
'outputs': [
|
||||
outputs: [
|
||||
{
|
||||
'satoshis': 2764693692,
|
||||
'script': '76a91456e446bc3489543d8324c6d0271524c0bd0506dd88ac'
|
||||
satoshis: 2764693692,
|
||||
address: 'moSPsU4p2C2gssiniJ1JNH4fB9xs633tLv',
|
||||
script: '76a91456e446bc3489543d8324c6d0271524c0bd0506dd88ac',
|
||||
scriptAsm: 'OP_DUP OP_HASH160 56e446bc3489543d8324c6d0271524c0bd0506dd OP_EQUALVERIFY OP_CHECKSIG'
|
||||
},
|
||||
{
|
||||
'satoshis': 18000000,
|
||||
'script': '76a914011d2963b619186a318f768dddfd98cd553912a088ac'
|
||||
satoshis: 18000000,
|
||||
scriptAsm: 'OP_DUP OP_HASH160 011d2963b619186a318f768dddfd98cd553912a0 OP_EQUALVERIFY OP_CHECKSIG',
|
||||
script: '76a914011d2963b619186a318f768dddfd98cd553912a088ac',
|
||||
address: 'mfcquSAitCkUKXaYRZTRZQDfUegnL3kDew',
|
||||
spentTxId: '71a9e60c0341c9c258367f1a6d4253276f16e207bf84f41ff7412d8958a81bed'
|
||||
}
|
||||
],
|
||||
'nLockTime': 534099
|
||||
})
|
||||
inputSatoshis: 2782729129,
|
||||
outputSatoshis: 2782693692,
|
||||
feeSatoshis: 35437,
|
||||
locktime: 534099
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
@ -616,25 +717,25 @@ describe('Transactions', function() {
|
||||
items: txinfos
|
||||
};
|
||||
|
||||
txinfos[0].tx.__blockHash = '00000000000001001aba15de213648f370607fb048288dd27b96f7e833a73520';
|
||||
txinfos[0].tx.__timestamp = 1441068774;
|
||||
txinfos[0].tx.__height = 534105;
|
||||
txinfos[0].tx.blockHash = '00000000000001001aba15de213648f370607fb048288dd27b96f7e833a73520';
|
||||
txinfos[0].tx.blockTimestamp = 1441068774;
|
||||
txinfos[0].tx.height = 534105;
|
||||
|
||||
txinfos[1].tx.__blockHash = '0000000000000a3acc1f7fe72917eb48bb319ed96c125a6dfcc0ba6acab3c4d0';
|
||||
txinfos[1].tx.__timestamp = 1441072817;
|
||||
txinfos[1].tx.__height = 534110;
|
||||
txinfos[1].tx.blockHash = '0000000000000a3acc1f7fe72917eb48bb319ed96c125a6dfcc0ba6acab3c4d0';
|
||||
txinfos[1].tx.blockTimestamp = 1441072817;
|
||||
txinfos[1].tx.height = 534110;
|
||||
|
||||
txinfos[0].tx.outputs[0].__spentTxId = '01f700df84c466f2a389440e5eeacdc47d04f380c39e5d19dce2ce91a11ecba3';
|
||||
txinfos[0].tx.outputs[0].__spentIndex = 0;
|
||||
txinfos[0].tx.outputs[0].__spentHeight = 199;
|
||||
txinfos[0].tx.outputs[0].spentTxId = '01f700df84c466f2a389440e5eeacdc47d04f380c39e5d19dce2ce91a11ecba3';
|
||||
txinfos[0].tx.outputs[0].spentIndex = 0;
|
||||
txinfos[0].tx.outputs[0].spentHeight = 199;
|
||||
|
||||
txinfos[1].tx.outputs[0].__spentTxId = '661194e5533a395ce9076f292b7e0fb28fe94cd8832a81b4aa0517ff58c1ddd2';
|
||||
txinfos[1].tx.outputs[0].__spentIndex = 0;
|
||||
txinfos[1].tx.outputs[0].__spentHeight = 134;
|
||||
txinfos[1].tx.outputs[0].spentTxId = '661194e5533a395ce9076f292b7e0fb28fe94cd8832a81b4aa0517ff58c1ddd2';
|
||||
txinfos[1].tx.outputs[0].spentIndex = 0;
|
||||
txinfos[1].tx.outputs[0].spentHeight = 134;
|
||||
|
||||
txinfos[1].tx.outputs[1].__spentTxId = '71a9e60c0341c9c258367f1a6d4253276f16e207bf84f41ff7412d8958a81bed';
|
||||
txinfos[1].tx.outputs[1].__spentIndex = 0;
|
||||
txinfos[1].tx.outputs[1].__spentHeight = 112;
|
||||
txinfos[1].tx.outputs[1].spentTxId = '71a9e60c0341c9c258367f1a6d4253276f16e207bf84f41ff7412d8958a81bed';
|
||||
txinfos[1].tx.outputs[1].spentIndex = 0;
|
||||
txinfos[1].tx.outputs[1].spentHeight = 112;
|
||||
|
||||
var node = {
|
||||
getAddressHistory: sinon.stub().callsArgWith(2, null, historyResult),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user