@shapeshiftoss/utils 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/.tsbuildinfo +1 -0
- package/dist/cjs/assertUnreachable.js +7 -0
- package/dist/cjs/assetData/assetData.test.js +136 -0
- package/dist/{assetData → cjs/assetData}/baseAssets.d.ts +1 -0
- package/dist/cjs/assetData/baseAssets.js +319 -0
- package/dist/cjs/assetData/constants.js +13 -0
- package/dist/{assetData → cjs/assetData}/decodeAssetData.d.ts +1 -1
- package/dist/cjs/assetData/decodeAssetData.js +106 -0
- package/dist/cjs/assetData/decodeRelatedAssetIndex.js +14 -0
- package/dist/cjs/assetData/encodeAssetData.js +72 -0
- package/dist/cjs/assetData/encodeRelatedAssetIndex.js +20 -0
- package/dist/cjs/assetData/getBaseAsset.js +48 -0
- package/dist/cjs/assetData/index.js +23 -0
- package/dist/cjs/assetData/relatedAssetIndex.test.js +32 -0
- package/dist/cjs/assetData/types.js +2 -0
- package/dist/cjs/baseUnits/baseUnits.js +32 -0
- package/dist/cjs/baseUnits/baseUnits.test.js +32 -0
- package/dist/cjs/basisPoints.js +48 -0
- package/dist/{bignumber → cjs/bignumber}/bignumber.d.ts +1 -1
- package/dist/cjs/bignumber/bignumber.js +27 -0
- package/dist/cjs/bignumber/bignumber.test.js +52 -0
- package/dist/cjs/chainIdToFeeAsset.js +9 -0
- package/dist/cjs/chainIdToFeeAssetId.js +48 -0
- package/dist/cjs/createThrottle.js +36 -0
- package/dist/cjs/getAssetNamespaceFromChainId.js +34 -0
- package/dist/cjs/getChainShortName.js +47 -0
- package/dist/cjs/getNativeFeeAssetReference.js +67 -0
- package/dist/cjs/historyTimeframe.js +36 -0
- package/dist/cjs/index.js +61 -0
- package/dist/cjs/makeAsset/makeAsset.js +45 -0
- package/dist/cjs/makeAsset/makeAsset.test.js +47 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/promises.js +9 -0
- package/dist/cjs/sha256.js +9 -0
- package/dist/{timeout.d.ts → cjs/timeout.d.ts} +4 -0
- package/dist/cjs/timeout.js +34 -0
- package/dist/{treasury.d.ts → cjs/treasury.d.ts} +1 -1
- package/dist/cjs/treasury.js +33 -0
- package/dist/cjs/unfreeze.js +10 -0
- package/dist/cjs/utxo.js +6 -0
- package/dist/esm/.tsbuildinfo +1 -0
- package/dist/esm/assertUnreachable.d.ts +1 -0
- package/dist/{assetData → esm/assetData}/assetData.test.js +16 -2
- package/dist/esm/assetData/baseAssets.d.ts +21 -0
- package/dist/{assetData → esm/assetData}/baseAssets.js +18 -4
- package/dist/esm/assetData/constants.d.ts +1 -0
- package/dist/esm/assetData/decodeAssetData.d.ts +7 -0
- package/dist/{assetData → esm/assetData}/decodeAssetData.js +12 -4
- package/dist/esm/assetData/decodeRelatedAssetIndex.d.ts +3 -0
- package/dist/esm/assetData/encodeAssetData.d.ts +4 -0
- package/dist/{assetData → esm/assetData}/encodeAssetData.js +2 -2
- package/dist/esm/assetData/encodeRelatedAssetIndex.d.ts +3 -0
- package/dist/esm/assetData/getBaseAsset.d.ts +3 -0
- package/dist/{assetData → esm/assetData}/getBaseAsset.js +2 -2
- package/dist/esm/assetData/index.d.ts +7 -0
- package/dist/esm/assetData/index.js +7 -0
- package/dist/esm/assetData/relatedAssetIndex.test.d.ts +1 -0
- package/dist/{assetData → esm/assetData}/relatedAssetIndex.test.js +2 -2
- package/dist/esm/assetData/types.d.ts +28 -0
- package/dist/esm/assetData/types.js +1 -0
- package/dist/esm/baseUnits/baseUnits.d.ts +5 -0
- package/dist/{baseUnits → esm/baseUnits}/baseUnits.js +1 -1
- package/dist/esm/baseUnits/baseUnits.test.d.ts +1 -0
- package/dist/{baseUnits → esm/baseUnits}/baseUnits.test.js +1 -1
- package/dist/esm/basisPoints.d.ts +23 -0
- package/dist/{basisPoints.js → esm/basisPoints.js} +1 -1
- package/dist/esm/bignumber/bignumber.d.ts +11 -0
- package/dist/{bignumber → esm/bignumber}/bignumber.js +1 -1
- package/dist/esm/bignumber/bignumber.test.d.ts +1 -0
- package/dist/{bignumber → esm/bignumber}/bignumber.test.js +1 -1
- package/dist/esm/chainIdToFeeAsset.d.ts +3 -0
- package/dist/{chainIdToFeeAsset.js → esm/chainIdToFeeAsset.js} +1 -1
- package/dist/esm/chainIdToFeeAssetId.d.ts +2 -0
- package/dist/{chainIdToFeeAssetId.js → esm/chainIdToFeeAssetId.js} +1 -1
- package/dist/esm/createThrottle.d.ts +9 -0
- package/dist/esm/getAssetNamespaceFromChainId.d.ts +3 -0
- package/dist/{getAssetNamespaceFromChainId.js → esm/getAssetNamespaceFromChainId.js} +1 -2
- package/dist/esm/getChainShortName.d.ts +2 -0
- package/dist/{getChainShortName.js → esm/getChainShortName.js} +1 -1
- package/dist/esm/getNativeFeeAssetReference.d.ts +2 -0
- package/dist/esm/historyTimeframe.d.ts +6 -0
- package/dist/{historyTimeframe.js → esm/historyTimeframe.js} +1 -1
- package/dist/esm/index.d.ts +24 -0
- package/dist/{index.js → esm/index.js} +19 -19
- package/dist/esm/makeAsset/makeAsset.d.ts +10 -0
- package/dist/{makeAsset → esm/makeAsset}/makeAsset.js +4 -2
- package/dist/esm/makeAsset/makeAsset.test.d.ts +1 -0
- package/dist/{makeAsset → esm/makeAsset}/makeAsset.test.js +1 -1
- package/dist/esm/promises.d.ts +4 -0
- package/dist/esm/sha256.d.ts +1 -0
- package/dist/esm/timeout.d.ts +7 -0
- package/dist/{timeout.js → esm/timeout.js} +11 -0
- package/dist/esm/treasury.d.ts +15 -0
- package/dist/{treasury.js → esm/treasury.js} +1 -1
- package/dist/esm/unfreeze.d.ts +4 -0
- package/dist/esm/utxo.d.ts +2 -0
- package/package.json +21 -9
- package/dist/assetData/index.js +0 -7
- /package/dist/{assertUnreachable.d.ts → cjs/assertUnreachable.d.ts} +0 -0
- /package/dist/{assetData → cjs/assetData}/assetData.test.d.ts +0 -0
- /package/dist/{assetData → cjs/assetData}/constants.d.ts +0 -0
- /package/dist/{assetData → cjs/assetData}/decodeRelatedAssetIndex.d.ts +0 -0
- /package/dist/{assetData → cjs/assetData}/encodeAssetData.d.ts +0 -0
- /package/dist/{assetData → cjs/assetData}/encodeRelatedAssetIndex.d.ts +0 -0
- /package/dist/{assetData → cjs/assetData}/getBaseAsset.d.ts +0 -0
- /package/dist/{assetData → cjs/assetData}/index.d.ts +0 -0
- /package/dist/{assetData → cjs/assetData}/relatedAssetIndex.test.d.ts +0 -0
- /package/dist/{assetData → cjs/assetData}/types.d.ts +0 -0
- /package/dist/{baseUnits → cjs/baseUnits}/baseUnits.d.ts +0 -0
- /package/dist/{baseUnits → cjs/baseUnits}/baseUnits.test.d.ts +0 -0
- /package/dist/{basisPoints.d.ts → cjs/basisPoints.d.ts} +0 -0
- /package/dist/{bignumber → cjs/bignumber}/bignumber.test.d.ts +0 -0
- /package/dist/{chainIdToFeeAsset.d.ts → cjs/chainIdToFeeAsset.d.ts} +0 -0
- /package/dist/{chainIdToFeeAssetId.d.ts → cjs/chainIdToFeeAssetId.d.ts} +0 -0
- /package/dist/{createThrottle.d.ts → cjs/createThrottle.d.ts} +0 -0
- /package/dist/{getAssetNamespaceFromChainId.d.ts → cjs/getAssetNamespaceFromChainId.d.ts} +0 -0
- /package/dist/{getChainShortName.d.ts → cjs/getChainShortName.d.ts} +0 -0
- /package/dist/{getNativeFeeAssetReference.d.ts → cjs/getNativeFeeAssetReference.d.ts} +0 -0
- /package/dist/{historyTimeframe.d.ts → cjs/historyTimeframe.d.ts} +0 -0
- /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
- /package/dist/{makeAsset → cjs/makeAsset}/makeAsset.d.ts +0 -0
- /package/dist/{makeAsset → cjs/makeAsset}/makeAsset.test.d.ts +0 -0
- /package/dist/{promises.d.ts → cjs/promises.d.ts} +0 -0
- /package/dist/{sha256.d.ts → cjs/sha256.d.ts} +0 -0
- /package/dist/{unfreeze.d.ts → cjs/unfreeze.d.ts} +0 -0
- /package/dist/{utxo.d.ts → cjs/utxo.d.ts} +0 -0
- /package/dist/{assertUnreachable.js → esm/assertUnreachable.js} +0 -0
- /package/dist/{assetData/types.js → esm/assetData/assetData.test.d.ts} +0 -0
- /package/dist/{assetData → esm/assetData}/constants.js +0 -0
- /package/dist/{assetData → esm/assetData}/decodeRelatedAssetIndex.js +0 -0
- /package/dist/{assetData → esm/assetData}/encodeRelatedAssetIndex.js +0 -0
- /package/dist/{createThrottle.js → esm/createThrottle.js} +0 -0
- /package/dist/{getNativeFeeAssetReference.js → esm/getNativeFeeAssetReference.js} +0 -0
- /package/dist/{promises.js → esm/promises.js} +0 -0
- /package/dist/{sha256.js → esm/sha256.js} +0 -0
- /package/dist/{unfreeze.js → esm/unfreeze.js} +0 -0
- /package/dist/{utxo.js → esm/utxo.js} +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.firstNonZeroDecimal = exports.toBaseUnit = exports.fromBaseUnit = void 0;
|
|
7
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
+
const bignumber_1 = require("../bignumber/bignumber");
|
|
9
|
+
// Converts from base unit to a precision/ish number
|
|
10
|
+
// - If no displayDecimals are provided, it will use the full precision of the number being converted
|
|
11
|
+
// - If displayDecimals are provided, it will use that precision, to return e.g a human, precision, or number stripped to any arbitrary decimal places
|
|
12
|
+
// and use the ROUND_DOWN rounding mode
|
|
13
|
+
const fromBaseUnit = (value, precision, displayDecimals) => {
|
|
14
|
+
const precisionNumber = (0, bignumber_1.bnOrZero)(value).div((0, bignumber_1.bn)(10).pow(precision));
|
|
15
|
+
if (typeof displayDecimals === 'number') {
|
|
16
|
+
return precisionNumber
|
|
17
|
+
.decimalPlaces(displayDecimals, bignumber_js_1.default.ROUND_DOWN)
|
|
18
|
+
.toFixed(displayDecimals);
|
|
19
|
+
}
|
|
20
|
+
return precisionNumber.toFixed();
|
|
21
|
+
};
|
|
22
|
+
exports.fromBaseUnit = fromBaseUnit;
|
|
23
|
+
const toBaseUnit = (amount, precision, roundingMode) => {
|
|
24
|
+
return (0, bignumber_1.bnOrZero)(amount)
|
|
25
|
+
.times((0, bignumber_1.bn)(10).exponentiatedBy((0, bignumber_1.bnOrZero)(precision)))
|
|
26
|
+
.toFixed(0, roundingMode);
|
|
27
|
+
};
|
|
28
|
+
exports.toBaseUnit = toBaseUnit;
|
|
29
|
+
const firstNonZeroDecimal = (number) => {
|
|
30
|
+
return number.toFixed(10).match(/^-?\d*\.?0*\d{0,2}/)?.[0];
|
|
31
|
+
};
|
|
32
|
+
exports.firstNonZeroDecimal = firstNonZeroDecimal;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const baseUnits_1 = require("./baseUnits");
|
|
5
|
+
(0, vitest_1.describe)('@/lib/math', () => {
|
|
6
|
+
(0, vitest_1.describe)('fromBaseUnit', () => {
|
|
7
|
+
(0, vitest_1.it)('should correctly convert and round down with given displayDecimals', () => {
|
|
8
|
+
const result = (0, baseUnits_1.fromBaseUnit)(123456789, 4, 2);
|
|
9
|
+
(0, vitest_1.expect)(result).toBe('12345.67');
|
|
10
|
+
});
|
|
11
|
+
(0, vitest_1.it)('should correctly convert without displayDecimals and return full precision', () => {
|
|
12
|
+
const result = (0, baseUnits_1.fromBaseUnit)(123456789, 4);
|
|
13
|
+
(0, vitest_1.expect)(result).toBe('12345.6789');
|
|
14
|
+
});
|
|
15
|
+
(0, vitest_1.it)('should correctly convert and round down with given displayDecimals for another input', () => {
|
|
16
|
+
const result = (0, baseUnits_1.fromBaseUnit)(987654321, 6, 3);
|
|
17
|
+
(0, vitest_1.expect)(result).toBe('987.654');
|
|
18
|
+
});
|
|
19
|
+
(0, vitest_1.it)('should correctly convert without displayDecimals and return full precision for another input', () => {
|
|
20
|
+
const result = (0, baseUnits_1.fromBaseUnit)(987654321, 6);
|
|
21
|
+
(0, vitest_1.expect)(result).toBe('987.654321');
|
|
22
|
+
});
|
|
23
|
+
(0, vitest_1.it)('should correctly convert and round down with given displayDecimals for high precision input', () => {
|
|
24
|
+
const result = (0, baseUnits_1.fromBaseUnit)('182912819182912192', 18, 8);
|
|
25
|
+
(0, vitest_1.expect)(result).toBe('0.18291281');
|
|
26
|
+
});
|
|
27
|
+
(0, vitest_1.it)('should correctly convert without displayDecimals and return full precision for high precision input', () => {
|
|
28
|
+
const result = (0, baseUnits_1.fromBaseUnit)('182912819182912192', 18);
|
|
29
|
+
(0, vitest_1.expect)(result).toBe('0.182912819182912192');
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addBasisPointAmount = exports.subtractBasisPointAmount = exports.convertPercentageToBasisPoints = exports.convertBasisPointsToPercentage = exports.convertDecimalPercentageToBasisPoints = exports.convertBasisPointsToDecimalPercentage = void 0;
|
|
4
|
+
const bignumber_1 = require("./bignumber/bignumber");
|
|
5
|
+
const convertBasisPointsToDecimalPercentage = (basisPoints) => (0, bignumber_1.bnOrZero)(basisPoints).div(10000);
|
|
6
|
+
exports.convertBasisPointsToDecimalPercentage = convertBasisPointsToDecimalPercentage;
|
|
7
|
+
const convertDecimalPercentageToBasisPoints = (decimalPercentage) => (0, bignumber_1.bnOrZero)(decimalPercentage).times(10000);
|
|
8
|
+
exports.convertDecimalPercentageToBasisPoints = convertDecimalPercentageToBasisPoints;
|
|
9
|
+
const convertBasisPointsToPercentage = (basisPoints) => (0, bignumber_1.bnOrZero)(basisPoints).div(100);
|
|
10
|
+
exports.convertBasisPointsToPercentage = convertBasisPointsToPercentage;
|
|
11
|
+
const convertPercentageToBasisPoints = (percentage) => (0, bignumber_1.bnOrZero)(percentage).times(100);
|
|
12
|
+
exports.convertPercentageToBasisPoints = convertPercentageToBasisPoints;
|
|
13
|
+
/**
|
|
14
|
+
* Subtracts basis point amount from a given value.
|
|
15
|
+
*
|
|
16
|
+
* @param value The value to subtract basis points from.
|
|
17
|
+
* @param basisPoints The number of basis points to subtract.
|
|
18
|
+
* @param roundingMode
|
|
19
|
+
* @returns The new number that is the input value minus the basis points of the value.
|
|
20
|
+
*/
|
|
21
|
+
const subtractBasisPointAmount = (value, basisPoints, roundingMode) => {
|
|
22
|
+
const bigNumValue = (0, bignumber_1.bn)(value);
|
|
23
|
+
// Basis point is 1/100th of a percent
|
|
24
|
+
const percentValue = (0, exports.convertBasisPointsToDecimalPercentage)(basisPoints);
|
|
25
|
+
const subtractValue = bigNumValue.times(percentValue);
|
|
26
|
+
// Subtract basis points from the original value
|
|
27
|
+
const resultValue = bigNumValue.minus(subtractValue);
|
|
28
|
+
return roundingMode !== undefined ? resultValue.toFixed(0, roundingMode) : resultValue.toFixed();
|
|
29
|
+
};
|
|
30
|
+
exports.subtractBasisPointAmount = subtractBasisPointAmount;
|
|
31
|
+
/**
|
|
32
|
+
* Adds basis point amount from a given value.
|
|
33
|
+
*
|
|
34
|
+
* @param value The value to subtract basis points from.
|
|
35
|
+
* @param basisPoints The number of basis points to subtract.
|
|
36
|
+
* @param roundingMode
|
|
37
|
+
* @returns The new number that is the input value minus the basis points of the value.
|
|
38
|
+
*/
|
|
39
|
+
const addBasisPointAmount = (value, basisPoints, roundingMode) => {
|
|
40
|
+
const bigNumValue = (0, bignumber_1.bn)(value);
|
|
41
|
+
// Basis point is 1/100th of a percent
|
|
42
|
+
const percentValue = (0, exports.convertBasisPointsToDecimalPercentage)(basisPoints);
|
|
43
|
+
const addValue = bigNumValue.times(percentValue);
|
|
44
|
+
// Subtract basis points from the original value
|
|
45
|
+
const resultValue = bigNumValue.plus(addValue);
|
|
46
|
+
return roundingMode !== undefined ? resultValue.toFixed(0, roundingMode) : resultValue.toFixed();
|
|
47
|
+
};
|
|
48
|
+
exports.addBasisPointAmount = addBasisPointAmount;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import BigNumber from 'bignumber.js';
|
|
2
|
-
export
|
|
2
|
+
export { default as BigNumber } from 'bignumber.js';
|
|
3
3
|
export type BN = BigNumber;
|
|
4
4
|
export declare const bn: (n: BigNumber.Value, base?: number) => BN;
|
|
5
5
|
export declare const bnOrZero: (n: BigNumber.Value | null | undefined) => BN;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.convertPrecision = exports.positiveOrZero = exports.bnOrZero = exports.bn = exports.BigNumber = void 0;
|
|
7
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
+
var bignumber_js_2 = require("bignumber.js");
|
|
9
|
+
Object.defineProperty(exports, "BigNumber", { enumerable: true, get: function () { return __importDefault(bignumber_js_2).default; } });
|
|
10
|
+
const bn = (n, base = 10) => new bignumber_js_1.default(n, base);
|
|
11
|
+
exports.bn = bn;
|
|
12
|
+
const bnOrZero = (n) => {
|
|
13
|
+
const value = (0, exports.bn)(n || 0);
|
|
14
|
+
return value.isFinite() ? value : (0, exports.bn)(0);
|
|
15
|
+
};
|
|
16
|
+
exports.bnOrZero = bnOrZero;
|
|
17
|
+
const positiveOrZero = (n) => {
|
|
18
|
+
const value = (0, exports.bn)(n || 0);
|
|
19
|
+
return value.isPositive() ? value : (0, exports.bn)(0);
|
|
20
|
+
};
|
|
21
|
+
exports.positiveOrZero = positiveOrZero;
|
|
22
|
+
const convertPrecision = ({ value, inputExponent = 0, outputExponent = 0, }) => {
|
|
23
|
+
return (0, exports.bnOrZero)(value)
|
|
24
|
+
.dividedBy((0, exports.bn)(10).exponentiatedBy(inputExponent))
|
|
25
|
+
.multipliedBy((0, exports.bn)(10).exponentiatedBy(outputExponent));
|
|
26
|
+
};
|
|
27
|
+
exports.convertPrecision = convertPrecision;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const bignumber_1 = require("./bignumber");
|
|
5
|
+
(0, vitest_1.describe)('bignumber', () => {
|
|
6
|
+
(0, vitest_1.describe)('bnOrZero', () => {
|
|
7
|
+
(0, vitest_1.it)('returns an instance of bignumber', () => {
|
|
8
|
+
const zero = (0, bignumber_1.bnOrZero)(0);
|
|
9
|
+
(0, vitest_1.expect)(zero).toBeInstanceOf(bignumber_1.BigNumber);
|
|
10
|
+
const one = (0, bignumber_1.bnOrZero)(1);
|
|
11
|
+
(0, vitest_1.expect)(one).toBeInstanceOf(bignumber_1.BigNumber);
|
|
12
|
+
const foo = (0, bignumber_1.bnOrZero)('foo');
|
|
13
|
+
(0, vitest_1.expect)(foo).toBeInstanceOf(bignumber_1.BigNumber);
|
|
14
|
+
(0, vitest_1.expect)(foo.toString()).toBe('0');
|
|
15
|
+
const empty = (0, bignumber_1.bnOrZero)('');
|
|
16
|
+
(0, vitest_1.expect)(empty).toBeInstanceOf(bignumber_1.BigNumber);
|
|
17
|
+
(0, vitest_1.expect)(empty.toString()).toBe('0');
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
(0, vitest_1.describe)('convertPrecision', () => {
|
|
21
|
+
(0, vitest_1.it)('can convert values for increased precision', () => {
|
|
22
|
+
const value = '1234';
|
|
23
|
+
const expectation = (0, bignumber_1.bn)('1234000');
|
|
24
|
+
const result = (0, bignumber_1.convertPrecision)({ value, inputExponent: 3, outputExponent: 6 });
|
|
25
|
+
(0, vitest_1.expect)(result).toEqual(expectation);
|
|
26
|
+
});
|
|
27
|
+
(0, vitest_1.it)('can convert values for decreased precision', () => {
|
|
28
|
+
const value = '1234000';
|
|
29
|
+
const expectation = (0, bignumber_1.bn)('1234');
|
|
30
|
+
const result = (0, bignumber_1.convertPrecision)({ value, inputExponent: 6, outputExponent: 3 });
|
|
31
|
+
(0, vitest_1.expect)(result).toEqual(expectation);
|
|
32
|
+
});
|
|
33
|
+
(0, vitest_1.it)('treats 0 as 0 when increasing precision', () => {
|
|
34
|
+
const value = '0';
|
|
35
|
+
const expectation = (0, bignumber_1.bn)('0');
|
|
36
|
+
const result = (0, bignumber_1.convertPrecision)({ value, inputExponent: 12, outputExponent: 18 });
|
|
37
|
+
(0, vitest_1.expect)(result).toEqual(expectation);
|
|
38
|
+
});
|
|
39
|
+
(0, vitest_1.it)('treats 0 as 0 when decreasing precision', () => {
|
|
40
|
+
const value = '0';
|
|
41
|
+
const expectation = (0, bignumber_1.bn)('0');
|
|
42
|
+
const result = (0, bignumber_1.convertPrecision)({ value, inputExponent: 18, outputExponent: 12 });
|
|
43
|
+
(0, vitest_1.expect)(result).toEqual(expectation);
|
|
44
|
+
});
|
|
45
|
+
(0, vitest_1.it)('does not remove decimals with rounding', () => {
|
|
46
|
+
const value = '1234567';
|
|
47
|
+
const expectation = (0, bignumber_1.bn)('1234.567');
|
|
48
|
+
const result = (0, bignumber_1.convertPrecision)({ value, inputExponent: 6, outputExponent: 3 });
|
|
49
|
+
(0, vitest_1.expect)(result).toEqual(expectation);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.chainIdToFeeAsset = void 0;
|
|
4
|
+
const chainIdToFeeAssetId_1 = require("./chainIdToFeeAssetId");
|
|
5
|
+
const chainIdToFeeAsset = (assetsById, chainId) => {
|
|
6
|
+
const assetId = (0, chainIdToFeeAssetId_1.chainIdToFeeAssetId)(chainId);
|
|
7
|
+
return assetsById[assetId];
|
|
8
|
+
};
|
|
9
|
+
exports.chainIdToFeeAsset = chainIdToFeeAsset;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.chainIdToFeeAssetId = void 0;
|
|
4
|
+
const caip_1 = require("@shapeshiftoss/caip");
|
|
5
|
+
const types_1 = require("@shapeshiftoss/types");
|
|
6
|
+
const assertUnreachable_1 = require("./assertUnreachable");
|
|
7
|
+
const chainIdToFeeAssetId = (_chainId) => {
|
|
8
|
+
const chainId = _chainId;
|
|
9
|
+
switch (chainId) {
|
|
10
|
+
case types_1.KnownChainIds.ArbitrumMainnet:
|
|
11
|
+
return caip_1.arbitrumAssetId;
|
|
12
|
+
case types_1.KnownChainIds.AvalancheMainnet:
|
|
13
|
+
return caip_1.avalancheAssetId;
|
|
14
|
+
case types_1.KnownChainIds.ArbitrumNovaMainnet:
|
|
15
|
+
return caip_1.arbitrumNovaAssetId;
|
|
16
|
+
case types_1.KnownChainIds.BaseMainnet:
|
|
17
|
+
return caip_1.baseAssetId;
|
|
18
|
+
case types_1.KnownChainIds.BitcoinCashMainnet:
|
|
19
|
+
return caip_1.bchAssetId;
|
|
20
|
+
case types_1.KnownChainIds.BitcoinMainnet:
|
|
21
|
+
return caip_1.btcAssetId;
|
|
22
|
+
case types_1.KnownChainIds.BnbSmartChainMainnet:
|
|
23
|
+
return caip_1.bscAssetId;
|
|
24
|
+
case types_1.KnownChainIds.CosmosMainnet:
|
|
25
|
+
return caip_1.cosmosAssetId;
|
|
26
|
+
case types_1.KnownChainIds.DogecoinMainnet:
|
|
27
|
+
return caip_1.dogeAssetId;
|
|
28
|
+
case types_1.KnownChainIds.EthereumMainnet:
|
|
29
|
+
return caip_1.ethAssetId;
|
|
30
|
+
case types_1.KnownChainIds.GnosisMainnet:
|
|
31
|
+
return caip_1.gnosisAssetId;
|
|
32
|
+
case types_1.KnownChainIds.LitecoinMainnet:
|
|
33
|
+
return caip_1.ltcAssetId;
|
|
34
|
+
case types_1.KnownChainIds.OptimismMainnet:
|
|
35
|
+
return caip_1.optimismAssetId;
|
|
36
|
+
case types_1.KnownChainIds.PolygonMainnet:
|
|
37
|
+
return caip_1.polygonAssetId;
|
|
38
|
+
case types_1.KnownChainIds.ThorchainMainnet:
|
|
39
|
+
return caip_1.thorchainAssetId;
|
|
40
|
+
case types_1.KnownChainIds.MayachainMainnet:
|
|
41
|
+
return caip_1.mayachainAssetId;
|
|
42
|
+
case types_1.KnownChainIds.SolanaMainnet:
|
|
43
|
+
return caip_1.solAssetId;
|
|
44
|
+
default:
|
|
45
|
+
return (0, assertUnreachable_1.assertUnreachable)(chainId);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
exports.chainIdToFeeAssetId = chainIdToFeeAssetId;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createThrottle = void 0;
|
|
4
|
+
const createThrottle = ({ capacity, costPerReq, drainPerInterval, intervalMs, }) => {
|
|
5
|
+
let currentLevel = 0;
|
|
6
|
+
let pendingResolves = [];
|
|
7
|
+
const drain = () => {
|
|
8
|
+
const drainAmount = Math.min(currentLevel, drainPerInterval);
|
|
9
|
+
currentLevel -= drainAmount;
|
|
10
|
+
// Resolve pending promises if there's enough capacity
|
|
11
|
+
while (pendingResolves.length > 0 && currentLevel + costPerReq <= capacity) {
|
|
12
|
+
const resolve = pendingResolves.shift();
|
|
13
|
+
if (resolve) {
|
|
14
|
+
currentLevel += costPerReq;
|
|
15
|
+
resolve();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
// Start the interval to drain the capacity
|
|
20
|
+
const intervalId = setInterval(drain, intervalMs);
|
|
21
|
+
const throttle = async () => {
|
|
22
|
+
if (currentLevel + costPerReq <= capacity) {
|
|
23
|
+
// If adding another request doesn't exceed capacity, proceed immediately
|
|
24
|
+
currentLevel += costPerReq;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// Otherwise, wait until there's enough capacity
|
|
28
|
+
await new Promise(resolve => {
|
|
29
|
+
pendingResolves.push(resolve);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const clear = () => clearInterval(intervalId);
|
|
34
|
+
return { throttle, clear };
|
|
35
|
+
};
|
|
36
|
+
exports.createThrottle = createThrottle;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAssetNamespaceFromChainId = void 0;
|
|
4
|
+
const caip_1 = require("@shapeshiftoss/caip");
|
|
5
|
+
const types_1 = require("@shapeshiftoss/types");
|
|
6
|
+
const assertUnreachable_1 = require("./assertUnreachable");
|
|
7
|
+
const getAssetNamespaceFromChainId = (chainId) => {
|
|
8
|
+
switch (chainId) {
|
|
9
|
+
case types_1.KnownChainIds.BnbSmartChainMainnet:
|
|
10
|
+
return caip_1.ASSET_NAMESPACE.bep20;
|
|
11
|
+
case types_1.KnownChainIds.SolanaMainnet:
|
|
12
|
+
return caip_1.ASSET_NAMESPACE.splToken;
|
|
13
|
+
case types_1.KnownChainIds.EthereumMainnet:
|
|
14
|
+
case types_1.KnownChainIds.AvalancheMainnet:
|
|
15
|
+
case types_1.KnownChainIds.OptimismMainnet:
|
|
16
|
+
case types_1.KnownChainIds.PolygonMainnet:
|
|
17
|
+
case types_1.KnownChainIds.GnosisMainnet:
|
|
18
|
+
case types_1.KnownChainIds.ArbitrumMainnet:
|
|
19
|
+
case types_1.KnownChainIds.ArbitrumNovaMainnet:
|
|
20
|
+
case types_1.KnownChainIds.BaseMainnet:
|
|
21
|
+
return caip_1.ASSET_NAMESPACE.erc20;
|
|
22
|
+
case types_1.KnownChainIds.CosmosMainnet:
|
|
23
|
+
case types_1.KnownChainIds.BitcoinMainnet:
|
|
24
|
+
case types_1.KnownChainIds.BitcoinCashMainnet:
|
|
25
|
+
case types_1.KnownChainIds.DogecoinMainnet:
|
|
26
|
+
case types_1.KnownChainIds.LitecoinMainnet:
|
|
27
|
+
case types_1.KnownChainIds.ThorchainMainnet:
|
|
28
|
+
case types_1.KnownChainIds.MayachainMainnet:
|
|
29
|
+
throw Error(`Unhandled case '${chainId}'`);
|
|
30
|
+
default:
|
|
31
|
+
return (0, assertUnreachable_1.assertUnreachable)(chainId);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
exports.getAssetNamespaceFromChainId = getAssetNamespaceFromChainId;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getChainShortName = void 0;
|
|
4
|
+
const types_1 = require("@shapeshiftoss/types");
|
|
5
|
+
const assertUnreachable_1 = require("./assertUnreachable");
|
|
6
|
+
const getChainShortName = (chainId) => {
|
|
7
|
+
switch (chainId) {
|
|
8
|
+
case types_1.KnownChainIds.AvalancheMainnet:
|
|
9
|
+
return 'AVA';
|
|
10
|
+
case types_1.KnownChainIds.OptimismMainnet:
|
|
11
|
+
return 'OP';
|
|
12
|
+
case types_1.KnownChainIds.EthereumMainnet:
|
|
13
|
+
return 'ETH';
|
|
14
|
+
case types_1.KnownChainIds.PolygonMainnet:
|
|
15
|
+
return 'POLY';
|
|
16
|
+
case types_1.KnownChainIds.GnosisMainnet:
|
|
17
|
+
return 'GNO';
|
|
18
|
+
case types_1.KnownChainIds.BnbSmartChainMainnet:
|
|
19
|
+
return 'BNB';
|
|
20
|
+
case types_1.KnownChainIds.ArbitrumMainnet:
|
|
21
|
+
return 'ARB';
|
|
22
|
+
case types_1.KnownChainIds.ArbitrumNovaMainnet:
|
|
23
|
+
return 'ARB-Nova';
|
|
24
|
+
case types_1.KnownChainIds.BaseMainnet:
|
|
25
|
+
return 'BAS';
|
|
26
|
+
case types_1.KnownChainIds.BitcoinMainnet:
|
|
27
|
+
return 'BTC';
|
|
28
|
+
case types_1.KnownChainIds.BitcoinCashMainnet:
|
|
29
|
+
return 'BCH';
|
|
30
|
+
case types_1.KnownChainIds.CosmosMainnet:
|
|
31
|
+
return 'COSM';
|
|
32
|
+
case types_1.KnownChainIds.ThorchainMainnet:
|
|
33
|
+
return 'THOR';
|
|
34
|
+
case types_1.KnownChainIds.MayachainMainnet:
|
|
35
|
+
return 'MAYA';
|
|
36
|
+
case types_1.KnownChainIds.DogecoinMainnet:
|
|
37
|
+
return 'DOGE';
|
|
38
|
+
case types_1.KnownChainIds.LitecoinMainnet:
|
|
39
|
+
return 'LTC';
|
|
40
|
+
case types_1.KnownChainIds.SolanaMainnet:
|
|
41
|
+
return 'SOL';
|
|
42
|
+
default: {
|
|
43
|
+
(0, assertUnreachable_1.assertUnreachable)(chainId);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
exports.getChainShortName = getChainShortName;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getNativeFeeAssetReference = void 0;
|
|
4
|
+
const caip_1 = require("@shapeshiftoss/caip");
|
|
5
|
+
const getNativeFeeAssetReference = (chainNamespace, chainReference) => {
|
|
6
|
+
return (() => {
|
|
7
|
+
switch (chainNamespace) {
|
|
8
|
+
case caip_1.CHAIN_NAMESPACE.Utxo:
|
|
9
|
+
switch (chainReference) {
|
|
10
|
+
case caip_1.CHAIN_REFERENCE.BitcoinMainnet:
|
|
11
|
+
return caip_1.ASSET_REFERENCE.Bitcoin;
|
|
12
|
+
case caip_1.CHAIN_REFERENCE.BitcoinCashMainnet:
|
|
13
|
+
return caip_1.ASSET_REFERENCE.BitcoinCash;
|
|
14
|
+
case caip_1.CHAIN_REFERENCE.DogecoinMainnet:
|
|
15
|
+
return caip_1.ASSET_REFERENCE.Dogecoin;
|
|
16
|
+
case caip_1.CHAIN_REFERENCE.LitecoinMainnet:
|
|
17
|
+
return caip_1.ASSET_REFERENCE.Litecoin;
|
|
18
|
+
default:
|
|
19
|
+
throw new Error(`Chain namespace ${chainNamespace} on ${chainReference} not supported.`);
|
|
20
|
+
}
|
|
21
|
+
case caip_1.CHAIN_NAMESPACE.Evm:
|
|
22
|
+
switch (chainReference) {
|
|
23
|
+
case caip_1.CHAIN_REFERENCE.AvalancheCChain:
|
|
24
|
+
return caip_1.ASSET_REFERENCE.AvalancheC;
|
|
25
|
+
case caip_1.CHAIN_REFERENCE.EthereumMainnet:
|
|
26
|
+
return caip_1.ASSET_REFERENCE.Ethereum;
|
|
27
|
+
case caip_1.CHAIN_REFERENCE.OptimismMainnet:
|
|
28
|
+
return caip_1.ASSET_REFERENCE.Optimism;
|
|
29
|
+
case caip_1.CHAIN_REFERENCE.BnbSmartChainMainnet:
|
|
30
|
+
return caip_1.ASSET_REFERENCE.BnbSmartChain;
|
|
31
|
+
case caip_1.CHAIN_REFERENCE.PolygonMainnet:
|
|
32
|
+
return caip_1.ASSET_REFERENCE.Polygon;
|
|
33
|
+
case caip_1.CHAIN_REFERENCE.GnosisMainnet:
|
|
34
|
+
return caip_1.ASSET_REFERENCE.Gnosis;
|
|
35
|
+
case caip_1.CHAIN_REFERENCE.ArbitrumMainnet:
|
|
36
|
+
return caip_1.ASSET_REFERENCE.Arbitrum;
|
|
37
|
+
case caip_1.CHAIN_REFERENCE.ArbitrumNovaMainnet:
|
|
38
|
+
return caip_1.ASSET_REFERENCE.ArbitrumNova;
|
|
39
|
+
case caip_1.CHAIN_REFERENCE.BaseMainnet:
|
|
40
|
+
return caip_1.ASSET_REFERENCE.Base;
|
|
41
|
+
default:
|
|
42
|
+
throw new Error(`Chain namespace ${chainNamespace} on ${chainReference} not supported.`);
|
|
43
|
+
}
|
|
44
|
+
case caip_1.CHAIN_NAMESPACE.CosmosSdk:
|
|
45
|
+
switch (chainReference) {
|
|
46
|
+
case caip_1.CHAIN_REFERENCE.CosmosHubMainnet:
|
|
47
|
+
return caip_1.ASSET_REFERENCE.Cosmos;
|
|
48
|
+
case caip_1.CHAIN_REFERENCE.ThorchainMainnet:
|
|
49
|
+
return caip_1.ASSET_REFERENCE.Thorchain;
|
|
50
|
+
case caip_1.CHAIN_REFERENCE.MayachainMainnet:
|
|
51
|
+
return caip_1.ASSET_REFERENCE.Mayachain;
|
|
52
|
+
default:
|
|
53
|
+
throw new Error(`Chain namespace ${chainNamespace} on ${chainReference} not supported.`);
|
|
54
|
+
}
|
|
55
|
+
case caip_1.CHAIN_NAMESPACE.Solana:
|
|
56
|
+
switch (chainReference) {
|
|
57
|
+
case caip_1.CHAIN_REFERENCE.SolanaMainnet:
|
|
58
|
+
return caip_1.ASSET_REFERENCE.Solana;
|
|
59
|
+
default:
|
|
60
|
+
throw new Error(`Chain namespace ${chainNamespace} on ${chainReference} not supported.`);
|
|
61
|
+
}
|
|
62
|
+
default:
|
|
63
|
+
throw new Error(`Chain namespace ${chainNamespace} on ${chainReference} not supported.`);
|
|
64
|
+
}
|
|
65
|
+
})();
|
|
66
|
+
};
|
|
67
|
+
exports.getNativeFeeAssetReference = getNativeFeeAssetReference;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getHistoryTimeframeBounds = void 0;
|
|
7
|
+
const types_1 = require("@shapeshiftoss/types");
|
|
8
|
+
const dayjs_1 = __importDefault(require("dayjs"));
|
|
9
|
+
const assertUnreachable_1 = require("./assertUnreachable");
|
|
10
|
+
const getHistoryTimeframeBounds = (timeframe, end = (0, dayjs_1.default)().endOf('day')) => {
|
|
11
|
+
let start = end; // Shut up typescript.
|
|
12
|
+
switch (timeframe) {
|
|
13
|
+
case types_1.HistoryTimeframe.HOUR:
|
|
14
|
+
start = end.subtract(1, 'day');
|
|
15
|
+
break;
|
|
16
|
+
case types_1.HistoryTimeframe.DAY:
|
|
17
|
+
start = end.subtract(1, 'day');
|
|
18
|
+
break;
|
|
19
|
+
case types_1.HistoryTimeframe.WEEK:
|
|
20
|
+
start = end.subtract(1, 'week');
|
|
21
|
+
break;
|
|
22
|
+
case types_1.HistoryTimeframe.MONTH:
|
|
23
|
+
start = end.subtract(1, 'month');
|
|
24
|
+
break;
|
|
25
|
+
case types_1.HistoryTimeframe.YEAR:
|
|
26
|
+
start = end.subtract(1, 'year');
|
|
27
|
+
break;
|
|
28
|
+
case types_1.HistoryTimeframe.ALL:
|
|
29
|
+
start = end.subtract(5, 'years');
|
|
30
|
+
break;
|
|
31
|
+
default:
|
|
32
|
+
(0, assertUnreachable_1.assertUnreachable)(timeframe);
|
|
33
|
+
}
|
|
34
|
+
return { start, end };
|
|
35
|
+
};
|
|
36
|
+
exports.getHistoryTimeframeBounds = getHistoryTimeframeBounds;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.contractAddressOrUndefined = exports.isSplToken = exports.isToken = exports.isSome = void 0;
|
|
18
|
+
const caip_1 = require("@shapeshiftoss/caip");
|
|
19
|
+
const lodash_1 = require("lodash");
|
|
20
|
+
__exportStar(require("./makeAsset/makeAsset"), exports);
|
|
21
|
+
__exportStar(require("./assertUnreachable"), exports);
|
|
22
|
+
__exportStar(require("./sha256"), exports);
|
|
23
|
+
__exportStar(require("./chainIdToFeeAsset"), exports);
|
|
24
|
+
__exportStar(require("./chainIdToFeeAssetId"), exports);
|
|
25
|
+
__exportStar(require("./utxo"), exports);
|
|
26
|
+
__exportStar(require("./bignumber/bignumber"), exports);
|
|
27
|
+
__exportStar(require("./basisPoints"), exports);
|
|
28
|
+
__exportStar(require("./baseUnits/baseUnits"), exports);
|
|
29
|
+
__exportStar(require("./promises"), exports);
|
|
30
|
+
__exportStar(require("./treasury"), exports);
|
|
31
|
+
__exportStar(require("./timeout"), exports);
|
|
32
|
+
__exportStar(require("./createThrottle"), exports);
|
|
33
|
+
__exportStar(require("./historyTimeframe"), exports);
|
|
34
|
+
__exportStar(require("./getNativeFeeAssetReference"), exports);
|
|
35
|
+
__exportStar(require("./assetData"), exports);
|
|
36
|
+
__exportStar(require("./unfreeze"), exports);
|
|
37
|
+
__exportStar(require("./getAssetNamespaceFromChainId"), exports);
|
|
38
|
+
__exportStar(require("./getChainShortName"), exports);
|
|
39
|
+
const isSome = (option) => !(0, lodash_1.isUndefined)(option) && !(0, lodash_1.isNull)(option);
|
|
40
|
+
exports.isSome = isSome;
|
|
41
|
+
const isToken = (assetId) => {
|
|
42
|
+
switch ((0, caip_1.fromAssetId)(assetId).assetNamespace) {
|
|
43
|
+
case caip_1.ASSET_NAMESPACE.erc20:
|
|
44
|
+
case caip_1.ASSET_NAMESPACE.erc721:
|
|
45
|
+
case caip_1.ASSET_NAMESPACE.erc1155:
|
|
46
|
+
case caip_1.ASSET_NAMESPACE.bep20:
|
|
47
|
+
case caip_1.ASSET_NAMESPACE.bep721:
|
|
48
|
+
case caip_1.ASSET_NAMESPACE.bep1155:
|
|
49
|
+
case caip_1.ASSET_NAMESPACE.splToken:
|
|
50
|
+
return true;
|
|
51
|
+
default:
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
exports.isToken = isToken;
|
|
56
|
+
const isSplToken = (assetId) => {
|
|
57
|
+
return (0, caip_1.fromAssetId)(assetId).assetNamespace === caip_1.ASSET_NAMESPACE.splToken;
|
|
58
|
+
};
|
|
59
|
+
exports.isSplToken = isSplToken;
|
|
60
|
+
const contractAddressOrUndefined = (assetId) => (0, exports.isToken)(assetId) || (0, exports.isSplToken)(assetId) ? (0, caip_1.fromAssetId)(assetId).assetReference : undefined;
|
|
61
|
+
exports.contractAddressOrUndefined = contractAddressOrUndefined;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeAsset = void 0;
|
|
4
|
+
const caip_1 = require("@shapeshiftoss/caip");
|
|
5
|
+
const chainIdToFeeAsset_1 = require("../chainIdToFeeAsset");
|
|
6
|
+
const sha256_1 = require("../sha256");
|
|
7
|
+
/**
|
|
8
|
+
* utility to create an asset from minimal asset data from external sources at runtime
|
|
9
|
+
* e.g. zapper/zerion/etherscan
|
|
10
|
+
* required fields are assetId, symbol, name, precision
|
|
11
|
+
* the rest can be inferred from existing data
|
|
12
|
+
*/
|
|
13
|
+
const makeAsset = (assetsById, minimalAsset) => {
|
|
14
|
+
const { assetId } = minimalAsset;
|
|
15
|
+
const color = (() => {
|
|
16
|
+
if (minimalAsset.color)
|
|
17
|
+
return minimalAsset.color;
|
|
18
|
+
const shaAssetId = (0, sha256_1.sha256)(assetId);
|
|
19
|
+
return `#${shaAssetId.slice(0, 6)}`;
|
|
20
|
+
})();
|
|
21
|
+
const chainId = (() => {
|
|
22
|
+
if (minimalAsset.chainId)
|
|
23
|
+
return minimalAsset.chainId;
|
|
24
|
+
return (0, caip_1.fromAssetId)(assetId).chainId;
|
|
25
|
+
})();
|
|
26
|
+
// currently, dynamic assets are LP pairs, and they have two icon urls and are rendered differently
|
|
27
|
+
const icon = minimalAsset?.icon ?? '';
|
|
28
|
+
const explorerLinks = (() => {
|
|
29
|
+
const feeAsset = (0, chainIdToFeeAsset_1.chainIdToFeeAsset)(assetsById, chainId);
|
|
30
|
+
return {
|
|
31
|
+
explorer: feeAsset?.explorer ?? '',
|
|
32
|
+
explorerTxLink: feeAsset?.explorerTxLink ?? '',
|
|
33
|
+
explorerAddressLink: feeAsset?.explorerAddressLink ?? '',
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
return Object.assign({}, minimalAsset, explorerLinks, {
|
|
37
|
+
chainId,
|
|
38
|
+
color,
|
|
39
|
+
icon,
|
|
40
|
+
relatedAssetKey: null,
|
|
41
|
+
isPrimary: true,
|
|
42
|
+
isChainSpecific: true,
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
exports.makeAsset = makeAsset;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const caip_1 = require("@shapeshiftoss/caip");
|
|
4
|
+
const vitest_1 = require("vitest");
|
|
5
|
+
const makeAsset_1 = require("./makeAsset");
|
|
6
|
+
const ETH = {
|
|
7
|
+
assetId: caip_1.ethAssetId,
|
|
8
|
+
chainId: caip_1.ethChainId,
|
|
9
|
+
symbol: 'ETH',
|
|
10
|
+
name: 'Ethereum',
|
|
11
|
+
precision: 18,
|
|
12
|
+
color: '#FFFFFF',
|
|
13
|
+
icon: 'https://rawcdn.githack.com/trustwallet/assets/32e51d582a890b3dd3135fe3ee7c20c2fd699a6d/blockchains/ethereum/info/logo.png',
|
|
14
|
+
explorer: 'https://etherscan.io',
|
|
15
|
+
explorerTxLink: 'https://etherscan.io/tx/',
|
|
16
|
+
explorerAddressLink: 'https://etherscan.io/address/',
|
|
17
|
+
relatedAssetKey: null,
|
|
18
|
+
};
|
|
19
|
+
(0, vitest_1.describe)('makeAsset', () => {
|
|
20
|
+
(0, vitest_1.it)('can make erc20 shitcoins', () => {
|
|
21
|
+
const assetReference = '0xfoobar0000000000000000000000000000000000';
|
|
22
|
+
const assetNamespace = caip_1.ASSET_NAMESPACE.erc20;
|
|
23
|
+
const symbol = 'FOOO';
|
|
24
|
+
const name = 'Humble Panda';
|
|
25
|
+
const precision = 18;
|
|
26
|
+
const chainId = caip_1.ethChainId;
|
|
27
|
+
const assetId = (0, caip_1.toAssetId)({ chainId, assetNamespace, assetReference });
|
|
28
|
+
const minimalAsset = { assetId, symbol, precision, name };
|
|
29
|
+
const assetsById = { [ETH.assetId]: ETH };
|
|
30
|
+
const asset = (0, makeAsset_1.makeAsset)(assetsById, minimalAsset);
|
|
31
|
+
const asset2 = (0, makeAsset_1.makeAsset)(assetsById, minimalAsset);
|
|
32
|
+
// doesn't molest asset id, precision, symbol, name
|
|
33
|
+
(0, vitest_1.expect)(asset?.assetId).toEqual(assetId);
|
|
34
|
+
(0, vitest_1.expect)(asset?.name).toEqual(name);
|
|
35
|
+
(0, vitest_1.expect)(asset?.symbol).toEqual(symbol);
|
|
36
|
+
(0, vitest_1.expect)(asset?.precision).toEqual(precision);
|
|
37
|
+
// belongs to correct chain
|
|
38
|
+
(0, vitest_1.expect)(asset?.chainId).toEqual(chainId);
|
|
39
|
+
// inherits fee asset explorer links
|
|
40
|
+
(0, vitest_1.expect)(asset?.explorer).toEqual(ETH.explorer);
|
|
41
|
+
(0, vitest_1.expect)(asset?.explorerTxLink).toEqual(ETH.explorerTxLink);
|
|
42
|
+
(0, vitest_1.expect)(asset?.explorerAddressLink).toEqual(ETH.explorerAddressLink);
|
|
43
|
+
// is deterministic on color and icon
|
|
44
|
+
(0, vitest_1.expect)(asset?.color).toEqual(asset2?.color);
|
|
45
|
+
(0, vitest_1.expect)(asset?.icon).toEqual(asset2?.icon);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type": "commonjs"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isResolvedErr = exports.isRejected = exports.isFulfilled = void 0;
|
|
4
|
+
const isFulfilled = (promise) => promise.status === 'fulfilled';
|
|
5
|
+
exports.isFulfilled = isFulfilled;
|
|
6
|
+
const isRejected = (promise) => promise.status === 'rejected';
|
|
7
|
+
exports.isRejected = isRejected;
|
|
8
|
+
const isResolvedErr = (promise) => 'value' in promise && promise.value.isErr();
|
|
9
|
+
exports.isResolvedErr = isResolvedErr;
|