58 lines
1.1 KiB
JavaScript
58 lines
1.1 KiB
JavaScript
const BN = require("bn.js");
|
|
const Bytes = require("./bytes");
|
|
|
|
const fromBN = bn =>
|
|
"0x" + bn.toString("hex");
|
|
|
|
const toBN = str =>
|
|
new BN(str.slice(2), 16);
|
|
|
|
const fromString = str => {
|
|
const bn = "0x" + (str.slice(0,2) === "0x"
|
|
? new BN(str.slice(2), 16)
|
|
: new BN(str, 10)).toString("hex");
|
|
return bn === "0x0" ? "0x" : bn;
|
|
}
|
|
|
|
const toEther = wei =>
|
|
toNumber(div(wei, fromString("10000000000"))) / 100000000;
|
|
|
|
const fromEther = eth =>
|
|
mul(fromNumber(Math.floor(eth * 100000000)), fromString("10000000000"));
|
|
|
|
const toString = a =>
|
|
toBN(a).toString(10);
|
|
|
|
const fromNumber = a =>
|
|
typeof a === "string"
|
|
? (/^0x/.test(a) ? a : "0x" + a)
|
|
: "0x" + new BN(a).toString("hex");
|
|
|
|
const toNumber = a =>
|
|
toBN(a).toNumber();
|
|
|
|
const toUint256 = a =>
|
|
Bytes.pad(32, a);
|
|
|
|
const bin = method => (a, b) =>
|
|
fromBN(toBN(a)[method](toBN(b)));
|
|
|
|
const add = bin("add");
|
|
const mul = bin("mul");
|
|
const div = bin("div");
|
|
const sub = bin("sub");
|
|
|
|
module.exports = {
|
|
toString,
|
|
fromString,
|
|
toNumber,
|
|
fromNumber,
|
|
toEther,
|
|
fromEther,
|
|
toUint256,
|
|
add,
|
|
mul,
|
|
div,
|
|
sub
|
|
}
|