bitcore-node
Version:
A blockchain indexing node with extended capabilities using bitcore
107 lines • 4.42 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ListTransactionsStream = void 0;
const stream_1 = require("stream");
const coin_1 = require("../../../models/coin");
class ListTransactionsStream extends stream_1.Transform {
constructor(wallet) {
super({ objectMode: true });
this.wallet = wallet;
}
async _transform(transaction, _, done) {
const sending = !!(await coin_1.CoinStorage.collection.countDocuments({
wallets: this.wallet._id,
'wallets.0': { $exists: true },
spentTxid: transaction.txid
}));
const wallet = this.wallet._id.toString();
if (sending) {
const outputs = await coin_1.CoinStorage.collection
.find({
chain: transaction.chain,
network: transaction.network,
mintTxid: transaction.txid
}, { batchSize: 10000 })
.project({ address: 1, wallets: 1, value: 1, mintIndex: 1 })
.addCursorFlag('noCursorTimeout', true)
.toArray();
outputs.forEach(output => {
const sendingToOurself = output.wallets.some(outputWallet => {
return outputWallet.equals(wallet);
});
if (!sendingToOurself) {
this.push(JSON.stringify({
id: transaction._id,
txid: transaction.txid,
fee: transaction.fee,
size: transaction.size,
category: 'send',
satoshis: -output.value,
height: transaction.blockHeight,
address: output.address,
outputIndex: output.mintIndex,
blockTime: transaction.blockTimeNormalized
}) + '\n');
}
else {
this.push(JSON.stringify({
id: transaction._id,
txid: transaction.txid,
fee: transaction.fee,
size: transaction.size,
category: 'move',
satoshis: -output.value,
height: transaction.blockHeight,
address: output.address,
outputIndex: output.mintIndex,
blockTime: transaction.blockTimeNormalized
}) + '\n');
}
});
if (transaction.fee > 0) {
this.push(JSON.stringify({
id: transaction._id,
txid: transaction.txid,
category: 'fee',
satoshis: -transaction.fee,
height: transaction.blockHeight,
blockTime: transaction.blockTimeNormalized
}) + '\n');
}
return done();
}
else {
const outputs = await coin_1.CoinStorage.collection
.find({
wallets: this.wallet._id,
'wallets.0': { $exists: true },
mintTxid: transaction.txid
})
.project({ address: 1, wallets: 1, value: 1, mintIndex: 1 })
.addCursorFlag('noCursorTimeout', true)
.toArray();
outputs.forEach(output => {
const weReceived = output.wallets.some(outputWallet => {
return outputWallet.equals(wallet);
});
if (weReceived) {
this.push(JSON.stringify({
id: transaction._id,
txid: transaction.txid,
fee: transaction.fee,
size: transaction.size,
category: 'receive',
satoshis: output.value,
height: transaction.blockHeight,
address: output.address,
outputIndex: output.mintIndex,
blockTime: transaction.blockTimeNormalized
}) + '\n');
}
});
}
done();
}
}
exports.ListTransactionsStream = ListTransactionsStream;
//# sourceMappingURL=transforms.js.map