parsec-node
Version:
https://parseclabs.readthedocs.io/en/latest/
63 lines (59 loc) • 2 kB
JavaScript
const { Type } = require('parsec-lib');
const { range } = require('../utils');
const printOutput = (output, sign) =>
`${output.address} (${sign}${output.value}, ${output.color})`;
module.exports = (state, tx) => {
const txString = (() => {
switch (tx.type) {
case Type.DEPOSIT: {
return `deposit: ${printOutput(tx.outputs[0], '+')}`;
}
case Type.EPOCH_LENGTH: {
return `epochLength: ${tx.options.epochLength}`;
}
case Type.EXIT: {
return `exit: ${tx.inputs[0].prevout.getUtxoId()}`;
}
case Type.TRANSFER: {
const inputStrings = tx.inputs
.map(inp => state.unspent[inp.prevout.hex()])
.map(o => printOutput(o, '−'));
const outputStrings = tx.outputs.map(o => printOutput(o, '+'));
const emptyInput = ' '.repeat(inputStrings[0].length);
const balance = range(
0,
Math.max(inputStrings.length, outputStrings.length) - 1
)
.map(i => {
const inp = inputStrings[i] || emptyInput;
const out = outputStrings[i] || '';
return `${inp}\t→\t${out}`;
})
.join('\n');
return `transfer:\n ${balance}`;
}
case Type.VALIDATOR_JOIN: {
return `validatorJoin: slotId: ${tx.options.slotId}, tenderKey: ${
tx.options.tenderKey
}, signerAddr: ${tx.options.signerAddr}, eventsCount: ${
tx.options.eventsCount
}`;
}
case Type.CONSOLIDATE: {
return `consolidate: ${tx.outputs[0].address}, color: ${
tx.outputs[0].color
}`;
}
case Type.VALIDATOR_LOGOUT: {
return `validatorLogout: slotId: ${
tx.options.slotId
}, activationEpoch: ${tx.options.activationEpoch}, newSigner: ${
tx.options.newSigner
}, eventsCount: ${tx.options.eventsCount}`;
}
default:
return undefined;
}
})();
return `${txString}\n${tx.hash()}`;
};