@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
264 lines • 14.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const bignumber_js_1 = require("bignumber.js");
const currencies_1 = require("../currencies");
const erc20_1 = require("@ledgerhq/hw-app-eth/erc20");
/*
skipped because ledgerjs data is now lighter (from the POV of hw-app-eth)
(using cryptoassets-evm-signatures instead of cryptoassets)
*/
test.skip("erc20 are all consistent with those on ledgerjs side", () => {
const normalList = (0, currencies_1.listTokens)();
const delistedList = (0, currencies_1.listTokens)({
withDelisted: true,
});
expect(delistedList.length).toBeGreaterThan(normalList.length);
for (const token of delistedList) {
if (token.delisted) {
expect(normalList.find(o => o.id === token.id)).toBeUndefined();
}
if (token.tokenType === "erc20") {
if (token.parentCurrency.family === "filecoin") {
continue;
}
const tokenData = (0, erc20_1.byContractAddressAndChainId)(token.contractAddress, token.parentCurrency.ethereumLikeInfo?.chainId || 0);
if (!tokenData) {
throw new Error(token.name + " not available in ledgerjs data");
}
expect(token.ticker.toLowerCase()).toBe(tokenData.ticker.toLowerCase());
expect(token.contractAddress.toLowerCase()).toBe(tokenData.contractAddress.toLowerCase());
expect(token.units[0].magnitude).toBe(tokenData.decimals);
}
}
});
test("can format a currency unit", () => {
const btc = (0, currencies_1.getCryptoCurrencyById)("bitcoin").units[0];
expect((0, currencies_1.formatCurrencyUnit)(btc, new bignumber_js_1.BigNumber(100000000))).toBe("1");
expect((0, currencies_1.formatCurrencyUnit)(btc, new bignumber_js_1.BigNumber(1000000), {
showCode: true,
})).toBe("0.01 BTC");
expect((0, currencies_1.formatCurrencyUnit)(btc, new bignumber_js_1.BigNumber(100000000), {
showCode: true,
})).toBe("1 BTC");
expect((0, currencies_1.formatCurrencyUnit)(btc, new bignumber_js_1.BigNumber(100000000), {
showCode: true,
showAllDigits: true,
})).toBe("1.00000000 BTC");
expect((0, currencies_1.formatCurrencyUnit)(btc, new bignumber_js_1.BigNumber(100000000), {
showCode: true,
showAllDigits: true,
alwaysShowSign: true,
})).toBe("+1.00000000 BTC");
});
test("do not consider 'showAllDigits: undefined' as false", () => {
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getFiatCurrencyByTicker)("USD").units[0], new bignumber_js_1.BigNumber(-1234500), {
showCode: true,
showAllDigits: undefined,
})).toBe("-$12,345.00");
});
test("can enable discreet mode", () => {
const btc = (0, currencies_1.getCryptoCurrencyById)("bitcoin").units[0];
expect((0, currencies_1.formatCurrencyUnit)(btc, new bignumber_js_1.BigNumber(100000000), {
discreet: true,
})).toBe("***");
expect((0, currencies_1.formatCurrencyUnit)(btc, new bignumber_js_1.BigNumber(1000000), {
discreet: true,
showCode: true,
})).toBe("*** BTC");
expect((0, currencies_1.formatCurrencyUnit)(btc, new bignumber_js_1.BigNumber(100000000), {
discreet: true,
showCode: true,
})).toBe("*** BTC");
expect((0, currencies_1.formatCurrencyUnit)(btc, new bignumber_js_1.BigNumber(100000000), {
discreet: true,
showCode: true,
showAllDigits: true,
})).toBe("*** BTC");
expect((0, currencies_1.formatCurrencyUnit)(btc, new bignumber_js_1.BigNumber(100000000), {
discreet: true,
showCode: true,
showAllDigits: true,
alwaysShowSign: true,
})).toBe("+*** BTC");
});
test("formatter will floor values by default", () => {
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getCryptoCurrencyById)("bitcoin").units[0], new bignumber_js_1.BigNumber(1000001), {})).toBe("0.01");
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getCryptoCurrencyById)("bitcoin").units[0], new bignumber_js_1.BigNumber(1000001))).toBe("0.01");
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getCryptoCurrencyById)("bitcoin").units[0], new bignumber_js_1.BigNumber(1000100))).toBe("0.010001");
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getCryptoCurrencyById)("bitcoin").units[0], new bignumber_js_1.BigNumber("999999999999"))).toBe("9,999.99");
});
test("formatter rounding can be disabled", () => {
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getCryptoCurrencyById)("bitcoin").units[0], new bignumber_js_1.BigNumber("999999999999"), {
disableRounding: true,
})).toBe("9,999.99999999");
});
test("sub magnitude", () => {
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getFiatCurrencyByTicker)("USD").units[0], new bignumber_js_1.BigNumber(0.04), {
subMagnitude: 2,
})).toBe("0.0004");
// digits will be round after subMagnitude
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getFiatCurrencyByTicker)("USD").units[0], new bignumber_js_1.BigNumber(0.03987654), {
subMagnitude: 2,
showCode: true,
})).toBe("$0.0003");
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getFiatCurrencyByTicker)("USD").units[0], new bignumber_js_1.BigNumber(0.03987654), {
subMagnitude: 2,
disableRounding: true,
})).toBe("0.0003");
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getFiatCurrencyByTicker)("USD").units[0], new bignumber_js_1.BigNumber(0.03987654), {
subMagnitude: 5,
disableRounding: true,
})).toBe("0.0003987");
// even tho the USD unit showAllDigits, it does not force the sub magnitude digits to show
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getFiatCurrencyByTicker)("USD").units[0], new bignumber_js_1.BigNumber(0.03), {
subMagnitude: 5,
disableRounding: true,
})).toBe("0.0003");
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getCryptoCurrencyById)("bitcoin").units[0], new bignumber_js_1.BigNumber(9.123456), {
subMagnitude: 2,
disableRounding: true,
})).toBe("0.0000000912");
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getCryptoCurrencyById)("bitcoin").units[0], new bignumber_js_1.BigNumber("999999999999.123456"), {
disableRounding: true,
subMagnitude: 2,
})).toBe("9,999.9999999912");
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getCryptoCurrencyById)("bitcoin").units[0], new bignumber_js_1.BigNumber("999999999999.123456"), {
subMagnitude: 2,
})).toBe("9,999.99");
});
test("parseCurrencyUnit", () => {
expect((0, currencies_1.parseCurrencyUnit)((0, currencies_1.getCryptoCurrencyById)("bitcoin").units[0], "9999.99999999").toNumber()).toBe(999999999999);
expect((0, currencies_1.parseCurrencyUnit)((0, currencies_1.getCryptoCurrencyById)("bitcoin").units[0], ".987654").toNumber()).toBe(98765400);
expect((0, currencies_1.parseCurrencyUnit)((0, currencies_1.getCryptoCurrencyById)("bitcoin").units[0], "9999").toNumber()).toBe(999900000000);
expect((0, currencies_1.parseCurrencyUnit)((0, currencies_1.getCryptoCurrencyById)("bitcoin").units[0], "1").toNumber()).toBe(100000000);
/*expect(
parseCurrencyUnit(getCryptoCurrencyById("bitcoin").units[0], "0x1").toNumber()
).toBe(0);*/
expect((0, currencies_1.parseCurrencyUnit)((0, currencies_1.getCryptoCurrencyById)("bitcoin").units[0], "NOPE").toNumber()).toBe(0);
});
test("formatter works with fiats", () => {
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getFiatCurrencyByTicker)("EUR").units[0], new bignumber_js_1.BigNumber(12345), {
showCode: true,
})).toBe("€123.45");
// by default, fiats always show the digits
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getFiatCurrencyByTicker)("EUR").units[0], new bignumber_js_1.BigNumber(12300))).toBe("123.00");
});
test("formatter useGrouping", () => {
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getFiatCurrencyByTicker)("EUR").units[0], new bignumber_js_1.BigNumber(1234500), {
useGrouping: true,
})).toBe("12,345.00");
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getFiatCurrencyByTicker)("EUR").units[0], new bignumber_js_1.BigNumber(1234500), {
useGrouping: false,
})).toBe("12345.00");
});
test("formatter can change locale", () => {
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getFiatCurrencyByTicker)("USD").units[0], new bignumber_js_1.BigNumber(-1234567), {
showCode: true,
})).toBe("-$12,345.67");
});
test("formatter does not show very small value in rounding mode", () => {
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getCryptoCurrencyById)("ethereum").units[0], new bignumber_js_1.BigNumber(1))).toBe("0");
expect((0, currencies_1.formatCurrencyUnit)((0, currencies_1.getCryptoCurrencyById)("ethereum").units[0], new bignumber_js_1.BigNumber(1000))).toBe("0");
});
test("formatShort", () => {
expect((0, currencies_1.formatShort)((0, currencies_1.getFiatCurrencyByTicker)("EUR").units[0], new bignumber_js_1.BigNumber(123456789))).toBe("1.2m");
expect((0, currencies_1.formatShort)((0, currencies_1.getFiatCurrencyByTicker)("EUR").units[0], new bignumber_js_1.BigNumber(123456))).toBe("1.2k");
expect((0, currencies_1.formatShort)((0, currencies_1.getCryptoCurrencyById)("ethereum").units[0], new bignumber_js_1.BigNumber(600000))).toBe("0");
});
test("encodeURIScheme", () => {
expect((0, currencies_1.encodeURIScheme)({
currency: (0, currencies_1.getCryptoCurrencyById)("bitcoin"),
address: "1gre1noAY9HiK2qxoW8FzSdjdFBcoZ5fV",
})).toBe("bitcoin:1gre1noAY9HiK2qxoW8FzSdjdFBcoZ5fV");
expect((0, currencies_1.encodeURIScheme)({
currency: (0, currencies_1.getCryptoCurrencyById)("bitcoin"),
address: "1gre1noAY9HiK2qxoW8FzSdjdFBcoZ5fV",
amount: new bignumber_js_1.BigNumber("1234567000000"),
})).toBe("bitcoin:1gre1noAY9HiK2qxoW8FzSdjdFBcoZ5fV?amount=12345.67");
});
test("decodeURIScheme", () => {
expect((0, currencies_1.decodeURIScheme)("bitcoin:1gre1noAY9HiK2qxoW8FzSdjdFBcoZ5fV")).toMatchObject({
currency: (0, currencies_1.getCryptoCurrencyById)("bitcoin"),
address: "1gre1noAY9HiK2qxoW8FzSdjdFBcoZ5fV",
});
expect((0, currencies_1.decodeURIScheme)("bitcoin:1gre1noAY9HiK2qxoW8FzSdjdFBcoZ5fV?amount=12345.67")).toMatchObject({
currency: (0, currencies_1.getCryptoCurrencyById)("bitcoin"),
address: "1gre1noAY9HiK2qxoW8FzSdjdFBcoZ5fV",
amount: new bignumber_js_1.BigNumber("1234567000000"),
});
expect((0, currencies_1.decodeURIScheme)("ethereum:0x931d387731bbbc988b312206c74f77d004d6b84b?gas=100&gasPrice=200&value=" + 10 ** 18)).toMatchObject({
currency: (0, currencies_1.getCryptoCurrencyById)("ethereum"),
address: "0x931d387731bbbc988b312206c74f77d004d6b84b",
amount: new bignumber_js_1.BigNumber(10 ** 18),
userGasLimit: new bignumber_js_1.BigNumber(100),
gasPrice: new bignumber_js_1.BigNumber(200),
});
expect((0, currencies_1.decodeURIScheme)("ethereum:0x931d387731bbbc988b312206c74f77d004d6b84b?gas=-1&gasPrice=-1&value=-1")).toMatchObject({
currency: (0, currencies_1.getCryptoCurrencyById)("ethereum"),
address: "0x931d387731bbbc988b312206c74f77d004d6b84b",
amount: new bignumber_js_1.BigNumber(0),
userGasLimit: new bignumber_js_1.BigNumber(0),
gasPrice: new bignumber_js_1.BigNumber(0),
});
expect((0, currencies_1.decodeURIScheme)("ethereum:0x072b04a9b047C3c7a2A455FFF5264D785e6E55C9?amount=0.0647&gasPrice=77000000000")).toMatchObject({
currency: (0, currencies_1.getCryptoCurrencyById)("ethereum"),
address: "0x072b04a9b047C3c7a2A455FFF5264D785e6E55C9",
amount: new bignumber_js_1.BigNumber(0.0647).times(10 ** 18),
gasPrice: new bignumber_js_1.BigNumber(77000000000),
});
});
test("sanitizeValueString", () => {
const bitcoin = (0, currencies_1.getCryptoCurrencyById)("bitcoin");
const btcUnit = bitcoin.units[0];
const satUnit = bitcoin.units[bitcoin.units.length - 1];
expect((0, currencies_1.sanitizeValueString)(btcUnit, "")).toMatchObject({
display: "",
});
expect((0, currencies_1.sanitizeValueString)(btcUnit, "123456")).toMatchObject({
display: "123456",
value: "12345600000000",
});
expect((0, currencies_1.sanitizeValueString)(btcUnit, "1")).toMatchObject({
display: "1",
value: "100000000",
});
expect((0, currencies_1.sanitizeValueString)(btcUnit, "1.00")).toMatchObject({
display: "1.00",
value: "100000000",
});
expect((0, currencies_1.sanitizeValueString)(btcUnit, ".00")).toMatchObject({
display: "0.00",
});
expect((0, currencies_1.sanitizeValueString)(btcUnit, ".1")).toMatchObject({
display: "0.1",
});
expect((0, currencies_1.sanitizeValueString)(btcUnit, ".123456789")).toMatchObject({
display: "0.12345678",
});
expect((0, currencies_1.sanitizeValueString)(btcUnit, "1ab")).toMatchObject({
display: "1",
});
expect((0, currencies_1.sanitizeValueString)(btcUnit, "1,3")).toMatchObject({
display: "1.3",
});
expect((0, currencies_1.sanitizeValueString)(btcUnit, "1 300")).toMatchObject({
display: "1300",
});
expect((0, currencies_1.sanitizeValueString)(btcUnit, "13.")).toMatchObject({
display: "13.",
value: "1300000000",
});
expect((0, currencies_1.sanitizeValueString)(satUnit, "13.")).toMatchObject({
display: "13",
value: "13",
});
expect((0, currencies_1.sanitizeValueString)(btcUnit, "000.12345678")).toMatchObject({
display: "0.12345678",
value: "12345678",
});
expect((0, currencies_1.sanitizeValueString)(btcUnit, "001.23456789")).toMatchObject({
display: "1.23456789",
value: "123456789",
});
});
//# sourceMappingURL=currencies.js.map