@subwallet/extension-base 1.3.39-0 → 1.3.41-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/cjs/constants/environment.js +4 -2
- package/cjs/koni/background/handlers/Extension.js +114 -105
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/evm.js +6 -1
- package/cjs/services/balance-service/transfer/xcm/index.js +26 -29
- package/cjs/services/balance-service/transfer/xcm/utils.js +52 -56
- package/cjs/services/chain-service/constants.js +6 -5
- package/cjs/services/chain-service/handler/CardanoApi.js +25 -35
- package/cjs/services/chain-service/index.js +4 -0
- package/cjs/services/chain-service/utils/patch.js +1 -1
- package/cjs/services/earning-service/handlers/native-staking/tao.js +4 -38
- package/cjs/services/earning-service/handlers/special.js +28 -36
- package/cjs/services/swap-service/handler/base-handler.js +58 -53
- package/cjs/services/swap-service/handler/chainflip-handler.js +29 -18
- package/cjs/services/swap-service/handler/kyber-handler.js +46 -34
- package/cjs/services/swap-service/handler/simpleswap-handler.js +79 -43
- package/cjs/services/swap-service/handler/uniswap-handler.js +5 -12
- package/cjs/services/swap-service/utils.js +48 -37
- package/cjs/types/environment.js +19 -0
- package/cjs/utils/environment.js +30 -2
- package/cjs/utils/fee/transfer.js +41 -33
- package/constants/environment.d.ts +1 -0
- package/constants/environment.js +2 -1
- package/koni/background/handlers/Extension.js +52 -43
- package/package.json +12 -7
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/evm.js +6 -1
- package/services/balance-service/transfer/xcm/index.d.ts +1 -2
- package/services/balance-service/transfer/xcm/index.js +23 -26
- package/services/balance-service/transfer/xcm/utils.d.ts +38 -6
- package/services/balance-service/transfer/xcm/utils.js +51 -55
- package/services/chain-service/constants.d.ts +1 -0
- package/services/chain-service/constants.js +6 -5
- package/services/chain-service/handler/CardanoApi.d.ts +1 -5
- package/services/chain-service/handler/CardanoApi.js +26 -34
- package/services/chain-service/index.js +4 -0
- package/services/chain-service/utils/patch.js +1 -1
- package/services/earning-service/handlers/native-staking/tao.d.ts +0 -11
- package/services/earning-service/handlers/native-staking/tao.js +4 -24
- package/services/earning-service/handlers/special.js +12 -20
- package/services/swap-service/handler/base-handler.js +11 -6
- package/services/swap-service/handler/chainflip-handler.d.ts +0 -2
- package/services/swap-service/handler/chainflip-handler.js +25 -13
- package/services/swap-service/handler/kyber-handler.d.ts +0 -1
- package/services/swap-service/handler/kyber-handler.js +46 -33
- package/services/swap-service/handler/simpleswap-handler.d.ts +0 -1
- package/services/swap-service/handler/simpleswap-handler.js +80 -43
- package/services/swap-service/handler/uniswap-handler.js +6 -13
- package/services/swap-service/utils.d.ts +0 -13
- package/services/swap-service/utils.js +48 -34
- package/types/environment.d.ts +9 -0
- package/types/environment.js +13 -0
- package/utils/environment.d.ts +2 -0
- package/utils/environment.js +27 -1
- package/utils/fee/transfer.js +11 -3
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.dryRunXcmExtrinsicV2 = exports.createXcmExtrinsicV2 = exports.createXcmExtrinsic = exports.createSnowBridgeExtrinsic = exports.createPolygonBridgeExtrinsic = exports.createAvailBridgeTxFromEth = exports.createAvailBridgeExtrinsicFromAvail = exports.createAcrossBridgeExtrinsic = void 0;
|
|
8
|
-
var _constants = require("@subwallet/extension-base/constants");
|
|
9
8
|
var _xcmParser = require("@subwallet/extension-base/core/substrate/xcm-parser");
|
|
10
9
|
var _availBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge");
|
|
11
10
|
var _polkadotXcm = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polkadotXcm");
|
|
@@ -14,7 +13,7 @@ var _snowBridge = require("@subwallet/extension-base/services/balance-service/tr
|
|
|
14
13
|
var _utils = require("@subwallet/extension-base/services/balance-service/transfer/xcm/utils");
|
|
15
14
|
var _xcmPallet = require("@subwallet/extension-base/services/balance-service/transfer/xcm/xcmPallet");
|
|
16
15
|
var _xTokens = require("@subwallet/extension-base/services/balance-service/transfer/xcm/xTokens");
|
|
17
|
-
var
|
|
16
|
+
var _constants = require("@subwallet/extension-base/services/chain-service/constants");
|
|
18
17
|
var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
|
|
19
18
|
var _utils3 = require("@subwallet/extension-base/utils");
|
|
20
19
|
var _subwalletApiSdk = _interopRequireDefault(require("@subwallet/subwallet-api-sdk"));
|
|
@@ -47,6 +46,8 @@ const createSnowBridgeExtrinsic = async _ref => {
|
|
|
47
46
|
}
|
|
48
47
|
return (0, _snowBridge.getSnowBridgeEvmTransfer)(originTokenInfo, originChain, destinationChain, sender, recipient, sendingValue, evmApi, feeInfo, feeCustom, feeOption);
|
|
49
48
|
};
|
|
49
|
+
|
|
50
|
+
// deprecated
|
|
50
51
|
exports.createSnowBridgeExtrinsic = createSnowBridgeExtrinsic;
|
|
51
52
|
const createXcmExtrinsic = async _ref2 => {
|
|
52
53
|
let {
|
|
@@ -62,11 +63,11 @@ const createXcmExtrinsic = async _ref2 => {
|
|
|
62
63
|
}
|
|
63
64
|
const chainApi = await substrateApi.isReady;
|
|
64
65
|
const api = chainApi.api;
|
|
65
|
-
const polkadotXcmSpecialCases =
|
|
66
|
-
if (
|
|
66
|
+
const polkadotXcmSpecialCases = _constants._XCM_CHAIN_GROUP.polkadotXcmSpecialCases.includes(originChain.slug) && (0, _utils2._isNativeToken)(originTokenInfo);
|
|
67
|
+
if (_constants._XCM_CHAIN_GROUP.polkadotXcm.includes(originTokenInfo.originChain) || polkadotXcmSpecialCases) {
|
|
67
68
|
return (0, _polkadotXcm.getExtrinsicByPolkadotXcmPallet)(originTokenInfo, originChain, destinationChain, recipient, sendingValue, api);
|
|
68
69
|
}
|
|
69
|
-
if (
|
|
70
|
+
if (_constants._XCM_CHAIN_GROUP.xcmPallet.includes(originTokenInfo.originChain)) {
|
|
70
71
|
return (0, _xcmPallet.getExtrinsicByXcmPalletPallet)(originTokenInfo, originChain, destinationChain, recipient, sendingValue, api);
|
|
71
72
|
}
|
|
72
73
|
return (0, _xTokens.getExtrinsicByXtokensPallet)(originTokenInfo, originChain, destinationChain, recipient, sendingValue, api);
|
|
@@ -138,38 +139,34 @@ const createXcmExtrinsicV2 = async request => {
|
|
|
138
139
|
return await (0, _utils.buildXcm)(request);
|
|
139
140
|
} catch (e) {
|
|
140
141
|
console.log('createXcmExtrinsicV2 error: ', e);
|
|
141
|
-
const errorMessage = e instanceof Error ? e.message : 'Unknown error occurred';
|
|
142
|
-
if ((0, _utils.isChainNotSupportPolkadotApi)(errorMessage)) {
|
|
143
|
-
return createXcmExtrinsic(request);
|
|
144
|
-
}
|
|
145
142
|
return undefined;
|
|
146
143
|
}
|
|
147
144
|
};
|
|
148
145
|
exports.createXcmExtrinsicV2 = createXcmExtrinsicV2;
|
|
149
146
|
const dryRunXcmExtrinsicV2 = async request => {
|
|
150
147
|
try {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
148
|
+
const dryRunResult = await (0, _utils.dryRunXcm)(request);
|
|
149
|
+
const originDryRunRs = dryRunResult.origin;
|
|
150
|
+
if (originDryRunRs.success) {
|
|
151
|
+
const {
|
|
152
|
+
assetHub,
|
|
153
|
+
bridgeHub,
|
|
154
|
+
destination
|
|
155
|
+
} = dryRunResult;
|
|
156
|
+
if ((assetHub === null || assetHub === void 0 ? void 0 : assetHub.success) === false || (bridgeHub === null || bridgeHub === void 0 ? void 0 : bridgeHub.success) === false || (destination === null || destination === void 0 ? void 0 : destination.success) === false) {
|
|
157
|
+
if ((destination === null || destination === void 0 ? void 0 : destination.success) === false) {
|
|
158
|
+
// pass dry-run in these cases
|
|
159
|
+
return (0, _utils.isChainNotSupportDryRun)(destination.failureReason) || (0, _utils.isChainNotSupportPolkadotApi)(destination.failureReason);
|
|
160
|
+
}
|
|
161
|
+
return false;
|
|
160
162
|
}
|
|
161
|
-
|
|
162
|
-
const xcmFeeInfo = _xcmFeeInfo.toPrimitive();
|
|
163
|
-
|
|
164
|
-
// skip dry run in this case
|
|
165
|
-
return {
|
|
166
|
-
success: true,
|
|
167
|
-
fee: Math.round(xcmFeeInfo.partialFee * _constants.XCM_MIN_AMOUNT_RATIO).toString()
|
|
168
|
-
};
|
|
163
|
+
return true;
|
|
169
164
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
165
|
+
|
|
166
|
+
// pass dry-run in these cases
|
|
167
|
+
return (0, _utils.isChainNotSupportDryRun)(originDryRunRs.failureReason) || (0, _utils.isChainNotSupportPolkadotApi)(originDryRunRs.failureReason);
|
|
168
|
+
} catch (e) {
|
|
169
|
+
return false;
|
|
173
170
|
}
|
|
174
171
|
};
|
|
175
172
|
exports.dryRunXcmExtrinsicV2 = dryRunXcmExtrinsicV2;
|
|
@@ -6,23 +6,23 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.STABLE_XCM_VERSION = void 0;
|
|
7
7
|
exports.buildXcm = buildXcm;
|
|
8
8
|
exports.dryRunXcm = dryRunXcm;
|
|
9
|
-
exports.
|
|
9
|
+
exports.estimateXcmFee = estimateXcmFee;
|
|
10
10
|
exports.isChainNotSupportDryRun = isChainNotSupportDryRun;
|
|
11
11
|
exports.isChainNotSupportPolkadotApi = isChainNotSupportPolkadotApi;
|
|
12
12
|
exports.isUseTeleportProtocol = isUseTeleportProtocol;
|
|
13
|
-
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
14
13
|
var _paraspellChainMap = require("@subwallet/extension-base/constants/paraspell-chain-map");
|
|
15
|
-
var
|
|
14
|
+
var _environment = require("@subwallet/extension-base/types/environment");
|
|
15
|
+
var _utils = require("@subwallet/extension-base/utils");
|
|
16
16
|
var _util = require("@polkadot/util");
|
|
17
17
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
18
18
|
// SPDX-License-Identifier: Apache-2.0
|
|
19
19
|
|
|
20
|
-
const
|
|
20
|
+
const version = '/v3';
|
|
21
21
|
const paraSpellApi = {
|
|
22
|
-
buildXcm: `${
|
|
23
|
-
dryRunXcm: `${
|
|
22
|
+
buildXcm: `${version}/x-transfer`,
|
|
23
|
+
dryRunXcm: `${version}/dry-run`,
|
|
24
|
+
feeXcm: `${version}/xcm-fee`
|
|
24
25
|
};
|
|
25
|
-
const paraSpellKey = process.env.PARASPELL_API_KEY || '';
|
|
26
26
|
function txHexToSubmittableExtrinsic(api, hex) {
|
|
27
27
|
try {
|
|
28
28
|
(0, _util.assert)((0, _util.isHex)(hex), 'Expected a hex-encoded call');
|
|
@@ -85,7 +85,7 @@ async function buildXcm(request) {
|
|
|
85
85
|
substrateApi
|
|
86
86
|
} = request;
|
|
87
87
|
if (!substrateApi) {
|
|
88
|
-
|
|
88
|
+
throw new Error('Substrate API is not available');
|
|
89
89
|
}
|
|
90
90
|
const psAssetType = (_originTokenInfo$meta = originTokenInfo.metadata) === null || _originTokenInfo$meta === void 0 ? void 0 : _originTokenInfo$meta.paraSpellAssetType;
|
|
91
91
|
const psAssetValue = (_originTokenInfo$meta2 = originTokenInfo.metadata) === null || _originTokenInfo$meta2 === void 0 ? void 0 : _originTokenInfo$meta2.paraSpellValue;
|
|
@@ -99,13 +99,12 @@ async function buildXcm(request) {
|
|
|
99
99
|
to: paraSpellChainMap[destinationChain.slug],
|
|
100
100
|
currency: createParaSpellCurrency(psAssetType, psAssetValue, sendingValue)
|
|
101
101
|
};
|
|
102
|
-
const response = await
|
|
102
|
+
const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.buildXcm, {
|
|
103
103
|
method: 'POST',
|
|
104
104
|
body: JSON.stringify(bodyData),
|
|
105
105
|
headers: {
|
|
106
106
|
'Content-Type': 'application/json',
|
|
107
|
-
Accept: 'application/json'
|
|
108
|
-
'X-API-KEY': paraSpellKey
|
|
107
|
+
Accept: 'application/json'
|
|
109
108
|
}
|
|
110
109
|
});
|
|
111
110
|
if (!response.ok) {
|
|
@@ -116,8 +115,6 @@ async function buildXcm(request) {
|
|
|
116
115
|
const chainApi = await substrateApi.isReady;
|
|
117
116
|
return txHexToSubmittableExtrinsic(chainApi.api, extrinsicHex);
|
|
118
117
|
}
|
|
119
|
-
|
|
120
|
-
// dry run can fail due to sender address & amount token
|
|
121
118
|
async function dryRunXcm(request) {
|
|
122
119
|
var _originTokenInfo$meta3, _originTokenInfo$meta4;
|
|
123
120
|
const {
|
|
@@ -132,76 +129,75 @@ async function dryRunXcm(request) {
|
|
|
132
129
|
const psAssetType = (_originTokenInfo$meta3 = originTokenInfo.metadata) === null || _originTokenInfo$meta3 === void 0 ? void 0 : _originTokenInfo$meta3.paraSpellAssetType;
|
|
133
130
|
const psAssetValue = (_originTokenInfo$meta4 = originTokenInfo.metadata) === null || _originTokenInfo$meta4 === void 0 ? void 0 : _originTokenInfo$meta4.paraSpellValue;
|
|
134
131
|
if (!psAssetType || !psAssetValue) {
|
|
135
|
-
throw new Error('Token is not support XCM at this time');
|
|
132
|
+
throw new Error('Token is not support XCM at this time');
|
|
136
133
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
134
|
+
const bodyData = {
|
|
135
|
+
senderAddress: sender,
|
|
136
|
+
address: recipient,
|
|
137
|
+
from: paraSpellChainMap[originChain.slug],
|
|
138
|
+
to: paraSpellChainMap[destinationChain.slug],
|
|
139
|
+
currency: createParaSpellCurrency(psAssetType, psAssetValue, sendingValue)
|
|
140
|
+
};
|
|
141
|
+
const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.dryRunXcm, {
|
|
142
|
+
method: 'POST',
|
|
143
|
+
body: JSON.stringify(bodyData),
|
|
144
|
+
headers: {
|
|
145
|
+
'Content-Type': 'application/json',
|
|
146
|
+
Accept: 'application/json'
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
if (!response.ok) {
|
|
150
|
+
const error = await response.json();
|
|
151
|
+
return {
|
|
152
|
+
origin: {
|
|
153
|
+
success: false,
|
|
154
|
+
failureReason: error.message
|
|
154
155
|
}
|
|
155
|
-
}
|
|
156
|
-
dryRunInfo = await response.json();
|
|
157
|
-
} catch (e) {
|
|
158
|
-
console.error('Unable to dry run', e);
|
|
159
|
-
}
|
|
160
|
-
if (!dryRunInfo || !dryRunInfo.success) {
|
|
161
|
-
throw new _TransactionError.TransactionError(_types.BasicTxErrorType.UNABLE_TO_SEND, 'Unable to perform transaction. Select another token or destination chain and try again');
|
|
156
|
+
};
|
|
162
157
|
}
|
|
163
|
-
return
|
|
158
|
+
return await response.json();
|
|
164
159
|
}
|
|
165
|
-
async function
|
|
166
|
-
var
|
|
160
|
+
async function estimateXcmFee(request) {
|
|
161
|
+
var _fromTokenInfo$metada, _fromTokenInfo$metada2;
|
|
167
162
|
const {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
originTokenInfo,
|
|
163
|
+
fromChainInfo,
|
|
164
|
+
fromTokenInfo,
|
|
171
165
|
recipient,
|
|
172
166
|
sender,
|
|
173
|
-
|
|
167
|
+
toChainInfo,
|
|
168
|
+
value
|
|
174
169
|
} = request;
|
|
175
170
|
const paraSpellChainMap = await (0, _paraspellChainMap.fetchParaSpellChainMap)();
|
|
176
|
-
const psAssetType = (
|
|
177
|
-
const psAssetValue = (
|
|
171
|
+
const psAssetType = (_fromTokenInfo$metada = fromTokenInfo.metadata) === null || _fromTokenInfo$metada === void 0 ? void 0 : _fromTokenInfo$metada.paraSpellAssetType;
|
|
172
|
+
const psAssetValue = (_fromTokenInfo$metada2 = fromTokenInfo.metadata) === null || _fromTokenInfo$metada2 === void 0 ? void 0 : _fromTokenInfo$metada2.paraSpellValue;
|
|
178
173
|
if (!psAssetType || !psAssetValue) {
|
|
179
|
-
|
|
174
|
+
console.error('Lack of paraspell metadata');
|
|
175
|
+
return undefined;
|
|
180
176
|
}
|
|
181
177
|
const bodyData = {
|
|
182
178
|
senderAddress: sender,
|
|
183
179
|
address: recipient,
|
|
184
|
-
from: paraSpellChainMap[
|
|
185
|
-
to: paraSpellChainMap[
|
|
186
|
-
currency: createParaSpellCurrency(psAssetType, psAssetValue,
|
|
180
|
+
from: paraSpellChainMap[fromChainInfo.slug],
|
|
181
|
+
to: paraSpellChainMap[toChainInfo.slug],
|
|
182
|
+
currency: createParaSpellCurrency(psAssetType, psAssetValue, value)
|
|
187
183
|
};
|
|
188
|
-
const response = await
|
|
184
|
+
const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.feeXcm, {
|
|
189
185
|
method: 'POST',
|
|
190
186
|
body: JSON.stringify(bodyData),
|
|
191
187
|
headers: {
|
|
192
188
|
'Content-Type': 'application/json',
|
|
193
|
-
Accept: 'application/json'
|
|
194
|
-
'X-API-KEY': paraSpellKey
|
|
189
|
+
Accept: 'application/json'
|
|
195
190
|
}
|
|
196
191
|
});
|
|
197
192
|
if (!response.ok) {
|
|
198
|
-
|
|
199
|
-
|
|
193
|
+
console.error('Failed to request estimate fee');
|
|
194
|
+
return undefined;
|
|
200
195
|
}
|
|
201
196
|
return await response.json();
|
|
202
197
|
}
|
|
203
198
|
function createParaSpellCurrency(assetType, assetValue, amount) {
|
|
204
199
|
// todo: handle complex conditions for asset has same symbol in a chain: Id, Multi-location, ...
|
|
200
|
+
// todo: or update all asset to use multi-location
|
|
205
201
|
return {
|
|
206
202
|
[assetType]: assetValue,
|
|
207
203
|
amount
|
|
@@ -40,13 +40,14 @@ const _BALANCE_CHAIN_GROUP = {
|
|
|
40
40
|
kintsugi: ['kintsugi', 'interlay', 'kintsugi_test', 'mangatax_para'],
|
|
41
41
|
genshiro: ['genshiro_testnet', 'genshiro'],
|
|
42
42
|
equilibrium_parachain: ['equilibrium_parachain'],
|
|
43
|
-
bifrost: ['bifrost', 'acala', 'karura', 'acala_testnet', 'pioneer', 'bitcountry', 'bifrost_dot', 'hydradx_main', 'hydradx_rococo', 'pendulum', 'amplitude', 'continuum_network', 'truth_network'],
|
|
44
|
-
statemine: ['statemine', 'astar', 'shiden', 'statemint', '
|
|
43
|
+
bifrost: ['bifrost', 'acala', 'karura', 'acala_testnet', 'pioneer', 'bitcountry', 'bifrost_dot', 'hydradx_main', 'hydradx_rococo', 'pendulum', 'amplitude', 'continuum_network', 'truth_network', 'jamton'],
|
|
44
|
+
statemine: ['statemine', 'astar', 'shiden', 'statemint', 'crabParachain', 'darwinia2', 'parallel', 'calamari', 'manta_network', 'rococo_assethub', 'liberlandTest', 'liberland', 'dentnet', 'pangolin', 'crust', 'phala', 'shibuya', 'dbcchain', 'westend_assethub', 'chainflip_assethub'],
|
|
45
45
|
kusama: ['kusama', 'kintsugi', 'kintsugi_test', 'interlay', 'acala', 'statemint', 'karura', 'bifrost'],
|
|
46
46
|
// perhaps there are some runtime updates
|
|
47
47
|
centrifuge: ['centrifuge'],
|
|
48
48
|
supportBridged: ['rococo_assethub', 'statemint', 'statemine', 'polimec'],
|
|
49
|
-
bittensor: ['bittensor', 'bittensor_testnet']
|
|
49
|
+
bittensor: ['bittensor', 'bittensor_testnet'],
|
|
50
|
+
moonbeam: ['moonbeam', 'moonriver', 'moonbase']
|
|
50
51
|
};
|
|
51
52
|
exports._BALANCE_CHAIN_GROUP = _BALANCE_CHAIN_GROUP;
|
|
52
53
|
const _BALANCE_TOKEN_GROUP = {
|
|
@@ -272,11 +273,11 @@ const _TRANSFER_CHAIN_GROUP = {
|
|
|
272
273
|
genshiro: ['genshiro_testnet', 'genshiro', 'equilibrium_parachain'],
|
|
273
274
|
// crab: ['crab', 'pangolin'],
|
|
274
275
|
bitcountry: ['pioneer', 'bitcountry'],
|
|
275
|
-
statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet', 'dbcchain', 'westend_assethub'],
|
|
276
|
+
statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet', 'dbcchain', 'westend_assethub', 'chainflip_assethub'],
|
|
276
277
|
riochain: ['riochain'],
|
|
277
278
|
sora_substrate: ['sora_substrate'],
|
|
278
279
|
avail: ['kate', 'goldberg_testnet'],
|
|
279
|
-
pendulum: ['pendulum', 'amplitude', 'amplitude_test', 'hydradx_main', 'bifrost', 'bifrost_dot'],
|
|
280
|
+
pendulum: ['pendulum', 'amplitude', 'amplitude_test', 'hydradx_main', 'bifrost', 'bifrost_dot', 'jamton'],
|
|
280
281
|
centrifuge: ['centrifuge'],
|
|
281
282
|
disable_transfer: ['crab', 'pangolin']
|
|
282
283
|
};
|
|
@@ -3,20 +3,21 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.CardanoApi =
|
|
6
|
+
exports.CardanoApi = void 0;
|
|
7
7
|
var _utils = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano/utils");
|
|
8
8
|
var _types = require("@subwallet/extension-base/services/chain-service/types");
|
|
9
|
+
var _environment = require("@subwallet/extension-base/types/environment");
|
|
9
10
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
10
11
|
var _rxjs = require("rxjs");
|
|
11
12
|
var _util = require("@polkadot/util");
|
|
12
13
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
13
14
|
// SPDX-License-Identifier: Apache-2.0
|
|
14
15
|
|
|
15
|
-
const API_KEY = {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
};
|
|
19
|
-
|
|
16
|
+
// export const API_KEY = {
|
|
17
|
+
// mainnet: process.env.BLOCKFROST_API_KEY_MAIN || '',
|
|
18
|
+
// testnet: process.env.BLOCKFROST_API_KEY_PREP || ''
|
|
19
|
+
// };
|
|
20
|
+
|
|
20
21
|
class CardanoApi {
|
|
21
22
|
// private api: BlockFrostAPI;
|
|
22
23
|
|
|
@@ -33,7 +34,6 @@ class CardanoApi {
|
|
|
33
34
|
this.chainSlug = chainSlug;
|
|
34
35
|
this.apiUrl = apiUrl;
|
|
35
36
|
this.isTestnet = isTestnet !== null && isTestnet !== void 0 ? isTestnet : true;
|
|
36
|
-
this.projectId = isTestnet ? API_KEY.testnet : API_KEY.mainnet;
|
|
37
37
|
this.providerName = providerName || 'unknown';
|
|
38
38
|
// this.api = this.createProvider(isTestnet);
|
|
39
39
|
this.isReadyHandler = (0, _utils2.createPromiseHandler)();
|
|
@@ -45,6 +45,9 @@ class CardanoApi {
|
|
|
45
45
|
get connectionStatus() {
|
|
46
46
|
return this.connectionStatusSubject.getValue();
|
|
47
47
|
}
|
|
48
|
+
fetchCardano(path, options) {
|
|
49
|
+
return (0, _utils2.fetchFromProxyService)(_environment.ProxyServiceRoute.CARDANO, path, options, this.isTestnet);
|
|
50
|
+
}
|
|
48
51
|
updateConnectionStatus(status) {
|
|
49
52
|
const isConnected = status === _types._ChainConnectionStatus.CONNECTED;
|
|
50
53
|
if (isConnected !== this.isApiConnectedSubject.value) {
|
|
@@ -115,12 +118,9 @@ class CardanoApi {
|
|
|
115
118
|
}
|
|
116
119
|
async getBalanceMap(address) {
|
|
117
120
|
try {
|
|
118
|
-
const
|
|
119
|
-
const response = await
|
|
120
|
-
method: 'GET'
|
|
121
|
-
headers: {
|
|
122
|
-
Project_id: this.projectId
|
|
123
|
-
}
|
|
121
|
+
const path = `/addresses/${address}`;
|
|
122
|
+
const response = await this.fetchCardano(path, {
|
|
123
|
+
method: 'GET'
|
|
124
124
|
});
|
|
125
125
|
const addressBalance = await response.json();
|
|
126
126
|
return addressBalance.amount;
|
|
@@ -131,13 +131,10 @@ class CardanoApi {
|
|
|
131
131
|
}
|
|
132
132
|
async getUtxos(address, page, limit) {
|
|
133
133
|
try {
|
|
134
|
-
let
|
|
135
|
-
|
|
136
|
-
const response = await
|
|
137
|
-
method: 'GET'
|
|
138
|
-
headers: {
|
|
139
|
-
Project_id: this.projectId
|
|
140
|
-
}
|
|
134
|
+
let path = `/addresses/${address}/utxos`;
|
|
135
|
+
path += `?page=${page}&count=${limit}`;
|
|
136
|
+
const response = await this.fetchCardano(path, {
|
|
137
|
+
method: 'GET'
|
|
141
138
|
});
|
|
142
139
|
const utxos = await response.json();
|
|
143
140
|
return utxos;
|
|
@@ -148,12 +145,9 @@ class CardanoApi {
|
|
|
148
145
|
}
|
|
149
146
|
async getSpecificUtxo(txHash) {
|
|
150
147
|
try {
|
|
151
|
-
const
|
|
152
|
-
const response = await
|
|
153
|
-
method: 'GET'
|
|
154
|
-
headers: {
|
|
155
|
-
Project_id: this.projectId
|
|
156
|
-
}
|
|
148
|
+
const path = `/txs/${txHash}/utxos`;
|
|
149
|
+
const response = await this.fetchCardano(path, {
|
|
150
|
+
method: 'GET'
|
|
157
151
|
});
|
|
158
152
|
const utxo = await response.json();
|
|
159
153
|
return utxo;
|
|
@@ -164,11 +158,10 @@ class CardanoApi {
|
|
|
164
158
|
}
|
|
165
159
|
async sendCardanoTxReturnHash(tx) {
|
|
166
160
|
try {
|
|
167
|
-
const
|
|
168
|
-
const response = await
|
|
161
|
+
const path = '/tx/submit';
|
|
162
|
+
const response = await this.fetchCardano(path, {
|
|
169
163
|
method: 'POST',
|
|
170
164
|
headers: {
|
|
171
|
-
Project_id: this.projectId,
|
|
172
165
|
'Content-Type': 'application/cbor'
|
|
173
166
|
},
|
|
174
167
|
body: (0, _utils.cborToBytes)(tx)
|
|
@@ -188,12 +181,9 @@ class CardanoApi {
|
|
|
188
181
|
async getStatusByTxHash(txHash, ttl) {
|
|
189
182
|
const cronTime = 30000;
|
|
190
183
|
return (0, _utils.retryCardanoTxStatus)(async () => {
|
|
191
|
-
const
|
|
192
|
-
const response = await
|
|
193
|
-
method: 'GET'
|
|
194
|
-
headers: {
|
|
195
|
-
Project_id: this.projectId
|
|
196
|
-
}
|
|
184
|
+
const path = `/txs/${txHash}`;
|
|
185
|
+
const response = await this.fetchCardano(path, {
|
|
186
|
+
method: 'GET'
|
|
197
187
|
});
|
|
198
188
|
const txInfo = await response.json();
|
|
199
189
|
if (txInfo.block && txInfo.hash && txInfo.index >= 0) {
|
|
@@ -1262,6 +1262,10 @@ class ChainService {
|
|
|
1262
1262
|
deprecated = true;
|
|
1263
1263
|
break;
|
|
1264
1264
|
}
|
|
1265
|
+
if (defaultChainAsset.slug === storedAssetInfo.slug) {
|
|
1266
|
+
duplicated = true;
|
|
1267
|
+
break;
|
|
1268
|
+
}
|
|
1265
1269
|
}
|
|
1266
1270
|
if (!duplicated && !deprecated) {
|
|
1267
1271
|
mergedAssetRegistry[storedAssetInfo.slug] = storedAssetInfo;
|
|
@@ -11,7 +11,7 @@ const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
|
|
|
11
11
|
const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
|
|
12
12
|
const fetchDomain = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'https://chain-list-assets.subwallet.app' : 'https://dev.sw-chain-list-assets.pages.dev';
|
|
13
13
|
const fetchFile = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'list.json' : 'preview.json';
|
|
14
|
-
const ChainListVersion = '0.2.
|
|
14
|
+
const ChainListVersion = '0.2.105'; // update this when build chainlist
|
|
15
15
|
|
|
16
16
|
// todo: move this interface to chainlist
|
|
17
17
|
|
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.default = exports.
|
|
7
|
+
exports.default = exports.BittensorCache = void 0;
|
|
8
8
|
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
9
9
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
10
10
|
var _constants = require("@subwallet/extension-base/constants");
|
|
@@ -12,6 +12,7 @@ var _utils = require("@subwallet/extension-base/koni/api/staking/bonding/utils")
|
|
|
12
12
|
var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
|
|
13
13
|
var _basePara = _interopRequireDefault(require("@subwallet/extension-base/services/earning-service/handlers/native-staking/base-para"));
|
|
14
14
|
var _types = require("@subwallet/extension-base/types");
|
|
15
|
+
var _environment = require("@subwallet/extension-base/types/environment");
|
|
15
16
|
var _utils3 = require("@subwallet/extension-base/utils");
|
|
16
17
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
17
18
|
var _i18next = require("i18next");
|
|
@@ -21,40 +22,7 @@ var _dtao = require("./dtao");
|
|
|
21
22
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
22
23
|
// SPDX-License-Identifier: Apache-2.0
|
|
23
24
|
|
|
24
|
-
const BITTENSOR_API_KEY_1 = process.env.BITTENSOR_API_KEY_1 || '';
|
|
25
|
-
exports.BITTENSOR_API_KEY_1 = BITTENSOR_API_KEY_1;
|
|
26
|
-
const BITTENSOR_API_KEY_2 = process.env.BITTENSOR_API_KEY_2 || '';
|
|
27
|
-
exports.BITTENSOR_API_KEY_2 = BITTENSOR_API_KEY_2;
|
|
28
|
-
const BITTENSOR_API_KEY_3 = process.env.BITTENSOR_API_KEY_3 || '';
|
|
29
|
-
exports.BITTENSOR_API_KEY_3 = BITTENSOR_API_KEY_3;
|
|
30
|
-
const BITTENSOR_API_KEY_4 = process.env.BITTENSOR_API_KEY_4 || '';
|
|
31
|
-
exports.BITTENSOR_API_KEY_4 = BITTENSOR_API_KEY_4;
|
|
32
|
-
const BITTENSOR_API_KEY_5 = process.env.BITTENSOR_API_KEY_5 || '';
|
|
33
|
-
exports.BITTENSOR_API_KEY_5 = BITTENSOR_API_KEY_5;
|
|
34
|
-
const BITTENSOR_API_KEY_6 = process.env.BITTENSOR_API_KEY_6 || '';
|
|
35
|
-
exports.BITTENSOR_API_KEY_6 = BITTENSOR_API_KEY_6;
|
|
36
|
-
const BITTENSOR_API_KEY_7 = process.env.BITTENSOR_API_KEY_7 || '';
|
|
37
|
-
exports.BITTENSOR_API_KEY_7 = BITTENSOR_API_KEY_7;
|
|
38
|
-
const BITTENSOR_API_KEY_8 = process.env.BITTENSOR_API_KEY_8 || '';
|
|
39
|
-
exports.BITTENSOR_API_KEY_8 = BITTENSOR_API_KEY_8;
|
|
40
|
-
const BITTENSOR_API_KEY_9 = process.env.BITTENSOR_API_KEY_9 || '';
|
|
41
|
-
exports.BITTENSOR_API_KEY_9 = BITTENSOR_API_KEY_9;
|
|
42
|
-
const BITTENSOR_API_KEY_10 = process.env.BITTENSOR_API_KEY_10 || '';
|
|
43
|
-
exports.BITTENSOR_API_KEY_10 = BITTENSOR_API_KEY_10;
|
|
44
|
-
function random() {
|
|
45
|
-
for (var _len = arguments.length, keys = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
46
|
-
keys[_key] = arguments[_key];
|
|
47
|
-
}
|
|
48
|
-
const validKeys = keys.filter(key => key);
|
|
49
|
-
const randomIndex = Math.floor(Math.random() * validKeys.length);
|
|
50
|
-
return validKeys[randomIndex];
|
|
51
|
-
}
|
|
52
|
-
const bittensorApiKey = () => {
|
|
53
|
-
return random(BITTENSOR_API_KEY_1, BITTENSOR_API_KEY_2, BITTENSOR_API_KEY_3, BITTENSOR_API_KEY_4, BITTENSOR_API_KEY_5, BITTENSOR_API_KEY_6, BITTENSOR_API_KEY_7, BITTENSOR_API_KEY_8, BITTENSOR_API_KEY_9, BITTENSOR_API_KEY_10);
|
|
54
|
-
};
|
|
55
|
-
|
|
56
25
|
/* Fetch data */
|
|
57
|
-
exports.bittensorApiKey = bittensorApiKey;
|
|
58
26
|
class BittensorCache {
|
|
59
27
|
static instance = null;
|
|
60
28
|
cache = null;
|
|
@@ -80,13 +48,11 @@ class BittensorCache {
|
|
|
80
48
|
return this.promise;
|
|
81
49
|
}
|
|
82
50
|
async fetchData() {
|
|
83
|
-
const apiKey = bittensorApiKey();
|
|
84
51
|
try {
|
|
85
|
-
const resp = await
|
|
52
|
+
const resp = await (0, _utils3.fetchFromProxyService)(_environment.ProxyServiceRoute.BITTENSOR, '/validator/latest/v1?limit=50', {
|
|
86
53
|
method: 'GET',
|
|
87
54
|
headers: {
|
|
88
|
-
'Content-Type': 'application/json'
|
|
89
|
-
Authorization: `${apiKey}`
|
|
55
|
+
'Content-Type': 'application/json'
|
|
90
56
|
}
|
|
91
57
|
});
|
|
92
58
|
if (!resp.ok) {
|