@shapeshiftoss/caip 1.13.0 → 2.0.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/README.md +7 -5
- package/dist/adapters/coincap/utils.js +25 -7
- package/dist/adapters/coingecko/utils.js +21 -6
- package/dist/adapters/yearn/utils.js +11 -8
- package/dist/caip19/caip19.d.ts +12 -16
- package/dist/caip19/caip19.js +90 -167
- package/dist/caip2/caip2.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -41,7 +41,9 @@ Ether
|
|
|
41
41
|
```ts
|
|
42
42
|
const chain = ChainTypes.Ethereum
|
|
43
43
|
const network = NetworkTypes.MAINNET
|
|
44
|
-
const
|
|
44
|
+
const assetNamespace = AssetNamespace.Slip44
|
|
45
|
+
const assetReference = AssetReference.Ethereum
|
|
46
|
+
const result = toCAIP19({ chain, network, assetNamespace, assetReference })
|
|
45
47
|
expect(result).toEqual('eip155:1/slip44:60')
|
|
46
48
|
```
|
|
47
49
|
|
|
@@ -50,7 +52,7 @@ ERC20 token
|
|
|
50
52
|
```ts
|
|
51
53
|
const chain = ChainTypes.Ethereum
|
|
52
54
|
const network = NetworkTypes.MAINNET
|
|
53
|
-
const contractType =
|
|
55
|
+
const contractType = AssetNamespace.ERC20
|
|
54
56
|
const tokenId = '0xc770eefad204b5180df6a14ee197d99d808ee52d'
|
|
55
57
|
const result = toCAIP19({ chain, network, contractType, tokenId })
|
|
56
58
|
expect(result).toEqual('eip155:1/erc20:0xc770eefad204b5180df6a14ee197d99d808ee52d')
|
|
@@ -65,8 +67,8 @@ const caip19 = 'eip155:1/slip44:60'
|
|
|
65
67
|
const { chain, network, contractType, tokenId } = fromCAIP19(caip19)
|
|
66
68
|
expect(chain).toEqual(ChainTypes.Ethereum)
|
|
67
69
|
expect(network).toEqual(NetworkTypes.MAINNET)
|
|
68
|
-
expect(contractType).
|
|
69
|
-
expect(tokenId).
|
|
70
|
+
expect(contractType).toEqual(AssetNamespace.Slip44)
|
|
71
|
+
expect(tokenId).toEqual(AssetReference.Ethereum)
|
|
70
72
|
```
|
|
71
73
|
|
|
72
74
|
ERC20 token
|
|
@@ -76,7 +78,7 @@ const caip19 = 'eip155:1/erc20:0xc770eefad204b5180df6a14ee197d99d808ee52d'
|
|
|
76
78
|
const { chain, network, contractType, tokenId } = fromCAIP19(caip19)
|
|
77
79
|
expect(chain).toEqual(ChainTypes.Ethereum)
|
|
78
80
|
expect(network).toEqual(NetworkTypes.MAINNET)
|
|
79
|
-
expect(contractType).toEqual(
|
|
81
|
+
expect(contractType).toEqual(AssetNamespace.ERC20)
|
|
80
82
|
expect(tokenId).toEqual('0xc770eefad204b5180df6a14ee197d99d808ee52d')
|
|
81
83
|
```
|
|
82
84
|
|
|
@@ -23,13 +23,16 @@ const parseEthData = (data) => {
|
|
|
23
23
|
const ethCoins = data.filter(({ id, explorer }) => (explorer && explorer.startsWith('https://etherscan.io/token/0x')) || id === 'ethereum');
|
|
24
24
|
const chain = types_1.ChainTypes.Ethereum;
|
|
25
25
|
const network = types_1.NetworkTypes.MAINNET;
|
|
26
|
-
const contractType = types_1.ContractTypes.ERC20;
|
|
27
26
|
return ethCoins.reduce((acc, { id, explorer }) => {
|
|
28
|
-
let
|
|
27
|
+
let assetReference = caip19_1.AssetReference.Ethereum;
|
|
28
|
+
const assetNamespace = id === 'ethereum' ? caip19_1.AssetNamespace.Slip44 : caip19_1.AssetNamespace.ERC20;
|
|
29
29
|
if (id !== 'ethereum' && explorer) {
|
|
30
|
-
|
|
30
|
+
assetReference = explorer
|
|
31
|
+
.replace('https://etherscan.io/token/', '')
|
|
32
|
+
.split('#')[0]
|
|
33
|
+
.split('?')[0];
|
|
31
34
|
}
|
|
32
|
-
const caip19 = (0, caip19_1.toCAIP19)({ chain, network,
|
|
35
|
+
const caip19 = (0, caip19_1.toCAIP19)({ chain, network, assetNamespace, assetReference });
|
|
33
36
|
acc[caip19] = id;
|
|
34
37
|
return acc;
|
|
35
38
|
}, {});
|
|
@@ -38,21 +41,36 @@ exports.parseEthData = parseEthData;
|
|
|
38
41
|
const makeBtcData = () => {
|
|
39
42
|
const chain = types_1.ChainTypes.Bitcoin;
|
|
40
43
|
const network = types_1.NetworkTypes.MAINNET;
|
|
41
|
-
const caip19 = (0, caip19_1.toCAIP19)({
|
|
44
|
+
const caip19 = (0, caip19_1.toCAIP19)({
|
|
45
|
+
chain,
|
|
46
|
+
network,
|
|
47
|
+
assetNamespace: caip19_1.AssetNamespace.Slip44,
|
|
48
|
+
assetReference: caip19_1.AssetReference.Bitcoin
|
|
49
|
+
});
|
|
42
50
|
return { [caip19]: 'bitcoin' };
|
|
43
51
|
};
|
|
44
52
|
exports.makeBtcData = makeBtcData;
|
|
45
53
|
const makeCosmosHubData = () => {
|
|
46
54
|
const chain = types_1.ChainTypes.Cosmos;
|
|
47
55
|
const network = types_1.NetworkTypes.COSMOSHUB_MAINNET;
|
|
48
|
-
const caip19 = (0, caip19_1.toCAIP19)({
|
|
56
|
+
const caip19 = (0, caip19_1.toCAIP19)({
|
|
57
|
+
chain,
|
|
58
|
+
network,
|
|
59
|
+
assetNamespace: caip19_1.AssetNamespace.Slip44,
|
|
60
|
+
assetReference: caip19_1.AssetReference.Cosmos
|
|
61
|
+
});
|
|
49
62
|
return { [caip19]: 'cosmos' };
|
|
50
63
|
};
|
|
51
64
|
exports.makeCosmosHubData = makeCosmosHubData;
|
|
52
65
|
const makeOsmosisData = () => {
|
|
53
66
|
const chain = types_1.ChainTypes.Osmosis;
|
|
54
67
|
const network = types_1.NetworkTypes.OSMOSIS_MAINNET;
|
|
55
|
-
const caip19 = (0, caip19_1.toCAIP19)({
|
|
68
|
+
const caip19 = (0, caip19_1.toCAIP19)({
|
|
69
|
+
chain,
|
|
70
|
+
network,
|
|
71
|
+
assetNamespace: caip19_1.AssetNamespace.Slip44,
|
|
72
|
+
assetReference: caip19_1.AssetReference.Osmosis
|
|
73
|
+
});
|
|
56
74
|
return { [caip19]: 'osmosis' };
|
|
57
75
|
};
|
|
58
76
|
exports.makeOsmosisData = makeOsmosisData;
|
|
@@ -23,10 +23,10 @@ const parseEthData = (data) => {
|
|
|
23
23
|
const ethCoins = data.filter(({ id, platforms }) => Boolean(platforms === null || platforms === void 0 ? void 0 : platforms.ethereum) || id === 'ethereum');
|
|
24
24
|
const chain = types_1.ChainTypes.Ethereum;
|
|
25
25
|
const network = types_1.NetworkTypes.MAINNET;
|
|
26
|
-
const contractType = types_1.ContractTypes.ERC20;
|
|
27
26
|
return ethCoins.reduce((acc, { id, platforms }) => {
|
|
28
|
-
const
|
|
29
|
-
const
|
|
27
|
+
const assetNamespace = id === 'ethereum' ? caip19_1.AssetNamespace.Slip44 : caip19_1.AssetNamespace.ERC20;
|
|
28
|
+
const assetReference = id === 'ethereum' ? caip19_1.AssetReference.Ethereum : platforms === null || platforms === void 0 ? void 0 : platforms.ethereum;
|
|
29
|
+
const caip19 = (0, caip19_1.toCAIP19)({ chain, network, assetNamespace, assetReference });
|
|
30
30
|
acc[caip19] = id;
|
|
31
31
|
return acc;
|
|
32
32
|
}, {});
|
|
@@ -35,21 +35,36 @@ exports.parseEthData = parseEthData;
|
|
|
35
35
|
const makeBtcData = () => {
|
|
36
36
|
const chain = types_1.ChainTypes.Bitcoin;
|
|
37
37
|
const network = types_1.NetworkTypes.MAINNET;
|
|
38
|
-
const caip19 = (0, caip19_1.toCAIP19)({
|
|
38
|
+
const caip19 = (0, caip19_1.toCAIP19)({
|
|
39
|
+
chain,
|
|
40
|
+
network,
|
|
41
|
+
assetNamespace: caip19_1.AssetNamespace.Slip44,
|
|
42
|
+
assetReference: caip19_1.AssetReference.Bitcoin
|
|
43
|
+
});
|
|
39
44
|
return { [caip19]: 'bitcoin' };
|
|
40
45
|
};
|
|
41
46
|
exports.makeBtcData = makeBtcData;
|
|
42
47
|
const makeCosmosHubData = () => {
|
|
43
48
|
const chain = types_1.ChainTypes.Cosmos;
|
|
44
49
|
const network = types_1.NetworkTypes.COSMOSHUB_MAINNET;
|
|
45
|
-
const caip19 = (0, caip19_1.toCAIP19)({
|
|
50
|
+
const caip19 = (0, caip19_1.toCAIP19)({
|
|
51
|
+
chain,
|
|
52
|
+
network,
|
|
53
|
+
assetNamespace: caip19_1.AssetNamespace.Slip44,
|
|
54
|
+
assetReference: caip19_1.AssetReference.Cosmos
|
|
55
|
+
});
|
|
46
56
|
return { [caip19]: 'cosmos' };
|
|
47
57
|
};
|
|
48
58
|
exports.makeCosmosHubData = makeCosmosHubData;
|
|
49
59
|
const makeOsmosisData = () => {
|
|
50
60
|
const chain = types_1.ChainTypes.Osmosis;
|
|
51
61
|
const network = types_1.NetworkTypes.OSMOSIS_MAINNET;
|
|
52
|
-
const caip19 = (0, caip19_1.toCAIP19)({
|
|
62
|
+
const caip19 = (0, caip19_1.toCAIP19)({
|
|
63
|
+
chain,
|
|
64
|
+
network,
|
|
65
|
+
assetNamespace: caip19_1.AssetNamespace.Slip44,
|
|
66
|
+
assetReference: caip19_1.AssetReference.Osmosis
|
|
67
|
+
});
|
|
53
68
|
return { [caip19]: 'osmosis' };
|
|
54
69
|
};
|
|
55
70
|
exports.makeOsmosisData = makeOsmosisData;
|
|
@@ -11,7 +11,7 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
11
11
|
const toLower_1 = __importDefault(require("lodash/toLower"));
|
|
12
12
|
const uniqBy_1 = __importDefault(require("lodash/uniqBy"));
|
|
13
13
|
const caip2_1 = require("../../caip2/caip2");
|
|
14
|
-
const caip19_1 = require("
|
|
14
|
+
const caip19_1 = require("../../caip19/caip19");
|
|
15
15
|
const network = 1; // 1 for mainnet
|
|
16
16
|
const provider = new providers_1.JsonRpcProvider(process.env.REACT_APP_UNCHAINED_ETHEREUM_HTTP_URL);
|
|
17
17
|
const yearnSdk = new sdk_1.Yearn(network, { provider, disableAllowlist: true });
|
|
@@ -31,22 +31,25 @@ const fetchData = async () => {
|
|
|
31
31
|
yearnSdk.vaults.tokens()
|
|
32
32
|
]);
|
|
33
33
|
const tokens = [...vaults, ...ironBankTokens, ...zapperTokens, ...underlyingVaultTokens];
|
|
34
|
-
|
|
35
|
-
return uniqueTokens;
|
|
34
|
+
return (0, uniqBy_1.default)(tokens, 'address');
|
|
36
35
|
};
|
|
37
36
|
exports.fetchData = fetchData;
|
|
38
37
|
const parseEthData = (data) => {
|
|
39
38
|
const chain = types_1.ChainTypes.Ethereum;
|
|
40
|
-
const
|
|
41
|
-
|
|
39
|
+
const assetNamespace = caip19_1.AssetNamespace.ERC20;
|
|
40
|
+
return data.reduce((acc, datum) => {
|
|
42
41
|
const { address } = datum;
|
|
43
42
|
const id = address;
|
|
44
|
-
const
|
|
45
|
-
const caip19 = (0, caip19_1.toCAIP19)({
|
|
43
|
+
const assetReference = (0, toLower_1.default)(address);
|
|
44
|
+
const caip19 = (0, caip19_1.toCAIP19)({
|
|
45
|
+
chain,
|
|
46
|
+
network: types_1.NetworkTypes.MAINNET,
|
|
47
|
+
assetNamespace,
|
|
48
|
+
assetReference
|
|
49
|
+
});
|
|
46
50
|
acc[caip19] = id;
|
|
47
51
|
return acc;
|
|
48
52
|
}, {});
|
|
49
|
-
return result;
|
|
50
53
|
};
|
|
51
54
|
exports.parseEthData = parseEthData;
|
|
52
55
|
const parseData = (d) => {
|
package/dist/caip19/caip19.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ChainTypes,
|
|
1
|
+
import { ChainTypes, NetworkTypes } from '@shapeshiftoss/types';
|
|
2
|
+
import { ChainReference } from '../caip2/caip2';
|
|
2
3
|
export declare type CAIP19 = string;
|
|
3
4
|
export declare enum AssetNamespace {
|
|
4
5
|
CW20 = "cw20",
|
|
@@ -10,29 +11,24 @@ export declare enum AssetNamespace {
|
|
|
10
11
|
IBC = "ibc"
|
|
11
12
|
}
|
|
12
13
|
export declare enum AssetReference {
|
|
13
|
-
Bitcoin = 0,
|
|
14
|
-
Ethereum = 60,
|
|
15
|
-
Cosmos = 118,
|
|
16
|
-
Osmosis = 118
|
|
14
|
+
Bitcoin = "0",
|
|
15
|
+
Ethereum = "60",
|
|
16
|
+
Cosmos = "118",
|
|
17
|
+
Osmosis = "118"
|
|
17
18
|
}
|
|
18
19
|
declare type ToCAIP19Args = {
|
|
19
20
|
chain: ChainTypes;
|
|
20
|
-
network: NetworkTypes;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
assetNamespace?: AssetNamespace;
|
|
24
|
-
assetReference?: string;
|
|
21
|
+
network: NetworkTypes | ChainReference;
|
|
22
|
+
assetNamespace: AssetNamespace;
|
|
23
|
+
assetReference: AssetReference | string;
|
|
25
24
|
};
|
|
26
25
|
declare type ToCAIP19 = (args: ToCAIP19Args) => string;
|
|
27
26
|
export declare const toCAIP19: ToCAIP19;
|
|
28
27
|
declare type FromCAIP19Return = {
|
|
29
28
|
chain: ChainTypes;
|
|
30
29
|
network: NetworkTypes;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
assetNamespace?: AssetNamespace;
|
|
34
|
-
assetReference?: string;
|
|
30
|
+
assetNamespace: AssetNamespace;
|
|
31
|
+
assetReference: AssetReference | string;
|
|
35
32
|
};
|
|
36
|
-
declare
|
|
37
|
-
export declare const fromCAIP19: FromCAIP19;
|
|
33
|
+
export declare const fromCAIP19: (caip19: string) => FromCAIP19Return;
|
|
38
34
|
export {};
|
package/dist/caip19/caip19.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-19.md
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.fromCAIP19 = exports.toCAIP19 = exports.AssetReference = exports.AssetNamespace = void 0;
|
|
4
|
+
// https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-19.md
|
|
5
5
|
const types_1 = require("@shapeshiftoss/types");
|
|
6
6
|
const caip2_1 = require("../caip2/caip2");
|
|
7
7
|
var AssetNamespace;
|
|
@@ -16,11 +16,51 @@ var AssetNamespace;
|
|
|
16
16
|
})(AssetNamespace = exports.AssetNamespace || (exports.AssetNamespace = {}));
|
|
17
17
|
var AssetReference;
|
|
18
18
|
(function (AssetReference) {
|
|
19
|
-
AssetReference[
|
|
20
|
-
AssetReference[
|
|
21
|
-
AssetReference[
|
|
22
|
-
AssetReference[
|
|
19
|
+
AssetReference["Bitcoin"] = "0";
|
|
20
|
+
AssetReference["Ethereum"] = "60";
|
|
21
|
+
AssetReference["Cosmos"] = "118";
|
|
22
|
+
AssetReference["Osmosis"] = "118";
|
|
23
23
|
})(AssetReference = exports.AssetReference || (exports.AssetReference = {}));
|
|
24
|
+
const validAssetNamespaces = Object.freeze({
|
|
25
|
+
[types_1.ChainTypes.Bitcoin]: [AssetNamespace.Slip44],
|
|
26
|
+
[types_1.ChainTypes.Ethereum]: [AssetNamespace.Slip44, AssetNamespace.ERC20, AssetNamespace.ERC721],
|
|
27
|
+
[types_1.ChainTypes.Cosmos]: [
|
|
28
|
+
AssetNamespace.CW20,
|
|
29
|
+
AssetNamespace.CW721,
|
|
30
|
+
AssetNamespace.IBC,
|
|
31
|
+
AssetNamespace.NATIVE,
|
|
32
|
+
AssetNamespace.Slip44
|
|
33
|
+
],
|
|
34
|
+
[types_1.ChainTypes.Osmosis]: [
|
|
35
|
+
AssetNamespace.CW20,
|
|
36
|
+
AssetNamespace.CW721,
|
|
37
|
+
AssetNamespace.IBC,
|
|
38
|
+
AssetNamespace.NATIVE,
|
|
39
|
+
AssetNamespace.Slip44
|
|
40
|
+
]
|
|
41
|
+
});
|
|
42
|
+
const chainReferenceToNetworkType = Object.freeze({
|
|
43
|
+
[caip2_1.ChainReference.BitcoinMainnet]: types_1.NetworkTypes.MAINNET,
|
|
44
|
+
[caip2_1.ChainReference.BitcoinTestnet]: types_1.NetworkTypes.TESTNET,
|
|
45
|
+
[caip2_1.ChainReference.EthereumMainnet]: types_1.NetworkTypes.MAINNET,
|
|
46
|
+
[caip2_1.ChainReference.EthereumRopsten]: types_1.NetworkTypes.ETH_ROPSTEN,
|
|
47
|
+
[caip2_1.ChainReference.EthereumRinkeby]: types_1.NetworkTypes.ETH_RINKEBY,
|
|
48
|
+
[caip2_1.ChainReference.CosmosHubMainnet]: types_1.NetworkTypes.COSMOSHUB_MAINNET,
|
|
49
|
+
[caip2_1.ChainReference.CosmosHubVega]: types_1.NetworkTypes.COSMOSHUB_VEGA,
|
|
50
|
+
[caip2_1.ChainReference.OsmosisMainnet]: types_1.NetworkTypes.OSMOSIS_MAINNET,
|
|
51
|
+
[caip2_1.ChainReference.OsmosisTestnet]: types_1.NetworkTypes.OSMOSIS_TESTNET
|
|
52
|
+
});
|
|
53
|
+
const chainNamespaceToChainType = Object.freeze({
|
|
54
|
+
[caip2_1.ChainNamespace.Bitcoin]: types_1.ChainTypes.Bitcoin,
|
|
55
|
+
[caip2_1.ChainNamespace.Ethereum]: types_1.ChainTypes.Ethereum,
|
|
56
|
+
[caip2_1.ChainNamespace.Cosmos]: types_1.ChainTypes.Cosmos
|
|
57
|
+
});
|
|
58
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
59
|
+
function stringToEnum(obj, item) {
|
|
60
|
+
var _a;
|
|
61
|
+
const found = (_a = Object.entries(obj).find((i) => i.includes(item))) === null || _a === void 0 ? void 0 : _a[0];
|
|
62
|
+
return found ? obj[found] : undefined;
|
|
63
|
+
}
|
|
24
64
|
/**
|
|
25
65
|
* validate that a value is a string slip44 value
|
|
26
66
|
* @see https://github.com/satoshilabs/slips/blob/master/slip-0044.md
|
|
@@ -31,178 +71,61 @@ const isValidSlip44 = (value) => {
|
|
|
31
71
|
// slip44 has a max value of an unsigned 32-bit integer
|
|
32
72
|
return !isNaN(n) && n >= 0 && n < 4294967296;
|
|
33
73
|
};
|
|
34
|
-
const toCAIP19 = (
|
|
74
|
+
const toCAIP19 = (args) => {
|
|
75
|
+
const { chain, network, assetNamespace } = args;
|
|
76
|
+
let { assetReference } = args;
|
|
77
|
+
if (!chain)
|
|
78
|
+
throw new Error('toCAIP19: No chain provided');
|
|
79
|
+
if (!network)
|
|
80
|
+
throw new Error('toCAIP19: No chainReference Provided');
|
|
81
|
+
if (!assetNamespace)
|
|
82
|
+
throw new Error('toCAIP19: No assetNamespace provided');
|
|
83
|
+
if (!assetReference)
|
|
84
|
+
throw new Error('toCAIP19: No assetReference provided');
|
|
35
85
|
const caip2 = (0, caip2_1.toCAIP2)({ chain, network });
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
case AssetNamespace.CW20:
|
|
46
|
-
case AssetNamespace.CW721:
|
|
47
|
-
case AssetNamespace.IBC:
|
|
48
|
-
case AssetNamespace.NATIVE:
|
|
49
|
-
return `${caip2}/${assetNamespace}:${assetReference}`;
|
|
50
|
-
case AssetNamespace.Slip44:
|
|
51
|
-
if (isValidSlip44(assetReference))
|
|
52
|
-
return `${caip2}/${assetNamespace}:${assetReference}`;
|
|
53
|
-
}
|
|
54
|
-
throw new Error(`Could not construct CAIP19 chain: ${chain}, network: ${network}, assetNamespace: ${assetNamespace}, assetReference: ${assetReference}`);
|
|
55
|
-
}
|
|
56
|
-
case types_1.ChainTypes.Ethereum: {
|
|
57
|
-
tokenId = tokenId === null || tokenId === void 0 ? void 0 : tokenId.toLowerCase();
|
|
58
|
-
if (contractType) {
|
|
59
|
-
if (!tokenId) {
|
|
60
|
-
throw new Error(`toCAIP19: no tokenId provided with contract type ${contractType}`);
|
|
61
|
-
}
|
|
62
|
-
const shapeShiftToCAIP19Namespace = {
|
|
63
|
-
[types_1.ChainTypes.Ethereum]: {
|
|
64
|
-
[types_1.ContractTypes.ERC20]: AssetNamespace.ERC20,
|
|
65
|
-
[types_1.ContractTypes.ERC721]: AssetNamespace.ERC721
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
switch (contractType) {
|
|
69
|
-
case types_1.ContractTypes.ERC20:
|
|
70
|
-
case types_1.ContractTypes.ERC721: {
|
|
71
|
-
const namespace = shapeShiftToCAIP19Namespace[chain][contractType];
|
|
72
|
-
if (!tokenId.startsWith('0x')) {
|
|
73
|
-
throw new Error(`toCAIP19: tokenId must start with 0x: ${tokenId}`);
|
|
74
|
-
}
|
|
75
|
-
if (tokenId.length !== 42) {
|
|
76
|
-
throw new Error(`toCAIP19: tokenId length must be 42, length: ${tokenId.length}`);
|
|
77
|
-
}
|
|
78
|
-
return `${caip2}/${namespace}:${tokenId}`;
|
|
79
|
-
}
|
|
80
|
-
default: {
|
|
81
|
-
throw new Error(`toCAIP19: unsupported contractType ${contractType} on chain ${chain}`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
if (tokenId) {
|
|
87
|
-
throw new Error(`toCAIP19: tokenId provided without contract type`);
|
|
88
|
-
}
|
|
89
|
-
return `${caip2}/${AssetNamespace.Slip44}:${AssetReference.Ethereum}`;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
case types_1.ChainTypes.Bitcoin: {
|
|
93
|
-
return `${caip2}/${AssetNamespace.Slip44}:${AssetReference.Bitcoin}`;
|
|
86
|
+
if (!validAssetNamespaces[chain].includes(assetNamespace)) {
|
|
87
|
+
throw new Error(`toCAIP19: Asset Namespace ${assetNamespace} not supported for chain ${chain}`);
|
|
88
|
+
}
|
|
89
|
+
if (assetNamespace === AssetNamespace.Slip44 && !isValidSlip44(String(assetReference))) {
|
|
90
|
+
throw new Error(`Invalid reference for namespace slip44`);
|
|
91
|
+
}
|
|
92
|
+
if ([AssetNamespace.ERC20, AssetNamespace.ERC721].includes(assetNamespace)) {
|
|
93
|
+
if (!assetReference.startsWith('0x')) {
|
|
94
|
+
throw new Error(`toCAIP19: assetReference must start with 0x: ${assetReference}`);
|
|
94
95
|
}
|
|
95
|
-
|
|
96
|
-
throw new Error(`
|
|
96
|
+
if (assetReference.length !== 42) {
|
|
97
|
+
throw new Error(`toCAIP19: assetReference length must be 42, length: ${assetReference.length}`);
|
|
97
98
|
}
|
|
99
|
+
// We make Eth contract addresses lower case to simplify comparisons
|
|
100
|
+
assetReference = assetReference.toLowerCase();
|
|
98
101
|
}
|
|
102
|
+
return `${caip2}/${assetNamespace}:${assetReference}`;
|
|
99
103
|
};
|
|
100
104
|
exports.toCAIP19 = toCAIP19;
|
|
105
|
+
const parseCaip19RegExp = /([-a-z\d]{3,8}):([-a-zA-Z\d]{1,32})\/([-a-z\d]{3,8}):([-a-zA-Z\d]+)/;
|
|
101
106
|
const fromCAIP19 = (caip19) => {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
case AssetNamespace.Slip44: {
|
|
116
|
-
switch (reference) {
|
|
117
|
-
case AssetReference.Bitcoin: {
|
|
118
|
-
return { chain, network };
|
|
119
|
-
}
|
|
120
|
-
default: {
|
|
121
|
-
throw new Error(`fromCAIP19: invalid asset reference ${reference} on chain ${chain}`);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
default: {
|
|
126
|
-
throw new Error(`fromCAIP19: invalid asset namespace ${namespace} on chain ${chain}`);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
case types_1.ChainTypes.Ethereum: {
|
|
131
|
-
switch (namespace) {
|
|
132
|
-
case AssetNamespace.Slip44: {
|
|
133
|
-
switch (reference) {
|
|
134
|
-
case AssetReference.Ethereum: {
|
|
135
|
-
return { chain, network };
|
|
136
|
-
}
|
|
137
|
-
default: {
|
|
138
|
-
throw new Error(`fromCAIP19: invalid asset reference ${reference} on chain ${chain}`);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
case AssetNamespace.ERC20: {
|
|
143
|
-
const contractType = types_1.ContractTypes.ERC20;
|
|
144
|
-
const tokenId = referenceString.toLowerCase();
|
|
145
|
-
return { chain, network, contractType, tokenId };
|
|
146
|
-
}
|
|
147
|
-
case AssetNamespace.ERC721: {
|
|
148
|
-
const contractType = types_1.ContractTypes.ERC721;
|
|
149
|
-
const tokenId = referenceString.toLowerCase();
|
|
150
|
-
return { chain, network, contractType, tokenId };
|
|
151
|
-
}
|
|
152
|
-
default: {
|
|
153
|
-
throw new Error(`fromCAIP19: invalid asset namespace ${namespace} on chain ${chain}`);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
107
|
+
var _a;
|
|
108
|
+
const matches = (_a = parseCaip19RegExp.exec(caip19)) !== null && _a !== void 0 ? _a : [];
|
|
109
|
+
// We're okay casting these strings to enums because we check to make sure
|
|
110
|
+
// they are valid enum values
|
|
111
|
+
let chain = chainNamespaceToChainType[matches[1]];
|
|
112
|
+
const network = chainReferenceToNetworkType[matches[2]];
|
|
113
|
+
const assetNamespace = stringToEnum(AssetNamespace, matches[3]);
|
|
114
|
+
let assetReference = matches[4];
|
|
115
|
+
if (chain && network && assetNamespace && assetReference) {
|
|
116
|
+
switch (network) {
|
|
117
|
+
case types_1.NetworkTypes.OSMOSIS_MAINNET:
|
|
118
|
+
case types_1.NetworkTypes.OSMOSIS_TESTNET:
|
|
119
|
+
chain = types_1.ChainTypes.Osmosis;
|
|
156
120
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
switch (reference) {
|
|
162
|
-
case AssetReference.Cosmos: {
|
|
163
|
-
return { chain, network };
|
|
164
|
-
}
|
|
165
|
-
case AssetReference.Ethereum:
|
|
166
|
-
case AssetReference.Bitcoin:
|
|
167
|
-
default: {
|
|
168
|
-
throw new Error(`fromCAIP19: invalid asset namespace ${namespace} on chain ${chain}`);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
case AssetNamespace.CW20:
|
|
173
|
-
return {
|
|
174
|
-
chain,
|
|
175
|
-
network,
|
|
176
|
-
assetNamespace: AssetNamespace.CW20,
|
|
177
|
-
assetReference: referenceString
|
|
178
|
-
};
|
|
179
|
-
case AssetNamespace.CW721:
|
|
180
|
-
return {
|
|
181
|
-
chain,
|
|
182
|
-
network,
|
|
183
|
-
assetNamespace: AssetNamespace.CW721,
|
|
184
|
-
assetReference: referenceString
|
|
185
|
-
};
|
|
186
|
-
case AssetNamespace.IBC:
|
|
187
|
-
return {
|
|
188
|
-
chain,
|
|
189
|
-
network,
|
|
190
|
-
assetNamespace: AssetNamespace.IBC,
|
|
191
|
-
assetReference: referenceString
|
|
192
|
-
};
|
|
193
|
-
case AssetNamespace.NATIVE:
|
|
194
|
-
return {
|
|
195
|
-
chain,
|
|
196
|
-
network,
|
|
197
|
-
assetNamespace: AssetNamespace.NATIVE,
|
|
198
|
-
assetReference: referenceString
|
|
199
|
-
};
|
|
200
|
-
default: {
|
|
201
|
-
throw new Error(`fromCAIP19: invalid asset namespace ${namespace} on chain ${chain}`);
|
|
202
|
-
}
|
|
121
|
+
switch (assetNamespace) {
|
|
122
|
+
case AssetNamespace.ERC20:
|
|
123
|
+
case AssetNamespace.ERC721: {
|
|
124
|
+
assetReference = assetReference.toLowerCase();
|
|
203
125
|
}
|
|
204
126
|
}
|
|
127
|
+
return { chain, network, assetNamespace, assetReference };
|
|
205
128
|
}
|
|
206
|
-
throw new Error(`fromCAIP19:
|
|
129
|
+
throw new Error(`fromCAIP19: invalid CAIP19: ${caip19}`);
|
|
207
130
|
};
|
|
208
131
|
exports.fromCAIP19 = fromCAIP19;
|
package/dist/caip2/caip2.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export declare enum ChainReference {
|
|
|
18
18
|
}
|
|
19
19
|
declare type ToCAIP2Args = {
|
|
20
20
|
chain: ChainTypes;
|
|
21
|
-
network: NetworkTypes;
|
|
21
|
+
network: NetworkTypes | ChainReference;
|
|
22
22
|
};
|
|
23
23
|
export declare const toCAIP2: (args: ToCAIP2Args) => string;
|
|
24
24
|
declare type FromCAIP2Return = {
|
package/dist/index.d.ts
CHANGED
|
@@ -5,4 +5,4 @@ import * as caip19 from './caip19/caip19';
|
|
|
5
5
|
export { adapters, caip2, caip19, caip10 };
|
|
6
6
|
export { CAIP2 } from './caip2/caip2';
|
|
7
7
|
export { CAIP10 } from './caip10/caip10';
|
|
8
|
-
export { AssetNamespace, CAIP19 } from './caip19/caip19';
|
|
8
|
+
export { AssetNamespace, AssetReference, CAIP19 } from './caip19/caip19';
|
package/dist/index.js
CHANGED
|
@@ -19,7 +19,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
19
19
|
return result;
|
|
20
20
|
};
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.AssetNamespace = exports.caip10 = exports.caip19 = exports.caip2 = exports.adapters = void 0;
|
|
22
|
+
exports.AssetReference = exports.AssetNamespace = exports.caip10 = exports.caip19 = exports.caip2 = exports.adapters = void 0;
|
|
23
23
|
const adapters = __importStar(require("./adapters"));
|
|
24
24
|
exports.adapters = adapters;
|
|
25
25
|
const caip2 = __importStar(require("./caip2/caip2"));
|
|
@@ -30,3 +30,4 @@ const caip19 = __importStar(require("./caip19/caip19"));
|
|
|
30
30
|
exports.caip19 = caip19;
|
|
31
31
|
var caip19_1 = require("./caip19/caip19");
|
|
32
32
|
Object.defineProperty(exports, "AssetNamespace", { enumerable: true, get: function () { return caip19_1.AssetNamespace; } });
|
|
33
|
+
Object.defineProperty(exports, "AssetReference", { enumerable: true, get: function () { return caip19_1.AssetReference; } });
|