76 lines
2.3 KiB
JavaScript
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;
|
|
|