mirror of
https://github.com/Xahau/xahau.js.git
synced 2026-04-29 15:37:50 +00:00
40 lines
1.3 KiB
JavaScript
40 lines
1.3 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.quality = void 0;
|
|
const types_1 = require("./types");
|
|
const decimal_js_1 = require("decimal.js");
|
|
const bigInt = require("big-integer");
|
|
const buffer_1 = require("buffer/");
|
|
/**
|
|
* class for encoding and decoding quality
|
|
*/
|
|
class quality {
|
|
/**
|
|
* Encode quality amount
|
|
*
|
|
* @param arg string representation of an amount
|
|
* @returns Serialized quality
|
|
*/
|
|
static encode(quality) {
|
|
const decimal = new decimal_js_1.Decimal(quality);
|
|
const exponent = decimal.e - 15;
|
|
const qualityString = decimal.times(`1e${-exponent}`).abs().toString();
|
|
const bytes = types_1.coreTypes.UInt64.from(bigInt(qualityString)).toBytes();
|
|
bytes[0] = exponent + 100;
|
|
return bytes;
|
|
}
|
|
/**
|
|
* Decode quality amount
|
|
*
|
|
* @param arg hex-string denoting serialized quality
|
|
* @returns deserialized quality
|
|
*/
|
|
static decode(quality) {
|
|
const bytes = buffer_1.Buffer.from(quality, 'hex').slice(-8);
|
|
const exponent = bytes[0] - 100;
|
|
const mantissa = new decimal_js_1.Decimal(`0x${bytes.slice(1).toString('hex')}`);
|
|
return mantissa.times(`1e${exponent}`);
|
|
}
|
|
}
|
|
exports.quality = quality;
|
|
//# sourceMappingURL=quality.js.map
|