flocore-node/lib/services/mempool/encoding.js
2017-02-02 11:38:29 -05:00

76 lines
2.3 KiB
JavaScript

'use strict';
var bitcore = require('bitcore-lib');
var BufferReader = bitcore.encoding.BufferReader;
function Encoding(servicePrefix) {
this.servicePrefix = servicePrefix;
}
Encoding.prototype.encodeMempoolAddressIndexKey = function(address, txid) {
var prefix = new Buffer('00', 'hex');
var buffers = [this.servicePrefix, prefix];
var addressSizeBuffer = new Buffer(1);
addressSizeBuffer.writeUInt8(address.length);
buffers.push(addressSizeBuffer);
var addressBuffer = new Buffer(address, 'utf8');
buffers.push(addressBuffer);
var txidBuffer = new Buffer(txid, 'hex');
buffers.push(txidBuffer);
return Buffer.concat(buffers);
};
Encoding.prototype.decodeMempoolAddressIndexKey = function(buffer) {
var reader = new BufferReader(buffer);
reader.read(3);
var addressSize = reader.readUInt8();
var address = reader.read(addressSize).toString('utf8');
var txid = reader.read(32).toString('hex');
return {
address: address,
txid: txid
};
};
Encoding.prototype.encodeMempoolTransactionKey = function(txid) {
var prefix = new Buffer('01', 'hex');
var buffers = [this.servicePrefix, prefix];
var txidBuffer = new Buffer(txid, 'hex');
buffers.push(txidBuffer);
return Buffer.concat(buffers);
};
Encoding.prototype.decodeMempoolTransactionKey = function(buffer) {
return buffer.slice(4).toString('hex');
};
Encoding.prototype.encodeMempoolTransactionValue = function(transaction) {
var inputValues = transaction.__inputValues || [];
var inputValuesBuffer = new Buffer(8 * inputValues.length);
for(var i = 0; i < inputValues.length; i++) {
inputValuesBuffer.writeDoubleBE(inputValues[i], i * 8);
}
var inputValuesLengthBuffer = new Buffer(2);
inputValuesLengthBuffer.writeUInt16BE(inputValues.length * 8);
return new Buffer.concat([inputValuesLengthBuffer, inputValuesBuffer, transaction.toBuffer()]);
};
Encoding.prototype.decodeMempoolTransactionValue = function(buffer) {
var inputValues = [];
var inputValuesLength = buffer.readUInt16BE();
for(var i = 0; i < inputValuesLength / 8; i++) {
inputValues.push(buffer.readDoubleBE(i * 8 + 2));
}
var transaction = new bitcore.Transaction(buffer.slice(inputValues.length * 8 + 2));
transaction.__inputValues = inputValues;
return transaction;
};
module.exports = Encoding;