@shapeshiftoss/caip 8.16.0 → 9.0.0-alpha.0
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/accountId/accountId.js +44 -0
- package/dist/cjs/accountId/accountId.test.js +109 -0
- package/dist/cjs/adapters/banxa/index.js +118 -0
- package/dist/cjs/adapters/coinbase/generate.js +9 -0
- package/dist/cjs/adapters/coinbase/generated/index.js +8 -0
- package/dist/cjs/adapters/coinbase/index.js +16 -0
- package/dist/cjs/adapters/coinbase/utils.js +55 -0
- package/dist/cjs/adapters/coincap/generate.js +10 -0
- package/dist/cjs/adapters/coincap/generated/eip155_1/adapter.json +1 -0
- package/dist/cjs/adapters/coincap/generated/eip155_10/adapter.json +1 -0
- package/dist/cjs/adapters/coincap/generated/eip155_137/adapter.json +1 -0
- package/dist/cjs/adapters/coincap/generated/eip155_42161/adapter.json +1 -0
- package/dist/cjs/adapters/coincap/generated/eip155_43114/adapter.json +1 -0
- package/dist/cjs/adapters/coincap/generated/eip155_56/adapter.json +1 -0
- package/dist/cjs/adapters/coincap/generated/eip155_8453/adapter.json +1 -0
- package/dist/{adapters → cjs/adapters}/coincap/generated/index.d.ts +11 -4
- package/dist/cjs/adapters/coincap/generated/index.js +34 -0
- package/dist/cjs/adapters/coincap/generated/solana_5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/adapter.json +1 -0
- package/dist/{adapters → cjs/adapters}/coincap/index.d.ts +1 -1
- package/dist/cjs/adapters/coincap/index.js +44 -0
- package/dist/cjs/adapters/coincap/index.test.js +90 -0
- package/dist/{adapters → cjs/adapters}/coincap/utils.d.ts +3 -1
- package/dist/cjs/adapters/coincap/utils.js +146 -0
- package/dist/cjs/adapters/coincap/utils.test.js +173 -0
- package/dist/cjs/adapters/coingecko/generate.js +10 -0
- package/dist/cjs/adapters/coingecko/generated/eip155_1/adapter.json +1 -0
- package/dist/cjs/adapters/coingecko/generated/eip155_10/adapter.json +1 -0
- package/dist/cjs/adapters/coingecko/generated/eip155_100/adapter.json +1 -0
- package/dist/cjs/adapters/coingecko/generated/eip155_137/adapter.json +1 -0
- package/dist/cjs/adapters/coingecko/generated/eip155_42161/adapter.json +1 -0
- package/dist/cjs/adapters/coingecko/generated/eip155_43114/adapter.json +1 -0
- package/dist/cjs/adapters/coingecko/generated/eip155_56/adapter.json +1 -0
- package/dist/cjs/adapters/coingecko/generated/eip155_8453/adapter.json +1 -0
- package/dist/cjs/adapters/coingecko/generated/index.js +40 -0
- package/dist/cjs/adapters/coingecko/generated/solana_5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/adapter.json +1 -0
- package/dist/cjs/adapters/coingecko/index.js +163 -0
- package/dist/cjs/adapters/coingecko/index.test.js +276 -0
- package/dist/cjs/adapters/coingecko/utils.js +190 -0
- package/dist/cjs/adapters/coingecko/utils.test.js +193 -0
- package/dist/cjs/adapters/index.js +22 -0
- package/dist/cjs/adapters/mtpelerin/index.js +142 -0
- package/dist/cjs/adapters/onramper/index.js +1505 -0
- package/dist/cjs/assetId/assetId.js +126 -0
- package/dist/cjs/assetId/assetId.test.js +324 -0
- package/dist/cjs/chainId/chainId.js +25 -0
- package/dist/cjs/chainId/chainId.test.js +90 -0
- package/dist/{constants.d.ts → cjs/constants.d.ts} +1 -1
- package/dist/cjs/constants.js +173 -0
- package/dist/cjs/index.js +36 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/typeGuards.js +56 -0
- package/dist/{utils.d.ts → cjs/utils.d.ts} +1 -1
- package/dist/cjs/utils.js +56 -0
- package/dist/cjs/utils.test.js +160 -0
- package/dist/esm/.tsbuildinfo +1 -0
- package/dist/esm/accountId/accountId.d.ts +29 -0
- package/dist/esm/accountId/accountId.test.d.ts +1 -0
- package/dist/esm/adapters/banxa/index.d.ts +14 -0
- package/dist/esm/adapters/coinbase/generate.d.ts +1 -0
- package/dist/esm/adapters/coinbase/generated/adapter.json +153 -0
- package/dist/esm/adapters/coinbase/generated/index.js +2 -0
- package/dist/esm/adapters/coinbase/index.d.ts +3 -0
- package/dist/esm/adapters/coinbase/utils.d.ts +12 -0
- package/dist/esm/adapters/coincap/generate.d.ts +1 -0
- package/dist/esm/adapters/coincap/generated/bip122_000000000000000000651ef99cb9fcbe/adapter.json +1 -0
- package/dist/esm/adapters/coincap/generated/bip122_000000000019d6689c085ae165831e93/adapter.json +1 -0
- package/dist/esm/adapters/coincap/generated/bip122_00000000001a91e3dace36e2be3bf030/adapter.json +1 -0
- package/dist/esm/adapters/coincap/generated/bip122_12a765e31ffd4059bada1e25190f6e98/adapter.json +1 -0
- package/dist/esm/adapters/coincap/generated/cosmos_cosmoshub-4/adapter.json +1 -0
- package/dist/esm/adapters/coincap/generated/cosmos_thorchain-1/adapter.json +1 -0
- package/dist/esm/adapters/coincap/generated/eip155_1/adapter.json +1 -0
- package/dist/esm/adapters/coincap/generated/eip155_10/adapter.json +1 -0
- package/dist/esm/adapters/coincap/generated/eip155_137/adapter.json +1 -0
- package/dist/esm/adapters/coincap/generated/eip155_42161/adapter.json +1 -0
- package/dist/esm/adapters/coincap/generated/eip155_43114/adapter.json +1 -0
- package/dist/esm/adapters/coincap/generated/eip155_56/adapter.json +1 -0
- package/dist/esm/adapters/coincap/generated/eip155_8453/adapter.json +1 -0
- package/dist/esm/adapters/coincap/generated/index.d.ts +15 -0
- package/dist/{adapters → esm/adapters}/coincap/generated/index.js +11 -4
- package/dist/esm/adapters/coincap/generated/solana_5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/adapter.json +1 -0
- package/dist/esm/adapters/coincap/index.d.ts +4 -0
- package/dist/{adapters → esm/adapters}/coincap/index.js +3 -3
- package/dist/esm/adapters/coincap/index.test.d.ts +1 -0
- package/dist/{adapters → esm/adapters}/coincap/index.test.js +8 -12
- package/dist/esm/adapters/coincap/utils.d.ts +24 -0
- package/dist/esm/adapters/coincap/utils.js +135 -0
- package/dist/esm/adapters/coincap/utils.test.d.ts +4 -0
- package/dist/{adapters → esm/adapters}/coincap/utils.test.js +5 -0
- package/dist/esm/adapters/coingecko/generate.d.ts +1 -0
- package/dist/esm/adapters/coingecko/generated/bip122_000000000000000000651ef99cb9fcbe/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/generated/bip122_000000000019d6689c085ae165831e93/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/generated/bip122_00000000001a91e3dace36e2be3bf030/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/generated/bip122_12a765e31ffd4059bada1e25190f6e98/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/generated/cosmos_cosmoshub-4/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/generated/cosmos_mayachain-mainnet-v1/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/generated/cosmos_thorchain-1/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/generated/eip155_1/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/generated/eip155_10/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/generated/eip155_100/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/generated/eip155_137/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/generated/eip155_42161/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/generated/eip155_42170/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/generated/eip155_43114/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/generated/eip155_56/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/generated/eip155_8453/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/generated/index.js +18 -0
- package/dist/esm/adapters/coingecko/generated/solana_5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/adapter.json +1 -0
- package/dist/esm/adapters/coingecko/index.d.ts +26 -0
- package/dist/esm/adapters/coingecko/index.test.d.ts +1 -0
- package/dist/esm/adapters/coingecko/utils.d.ts +11 -0
- package/dist/esm/adapters/coingecko/utils.test.d.ts +1 -0
- package/dist/esm/adapters/index.js +6 -0
- package/dist/esm/adapters/mtpelerin/index.d.ts +10 -0
- package/dist/esm/adapters/onramper/index.d.ts +7 -0
- package/dist/esm/assetId/assetId.d.ts +36 -0
- package/dist/esm/assetId/assetId.test.d.ts +1 -0
- package/dist/{assetId → esm/assetId}/assetId.test.js +0 -14
- package/dist/esm/chainId/chainId.d.ts +20 -0
- package/dist/esm/chainId/chainId.test.d.ts +1 -0
- package/dist/esm/constants.d.ts +121 -0
- package/dist/{constants.js → esm/constants.js} +2 -2
- package/dist/esm/index.js +7 -0
- package/dist/esm/typeGuards.d.ts +16 -0
- package/dist/esm/utils.d.ts +33 -0
- package/dist/{utils.js → esm/utils.js} +11 -14
- package/dist/esm/utils.test.d.ts +1 -0
- package/dist/{utils.test.js → esm/utils.test.js} +15 -19
- package/package.json +17 -7
- package/CHANGELOG.md +0 -726
- package/dist/adapters/coincap/generated/eip155_1/adapter.json +0 -1
- package/dist/adapters/coincap/utils.js +0 -40
- package/dist/adapters/coingecko/generated/eip155_1/adapter.json +0 -1
- package/dist/adapters/coingecko/generated/eip155_10/adapter.json +0 -1
- package/dist/adapters/coingecko/generated/eip155_100/adapter.json +0 -1
- package/dist/adapters/coingecko/generated/eip155_137/adapter.json +0 -1
- package/dist/adapters/coingecko/generated/eip155_42161/adapter.json +0 -1
- package/dist/adapters/coingecko/generated/eip155_43114/adapter.json +0 -1
- package/dist/adapters/coingecko/generated/eip155_56/adapter.json +0 -1
- package/dist/adapters/coingecko/generated/eip155_8453/adapter.json +0 -1
- package/dist/adapters/coingecko/generated/solana_5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/adapter.json +0 -1
- /package/dist/{accountId → cjs/accountId}/accountId.d.ts +0 -0
- /package/dist/{accountId → cjs/accountId}/accountId.test.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/banxa/index.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/coinbase/generate.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/coinbase/generated/adapter.json +0 -0
- /package/dist/{adapters → cjs/adapters}/coinbase/generated/index.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/coinbase/index.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/coinbase/utils.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/coincap/generate.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/coincap/generated/bip122_000000000000000000651ef99cb9fcbe/adapter.json +0 -0
- /package/dist/{adapters → cjs/adapters}/coincap/generated/bip122_000000000019d6689c085ae165831e93/adapter.json +0 -0
- /package/dist/{adapters → cjs/adapters}/coincap/generated/bip122_00000000001a91e3dace36e2be3bf030/adapter.json +0 -0
- /package/dist/{adapters → cjs/adapters}/coincap/generated/bip122_12a765e31ffd4059bada1e25190f6e98/adapter.json +0 -0
- /package/dist/{adapters → cjs/adapters}/coincap/generated/cosmos_cosmoshub-4/adapter.json +0 -0
- /package/dist/{adapters → cjs/adapters}/coincap/generated/cosmos_thorchain-1/adapter.json +0 -0
- /package/dist/{adapters → cjs/adapters}/coincap/index.test.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/coincap/utils.test.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/coingecko/generate.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/coingecko/generated/bip122_000000000000000000651ef99cb9fcbe/adapter.json +0 -0
- /package/dist/{adapters → cjs/adapters}/coingecko/generated/bip122_000000000019d6689c085ae165831e93/adapter.json +0 -0
- /package/dist/{adapters → cjs/adapters}/coingecko/generated/bip122_00000000001a91e3dace36e2be3bf030/adapter.json +0 -0
- /package/dist/{adapters → cjs/adapters}/coingecko/generated/bip122_12a765e31ffd4059bada1e25190f6e98/adapter.json +0 -0
- /package/dist/{adapters → cjs/adapters}/coingecko/generated/cosmos_cosmoshub-4/adapter.json +0 -0
- /package/dist/{adapters → cjs/adapters}/coingecko/generated/cosmos_mayachain-mainnet-v1/adapter.json +0 -0
- /package/dist/{adapters → cjs/adapters}/coingecko/generated/cosmos_thorchain-1/adapter.json +0 -0
- /package/dist/{adapters → cjs/adapters}/coingecko/generated/eip155_42170/adapter.json +0 -0
- /package/dist/{adapters → cjs/adapters}/coingecko/generated/index.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/coingecko/index.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/coingecko/index.test.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/coingecko/utils.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/coingecko/utils.test.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/index.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/mtpelerin/index.d.ts +0 -0
- /package/dist/{adapters → cjs/adapters}/onramper/index.d.ts +0 -0
- /package/dist/{assetId → cjs/assetId}/assetId.d.ts +0 -0
- /package/dist/{assetId → cjs/assetId}/assetId.test.d.ts +0 -0
- /package/dist/{chainId → cjs/chainId}/chainId.d.ts +0 -0
- /package/dist/{chainId → cjs/chainId}/chainId.test.d.ts +0 -0
- /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
- /package/dist/{typeGuards.d.ts → cjs/typeGuards.d.ts} +0 -0
- /package/dist/{utils.test.d.ts → cjs/utils.test.d.ts} +0 -0
- /package/dist/{accountId → esm/accountId}/accountId.js +0 -0
- /package/dist/{accountId → esm/accountId}/accountId.test.js +0 -0
- /package/dist/{adapters → esm/adapters}/banxa/index.js +0 -0
- /package/dist/{adapters → esm/adapters}/coinbase/generate.js +0 -0
- /package/dist/{adapters/coinbase/generated/index.js → esm/adapters/coinbase/generated/index.d.ts} +0 -0
- /package/dist/{adapters → esm/adapters}/coinbase/index.js +0 -0
- /package/dist/{adapters → esm/adapters}/coinbase/utils.js +0 -0
- /package/dist/{adapters → esm/adapters}/coincap/generate.js +0 -0
- /package/dist/{adapters → esm/adapters}/coingecko/generate.js +0 -0
- /package/dist/{adapters/coingecko/generated/index.js → esm/adapters/coingecko/generated/index.d.ts} +0 -0
- /package/dist/{adapters → esm/adapters}/coingecko/index.js +0 -0
- /package/dist/{adapters → esm/adapters}/coingecko/index.test.js +0 -0
- /package/dist/{adapters → esm/adapters}/coingecko/utils.js +0 -0
- /package/dist/{adapters → esm/adapters}/coingecko/utils.test.js +0 -0
- /package/dist/{adapters/index.js → esm/adapters/index.d.ts} +0 -0
- /package/dist/{adapters → esm/adapters}/mtpelerin/index.js +0 -0
- /package/dist/{adapters → esm/adapters}/onramper/index.js +0 -0
- /package/dist/{assetId → esm/assetId}/assetId.js +0 -0
- /package/dist/{chainId → esm/chainId}/chainId.js +0 -0
- /package/dist/{chainId → esm/chainId}/chainId.test.js +0 -0
- /package/dist/{index.js → esm/index.d.ts} +0 -0
- /package/dist/{typeGuards.js → esm/typeGuards.js} +0 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-19.md
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.fromCAIP19 = exports.toCAIP19 = exports.isNft = exports.fromAssetId = exports.toAssetId = void 0;
|
|
5
|
+
const chainId_1 = require("../chainId/chainId");
|
|
6
|
+
const constants_1 = require("../constants");
|
|
7
|
+
const typeGuards_1 = require("../typeGuards");
|
|
8
|
+
/**
|
|
9
|
+
* validate that a value is a string slip44 value
|
|
10
|
+
* @see https://github.com/satoshilabs/slips/blob/master/slip-0044.md
|
|
11
|
+
* @param {string} value - possible slip44 value
|
|
12
|
+
*/
|
|
13
|
+
const isValidSlip44 = (value) => {
|
|
14
|
+
// TCY is a weird AssetId, its asset ref part is not a number
|
|
15
|
+
if (value === 'tcy')
|
|
16
|
+
return true;
|
|
17
|
+
const n = Number(value);
|
|
18
|
+
// slip44 has a max value of an unsigned 32-bit integer
|
|
19
|
+
return !isNaN(n) && n >= 0 && n < 4294967296;
|
|
20
|
+
};
|
|
21
|
+
const isToAssetIdWithChainIdArgs = (args) => !!args.chainId;
|
|
22
|
+
const toAssetId = (args) => {
|
|
23
|
+
const { assetNamespace, assetReference } = args;
|
|
24
|
+
(0, typeGuards_1.assertIsAssetNamespace)(assetNamespace);
|
|
25
|
+
if (!assetReference)
|
|
26
|
+
throw new Error('toAssetId: No assetReference provided');
|
|
27
|
+
const { chainId, chainNamespace, chainReference } = (() => {
|
|
28
|
+
if (isToAssetIdWithChainIdArgs(args)) {
|
|
29
|
+
const fromChainIdResult = (0, chainId_1.fromChainId)(args.chainId);
|
|
30
|
+
return {
|
|
31
|
+
chainId: args.chainId,
|
|
32
|
+
chainNamespace: fromChainIdResult.chainNamespace,
|
|
33
|
+
chainReference: fromChainIdResult.chainReference,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
else
|
|
37
|
+
return {
|
|
38
|
+
chainId: (0, chainId_1.toChainId)({
|
|
39
|
+
chainNamespace: args.chainNamespace,
|
|
40
|
+
chainReference: args.chainReference,
|
|
41
|
+
}),
|
|
42
|
+
chainNamespace: args.chainNamespace,
|
|
43
|
+
chainReference: args.chainReference,
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
(0, typeGuards_1.assertIsChainNamespace)(chainNamespace);
|
|
47
|
+
(0, typeGuards_1.assertIsChainReference)(chainReference);
|
|
48
|
+
(0, typeGuards_1.assertValidChainPartsPair)(chainNamespace, chainReference);
|
|
49
|
+
if (!constants_1.VALID_ASSET_NAMESPACE[chainNamespace].includes(assetNamespace) ||
|
|
50
|
+
!(0, typeGuards_1.isAssetNamespace)(assetNamespace))
|
|
51
|
+
throw new Error(`toAssetId: AssetNamespace ${assetNamespace} not supported for Chain Namespace ${chainNamespace}`);
|
|
52
|
+
if (assetNamespace === 'slip44' && !isValidSlip44(String(assetReference))) {
|
|
53
|
+
throw new Error(`Invalid reference for namespace slip44`);
|
|
54
|
+
}
|
|
55
|
+
const assetReferenceNormalized = (() => {
|
|
56
|
+
const assertContractAddress = (address) => {
|
|
57
|
+
if (!address.startsWith('0x'))
|
|
58
|
+
throw new Error(`toAssetId: assetReference must start with 0x: ${assetReference}`);
|
|
59
|
+
if (address.length !== 42)
|
|
60
|
+
throw new Error(`toAssetId: assetReference length must be 42, length: ${assetReference.length}, ${assetReference}`);
|
|
61
|
+
};
|
|
62
|
+
switch (assetNamespace) {
|
|
63
|
+
case 'erc20':
|
|
64
|
+
case 'bep20':
|
|
65
|
+
assertContractAddress(assetReference);
|
|
66
|
+
return assetReference.toLowerCase();
|
|
67
|
+
case 'erc721':
|
|
68
|
+
case 'erc1155':
|
|
69
|
+
case 'bep721':
|
|
70
|
+
case 'bep1155':
|
|
71
|
+
// caip-22 (https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-22.md)
|
|
72
|
+
// caip-29 (https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-29.md)
|
|
73
|
+
const [address] = assetReference.split('/');
|
|
74
|
+
assertContractAddress(address);
|
|
75
|
+
return assetReference.toLowerCase();
|
|
76
|
+
default:
|
|
77
|
+
return assetReference;
|
|
78
|
+
}
|
|
79
|
+
})();
|
|
80
|
+
return `${chainId}/${assetNamespace}:${assetReferenceNormalized}`;
|
|
81
|
+
};
|
|
82
|
+
exports.toAssetId = toAssetId;
|
|
83
|
+
// NOTE: perf critical - benchmark any changes
|
|
84
|
+
const fromAssetId = (assetId) => {
|
|
85
|
+
const slashIdx = assetId.indexOf('/');
|
|
86
|
+
const chainId = assetId.substring(0, slashIdx);
|
|
87
|
+
const assetParts = assetId.substring(slashIdx + 1);
|
|
88
|
+
const { chainNamespace, chainReference } = (0, chainId_1.fromChainId)(chainId);
|
|
89
|
+
const idx = assetParts.indexOf(':');
|
|
90
|
+
const assetNamespace = assetParts.substring(0, idx);
|
|
91
|
+
const assetReference = assetParts.substring(idx + 1);
|
|
92
|
+
if (!(0, typeGuards_1.isAssetIdParts)(chainNamespace, chainReference, assetNamespace))
|
|
93
|
+
throw new Error(`fromAssetId: invalid AssetId: ${assetId}`);
|
|
94
|
+
const assetReferenceNormalized = (() => {
|
|
95
|
+
switch (assetNamespace) {
|
|
96
|
+
case 'erc20':
|
|
97
|
+
case 'bep20':
|
|
98
|
+
case 'erc721':
|
|
99
|
+
case 'erc1155':
|
|
100
|
+
case 'bep721':
|
|
101
|
+
case 'bep1155':
|
|
102
|
+
return assetReference.toLowerCase();
|
|
103
|
+
default:
|
|
104
|
+
return assetReference;
|
|
105
|
+
}
|
|
106
|
+
})();
|
|
107
|
+
return {
|
|
108
|
+
chainId,
|
|
109
|
+
chainNamespace: chainNamespace,
|
|
110
|
+
chainReference: chainReference,
|
|
111
|
+
assetNamespace: assetNamespace,
|
|
112
|
+
assetReference: assetReferenceNormalized,
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
exports.fromAssetId = fromAssetId;
|
|
116
|
+
// NOTE: perf critical - benchmark any changes
|
|
117
|
+
const isNft = (assetId) => {
|
|
118
|
+
const slashIdx = assetId.indexOf('/');
|
|
119
|
+
const assetParts = assetId.substring(slashIdx + 1);
|
|
120
|
+
const idx = assetParts.indexOf(':');
|
|
121
|
+
const assetNamespace = assetParts.substring(0, idx);
|
|
122
|
+
return ['erc721', 'erc1155', 'bep721', 'bep1155'].includes(assetNamespace);
|
|
123
|
+
};
|
|
124
|
+
exports.isNft = isNft;
|
|
125
|
+
exports.toCAIP19 = exports.toAssetId;
|
|
126
|
+
exports.fromCAIP19 = exports.fromAssetId;
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lodash_1 = require("lodash");
|
|
4
|
+
const vitest_1 = require("vitest");
|
|
5
|
+
const chainId_1 = require("../chainId/chainId");
|
|
6
|
+
const constants_1 = require("../constants");
|
|
7
|
+
const assetId_1 = require("./assetId");
|
|
8
|
+
(0, vitest_1.describe)('assetId', () => {
|
|
9
|
+
(0, vitest_1.it)('should have matching CAIP19 aliases', () => {
|
|
10
|
+
(0, vitest_1.expect)(assetId_1.toAssetId).toEqual(assetId_1.toCAIP19);
|
|
11
|
+
(0, vitest_1.expect)(assetId_1.fromAssetId).toEqual(assetId_1.fromCAIP19);
|
|
12
|
+
});
|
|
13
|
+
(0, vitest_1.describe)('toAssetId', () => {
|
|
14
|
+
(0, vitest_1.describe)('toAssetId(fromAssetId())', () => {
|
|
15
|
+
vitest_1.it.each([
|
|
16
|
+
['eip155:1/slip44:60'],
|
|
17
|
+
['eip155:1/erc20:0xc770eefad204b5180df6a14ee197d99d808ee52d'],
|
|
18
|
+
['bip122:000000000019d6689c085ae165831e93/slip44:0'],
|
|
19
|
+
['cosmos:cosmoshub-4/slip44:118'],
|
|
20
|
+
['cosmos:thorchain-1/slip44:tcy'],
|
|
21
|
+
])('returns an AssetId from the result of fromAssetId for %s', assetId => {
|
|
22
|
+
const result = (0, assetId_1.fromAssetId)(assetId);
|
|
23
|
+
(0, vitest_1.expect)((0, assetId_1.toAssetId)((0, lodash_1.omit)(result, 'chainId'))).toBe(assetId);
|
|
24
|
+
(0, vitest_1.expect)((0, assetId_1.toAssetId)((0, lodash_1.omit)(result, ['chainNamespace', 'chainReference']))).toBe(assetId);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
(0, vitest_1.it)('can make eth AssetId on mainnet', () => {
|
|
28
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.Evm;
|
|
29
|
+
const chainReference = constants_1.CHAIN_REFERENCE.EthereumMainnet;
|
|
30
|
+
const assetIdArgSuperset = {
|
|
31
|
+
chainNamespace,
|
|
32
|
+
chainReference,
|
|
33
|
+
assetNamespace: 'slip44',
|
|
34
|
+
assetReference: constants_1.ASSET_REFERENCE.Ethereum,
|
|
35
|
+
chainId: (0, chainId_1.toChainId)({ chainNamespace, chainReference }),
|
|
36
|
+
};
|
|
37
|
+
const expected = 'eip155:1/slip44:60';
|
|
38
|
+
(0, vitest_1.expect)((0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, 'chainId'))).toEqual(expected);
|
|
39
|
+
(0, vitest_1.expect)((0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, ['chainNamespace', 'chainReference']))).toEqual(expected);
|
|
40
|
+
});
|
|
41
|
+
(0, vitest_1.it)('throws with invalid eth network', () => {
|
|
42
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.Evm;
|
|
43
|
+
const chainReference = constants_1.CHAIN_REFERENCE.CosmosHubMainnet;
|
|
44
|
+
const assetIdArgSuperset = {
|
|
45
|
+
chainNamespace,
|
|
46
|
+
chainReference,
|
|
47
|
+
assetNamespace: 'slip44',
|
|
48
|
+
assetReference: constants_1.ASSET_REFERENCE.Ethereum,
|
|
49
|
+
chainId: `${chainNamespace}:${chainReference}`,
|
|
50
|
+
};
|
|
51
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, 'chainId'))).toThrow();
|
|
52
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, ['chainNamespace', 'chainReference']))).toThrow();
|
|
53
|
+
});
|
|
54
|
+
(0, vitest_1.it)('throws with invalid namespace', () => {
|
|
55
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.Evm;
|
|
56
|
+
const chainReference = constants_1.CHAIN_REFERENCE.EthereumMainnet;
|
|
57
|
+
const assetIdArgSuperset = {
|
|
58
|
+
chainNamespace,
|
|
59
|
+
chainReference,
|
|
60
|
+
assetNamespace: 'bad',
|
|
61
|
+
assetReference: constants_1.ASSET_REFERENCE.Ethereum,
|
|
62
|
+
chainId: `${chainNamespace}:${chainReference}`,
|
|
63
|
+
};
|
|
64
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, 'chainId'))).toThrow();
|
|
65
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, ['chainNamespace', 'chainReference']))).toThrow();
|
|
66
|
+
});
|
|
67
|
+
(0, vitest_1.it)('can make Cosmos AssetId on CosmosHub mainnet', () => {
|
|
68
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.CosmosSdk;
|
|
69
|
+
const chainReference = constants_1.CHAIN_REFERENCE.CosmosHubMainnet;
|
|
70
|
+
const assetIdArgSuperset = {
|
|
71
|
+
chainNamespace,
|
|
72
|
+
chainReference,
|
|
73
|
+
assetNamespace: 'slip44',
|
|
74
|
+
assetReference: constants_1.ASSET_REFERENCE.Cosmos,
|
|
75
|
+
chainId: (0, chainId_1.toChainId)({ chainNamespace, chainReference }),
|
|
76
|
+
};
|
|
77
|
+
const expected = 'cosmos:cosmoshub-4/slip44:118';
|
|
78
|
+
(0, vitest_1.expect)((0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, 'chainId'))).toEqual(expected);
|
|
79
|
+
(0, vitest_1.expect)((0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, ['chainNamespace', 'chainReference']))).toEqual(expected);
|
|
80
|
+
});
|
|
81
|
+
(0, vitest_1.it)('throws with invalid Cosmos network', () => {
|
|
82
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.CosmosSdk;
|
|
83
|
+
const chainReference = constants_1.CHAIN_REFERENCE.BitcoinMainnet;
|
|
84
|
+
const assetIdArgSuperset = {
|
|
85
|
+
chainNamespace,
|
|
86
|
+
chainReference,
|
|
87
|
+
assetNamespace: 'slip44',
|
|
88
|
+
assetReference: constants_1.ASSET_REFERENCE.Cosmos,
|
|
89
|
+
chainId: `${chainNamespace}:${chainReference}`,
|
|
90
|
+
};
|
|
91
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, 'chainId'))).toThrow();
|
|
92
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, ['chainNamespace', 'chainReference']))).toThrow();
|
|
93
|
+
});
|
|
94
|
+
(0, vitest_1.it)('throws with invalid Cosmos slip44 reference', () => {
|
|
95
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.CosmosSdk;
|
|
96
|
+
const chainReference = constants_1.CHAIN_REFERENCE.CosmosHubMainnet;
|
|
97
|
+
const assetIdArgSuperset = {
|
|
98
|
+
chainNamespace,
|
|
99
|
+
chainReference,
|
|
100
|
+
assetNamespace: 'slip44',
|
|
101
|
+
assetReference: 'bad',
|
|
102
|
+
chainId: `${chainNamespace}:${chainReference}`,
|
|
103
|
+
};
|
|
104
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, 'chainId'))).toThrow();
|
|
105
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, ['chainNamespace', 'chainReference']))).toThrow();
|
|
106
|
+
});
|
|
107
|
+
(0, vitest_1.it)('throws with invalid btc network', () => {
|
|
108
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.Utxo;
|
|
109
|
+
const chainReference = constants_1.CHAIN_REFERENCE.EthereumMainnet;
|
|
110
|
+
const assetIdArgSuperset = {
|
|
111
|
+
chainNamespace,
|
|
112
|
+
chainReference,
|
|
113
|
+
assetNamespace: 'slip44',
|
|
114
|
+
assetReference: constants_1.ASSET_REFERENCE.Bitcoin,
|
|
115
|
+
chainId: `${chainNamespace}:${chainReference}`,
|
|
116
|
+
};
|
|
117
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, 'chainId'))).toThrow();
|
|
118
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, ['chainNamespace', 'chainReference']))).toThrow();
|
|
119
|
+
});
|
|
120
|
+
(0, vitest_1.it)('can make FOX AssetId on mainnet', () => {
|
|
121
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.Evm;
|
|
122
|
+
const chainReference = constants_1.CHAIN_REFERENCE.EthereumMainnet;
|
|
123
|
+
const assetIdArgSuperset = {
|
|
124
|
+
chainNamespace,
|
|
125
|
+
chainReference,
|
|
126
|
+
assetNamespace: 'erc20',
|
|
127
|
+
assetReference: '0xc770eefad204b5180df6a14ee197d99d808ee52d',
|
|
128
|
+
chainId: `${chainNamespace}:${chainReference}`,
|
|
129
|
+
};
|
|
130
|
+
const expected = 'eip155:1/erc20:0xc770eefad204b5180df6a14ee197d99d808ee52d';
|
|
131
|
+
(0, vitest_1.expect)((0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, 'chainId'))).toEqual(expected);
|
|
132
|
+
(0, vitest_1.expect)((0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, ['chainNamespace', 'chainReference']))).toEqual(expected);
|
|
133
|
+
});
|
|
134
|
+
(0, vitest_1.it)('should lower case ERC20 asset references', () => {
|
|
135
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.Evm;
|
|
136
|
+
const chainReference = constants_1.CHAIN_REFERENCE.EthereumMainnet;
|
|
137
|
+
const assetIdArgSuperset = {
|
|
138
|
+
chainNamespace,
|
|
139
|
+
chainReference,
|
|
140
|
+
assetNamespace: 'erc20',
|
|
141
|
+
assetReference: '0xc770EEfAd204B5180dF6a14Ee197D99d808ee52d',
|
|
142
|
+
chainId: `${chainNamespace}:${chainReference}`,
|
|
143
|
+
};
|
|
144
|
+
const expected = 'eip155:1/erc20:0xc770eefad204b5180df6a14ee197d99d808ee52d';
|
|
145
|
+
(0, vitest_1.expect)((0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, 'chainId'))).toEqual(expected);
|
|
146
|
+
(0, vitest_1.expect)((0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, ['chainNamespace', 'chainReference']))).toEqual(expected);
|
|
147
|
+
});
|
|
148
|
+
(0, vitest_1.it)('should lower case ERC721 asset references', () => {
|
|
149
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.Evm;
|
|
150
|
+
const chainReference = constants_1.CHAIN_REFERENCE.EthereumMainnet;
|
|
151
|
+
const assetIdArgSuperset = {
|
|
152
|
+
chainNamespace,
|
|
153
|
+
chainReference,
|
|
154
|
+
assetNamespace: 'erc721',
|
|
155
|
+
assetReference: '0xc770EEfAd204B5180dF6a14Ee197D99d808ee52d/12345',
|
|
156
|
+
chainId: `${chainNamespace}:${chainReference}`,
|
|
157
|
+
};
|
|
158
|
+
const expected = 'eip155:1/erc721:0xc770eefad204b5180df6a14ee197d99d808ee52d/12345';
|
|
159
|
+
(0, vitest_1.expect)((0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, 'chainId'))).toEqual(expected);
|
|
160
|
+
(0, vitest_1.expect)((0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, ['chainNamespace', 'chainReference']))).toEqual(expected);
|
|
161
|
+
});
|
|
162
|
+
(0, vitest_1.it)('throws with invalid assetReference length', () => {
|
|
163
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.Evm;
|
|
164
|
+
const chainReference = constants_1.CHAIN_REFERENCE.EthereumMainnet;
|
|
165
|
+
const assetIdArgSuperset = {
|
|
166
|
+
chainNamespace,
|
|
167
|
+
chainReference,
|
|
168
|
+
assetNamespace: 'erc20',
|
|
169
|
+
assetReference: '0xfoo',
|
|
170
|
+
chainId: `${chainNamespace}:${chainReference}`,
|
|
171
|
+
};
|
|
172
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, 'chainId'))).toThrow();
|
|
173
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, ['chainNamespace', 'chainReference']))).toThrow();
|
|
174
|
+
});
|
|
175
|
+
(0, vitest_1.it)('throws with no assetReference string', () => {
|
|
176
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.Evm;
|
|
177
|
+
const chainReference = constants_1.CHAIN_REFERENCE.EthereumMainnet;
|
|
178
|
+
const assetIdArgSuperset = {
|
|
179
|
+
chainNamespace,
|
|
180
|
+
chainReference,
|
|
181
|
+
assetNamespace: 'erc20',
|
|
182
|
+
assetReference: '',
|
|
183
|
+
chainId: `${chainNamespace}:${chainReference}`,
|
|
184
|
+
};
|
|
185
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, 'chainId'))).toThrow();
|
|
186
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, ['chainNamespace', 'chainReference']))).toThrow();
|
|
187
|
+
});
|
|
188
|
+
(0, vitest_1.it)('throws with invalid assetReference string', () => {
|
|
189
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.Evm;
|
|
190
|
+
const chainReference = constants_1.CHAIN_REFERENCE.EthereumMainnet;
|
|
191
|
+
const assetIdArgSuperset = {
|
|
192
|
+
chainNamespace,
|
|
193
|
+
chainReference,
|
|
194
|
+
assetNamespace: 'erc20',
|
|
195
|
+
assetReference: 'gm',
|
|
196
|
+
chainId: `${chainNamespace}:${chainReference}`,
|
|
197
|
+
};
|
|
198
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, 'chainId'))).toThrow();
|
|
199
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, ['chainNamespace', 'chainReference']))).toThrow();
|
|
200
|
+
});
|
|
201
|
+
(0, vitest_1.it)('throws if no asset namespace provided', () => {
|
|
202
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.Evm;
|
|
203
|
+
const chainReference = constants_1.CHAIN_REFERENCE.EthereumMainnet;
|
|
204
|
+
const assetIdArgSuperset = {
|
|
205
|
+
chainNamespace,
|
|
206
|
+
chainReference,
|
|
207
|
+
assetNamespace: '',
|
|
208
|
+
assetReference: '0xdef1cafe',
|
|
209
|
+
chainId: `${chainNamespace}:${chainReference}`,
|
|
210
|
+
};
|
|
211
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, 'chainId'))).toThrow();
|
|
212
|
+
(0, vitest_1.expect)(() => (0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, ['chainNamespace', 'chainReference']))).toThrow();
|
|
213
|
+
});
|
|
214
|
+
(0, vitest_1.it)('can make bitcoin AssetId on mainnet', () => {
|
|
215
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.Utxo;
|
|
216
|
+
const chainReference = constants_1.CHAIN_REFERENCE.BitcoinMainnet;
|
|
217
|
+
const assetIdArgSuperset = {
|
|
218
|
+
chainNamespace,
|
|
219
|
+
chainReference,
|
|
220
|
+
assetNamespace: 'slip44',
|
|
221
|
+
assetReference: constants_1.ASSET_REFERENCE.Bitcoin,
|
|
222
|
+
chainId: `${chainNamespace}:${chainReference}`,
|
|
223
|
+
};
|
|
224
|
+
const expected = 'bip122:000000000019d6689c085ae165831e93/slip44:0';
|
|
225
|
+
(0, vitest_1.expect)((0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, 'chainId'))).toEqual(expected);
|
|
226
|
+
(0, vitest_1.expect)((0, assetId_1.toAssetId)((0, lodash_1.omit)(assetIdArgSuperset, ['chainNamespace', 'chainReference']))).toEqual(expected);
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
(0, vitest_1.describe)('fromAssetId', () => {
|
|
230
|
+
(0, vitest_1.describe)('fromAssetId(toAssetId())', () => {
|
|
231
|
+
const slip44 = 'slip44';
|
|
232
|
+
const erc20 = 'erc20';
|
|
233
|
+
vitest_1.it.each([
|
|
234
|
+
[constants_1.CHAIN_NAMESPACE.Utxo, constants_1.CHAIN_REFERENCE.BitcoinMainnet, slip44, constants_1.ASSET_REFERENCE.Bitcoin],
|
|
235
|
+
[constants_1.CHAIN_NAMESPACE.Evm, constants_1.CHAIN_REFERENCE.EthereumMainnet, slip44, constants_1.ASSET_REFERENCE.Ethereum],
|
|
236
|
+
[
|
|
237
|
+
constants_1.CHAIN_NAMESPACE.Evm,
|
|
238
|
+
constants_1.CHAIN_REFERENCE.EthereumMainnet,
|
|
239
|
+
erc20,
|
|
240
|
+
'0xc770eefad204b5180df6a14ee197d99d808ee52d',
|
|
241
|
+
],
|
|
242
|
+
[
|
|
243
|
+
constants_1.CHAIN_NAMESPACE.CosmosSdk,
|
|
244
|
+
constants_1.CHAIN_REFERENCE.CosmosHubMainnet,
|
|
245
|
+
slip44,
|
|
246
|
+
constants_1.ASSET_REFERENCE.Cosmos,
|
|
247
|
+
],
|
|
248
|
+
])('returns a AssetId from the result of fromAssetId for %s', (chainNamespace, chainReference, assetNamespace, assetReference) => {
|
|
249
|
+
(0, vitest_1.expect)((0, assetId_1.fromAssetId)((0, assetId_1.toAssetId)({ chainNamespace, chainReference, assetNamespace, assetReference }))).toStrictEqual({
|
|
250
|
+
chainNamespace,
|
|
251
|
+
chainReference,
|
|
252
|
+
assetReference,
|
|
253
|
+
assetNamespace,
|
|
254
|
+
chainId: (0, chainId_1.toChainId)({ chainNamespace, chainReference }),
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
(0, vitest_1.it)('can return chain, network from eth AssetId on mainnet', () => {
|
|
259
|
+
const AssetId = 'eip155:1/slip44:60';
|
|
260
|
+
const { chainId, chainReference, chainNamespace, assetNamespace, assetReference } = (0, assetId_1.fromAssetId)(AssetId);
|
|
261
|
+
(0, vitest_1.expect)(chainNamespace).toEqual(constants_1.CHAIN_NAMESPACE.Evm);
|
|
262
|
+
(0, vitest_1.expect)(chainReference).toEqual(constants_1.CHAIN_REFERENCE.EthereumMainnet);
|
|
263
|
+
(0, vitest_1.expect)(chainId).toEqual((0, chainId_1.toChainId)({ chainNamespace, chainReference }));
|
|
264
|
+
(0, vitest_1.expect)(assetNamespace).toEqual('slip44');
|
|
265
|
+
(0, vitest_1.expect)(assetReference).toEqual(constants_1.ASSET_REFERENCE.Ethereum);
|
|
266
|
+
});
|
|
267
|
+
(0, vitest_1.it)('can return chain, network from bitcoin AssetId on mainnet', () => {
|
|
268
|
+
const AssetId = 'bip122:000000000019d6689c085ae165831e93/slip44:0';
|
|
269
|
+
const { chainId, chainReference, chainNamespace, assetNamespace, assetReference } = (0, assetId_1.fromAssetId)(AssetId);
|
|
270
|
+
(0, vitest_1.expect)(chainNamespace).toEqual(constants_1.CHAIN_NAMESPACE.Utxo);
|
|
271
|
+
(0, vitest_1.expect)(chainReference).toEqual(constants_1.CHAIN_REFERENCE.BitcoinMainnet);
|
|
272
|
+
(0, vitest_1.expect)(chainId).toEqual((0, chainId_1.toChainId)({ chainNamespace, chainReference }));
|
|
273
|
+
(0, vitest_1.expect)(assetNamespace).toEqual('slip44');
|
|
274
|
+
(0, vitest_1.expect)(assetReference).toEqual(constants_1.ASSET_REFERENCE.Bitcoin);
|
|
275
|
+
});
|
|
276
|
+
(0, vitest_1.it)('can return chainId, chainReference, chainNamespace, assetNamespace, assetReference from FOX AssetId on mainnet', () => {
|
|
277
|
+
const AssetId = 'eip155:1/erc20:0xc770eefad204b5180df6a14ee197d99d808ee52d';
|
|
278
|
+
const { chainId, chainReference, chainNamespace, assetNamespace, assetReference } = (0, assetId_1.fromAssetId)(AssetId);
|
|
279
|
+
(0, vitest_1.expect)(chainNamespace).toEqual(constants_1.CHAIN_NAMESPACE.Evm);
|
|
280
|
+
(0, vitest_1.expect)(chainReference).toEqual(constants_1.CHAIN_REFERENCE.EthereumMainnet);
|
|
281
|
+
(0, vitest_1.expect)(chainId).toEqual((0, chainId_1.toChainId)({ chainNamespace, chainReference }));
|
|
282
|
+
(0, vitest_1.expect)(assetNamespace).toEqual('erc20');
|
|
283
|
+
(0, vitest_1.expect)(assetReference).toEqual('0xc770eefad204b5180df6a14ee197d99d808ee52d');
|
|
284
|
+
});
|
|
285
|
+
(0, vitest_1.it)('should lower case assetReference for assetNamespace ERC20', () => {
|
|
286
|
+
const AssetId = 'eip155:1/erc20:0xc770EEfAd204B5180dF6a14Ee197D99d808ee52d';
|
|
287
|
+
const { chainId, chainReference, chainNamespace, assetNamespace, assetReference } = (0, assetId_1.fromAssetId)(AssetId);
|
|
288
|
+
(0, vitest_1.expect)(chainNamespace).toEqual(constants_1.CHAIN_NAMESPACE.Evm);
|
|
289
|
+
(0, vitest_1.expect)(chainReference).toEqual(constants_1.CHAIN_REFERENCE.EthereumMainnet);
|
|
290
|
+
(0, vitest_1.expect)(chainId).toEqual((0, chainId_1.toChainId)({ chainNamespace, chainReference }));
|
|
291
|
+
(0, vitest_1.expect)(assetNamespace).toEqual('erc20');
|
|
292
|
+
(0, vitest_1.expect)(assetReference).toEqual('0xc770eefad204b5180df6a14ee197d99d808ee52d');
|
|
293
|
+
});
|
|
294
|
+
(0, vitest_1.it)('should lower case assetReference for assetNamespace ERC721', () => {
|
|
295
|
+
const AssetId = 'eip155:1/erc721:0xc770EEfAd204B5180dF6a14Ee197D99d808ee52d/12345';
|
|
296
|
+
const { chainId, chainReference, chainNamespace, assetNamespace, assetReference } = (0, assetId_1.fromAssetId)(AssetId);
|
|
297
|
+
(0, vitest_1.expect)(chainNamespace).toEqual(constants_1.CHAIN_NAMESPACE.Evm);
|
|
298
|
+
(0, vitest_1.expect)(chainReference).toEqual(constants_1.CHAIN_REFERENCE.EthereumMainnet);
|
|
299
|
+
(0, vitest_1.expect)(chainId).toEqual((0, chainId_1.toChainId)({ chainNamespace, chainReference }));
|
|
300
|
+
(0, vitest_1.expect)(assetNamespace).toEqual('erc721');
|
|
301
|
+
const [address, id] = assetReference.split('/');
|
|
302
|
+
(0, vitest_1.expect)(address).toEqual('0xc770eefad204b5180df6a14ee197d99d808ee52d');
|
|
303
|
+
(0, vitest_1.expect)(id).toEqual('12345');
|
|
304
|
+
});
|
|
305
|
+
(0, vitest_1.it)('can parse a cosmoshub native token', () => {
|
|
306
|
+
const AssetId = 'cosmos:cosmoshub-4/slip44:118';
|
|
307
|
+
const { chainId, chainReference, chainNamespace, assetNamespace, assetReference } = (0, assetId_1.fromAssetId)(AssetId);
|
|
308
|
+
(0, vitest_1.expect)(chainNamespace).toEqual(constants_1.CHAIN_NAMESPACE.CosmosSdk);
|
|
309
|
+
(0, vitest_1.expect)(chainReference).toEqual(constants_1.CHAIN_REFERENCE.CosmosHubMainnet);
|
|
310
|
+
(0, vitest_1.expect)(chainId).toEqual((0, chainId_1.toChainId)({ chainNamespace, chainReference }));
|
|
311
|
+
(0, vitest_1.expect)(assetNamespace).toEqual('slip44');
|
|
312
|
+
(0, vitest_1.expect)(assetReference).toEqual(constants_1.ASSET_REFERENCE.Cosmos);
|
|
313
|
+
});
|
|
314
|
+
(0, vitest_1.it)('errors for an invalid AssetId format', () => {
|
|
315
|
+
(0, vitest_1.expect)(() => (0, assetId_1.fromAssetId)('invalid')).toThrow();
|
|
316
|
+
});
|
|
317
|
+
(0, vitest_1.it)('errors for invalid ChainNamespace', () => {
|
|
318
|
+
(0, vitest_1.expect)(() => (0, assetId_1.fromAssetId)('invalid:cosmoshub-4/slip44:118')).toThrow();
|
|
319
|
+
});
|
|
320
|
+
(0, vitest_1.it)('errors for invalid ChainReference type', () => {
|
|
321
|
+
(0, vitest_1.expect)(() => (0, assetId_1.fromAssetId)('cosmos:invalid/slip44:118')).toThrow();
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-2.md
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.fromCAIP2 = exports.toCAIP2 = exports.fromChainId = exports.toChainId = void 0;
|
|
5
|
+
const typeGuards_1 = require("../typeGuards");
|
|
6
|
+
const toChainId = (args) => {
|
|
7
|
+
const { chainNamespace, chainReference } = args;
|
|
8
|
+
const maybeChainId = `${chainNamespace}:${chainReference}`;
|
|
9
|
+
(0, typeGuards_1.assertIsChainId)(maybeChainId);
|
|
10
|
+
return maybeChainId;
|
|
11
|
+
};
|
|
12
|
+
exports.toChainId = toChainId;
|
|
13
|
+
// NOTE: perf critical - benchmark any changes
|
|
14
|
+
const fromChainId = (chainId) => {
|
|
15
|
+
const idx = chainId.indexOf(':');
|
|
16
|
+
const chainNamespace = chainId.substring(0, idx);
|
|
17
|
+
const chainReference = chainId.substring(idx + 1);
|
|
18
|
+
return {
|
|
19
|
+
chainNamespace: chainNamespace,
|
|
20
|
+
chainReference: chainReference,
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
exports.fromChainId = fromChainId;
|
|
24
|
+
exports.toCAIP2 = exports.toChainId;
|
|
25
|
+
exports.fromCAIP2 = exports.fromChainId;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const typeGuards_1 = require("../typeGuards");
|
|
6
|
+
const chainId_1 = require("./chainId");
|
|
7
|
+
(0, vitest_1.describe)('chainId', () => {
|
|
8
|
+
(0, vitest_1.it)('should have matching CAIP2 aliases', () => {
|
|
9
|
+
(0, vitest_1.expect)(chainId_1.toChainId).toEqual(chainId_1.toCAIP2);
|
|
10
|
+
(0, vitest_1.expect)(chainId_1.fromChainId).toEqual(chainId_1.fromCAIP2);
|
|
11
|
+
});
|
|
12
|
+
(0, vitest_1.describe)('toChainId', () => {
|
|
13
|
+
(0, vitest_1.it)('can turn CosmosHub mainnet to ChainId', () => {
|
|
14
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.CosmosSdk;
|
|
15
|
+
const chainReference = constants_1.CHAIN_REFERENCE.CosmosHubMainnet;
|
|
16
|
+
const result = (0, chainId_1.toChainId)({ chainNamespace, chainReference });
|
|
17
|
+
(0, vitest_1.expect)(result).toEqual('cosmos:cosmoshub-4');
|
|
18
|
+
});
|
|
19
|
+
(0, vitest_1.it)('can turn Ethereum mainnet to ChainId', () => {
|
|
20
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.Evm;
|
|
21
|
+
const chainReference = constants_1.CHAIN_REFERENCE.EthereumMainnet;
|
|
22
|
+
const result = (0, chainId_1.toChainId)({ chainNamespace, chainReference });
|
|
23
|
+
(0, vitest_1.expect)(result).toEqual('eip155:1');
|
|
24
|
+
});
|
|
25
|
+
(0, vitest_1.it)('can turn Bitcoin mainnet to ChainId', () => {
|
|
26
|
+
const chainNamespace = constants_1.CHAIN_NAMESPACE.Utxo;
|
|
27
|
+
const chainReference = constants_1.CHAIN_REFERENCE.BitcoinMainnet;
|
|
28
|
+
const result = (0, chainId_1.toChainId)({ chainNamespace, chainReference });
|
|
29
|
+
(0, vitest_1.expect)(result).toEqual('bip122:000000000019d6689c085ae165831e93');
|
|
30
|
+
});
|
|
31
|
+
(0, vitest_1.it)('should throw an error for an invalid chain', () => {
|
|
32
|
+
// @ts-ignore
|
|
33
|
+
(0, vitest_1.expect)(() => (0, chainId_1.toChainId)({
|
|
34
|
+
chainNamespace: constants_1.CHAIN_NAMESPACE.Utxo,
|
|
35
|
+
chainReference: constants_1.CHAIN_REFERENCE.CosmosHubMainnet,
|
|
36
|
+
})).toThrow('assertIsChainId: unsupported ChainId: bip122:cosmoshub-4');
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
(0, vitest_1.describe)('fromChainId', () => {
|
|
40
|
+
(0, vitest_1.it)('can turn Bitcoin mainnet to chain and network', () => {
|
|
41
|
+
const bitcoinChainId = 'bip122:000000000019d6689c085ae165831e93';
|
|
42
|
+
const { chainNamespace, chainReference } = (0, chainId_1.fromChainId)(bitcoinChainId);
|
|
43
|
+
(0, vitest_1.expect)(chainNamespace).toEqual(constants_1.CHAIN_NAMESPACE.Utxo);
|
|
44
|
+
(0, vitest_1.expect)(chainReference).toEqual(constants_1.CHAIN_REFERENCE.BitcoinMainnet);
|
|
45
|
+
});
|
|
46
|
+
(0, vitest_1.it)('can turn CosmosHub mainnet to chain and network', () => {
|
|
47
|
+
const cosmosHubChainId = 'cosmos:cosmoshub-4';
|
|
48
|
+
const { chainNamespace, chainReference } = (0, chainId_1.fromChainId)(cosmosHubChainId);
|
|
49
|
+
(0, vitest_1.expect)(chainNamespace).toEqual(constants_1.CHAIN_NAMESPACE.CosmosSdk);
|
|
50
|
+
(0, vitest_1.expect)(chainReference).toEqual(constants_1.CHAIN_REFERENCE.CosmosHubMainnet);
|
|
51
|
+
});
|
|
52
|
+
(0, vitest_1.it)('can turn Ethereum mainnet to chain and network', () => {
|
|
53
|
+
const ethereumChainId = 'eip155:1';
|
|
54
|
+
const { chainNamespace, chainReference } = (0, chainId_1.fromChainId)(ethereumChainId);
|
|
55
|
+
(0, vitest_1.expect)(chainNamespace).toEqual(constants_1.CHAIN_NAMESPACE.Evm);
|
|
56
|
+
(0, vitest_1.expect)(chainReference).toEqual(constants_1.CHAIN_REFERENCE.EthereumMainnet);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
(0, vitest_1.describe)('isChainId', () => {
|
|
61
|
+
(0, vitest_1.it)('throws on eip155 without a network reference', () => {
|
|
62
|
+
(0, vitest_1.expect)(() => (0, typeGuards_1.assertIsChainId)('eip155')).toThrow();
|
|
63
|
+
});
|
|
64
|
+
(0, vitest_1.it)('validates eip155:1 mainnet as true', () => {
|
|
65
|
+
(0, vitest_1.expect)((0, typeGuards_1.isChainId)('eip155:1')).toBe(true);
|
|
66
|
+
});
|
|
67
|
+
(0, vitest_1.it)('throws on eip155:2 unsupported network reference', () => {
|
|
68
|
+
(0, vitest_1.expect)(() => (0, typeGuards_1.assertIsChainId)('eip155:2')).toThrow();
|
|
69
|
+
});
|
|
70
|
+
(0, vitest_1.it)('validates bip122:000000000019d6689c085ae165831e93 mainnet as true', () => {
|
|
71
|
+
(0, vitest_1.expect)((0, typeGuards_1.isChainId)('bip122:000000000019d6689c085ae165831e93')).toBe(true);
|
|
72
|
+
});
|
|
73
|
+
(0, vitest_1.it)('throws on bip122 with the wrong network reference', () => {
|
|
74
|
+
(0, vitest_1.expect)(() => (0, typeGuards_1.assertIsChainId)('bip122:1')).toThrow();
|
|
75
|
+
});
|
|
76
|
+
(0, vitest_1.it)('throws on bip122', () => {
|
|
77
|
+
// missing network
|
|
78
|
+
(0, vitest_1.expect)(() => (0, typeGuards_1.assertIsChainId)('bip122')).toThrow();
|
|
79
|
+
});
|
|
80
|
+
(0, vitest_1.it)('throws on empty string', () => {
|
|
81
|
+
// missing network
|
|
82
|
+
(0, vitest_1.expect)(() => (0, typeGuards_1.assertIsChainId)('')).toThrow();
|
|
83
|
+
});
|
|
84
|
+
(0, vitest_1.it)('should return true for cosmos', () => {
|
|
85
|
+
(0, vitest_1.expect)((0, typeGuards_1.isChainId)('cosmos:cosmoshub-4')).toBe(true);
|
|
86
|
+
});
|
|
87
|
+
(0, vitest_1.it)('should throw for an unknown cosmos chain', () => {
|
|
88
|
+
(0, vitest_1.expect)(() => (0, typeGuards_1.assertIsChainId)('cosmos:fakechain-1')).toThrow('assertIsChainId: unsupported ChainId: cosmos:fakechain-1');
|
|
89
|
+
});
|
|
90
|
+
});
|
|
@@ -32,6 +32,7 @@ export declare const foxWifHatAssetId: AssetId;
|
|
|
32
32
|
export declare const cosmosAssetId: AssetId;
|
|
33
33
|
export declare const thorchainAssetId: AssetId;
|
|
34
34
|
export declare const tcyAssetId: AssetId;
|
|
35
|
+
export declare const rujiAssetId: AssetId;
|
|
35
36
|
export declare const mayachainAssetId: AssetId;
|
|
36
37
|
export declare const binanceAssetId: AssetId;
|
|
37
38
|
export declare const btcChainId: ChainId;
|
|
@@ -89,7 +90,6 @@ export declare const ASSET_NAMESPACE: {
|
|
|
89
90
|
readonly bep721: "bep721";
|
|
90
91
|
readonly bep1155: "bep1155";
|
|
91
92
|
readonly slip44: "slip44";
|
|
92
|
-
readonly ibc: "ibc";
|
|
93
93
|
readonly splToken: "token";
|
|
94
94
|
};
|
|
95
95
|
export declare const ASSET_REFERENCE: {
|