coins: refactor compression.

This commit is contained in:
Christopher Jeffrey 2017-07-17 22:13:29 -07:00
parent d57dac13e0
commit 8b0ec7b179
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
2 changed files with 7 additions and 78 deletions

View File

@ -7,12 +7,12 @@
'use strict';
const assert = require('assert');
const Coin = require('../primitives/coin');
const Output = require('../primitives/output');
const BufferReader = require('../utils/reader');
const StaticWriter = require('../utils/staticwriter');
const encoding = require('../utils/encoding');
const Coin = require('../primitives/coin');
const {compress, decompress} = require('../coins/compress');
const compress = require('./compress');
/**
* Represents an unspent output.
@ -188,7 +188,7 @@ CoinEntry.prototype.toWriter = function toWriter(bw) {
bw.writeVarint(this.version);
bw.writeU32(field);
compress.output(this.output, bw);
compress.pack(this.output, bw);
return bw;
};
@ -236,7 +236,7 @@ CoinEntry.prototype.fromReader = function fromReader(br) {
this.coinbase = (flags & 1) !== 0;
this.height = height;
decompress.output(this.output, br);
compress.unpack(this.output, br);
return this;
};

View File

@ -186,63 +186,6 @@ function sizeOutput(output) {
return size;
}
/**
* Compress an output.
* @param {Coin} coin
* @param {BufferWriter} bw
*/
function compressCoin(coin, bw) {
bw.writeVarint(coin.value);
compressScript(coin.script, bw);
return bw;
}
/**
* Decompress a script from buffer reader.
* @param {Coin} coin
* @param {BufferReader} br
*/
function decompressCoin(coin, br) {
coin.value = br.readVarint();
decompressScript(coin.script, br);
return coin;
}
/**
* Skip past a compressed output.
* @param {BufferWriter} bw
* @returns {Number}
*/
function skipOutput(br) {
let start = br.offset;
// Skip past the value.
br.skipVarint();
// Skip past the compressed scripts.
switch (br.readU8()) {
case 0:
case 1:
br.seek(20);
break;
case 2:
case 3:
case 4:
case 5:
br.seek(32);
break;
default:
br.offset -= 1;
br.seek(br.readVarint() - COMPRESS_TYPES);
break;
}
return br.offset - start;
}
/**
* Compress value using an exponent. Takes advantage of
* the fact that many bitcoin values are divisible by 10.
@ -400,20 +343,6 @@ function decompressKey(key) {
* Expose
*/
exports.compress = {
output: compressOutput,
coin: compressCoin,
size: sizeOutput,
script: compressScript,
value: compressValue,
key: compressKey
};
exports.decompress = {
output: decompressOutput,
coin: decompressCoin,
skip: skipOutput,
script: decompressScript,
value: decompressValue,
key: decompressKey
};
exports.pack = compressOutput;
exports.unpack = decompressOutput;
exports.size = sizeOutput;