@chain-registry/utils 0.2.1 → 0.4.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/CHANGELOG.md +24 -0
- package/README.md +12 -0
- package/main/index.js +192 -14
- package/module/index.js +169 -9
- package/package.json +3 -2
- package/types/index.d.ts +53 -69
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,30 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [0.4.0](https://github.com/cosmology-tech/chain-registry/compare/@chain-registry/utils@0.3.1...@chain-registry/utils@0.4.0) (2022-08-20)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @chain-registry/utils
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [0.3.1](https://github.com/cosmology-tech/chain-registry/compare/@chain-registry/utils@0.3.0...@chain-registry/utils@0.3.1) (2022-08-13)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @chain-registry/utils
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# [0.3.0](https://github.com/cosmology-tech/chain-registry/compare/@chain-registry/utils@0.2.1...@chain-registry/utils@0.3.0) (2022-08-13)
|
|
23
|
+
|
|
24
|
+
**Note:** Version bump only for package @chain-registry/utils
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
6
30
|
## [0.2.1](https://github.com/cosmology-tech/chain-registry/compare/@chain-registry/utils@0.2.0...@chain-registry/utils@0.2.1) (2022-08-13)
|
|
7
31
|
|
|
8
32
|
**Note:** Version bump only for package @chain-registry/utils
|
package/README.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
1
|
# @chain-registry/utils
|
|
2
2
|
|
|
3
|
+
<p align="center" width="100%">
|
|
4
|
+
<img height="90" src="https://user-images.githubusercontent.com/545047/184277736-69fef40f-1991-4c0e-b979-da125cf7fd8f.svg" />
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<p align="center" width="100%">
|
|
8
|
+
<a href="https://github.com/cosmology-tech/chain-registry/actions/workflows/run-tests.yml">
|
|
9
|
+
<img height="20" src="https://github.com/cosmology-tech/chain-registry/actions/workflows/run-tests.yml/badge.svg" />
|
|
10
|
+
</a>
|
|
11
|
+
<a href="https://github.com/cosmology-tech/chain-registry/blob/main/LICENSE"><img height="20" src="https://img.shields.io/badge/license-MIT-blue.svg"></a>
|
|
12
|
+
<a href="https://www.npmjs.com/package/@chain-registry/utils"><img height="20" src="https://img.shields.io/github/package-json/v/cosmology-tech/chain-registry?filename=packages%2Futils%2Fpackage.json"></a>
|
|
13
|
+
</p>
|
|
14
|
+
|
|
3
15
|
Utility functions for the chain-registry
|
package/main/index.js
CHANGED
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.ibcDenom = exports.getTransferChannel = exports.getIbcInfo = exports.
|
|
8
|
+
exports.ibcDenom = exports.getWasmChannel = exports.getTransferChannel = exports.getNonTransferChannel = exports.getIbcInfo = exports.getIbcDenomByBaseForCw20 = exports.getIbcDenomByBase = exports.getIbcAssets = exports.getCw20Assets = exports.getAssetLists = void 0;
|
|
9
9
|
|
|
10
10
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
11
|
|
|
@@ -67,7 +67,23 @@ var getTransferChannel = function getTransferChannel(info) {
|
|
|
67
67
|
|
|
68
68
|
exports.getTransferChannel = getTransferChannel;
|
|
69
69
|
|
|
70
|
-
var
|
|
70
|
+
var getNonTransferChannel = function getNonTransferChannel(info) {
|
|
71
|
+
return info.channels.find(function (channel) {
|
|
72
|
+
return channel['chain-1']['port-id'] !== 'transfer' && channel['chain-2']['port-id'] === 'transfer' || channel['chain-1']['port-id'] === 'transfer' && channel['chain-2']['port-id'] !== 'transfer';
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
exports.getNonTransferChannel = getNonTransferChannel;
|
|
77
|
+
|
|
78
|
+
var getWasmChannel = function getWasmChannel(info) {
|
|
79
|
+
return info.channels.find(function (channel) {
|
|
80
|
+
return channel['chain-1']['port-id'].startsWith('wasm.') && channel['chain-2']['port-id'] === 'transfer' || channel['chain-1']['port-id'] === 'transfer' && channel['chain-2']['port-id'].startsWith('wasm');
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
exports.getWasmChannel = getWasmChannel;
|
|
85
|
+
|
|
86
|
+
var getIbcDenomByBase = function getIbcDenomByBase(ibc, chain, counterparty, assets, base) {
|
|
71
87
|
var ibcInfo = getIbcInfo(ibc, chain, counterparty);
|
|
72
88
|
|
|
73
89
|
if (ibcInfo) {
|
|
@@ -85,33 +101,73 @@ var getIbcDenom = function getIbcDenom(ibc, chain, counterparty, assets, symbol)
|
|
|
85
101
|
channelInfo = channel['chain-2'];
|
|
86
102
|
}
|
|
87
103
|
|
|
88
|
-
var
|
|
104
|
+
var assetList = assets.find(function (_ref) {
|
|
89
105
|
var chain_name = _ref.chain_name;
|
|
90
106
|
return chain_name === counterparty;
|
|
91
107
|
});
|
|
92
108
|
|
|
93
|
-
if (!
|
|
109
|
+
if (!assetList) {
|
|
94
110
|
return;
|
|
95
111
|
}
|
|
96
112
|
|
|
97
|
-
var
|
|
98
|
-
return
|
|
113
|
+
var assetInfo = assetList.assets.find(function (asset) {
|
|
114
|
+
return asset.base === base;
|
|
99
115
|
});
|
|
100
|
-
|
|
116
|
+
|
|
117
|
+
if (!assetInfo) {
|
|
118
|
+
console.warn('missing referrenced asset');
|
|
119
|
+
} // TODO transition later!
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
var transition = [];
|
|
123
|
+
|
|
124
|
+
if (assetInfo.ibc) {
|
|
125
|
+
transition.push({
|
|
126
|
+
type: 'ibc',
|
|
127
|
+
counterparty: {
|
|
128
|
+
denom: assetInfo.ibc.source_denom,
|
|
129
|
+
channel: assetInfo.ibc.source_channel
|
|
130
|
+
},
|
|
131
|
+
chain: {
|
|
132
|
+
channel: assetInfo.ibc.dst_channel
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (assetInfo.transition && assetInfo.transition.length) {
|
|
138
|
+
[].push.apply(transition, assetInfo.transition);
|
|
139
|
+
} // console.log(transition);
|
|
140
|
+
// if (transition.length) {
|
|
141
|
+
// return ibcDenom(
|
|
142
|
+
// [
|
|
143
|
+
// {
|
|
144
|
+
// portId: 'transfer',
|
|
145
|
+
// channelId: assetInfo.ibc.source_channel
|
|
146
|
+
// },
|
|
147
|
+
// {
|
|
148
|
+
// portId: channelInfo['port-id'],
|
|
149
|
+
// channelId: channelInfo['channel-id']
|
|
150
|
+
// }
|
|
151
|
+
// ],
|
|
152
|
+
// base
|
|
153
|
+
// );
|
|
154
|
+
// }
|
|
155
|
+
|
|
156
|
+
|
|
101
157
|
return ibcDenom([{
|
|
102
158
|
portId: channelInfo['port-id'],
|
|
103
159
|
channelId: channelInfo['channel-id']
|
|
104
|
-
}],
|
|
160
|
+
}], base);
|
|
105
161
|
}
|
|
106
162
|
};
|
|
107
163
|
|
|
108
|
-
exports.
|
|
164
|
+
exports.getIbcDenomByBase = getIbcDenomByBase;
|
|
109
165
|
|
|
110
|
-
var
|
|
166
|
+
var getIbcDenomByBaseForCw20 = function getIbcDenomByBaseForCw20(ibc, chain, counterparty, assets, base) {
|
|
111
167
|
var ibcInfo = getIbcInfo(ibc, chain, counterparty);
|
|
112
168
|
|
|
113
169
|
if (ibcInfo) {
|
|
114
|
-
var channel =
|
|
170
|
+
var channel = getWasmChannel(ibcInfo);
|
|
115
171
|
|
|
116
172
|
if (!channel) {
|
|
117
173
|
return;
|
|
@@ -141,7 +197,7 @@ var getIbcDenomByBase = function getIbcDenomByBase(ibc, chain, counterparty, ass
|
|
|
141
197
|
}
|
|
142
198
|
};
|
|
143
199
|
|
|
144
|
-
exports.
|
|
200
|
+
exports.getIbcDenomByBaseForCw20 = getIbcDenomByBaseForCw20;
|
|
145
201
|
|
|
146
202
|
var getIbcAssets = function getIbcAssets(chainName, ibc, assets) {
|
|
147
203
|
var chainIbcInfo = ibc.filter(function (i) {
|
|
@@ -195,7 +251,8 @@ var getIbcAssets = function getIbcAssets(chainName, ibc, assets) {
|
|
|
195
251
|
m[v.chain['chain-name']] = m[v.chain['chain-name']] || [];
|
|
196
252
|
var assets = v.assets.map(function (asset) {
|
|
197
253
|
return _objectSpread(_objectSpread({}, asset), {}, {
|
|
198
|
-
|
|
254
|
+
transition: [{
|
|
255
|
+
type: 'ibc',
|
|
199
256
|
counterparty: {
|
|
200
257
|
// source_channel
|
|
201
258
|
channel: v.counterparty['channel-id'],
|
|
@@ -210,7 +267,105 @@ var getIbcAssets = function getIbcAssets(chainName, ibc, assets) {
|
|
|
210
267
|
// port: v.chain['port-id']
|
|
211
268
|
|
|
212
269
|
}
|
|
270
|
+
}]
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
var obj = _objectSpread(_objectSpread({}, v), {}, {
|
|
275
|
+
assets: assets
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
m[v.chain['chain-name']].push(obj);
|
|
279
|
+
return m;
|
|
280
|
+
}, {});
|
|
281
|
+
return Object.keys(hash).map(function (chain) {
|
|
282
|
+
return {
|
|
283
|
+
chain_name: chain,
|
|
284
|
+
assets: hash[chain].reduce(function (m, v) {
|
|
285
|
+
return [].concat((0, _toConsumableArray2["default"])(m), (0, _toConsumableArray2["default"])(v.assets));
|
|
286
|
+
}, [])
|
|
287
|
+
};
|
|
288
|
+
});
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
exports.getIbcAssets = getIbcAssets;
|
|
292
|
+
|
|
293
|
+
var getCw20Assets = function getCw20Assets(chainName, ibc, assets) {
|
|
294
|
+
var chainIbcInfo = ibc.filter(function (i) {
|
|
295
|
+
return i['chain-1']['chain-name'] === chainName || i['chain-2']['chain-name'] === chainName;
|
|
296
|
+
});
|
|
297
|
+
var cw20AssetLists = chainIbcInfo.map(function (ibcInfo) {
|
|
298
|
+
var counterpartyIs = ibcInfo['chain-1']['chain-name'] === chainName ? 'chain-2' : 'chain-1';
|
|
299
|
+
var chainIs = ibcInfo['chain-1']['chain-name'] === chainName ? 'chain-1' : 'chain-2';
|
|
300
|
+
var counterparty = ibcInfo[counterpartyIs]['chain-name'];
|
|
301
|
+
var counterpartyIbc = ibcInfo[counterpartyIs];
|
|
302
|
+
var chainIbc = ibcInfo[chainIs];
|
|
303
|
+
var counterpartyAssets = assets.find(function (a) {
|
|
304
|
+
return a.chain_name === counterparty;
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
if (!counterpartyAssets) {
|
|
308
|
+
console.warn('asset not found: ' + counterparty);
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
var cw20Assets = counterpartyAssets.assets.filter(function (a) {
|
|
313
|
+
return a.base.startsWith('cw20:');
|
|
314
|
+
}).map(function (asset) {
|
|
315
|
+
var denom = getIbcDenomByBaseForCw20(ibc, chainName, counterparty, //
|
|
316
|
+
assets, asset.base);
|
|
317
|
+
|
|
318
|
+
var newAsset = _objectSpread({}, asset);
|
|
319
|
+
|
|
320
|
+
newAsset.base = denom;
|
|
321
|
+
newAsset.denom_units = newAsset.denom_units.map(function (unit) {
|
|
322
|
+
if (unit.denom === asset.base) {
|
|
323
|
+
var newUnit = _objectSpread({}, unit);
|
|
324
|
+
|
|
325
|
+
newUnit.denom = denom;
|
|
326
|
+
newUnit.aliases = [unit.denom];
|
|
327
|
+
return newUnit;
|
|
213
328
|
}
|
|
329
|
+
|
|
330
|
+
return unit;
|
|
331
|
+
});
|
|
332
|
+
return newAsset;
|
|
333
|
+
});
|
|
334
|
+
if (!cw20Assets.length) return;
|
|
335
|
+
var channel = getWasmChannel(ibcInfo);
|
|
336
|
+
|
|
337
|
+
if (!channel) {
|
|
338
|
+
console.warn(chainIbc['chain-name'], '<>', counterpartyIbc['chain-name'], 'MISSING cw20 IBC info');
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
return {
|
|
343
|
+
chain: _objectSpread(_objectSpread({}, chainIbc), channel[chainIs]),
|
|
344
|
+
counterparty: _objectSpread(_objectSpread({}, counterpartyIbc), channel[counterpartyIs]),
|
|
345
|
+
assets: cw20Assets
|
|
346
|
+
};
|
|
347
|
+
}).filter(Boolean);
|
|
348
|
+
var hash = cw20AssetLists.reduce(function (m, v) {
|
|
349
|
+
m[v.chain['chain-name']] = m[v.chain['chain-name']] || [];
|
|
350
|
+
var assets = v.assets.map(function (asset) {
|
|
351
|
+
return _objectSpread(_objectSpread({}, asset), {}, {
|
|
352
|
+
transition: [{
|
|
353
|
+
type: 'ibc',
|
|
354
|
+
counterparty: {
|
|
355
|
+
port: v.counterparty['port-id'],
|
|
356
|
+
// source_channel
|
|
357
|
+
channel: v.counterparty['channel-id'],
|
|
358
|
+
// source_denom
|
|
359
|
+
denom: asset.denom_units[0].aliases[0],
|
|
360
|
+
chain_name: v.counterparty['chain-name']
|
|
361
|
+
},
|
|
362
|
+
chain: {
|
|
363
|
+
// dst_denom
|
|
364
|
+
port: v.chain['port-id'],
|
|
365
|
+
channel: v.chain['channel-id'] // chain_name: v.chain['chain-name'],
|
|
366
|
+
|
|
367
|
+
}
|
|
368
|
+
}]
|
|
214
369
|
});
|
|
215
370
|
});
|
|
216
371
|
|
|
@@ -231,4 +386,27 @@ var getIbcAssets = function getIbcAssets(chainName, ibc, assets) {
|
|
|
231
386
|
});
|
|
232
387
|
};
|
|
233
388
|
|
|
234
|
-
exports.
|
|
389
|
+
exports.getCw20Assets = getCw20Assets;
|
|
390
|
+
|
|
391
|
+
var getAssetLists = function getAssetLists(chainName, ibc, assets) {
|
|
392
|
+
var ibcAssetLists = getIbcAssets(chainName, ibc, assets);
|
|
393
|
+
var cw20Assets = getCw20Assets(chainName, ibc, assets);
|
|
394
|
+
return ibcAssetLists.reduce(function (m, v) {
|
|
395
|
+
var chain = v.chain_name;
|
|
396
|
+
var assets = (0, _toConsumableArray2["default"])(v.assets);
|
|
397
|
+
var cw20 = cw20Assets.find(function (a) {
|
|
398
|
+
return a.chain_name === chain;
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
if (cw20) {
|
|
402
|
+
[].push.apply(assets, cw20.assets);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
return [{
|
|
406
|
+
chain_name: chain,
|
|
407
|
+
assets: assets
|
|
408
|
+
}].concat((0, _toConsumableArray2["default"])(m));
|
|
409
|
+
}, []);
|
|
410
|
+
};
|
|
411
|
+
|
|
412
|
+
exports.getAssetLists = getAssetLists;
|
package/module/index.js
CHANGED
|
@@ -25,7 +25,13 @@ export const getIbcInfo = (ibc, chain, counterparty) => {
|
|
|
25
25
|
export const getTransferChannel = info => {
|
|
26
26
|
return info.channels.find(channel => channel['chain-1']['port-id'] === 'transfer' && channel['chain-2']['port-id'] === 'transfer');
|
|
27
27
|
};
|
|
28
|
-
export const
|
|
28
|
+
export const getNonTransferChannel = info => {
|
|
29
|
+
return info.channels.find(channel => channel['chain-1']['port-id'] !== 'transfer' && channel['chain-2']['port-id'] === 'transfer' || channel['chain-1']['port-id'] === 'transfer' && channel['chain-2']['port-id'] !== 'transfer');
|
|
30
|
+
};
|
|
31
|
+
export const getWasmChannel = info => {
|
|
32
|
+
return info.channels.find(channel => channel['chain-1']['port-id'].startsWith('wasm.') && channel['chain-2']['port-id'] === 'transfer' || channel['chain-1']['port-id'] === 'transfer' && channel['chain-2']['port-id'].startsWith('wasm'));
|
|
33
|
+
};
|
|
34
|
+
export const getIbcDenomByBase = (ibc, chain, counterparty, assets, base) => {
|
|
29
35
|
const ibcInfo = getIbcInfo(ibc, chain, counterparty);
|
|
30
36
|
|
|
31
37
|
if (ibcInfo) {
|
|
@@ -43,27 +49,69 @@ export const getIbcDenom = (ibc, chain, counterparty, assets, symbol) => {
|
|
|
43
49
|
channelInfo = channel['chain-2'];
|
|
44
50
|
}
|
|
45
51
|
|
|
46
|
-
const
|
|
52
|
+
const assetList = assets.find(({
|
|
47
53
|
chain_name
|
|
48
54
|
}) => chain_name === counterparty);
|
|
49
55
|
|
|
50
|
-
if (!
|
|
56
|
+
if (!assetList) {
|
|
51
57
|
return;
|
|
52
58
|
}
|
|
53
59
|
|
|
54
|
-
const
|
|
55
|
-
|
|
60
|
+
const assetInfo = assetList.assets.find(asset => {
|
|
61
|
+
return asset.base === base;
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
if (!assetInfo) {
|
|
65
|
+
console.warn('missing referrenced asset');
|
|
66
|
+
} // TODO transition later!
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
const transition = [];
|
|
70
|
+
|
|
71
|
+
if (assetInfo.ibc) {
|
|
72
|
+
transition.push({
|
|
73
|
+
type: 'ibc',
|
|
74
|
+
counterparty: {
|
|
75
|
+
denom: assetInfo.ibc.source_denom,
|
|
76
|
+
channel: assetInfo.ibc.source_channel
|
|
77
|
+
},
|
|
78
|
+
chain: {
|
|
79
|
+
channel: assetInfo.ibc.dst_channel
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (assetInfo.transition && assetInfo.transition.length) {
|
|
85
|
+
[].push.apply(transition, assetInfo.transition);
|
|
86
|
+
} // console.log(transition);
|
|
87
|
+
// if (transition.length) {
|
|
88
|
+
// return ibcDenom(
|
|
89
|
+
// [
|
|
90
|
+
// {
|
|
91
|
+
// portId: 'transfer',
|
|
92
|
+
// channelId: assetInfo.ibc.source_channel
|
|
93
|
+
// },
|
|
94
|
+
// {
|
|
95
|
+
// portId: channelInfo['port-id'],
|
|
96
|
+
// channelId: channelInfo['channel-id']
|
|
97
|
+
// }
|
|
98
|
+
// ],
|
|
99
|
+
// base
|
|
100
|
+
// );
|
|
101
|
+
// }
|
|
102
|
+
|
|
103
|
+
|
|
56
104
|
return ibcDenom([{
|
|
57
105
|
portId: channelInfo['port-id'],
|
|
58
106
|
channelId: channelInfo['channel-id']
|
|
59
|
-
}],
|
|
107
|
+
}], base);
|
|
60
108
|
}
|
|
61
109
|
};
|
|
62
|
-
export const
|
|
110
|
+
export const getIbcDenomByBaseForCw20 = (ibc, chain, counterparty, assets, base) => {
|
|
63
111
|
const ibcInfo = getIbcInfo(ibc, chain, counterparty);
|
|
64
112
|
|
|
65
113
|
if (ibcInfo) {
|
|
66
|
-
const channel =
|
|
114
|
+
const channel = getWasmChannel(ibcInfo);
|
|
67
115
|
|
|
68
116
|
if (!channel) {
|
|
69
117
|
return;
|
|
@@ -141,7 +189,8 @@ export const getIbcAssets = (chainName, ibc, assets) => {
|
|
|
141
189
|
m[v.chain['chain-name']] = m[v.chain['chain-name']] || [];
|
|
142
190
|
const assets = v.assets.map(asset => {
|
|
143
191
|
return _objectSpread(_objectSpread({}, asset), {}, {
|
|
144
|
-
|
|
192
|
+
transition: [{
|
|
193
|
+
type: 'ibc',
|
|
145
194
|
counterparty: {
|
|
146
195
|
// source_channel
|
|
147
196
|
channel: v.counterparty['channel-id'],
|
|
@@ -156,7 +205,100 @@ export const getIbcAssets = (chainName, ibc, assets) => {
|
|
|
156
205
|
// port: v.chain['port-id']
|
|
157
206
|
|
|
158
207
|
}
|
|
208
|
+
}]
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
const obj = _objectSpread(_objectSpread({}, v), {}, {
|
|
213
|
+
assets
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
m[v.chain['chain-name']].push(obj);
|
|
217
|
+
return m;
|
|
218
|
+
}, {});
|
|
219
|
+
return Object.keys(hash).map(chain => {
|
|
220
|
+
return {
|
|
221
|
+
chain_name: chain,
|
|
222
|
+
assets: hash[chain].reduce((m, v) => {
|
|
223
|
+
return [...m, ...v.assets];
|
|
224
|
+
}, [])
|
|
225
|
+
};
|
|
226
|
+
});
|
|
227
|
+
};
|
|
228
|
+
export const getCw20Assets = (chainName, ibc, assets) => {
|
|
229
|
+
const chainIbcInfo = ibc.filter(i => {
|
|
230
|
+
return i['chain-1']['chain-name'] === chainName || i['chain-2']['chain-name'] === chainName;
|
|
231
|
+
});
|
|
232
|
+
const cw20AssetLists = chainIbcInfo.map(ibcInfo => {
|
|
233
|
+
const counterpartyIs = ibcInfo['chain-1']['chain-name'] === chainName ? 'chain-2' : 'chain-1';
|
|
234
|
+
const chainIs = ibcInfo['chain-1']['chain-name'] === chainName ? 'chain-1' : 'chain-2';
|
|
235
|
+
const counterparty = ibcInfo[counterpartyIs]['chain-name'];
|
|
236
|
+
const counterpartyIbc = ibcInfo[counterpartyIs];
|
|
237
|
+
const chainIbc = ibcInfo[chainIs];
|
|
238
|
+
const counterpartyAssets = assets.find(a => {
|
|
239
|
+
return a.chain_name === counterparty;
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
if (!counterpartyAssets) {
|
|
243
|
+
console.warn('asset not found: ' + counterparty);
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
const cw20Assets = counterpartyAssets.assets.filter(a => a.base.startsWith('cw20:')).map(asset => {
|
|
248
|
+
const denom = getIbcDenomByBaseForCw20(ibc, chainName, counterparty, //
|
|
249
|
+
assets, asset.base);
|
|
250
|
+
|
|
251
|
+
const newAsset = _objectSpread({}, asset);
|
|
252
|
+
|
|
253
|
+
newAsset.base = denom;
|
|
254
|
+
newAsset.denom_units = newAsset.denom_units.map(unit => {
|
|
255
|
+
if (unit.denom === asset.base) {
|
|
256
|
+
const newUnit = _objectSpread({}, unit);
|
|
257
|
+
|
|
258
|
+
newUnit.denom = denom;
|
|
259
|
+
newUnit.aliases = [unit.denom];
|
|
260
|
+
return newUnit;
|
|
159
261
|
}
|
|
262
|
+
|
|
263
|
+
return unit;
|
|
264
|
+
});
|
|
265
|
+
return newAsset;
|
|
266
|
+
});
|
|
267
|
+
if (!cw20Assets.length) return;
|
|
268
|
+
const channel = getWasmChannel(ibcInfo);
|
|
269
|
+
|
|
270
|
+
if (!channel) {
|
|
271
|
+
console.warn(chainIbc['chain-name'], '<>', counterpartyIbc['chain-name'], 'MISSING cw20 IBC info');
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
return {
|
|
276
|
+
chain: _objectSpread(_objectSpread({}, chainIbc), channel[chainIs]),
|
|
277
|
+
counterparty: _objectSpread(_objectSpread({}, counterpartyIbc), channel[counterpartyIs]),
|
|
278
|
+
assets: cw20Assets
|
|
279
|
+
};
|
|
280
|
+
}).filter(Boolean);
|
|
281
|
+
const hash = cw20AssetLists.reduce((m, v) => {
|
|
282
|
+
m[v.chain['chain-name']] = m[v.chain['chain-name']] || [];
|
|
283
|
+
const assets = v.assets.map(asset => {
|
|
284
|
+
return _objectSpread(_objectSpread({}, asset), {}, {
|
|
285
|
+
transition: [{
|
|
286
|
+
type: 'ibc',
|
|
287
|
+
counterparty: {
|
|
288
|
+
port: v.counterparty['port-id'],
|
|
289
|
+
// source_channel
|
|
290
|
+
channel: v.counterparty['channel-id'],
|
|
291
|
+
// source_denom
|
|
292
|
+
denom: asset.denom_units[0].aliases[0],
|
|
293
|
+
chain_name: v.counterparty['chain-name']
|
|
294
|
+
},
|
|
295
|
+
chain: {
|
|
296
|
+
// dst_denom
|
|
297
|
+
port: v.chain['port-id'],
|
|
298
|
+
channel: v.chain['channel-id'] // chain_name: v.chain['chain-name'],
|
|
299
|
+
|
|
300
|
+
}
|
|
301
|
+
}]
|
|
160
302
|
});
|
|
161
303
|
});
|
|
162
304
|
|
|
@@ -175,4 +317,22 @@ export const getIbcAssets = (chainName, ibc, assets) => {
|
|
|
175
317
|
}, [])
|
|
176
318
|
};
|
|
177
319
|
});
|
|
320
|
+
};
|
|
321
|
+
export const getAssetLists = (chainName, ibc, assets) => {
|
|
322
|
+
const ibcAssetLists = getIbcAssets(chainName, ibc, assets);
|
|
323
|
+
const cw20Assets = getCw20Assets(chainName, ibc, assets);
|
|
324
|
+
return ibcAssetLists.reduce((m, v) => {
|
|
325
|
+
const chain = v.chain_name;
|
|
326
|
+
const assets = [...v.assets];
|
|
327
|
+
const cw20 = cw20Assets.find(a => a.chain_name === chain);
|
|
328
|
+
|
|
329
|
+
if (cw20) {
|
|
330
|
+
[].push.apply(assets, cw20.assets);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
return [{
|
|
334
|
+
chain_name: chain,
|
|
335
|
+
assets
|
|
336
|
+
}, ...m];
|
|
337
|
+
}, []);
|
|
178
338
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chain-registry/utils",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Chain Registry Utils",
|
|
5
5
|
"author": "Dan Lynch <pyramation@gmail.com>",
|
|
6
6
|
"homepage": "https://github.com/cosmology-tech/chain-registry",
|
|
@@ -76,7 +76,8 @@
|
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
78
|
"@babel/runtime": "^7.18.3",
|
|
79
|
+
"@chain-registry/types": "^0.5.0",
|
|
79
80
|
"@keplr-wallet/crypto": "^0.10.11"
|
|
80
81
|
},
|
|
81
|
-
"gitHead": "
|
|
82
|
+
"gitHead": "7b1714a8a4afe11fd7dc893d1e5790997731d2f8"
|
|
82
83
|
}
|
package/types/index.d.ts
CHANGED
|
@@ -1,72 +1,56 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { AssetList, IBCInfo } from '@chain-registry/types';
|
|
2
|
+
export declare const ibcDenom: (paths: {
|
|
3
3
|
portId: string;
|
|
4
4
|
channelId: string;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
) =>
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
) => string;
|
|
52
|
-
export declare const getIbcAssets: (
|
|
53
|
-
chainName: string,
|
|
54
|
-
ibc: IBCInfo[],
|
|
55
|
-
assets: any[]
|
|
56
|
-
) => {
|
|
57
|
-
chain: {
|
|
58
|
-
'channel-id': string;
|
|
59
|
-
'port-id': string;
|
|
60
|
-
'chain-name': string;
|
|
61
|
-
'client-id': string;
|
|
62
|
-
'connection-id': string;
|
|
63
|
-
};
|
|
64
|
-
counterparty: {
|
|
65
|
-
'channel-id': string;
|
|
66
|
-
'port-id': string;
|
|
67
|
-
'chain-name': string;
|
|
68
|
-
'client-id': string;
|
|
69
|
-
'connection-id': string;
|
|
70
|
-
};
|
|
71
|
-
assets: any;
|
|
5
|
+
}[], coinMinimalDenom: string) => string;
|
|
6
|
+
export declare const getIbcInfo: (ibc: IBCInfo[], chain: string, counterparty: string) => IBCInfo;
|
|
7
|
+
export declare const getTransferChannel: (info: IBCInfo) => {
|
|
8
|
+
'chain-1': {
|
|
9
|
+
'channel-id': string;
|
|
10
|
+
'port-id': string;
|
|
11
|
+
};
|
|
12
|
+
'chain-2': {
|
|
13
|
+
'channel-id': string;
|
|
14
|
+
'port-id': string;
|
|
15
|
+
};
|
|
16
|
+
ordering: string;
|
|
17
|
+
version: string;
|
|
18
|
+
tags: object;
|
|
19
|
+
};
|
|
20
|
+
export declare const getNonTransferChannel: (info: IBCInfo) => {
|
|
21
|
+
'chain-1': {
|
|
22
|
+
'channel-id': string;
|
|
23
|
+
'port-id': string;
|
|
24
|
+
};
|
|
25
|
+
'chain-2': {
|
|
26
|
+
'channel-id': string;
|
|
27
|
+
'port-id': string;
|
|
28
|
+
};
|
|
29
|
+
ordering: string;
|
|
30
|
+
version: string;
|
|
31
|
+
tags: object;
|
|
32
|
+
};
|
|
33
|
+
export declare const getWasmChannel: (info: IBCInfo) => {
|
|
34
|
+
'chain-1': {
|
|
35
|
+
'channel-id': string;
|
|
36
|
+
'port-id': string;
|
|
37
|
+
};
|
|
38
|
+
'chain-2': {
|
|
39
|
+
'channel-id': string;
|
|
40
|
+
'port-id': string;
|
|
41
|
+
};
|
|
42
|
+
ordering: string;
|
|
43
|
+
version: string;
|
|
44
|
+
tags: object;
|
|
45
|
+
};
|
|
46
|
+
export declare const getIbcDenomByBase: (ibc: IBCInfo[], chain: string, counterparty: string, assets: AssetList[], base: string) => string;
|
|
47
|
+
export declare const getIbcDenomByBaseForCw20: (ibc: IBCInfo[], chain: string, counterparty: string, assets: AssetList[], base: string) => string;
|
|
48
|
+
export declare const getIbcAssets: (chainName: string, ibc: IBCInfo[], assets: AssetList[]) => {
|
|
49
|
+
chain_name: string;
|
|
50
|
+
assets: any;
|
|
72
51
|
}[];
|
|
52
|
+
export declare const getCw20Assets: (chainName: string, ibc: IBCInfo[], assets: AssetList[]) => {
|
|
53
|
+
chain_name: string;
|
|
54
|
+
assets: any;
|
|
55
|
+
}[];
|
|
56
|
+
export declare const getAssetLists: (chainName: string, ibc: IBCInfo[], assets: AssetList[]) => any[];
|