bitcore-node
Version:
A blockchain indexing node with extended capabilities using bitcore
77 lines • 3.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EVMListTransactionsStream = void 0;
const config_1 = require("../../../../services/config");
const utils_1 = require("../../../../utils");
const streamWithEventPipe_1 = require("../../../../utils/streamWithEventPipe");
class EVMListTransactionsStream extends streamWithEventPipe_1.TransformWithEventPipe {
constructor(walletAddresses) {
super({ objectMode: true });
this.walletAddresses = walletAddresses;
}
async _transform(transaction, _, done) {
const baseTx = {
id: transaction._id,
txid: transaction.txid,
fee: transaction.fee,
height: transaction.blockHeight,
from: transaction.from,
initialFrom: transaction.initialFrom || transaction.from,
gasPrice: transaction.gasPrice,
gasLimit: transaction.gasLimit,
receipt: transaction.receipt,
address: transaction.to,
blockTime: transaction.blockTimeNormalized,
error: transaction.error,
network: transaction.network,
chain: transaction.chain,
nonce: transaction.nonce,
effects: transaction.effects,
callStack: transaction.callStack
};
// Add old properties if leanTxStorage is not enabled
const config = config_1.Config.chainConfig({ chain: transaction.chain, network: transaction.network });
if (!config || !config.leanTransactionStorage) {
baseTx.abiType = transaction.abiType;
baseTx.internal = transaction.internal;
baseTx.calls = transaction.calls;
baseTx.data = transaction.data ? transaction.data.toString() : '';
}
let sending = this.walletAddresses.includes(transaction.from);
if (sending) {
let sendingToOurself = this.walletAddresses.includes(transaction.to);
if (!sendingToOurself) {
baseTx.category = 'send';
baseTx.satoshis = -transaction.value;
this.push((0, utils_1.jsonStringify)(baseTx) + '\n');
}
else {
baseTx.category = 'move';
baseTx.satoshis = transaction.value;
this.push((0, utils_1.jsonStringify)(baseTx) + '\n');
}
}
else {
baseTx.category = 'receive'; // assume it's a receive, but may not be sent
const weReceived = this.walletAddresses.includes(transaction.to);
const weReceivedInternal = (0, utils_1.overlaps)(this.walletAddresses, transaction.effects?.map(e => e.to));
if (weReceivedInternal) {
baseTx.satoshis = 0n;
for (const effect of transaction.effects) {
if (this.walletAddresses.includes(effect.to) && !effect.contractAddress) {
baseTx.satoshis += BigInt(effect.amount || 0);
}
}
this.push((0, utils_1.jsonStringify)(baseTx) + '\n');
}
else if (weReceived) {
// console.log(weReceived, weReceivedInternal, transaction.to, this.walletAddresses, transaction);
baseTx.satoshis = BigInt(transaction.value || 0);
this.push((0, utils_1.jsonStringify)(baseTx) + '\n');
}
}
return done();
}
}
exports.EVMListTransactionsStream = EVMListTransactionsStream;
//# sourceMappingURL=transform.js.map