ripple-binary-codec refactor (#88)

Refactored all components in ripple-binary-codec /src
This commit is contained in:
Nathan Nichols
2020-07-31 09:14:11 -05:00
parent 383ab88d62
commit 2e6c68ba73
37 changed files with 1932 additions and 1707 deletions

View File

@@ -1,23 +1,37 @@
const Decimal = require("decimal.js");
import { bytesToHex, slice, parseBytes } from "./utils/bytes-utils";
import { coreTypes } from "./types";
import { Decimal } from "decimal.js";
module.exports = {
encode(arg) {
const quality = arg instanceof Decimal ? arg : new Decimal(arg);
const exponent = quality.e - 15;
const qualityString = quality
.times("1e" + -exponent)
.abs()
.toString();
/**
* class for encoding and decoding quality
*/
class quality {
/**
* Encode quality amount
*
* @param arg string representation of an amount
* @returns Serialized quality
*/
static encode(quality: string): Buffer {
const decimal = new Decimal(quality);
const exponent = decimal.e - 15;
const qualityString = decimal.times(`1e${-exponent}`).abs().toString();
const bytes = coreTypes.UInt64.from(BigInt(qualityString)).toBytes();
bytes[0] = exponent + 100;
return bytes;
},
decode(arg) {
const bytes = slice(parseBytes(arg), -8);
}
/**
* Decode quality amount
*
* @param arg hex-string denoting serialized quality
* @returns deserialized quality
*/
static decode(quality: string): Decimal {
const bytes = Buffer.from(quality, "hex").slice(-8);
const exponent = bytes[0] - 100;
const mantissa = new Decimal("0x" + bytesToHex(slice(bytes, 1)));
return mantissa.times("1e" + exponent);
},
};
const mantissa = new Decimal(`0x${bytes.slice(1).toString("hex")}`);
return mantissa.times(`1e${exponent}`);
}
}
export { quality };