@subwallet/extension-base 1.3.76-0 → 1.3.78-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/background/KoniTypes.d.ts +4 -1
- package/cjs/core/logic-validation/index.js +1 -1
- package/cjs/core/substrate/xcm-parser.js +17 -11
- package/cjs/koni/background/handlers/Extension.js +293 -71
- package/cjs/koni/background/handlers/State.js +20 -0
- package/cjs/koni/background/handlers/Tabs.js +2 -3
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/evm.js +85 -6
- package/cjs/services/balance-service/helpers/subscribe/index.js +2 -1
- package/cjs/services/balance-service/index.js +6 -2
- package/cjs/services/balance-service/transfer/token.js +15 -0
- package/cjs/services/balance-service/transfer/xcm/bittensorBridge/index.js +27 -0
- package/cjs/services/balance-service/transfer/xcm/bittensorBridge/nativeTokenBridge.js +58 -0
- package/cjs/services/balance-service/transfer/xcm/bittensorBridge/utils.js +36 -0
- package/cjs/services/balance-service/transfer/xcm/index.js +61 -2
- package/cjs/services/balance-service/transfer/xcm/utils.js +94 -6
- package/cjs/services/chain-service/constants.js +4 -2
- package/cjs/services/chain-service/utils/patch.js +1 -1
- package/cjs/services/earning-service/constants/chains.js +7 -2
- package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +8 -5
- package/cjs/services/earning-service/handlers/special.js +82 -65
- package/cjs/services/earning-service/service.js +19 -2
- package/cjs/services/multisig-service/index.js +1 -1
- package/cjs/services/request-service/handler/SubstrateRequestHandler.js +12 -0
- package/cjs/services/request-service/index.js +3 -0
- package/cjs/services/setting-service/constants.js +2 -1
- package/cjs/services/storage-service/db-stores/InappNotification.js +1 -1
- package/cjs/services/swap-service/handler/bittensor-handler.js +197 -0
- package/cjs/services/swap-service/index.js +7 -0
- package/cjs/services/transaction-service/index.js +10 -0
- package/cjs/types/balance/index.js +1 -0
- package/cjs/types/swap/index.js +3 -1
- package/cjs/utils/fee/transfer.js +20 -5
- package/core/logic-validation/index.js +1 -1
- package/core/substrate/xcm-parser.d.ts +3 -0
- package/core/substrate/xcm-parser.js +14 -11
- package/koni/background/handlers/Extension.d.ts +19 -0
- package/koni/background/handlers/Extension.js +233 -14
- package/koni/background/handlers/State.d.ts +1 -0
- package/koni/background/handlers/State.js +20 -0
- package/koni/background/handlers/Tabs.js +2 -3
- package/package.json +26 -6
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/evm.d.ts +1 -0
- package/services/balance-service/helpers/subscribe/evm.js +76 -1
- package/services/balance-service/helpers/subscribe/index.js +2 -1
- package/services/balance-service/index.js +6 -2
- package/services/balance-service/transfer/token.d.ts +2 -1
- package/services/balance-service/transfer/token.js +15 -0
- package/services/balance-service/transfer/xcm/bittensorBridge/index.d.ts +2 -0
- package/services/balance-service/transfer/xcm/bittensorBridge/index.js +5 -0
- package/services/balance-service/transfer/xcm/bittensorBridge/nativeTokenBridge.d.ts +6 -0
- package/services/balance-service/transfer/xcm/bittensorBridge/nativeTokenBridge.js +50 -0
- package/services/balance-service/transfer/xcm/bittensorBridge/utils.d.ts +8 -0
- package/services/balance-service/transfer/xcm/bittensorBridge/utils.js +29 -0
- package/services/balance-service/transfer/xcm/index.d.ts +5 -0
- package/services/balance-service/transfer/xcm/index.js +57 -2
- package/services/balance-service/transfer/xcm/utils.d.ts +3 -2
- package/services/balance-service/transfer/xcm/utils.js +87 -1
- package/services/chain-service/constants.d.ts +2 -0
- package/services/chain-service/constants.js +4 -2
- package/services/chain-service/utils/patch.d.ts +1 -1
- package/services/chain-service/utils/patch.js +1 -1
- package/services/earning-service/constants/chains.d.ts +2 -0
- package/services/earning-service/constants/chains.js +4 -1
- package/services/earning-service/handlers/liquid-staking/stella-swap.d.ts +1 -0
- package/services/earning-service/handlers/liquid-staking/stella-swap.js +6 -4
- package/services/earning-service/handlers/special.d.ts +1 -1
- package/services/earning-service/handlers/special.js +85 -68
- package/services/earning-service/service.js +21 -4
- package/services/inapp-notification-service/interfaces.d.ts +1 -0
- package/services/multisig-service/index.js +1 -1
- package/services/request-service/handler/SubstrateRequestHandler.d.ts +1 -0
- package/services/request-service/handler/SubstrateRequestHandler.js +12 -0
- package/services/request-service/index.d.ts +1 -0
- package/services/request-service/index.js +3 -0
- package/services/request-service/types.d.ts +1 -0
- package/services/setting-service/constants.js +2 -1
- package/services/storage-service/db-stores/InappNotification.js +1 -1
- package/services/swap-service/handler/bittensor-handler.d.ts +21 -0
- package/services/swap-service/handler/bittensor-handler.js +189 -0
- package/services/swap-service/index.js +7 -0
- package/services/transaction-service/index.d.ts +1 -1
- package/services/transaction-service/index.js +10 -0
- package/services/transaction-service/types.d.ts +4 -3
- package/types/balance/index.d.ts +3 -1
- package/types/balance/index.js +1 -0
- package/types/balance/transfer.d.ts +9 -0
- package/types/fee/base.d.ts +1 -0
- package/types/multisig/index.d.ts +12 -0
- package/types/swap/index.d.ts +3 -1
- package/types/swap/index.js +3 -1
- package/types/yield/actions/join/step.d.ts +6 -0
- package/types/yield/actions/join/submit.d.ts +1 -0
- package/utils/fee/transfer.d.ts +1 -0
- package/utils/fee/transfer.js +21 -6
|
@@ -762,6 +762,26 @@ class KoniState {
|
|
|
762
762
|
}
|
|
763
763
|
return this.chainService.disableChain(chainSlug);
|
|
764
764
|
}
|
|
765
|
+
async disableAllChains() {
|
|
766
|
+
const chainStateMap = this.chainService.getChainStateMap();
|
|
767
|
+
const activeChainSlugs = Object.keys(chainStateMap).filter(slug => chainStateMap[slug].active);
|
|
768
|
+
const failedChainSlugs = [];
|
|
769
|
+
for (const chainSlug of activeChainSlugs) {
|
|
770
|
+
try {
|
|
771
|
+
const isDisabled = await this.disableChain(chainSlug);
|
|
772
|
+
if (!isDisabled) {
|
|
773
|
+
failedChainSlugs.push(chainSlug);
|
|
774
|
+
}
|
|
775
|
+
} catch (error) {
|
|
776
|
+
failedChainSlugs.push(chainSlug);
|
|
777
|
+
this.logger.error(`Failed to disable chain ${chainSlug}`, error);
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
if (failedChainSlugs.length) {
|
|
781
|
+
throw new Error('Unable to turn off all networks. Please try again later');
|
|
782
|
+
}
|
|
783
|
+
return true;
|
|
784
|
+
}
|
|
765
785
|
async enableChain(chainSlug) {
|
|
766
786
|
let enableTokens = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
767
787
|
if (enableTokens) {
|
|
@@ -83,12 +83,11 @@ function transformAccountsV2(accounts) {
|
|
|
83
83
|
let {
|
|
84
84
|
json: {
|
|
85
85
|
meta: {
|
|
86
|
-
isHidden
|
|
87
|
-
isMultisig
|
|
86
|
+
isHidden
|
|
88
87
|
}
|
|
89
88
|
}
|
|
90
89
|
} = _ref2;
|
|
91
|
-
return !isHidden
|
|
90
|
+
return !isHidden;
|
|
92
91
|
}).filter(authTypeFilter).filter(_ref3 => {
|
|
93
92
|
let {
|
|
94
93
|
json: {
|
package/cjs/packageInfo.js
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.subscribeERC20Interval = subscribeERC20Interval;
|
|
8
|
+
exports.subscribeERC20IntervalForSubtensorEvm = subscribeERC20IntervalForSubtensorEvm;
|
|
7
9
|
exports.subscribeEVMBalance = subscribeEVMBalance;
|
|
8
10
|
var _types = require("@subwallet/chain-list/types");
|
|
9
11
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
10
12
|
var _constants = require("@subwallet/extension-base/constants");
|
|
11
13
|
var _web = require("@subwallet/extension-base/koni/api/contract-handler/evm/web3");
|
|
14
|
+
var _utils = require("@subwallet/extension-base/services/balance-service/transfer/xcm/bittensorBridge/utils");
|
|
12
15
|
var _constants2 = require("@subwallet/extension-base/services/chain-service/constants");
|
|
13
|
-
var
|
|
14
|
-
var
|
|
16
|
+
var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
|
|
17
|
+
var _utils3 = require("@subwallet/extension-base/utils");
|
|
18
|
+
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
15
19
|
var _util = require("@polkadot/util");
|
|
16
20
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
17
21
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -25,15 +29,15 @@ function subscribeERC20Interval(_ref) {
|
|
|
25
29
|
evmApi
|
|
26
30
|
} = _ref;
|
|
27
31
|
const chain = chainInfo.slug;
|
|
28
|
-
let tokenList = (0,
|
|
32
|
+
let tokenList = (0, _utils3.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.ERC20]);
|
|
29
33
|
if (_constants2._BALANCE_CHAIN_GROUP.moonbeam.includes(chain)) {
|
|
30
|
-
const moonbeamLocal = (0,
|
|
34
|
+
const moonbeamLocal = (0, _utils3.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.LOCAL]);
|
|
31
35
|
tokenList = Object.assign({}, tokenList, moonbeamLocal);
|
|
32
36
|
}
|
|
33
37
|
const erc20ContractMap = {};
|
|
34
38
|
Object.entries(tokenList).forEach(_ref2 => {
|
|
35
39
|
let [slug, tokenInfo] = _ref2;
|
|
36
|
-
erc20ContractMap[slug] = (0, _web.getERC20Contract)((0,
|
|
40
|
+
erc20ContractMap[slug] = (0, _web.getERC20Contract)((0, _utils2._getContractAddressOfToken)(tokenInfo), evmApi);
|
|
37
41
|
});
|
|
38
42
|
const getTokenBalances = () => {
|
|
39
43
|
Object.values(tokenList).map(async tokenInfo => {
|
|
@@ -69,6 +73,79 @@ function subscribeERC20Interval(_ref) {
|
|
|
69
73
|
clearInterval(interval);
|
|
70
74
|
};
|
|
71
75
|
}
|
|
76
|
+
function subscribeERC20IntervalForSubtensorEvm(_ref3) {
|
|
77
|
+
let {
|
|
78
|
+
addresses,
|
|
79
|
+
assetMap,
|
|
80
|
+
callback,
|
|
81
|
+
chainInfo,
|
|
82
|
+
evmApi,
|
|
83
|
+
substrateApiMap
|
|
84
|
+
} = _ref3;
|
|
85
|
+
const chain = chainInfo.slug;
|
|
86
|
+
const tokenList = (0, _utils3.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.ERC20]);
|
|
87
|
+
let cancel = false;
|
|
88
|
+
const getTokenBalances = () => {
|
|
89
|
+
Object.values(tokenList).map(async tokenInfo => {
|
|
90
|
+
try {
|
|
91
|
+
var _tokenInfo$metadata;
|
|
92
|
+
if ((_tokenInfo$metadata = tokenInfo.metadata) !== null && _tokenInfo$metadata !== void 0 && _tokenInfo$metadata.isAlphaToken && substrateApiMap) {
|
|
93
|
+
const ss58ToEvmMap = {};
|
|
94
|
+
const subtensorEvmSs58Address = [];
|
|
95
|
+
addresses.forEach(address => {
|
|
96
|
+
const ss58Address = (0, _utils.evmToSs58)(address);
|
|
97
|
+
subtensorEvmSs58Address.push(ss58Address);
|
|
98
|
+
ss58ToEvmMap[ss58Address] = address;
|
|
99
|
+
});
|
|
100
|
+
if (cancel) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const substrateApi = await substrateApiMap.bittensor.isReady;
|
|
104
|
+
const rawData = await substrateApi.api.call.stakeInfoRuntimeApi.getStakeInfoForColdkeys(subtensorEvmSs58Address);
|
|
105
|
+
const values = rawData.toPrimitive();
|
|
106
|
+
const converted = {};
|
|
107
|
+
for (let i = 0; i < values.length; i++) {
|
|
108
|
+
const [, stakes] = values[i];
|
|
109
|
+
const s58Address = subtensorEvmSs58Address[i];
|
|
110
|
+
const address = ss58ToEvmMap[s58Address];
|
|
111
|
+
converted[address] = {};
|
|
112
|
+
stakes.forEach(stakeInfo => {
|
|
113
|
+
const {
|
|
114
|
+
netuid,
|
|
115
|
+
stake
|
|
116
|
+
} = stakeInfo;
|
|
117
|
+
const currentValue = converted[address][netuid] || (0, _bignumber.default)(0);
|
|
118
|
+
converted[address][netuid] = currentValue.plus(stake);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
const netuid = (0, _utils2._getAssetNetuid)(tokenInfo);
|
|
122
|
+
const items = Object.entries(converted).map(_ref4 => {
|
|
123
|
+
let [address, stakeMap] = _ref4;
|
|
124
|
+
const value = stakeMap[netuid] || (0, _bignumber.default)(0);
|
|
125
|
+
return {
|
|
126
|
+
address: address,
|
|
127
|
+
tokenSlug: tokenInfo.slug,
|
|
128
|
+
state: _KoniTypes.APIItemState.READY,
|
|
129
|
+
free: value.toFixed(0),
|
|
130
|
+
locked: '0'
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
if (!cancel) {
|
|
134
|
+
callback(items);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
} catch (err) {
|
|
138
|
+
console.log(tokenInfo.slug, err);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
};
|
|
142
|
+
getTokenBalances();
|
|
143
|
+
const interval = setInterval(getTokenBalances, _constants.SUB_TOKEN_REFRESH_BALANCE_INTERVAL);
|
|
144
|
+
return () => {
|
|
145
|
+
cancel = true;
|
|
146
|
+
clearInterval(interval);
|
|
147
|
+
};
|
|
148
|
+
}
|
|
72
149
|
async function getEVMBalance(addresses, web3Api) {
|
|
73
150
|
return await Promise.all(addresses.map(async address => {
|
|
74
151
|
try {
|
|
@@ -88,7 +165,7 @@ function subscribeEVMBalance(params) {
|
|
|
88
165
|
evmApi
|
|
89
166
|
} = params;
|
|
90
167
|
const chain = chainInfo.slug;
|
|
91
|
-
const nativeTokenInfo = (0,
|
|
168
|
+
const nativeTokenInfo = (0, _utils3.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.NATIVE]);
|
|
92
169
|
const nativeTokenSlug = ((_Object$values$ = Object.values(nativeTokenInfo)[0]) === null || _Object$values$ === void 0 ? void 0 : _Object$values$.slug) || '';
|
|
93
170
|
function getBalance() {
|
|
94
171
|
getEVMBalance(addresses, evmApi).then(balances => {
|
|
@@ -119,8 +196,10 @@ function subscribeEVMBalance(params) {
|
|
|
119
196
|
getBalance();
|
|
120
197
|
const interval = setInterval(getBalance, _constants.ASTAR_REFRESH_BALANCE_INTERVAL);
|
|
121
198
|
const unsub2 = subscribeERC20Interval(params);
|
|
199
|
+
const unsub3 = subscribeERC20IntervalForSubtensorEvm(params);
|
|
122
200
|
return () => {
|
|
123
201
|
clearInterval(interval);
|
|
124
202
|
unsub2 && unsub2();
|
|
203
|
+
unsub3 && unsub3();
|
|
125
204
|
};
|
|
126
205
|
}
|
|
@@ -216,12 +216,16 @@ class BalanceService {
|
|
|
216
216
|
const bitcoinApiMap = this.state.chainService.getBitcoinApiMap();
|
|
217
217
|
let unsub = _util.noop;
|
|
218
218
|
unsub = (0, _helpers.subscribeBalance)([address], [chain], [tSlug], assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, bitcoinApiMap, result => {
|
|
219
|
+
var _rs$lockedDetails;
|
|
219
220
|
const rs = result[0];
|
|
220
221
|
let value;
|
|
221
222
|
switch (balanceType) {
|
|
222
223
|
case _types2.BalanceType.TOTAL:
|
|
223
224
|
value = new _bignumber.default(rs.free).plus(new _bignumber.default(rs.locked)).toFixed();
|
|
224
225
|
break;
|
|
226
|
+
case _types2.BalanceType.STAKING:
|
|
227
|
+
value = ((_rs$lockedDetails = rs.lockedDetails) === null || _rs$lockedDetails === void 0 ? void 0 : _rs$lockedDetails.staking) || '0';
|
|
228
|
+
break;
|
|
225
229
|
case _types2.BalanceType.TOTAL_MINUS_RESERVED:
|
|
226
230
|
if (_constants2._BALANCE_CHAIN_GROUP.notSupportGetBalanceByType.includes(chainInfo.slug)) {
|
|
227
231
|
// TODO: Currently Vara and Avail staking from nomination pools is not fully supported.
|
|
@@ -229,8 +233,8 @@ class BalanceService {
|
|
|
229
233
|
// Improve later when full staking breakdown is available.
|
|
230
234
|
value = rs.free;
|
|
231
235
|
} else {
|
|
232
|
-
var _rs$
|
|
233
|
-
value = new _bignumber.default(rs.free).plus(new _bignumber.default(rs.locked)).minus(_bignumber.default.max(new _bignumber.default(((_rs$
|
|
236
|
+
var _rs$lockedDetails2, _rs$lockedDetails3;
|
|
237
|
+
value = new _bignumber.default(rs.free).plus(new _bignumber.default(rs.locked)).minus(_bignumber.default.max(new _bignumber.default(((_rs$lockedDetails2 = rs.lockedDetails) === null || _rs$lockedDetails2 === void 0 ? void 0 : _rs$lockedDetails2.reserved) || 0), new _bignumber.default(((_rs$lockedDetails3 = rs.lockedDetails) === null || _rs$lockedDetails3 === void 0 ? void 0 : _rs$lockedDetails3.staking) || 0))).toFixed();
|
|
234
238
|
}
|
|
235
239
|
break;
|
|
236
240
|
default:
|
|
@@ -28,6 +28,7 @@ const createSubstrateExtrinsic = async _ref => {
|
|
|
28
28
|
var _tokenInfo$metadata;
|
|
29
29
|
let {
|
|
30
30
|
from,
|
|
31
|
+
metadata,
|
|
31
32
|
networkKey,
|
|
32
33
|
substrateApi,
|
|
33
34
|
to,
|
|
@@ -129,6 +130,20 @@ const createSubstrateExtrinsic = async _ref => {
|
|
|
129
130
|
}
|
|
130
131
|
} else if (_constants._TRANSFER_CHAIN_GROUP.truth.includes(networkKey)) {
|
|
131
132
|
transfer = api.tx.assetManager.transfer(to, (0, _utils3._getTokenOnChainInfo)(tokenInfo), value);
|
|
133
|
+
} else if (_constants._TRANSFER_CHAIN_GROUP.bittensor.includes(networkKey) && !!metadata) {
|
|
134
|
+
const {
|
|
135
|
+
fromValidator,
|
|
136
|
+
netuid,
|
|
137
|
+
toValidator
|
|
138
|
+
} = metadata;
|
|
139
|
+
const formatToValidator = toValidator === null || toValidator === void 0 ? void 0 : toValidator.split('___')[0];
|
|
140
|
+
if (fromValidator === formatToValidator) {
|
|
141
|
+
transfer = substrateApi.api.tx.subtensorModule.transferStake(to, fromValidator, netuid, netuid, value);
|
|
142
|
+
} else {
|
|
143
|
+
const moveStakeTx = substrateApi.api.tx.subtensorModule.moveStake(fromValidator, formatToValidator, netuid, netuid, value);
|
|
144
|
+
const transferStakeTx = substrateApi.api.tx.subtensorModule.transferStake(to, formatToValidator, netuid, netuid, value);
|
|
145
|
+
transfer = substrateApi.api.tx.utility.batchAll([moveStakeTx, transferStakeTx]);
|
|
146
|
+
}
|
|
132
147
|
}
|
|
133
148
|
return [transfer, transferAmount || value];
|
|
134
149
|
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _nativeTokenBridge = require("./nativeTokenBridge");
|
|
7
|
+
Object.keys(_nativeTokenBridge).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _nativeTokenBridge[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _nativeTokenBridge[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
var _utils = require("./utils");
|
|
18
|
+
Object.keys(_utils).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _utils[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _utils[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports._isBittensorToSubtensorBridge = _isBittensorToSubtensorBridge;
|
|
7
|
+
exports._isSubtensorToBittensorBridge = _isSubtensorToBittensorBridge;
|
|
8
|
+
exports.getSubtensorEvmtoBittensorExtrinsic = getSubtensorEvmtoBittensorExtrinsic;
|
|
9
|
+
var _chainList = require("@subwallet/chain-list");
|
|
10
|
+
var _web = require("@subwallet/extension-base/koni/api/contract-handler/evm/web3");
|
|
11
|
+
var _utils = require("@subwallet/extension-base/utils");
|
|
12
|
+
var _util = require("@polkadot/util");
|
|
13
|
+
var _utilCrypto = require("@polkadot/util-crypto");
|
|
14
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
15
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
16
|
+
|
|
17
|
+
const NATIVE_SUBTENSOR_ABI = [{
|
|
18
|
+
inputs: [{
|
|
19
|
+
internalType: 'bytes32',
|
|
20
|
+
name: 'data',
|
|
21
|
+
type: 'bytes32'
|
|
22
|
+
}],
|
|
23
|
+
name: 'transfer',
|
|
24
|
+
outputs: [],
|
|
25
|
+
stateMutability: 'payable',
|
|
26
|
+
type: 'function'
|
|
27
|
+
}];
|
|
28
|
+
const nativeSubtensorEvmContractAddress = '0x0000000000000000000000000000000000000800';
|
|
29
|
+
async function getSubtensorEvmtoBittensorExtrinsic(sender, recipientAddress, sendingValue, evmApi, _feeInfo, feeCustom, feeOption) {
|
|
30
|
+
const contract = (0, _web.getWeb3Contract)(nativeSubtensorEvmContractAddress, evmApi, NATIVE_SUBTENSOR_ABI);
|
|
31
|
+
const toAccountId = (0, _utilCrypto.decodeAddress)(recipientAddress);
|
|
32
|
+
const amountSubstrate = new _util.BN(sendingValue).div(new _util.BN(10).pow(new _util.BN(9)));
|
|
33
|
+
const amountU8a = (0, _util.compactToU8a)(amountSubstrate);
|
|
34
|
+
const scaleEncoded = (0, _util.u8aConcat)(toAccountId, amountU8a);
|
|
35
|
+
const dataU8a = scaleEncoded.slice(0, 32);
|
|
36
|
+
const dataHex = (0, _util.u8aToHex)(dataU8a);
|
|
37
|
+
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
|
39
|
+
const transferCall = contract.methods.transfer(dataHex);
|
|
40
|
+
const txData = transferCall.encodeABI();
|
|
41
|
+
const feeInfo = _feeInfo;
|
|
42
|
+
const feeCombine = (0, _utils.combineEthFee)(feeInfo, feeOption, feeCustom);
|
|
43
|
+
const transactionConfig = {
|
|
44
|
+
from: sender,
|
|
45
|
+
to: nativeSubtensorEvmContractAddress,
|
|
46
|
+
value: sendingValue,
|
|
47
|
+
data: txData,
|
|
48
|
+
...feeCombine
|
|
49
|
+
};
|
|
50
|
+
transactionConfig.gas = (await evmApi.api.eth.estimateGas(transactionConfig).catch(() => 30000)).toString();
|
|
51
|
+
return transactionConfig;
|
|
52
|
+
}
|
|
53
|
+
function _isBittensorToSubtensorBridge(srcChain, destChain) {
|
|
54
|
+
return srcChain === _chainList.COMMON_CHAIN_SLUGS.BITTENSOR && destChain === _chainList.COMMON_CHAIN_SLUGS.SUBTENSOR_EVM || srcChain === _chainList.COMMON_CHAIN_SLUGS.BITTENSOR_TESTNET && destChain === _chainList.COMMON_CHAIN_SLUGS.SUBTENSOR_EVM_TESTNET;
|
|
55
|
+
}
|
|
56
|
+
function _isSubtensorToBittensorBridge(srcChain, destChain) {
|
|
57
|
+
return srcChain === _chainList.COMMON_CHAIN_SLUGS.SUBTENSOR_EVM && destChain === _chainList.COMMON_CHAIN_SLUGS.BITTENSOR || srcChain === _chainList.COMMON_CHAIN_SLUGS.SUBTENSOR_EVM_TESTNET && destChain === _chainList.COMMON_CHAIN_SLUGS.BITTENSOR_TESTNET;
|
|
58
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.evmToSs58 = evmToSs58;
|
|
7
|
+
var _util = require("@polkadot/util");
|
|
8
|
+
var _utilCrypto = require("@polkadot/util-crypto");
|
|
9
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
10
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
11
|
+
|
|
12
|
+
const EVM_PREFIX = new TextEncoder().encode('evm:');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Convert an EVM address (0x...) into a Substrate SS58 address
|
|
16
|
+
*
|
|
17
|
+
* @param evmAddress EVM address, with or without the "0x" prefix
|
|
18
|
+
* @param ss58Prefix SS58 network prefix (default is 42 – generic Substrate)
|
|
19
|
+
* @returns SS58-encoded Substrate address
|
|
20
|
+
*/
|
|
21
|
+
function evmToSs58(evmAddress) {
|
|
22
|
+
let ss58Prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 42;
|
|
23
|
+
// Normalize input: ensure "0x" prefix and convert to Uint8Array
|
|
24
|
+
const addressBytes = (0, _util.hexToU8a)(evmAddress.startsWith('0x') ? evmAddress : '0x' + evmAddress);
|
|
25
|
+
|
|
26
|
+
// Build the input buffer: "evm:" prefix + 20-byte EVM address
|
|
27
|
+
const combined = new Uint8Array(EVM_PREFIX.length + addressBytes.length);
|
|
28
|
+
combined.set(EVM_PREFIX);
|
|
29
|
+
combined.set(addressBytes, EVM_PREFIX.length);
|
|
30
|
+
|
|
31
|
+
// Hash using blake2b-256 to derive a Substrate AccountId
|
|
32
|
+
const hash = (0, _utilCrypto.blake2AsU8a)(combined);
|
|
33
|
+
|
|
34
|
+
// Encode the hash into an SS58 address with the given prefix
|
|
35
|
+
return (0, _utilCrypto.encodeAddress)(hash, ss58Prefix);
|
|
36
|
+
}
|
|
@@ -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.getXcmOriginFee = exports.dryRunXcmExtrinsicV2 = exports.createXcmExtrinsicV2 = exports.createSnowBridgeExtrinsic = exports.createPolygonBridgeExtrinsic = exports.createAvailBridgeTxFromEth = exports.createAvailBridgeExtrinsicFromAvail = exports.createAcrossBridgeExtrinsic = void 0;
|
|
7
|
+
exports.getXcmOriginFee = exports.getMinXcmTransferableAmount = exports.dryRunXcmExtrinsicV2 = exports.createXcmExtrinsicV2 = exports.createSubtensorEvmToBittensorExtrinsic = exports.createSnowBridgeExtrinsic = exports.createPolygonBridgeExtrinsic = exports.createBittensorToSubtensorEvmExtrinsic = exports.createAvailBridgeTxFromEth = exports.createAvailBridgeExtrinsicFromAvail = exports.createAcrossBridgeExtrinsic = void 0;
|
|
8
8
|
var _xcmParser = require("@subwallet/extension-base/core/substrate/xcm-parser");
|
|
9
9
|
var _availBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge");
|
|
10
10
|
var _polygonBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge");
|
|
@@ -12,6 +12,7 @@ var _snowBridge = require("@subwallet/extension-base/services/balance-service/tr
|
|
|
12
12
|
var _utils = require("@subwallet/extension-base/services/balance-service/transfer/xcm/utils");
|
|
13
13
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
14
14
|
var _subwalletServicesSdk = _interopRequireDefault(require("@subwallet-monorepos/subwallet-services-sdk"));
|
|
15
|
+
var _bittensorBridge = require("./bittensorBridge");
|
|
15
16
|
var _posBridge = require("./posBridge");
|
|
16
17
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
17
18
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -112,6 +113,14 @@ const createXcmExtrinsicV2 = async request => {
|
|
|
112
113
|
}
|
|
113
114
|
};
|
|
114
115
|
exports.createXcmExtrinsicV2 = createXcmExtrinsicV2;
|
|
116
|
+
const getMinXcmTransferableAmount = async request => {
|
|
117
|
+
try {
|
|
118
|
+
return await (0, _utils.fetchMinXcmTransferableAmount)(request);
|
|
119
|
+
} catch (e) {
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
exports.getMinXcmTransferableAmount = getMinXcmTransferableAmount;
|
|
115
124
|
const dryRunXcmExtrinsicV2 = async function (request) {
|
|
116
125
|
let isPreview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
117
126
|
try {
|
|
@@ -216,4 +225,54 @@ const createAcrossBridgeExtrinsic = async _ref5 => {
|
|
|
216
225
|
return Promise.reject(new Error(error === null || error === void 0 ? void 0 : error.message));
|
|
217
226
|
}
|
|
218
227
|
};
|
|
219
|
-
|
|
228
|
+
|
|
229
|
+
// Native bittensor <-> subtensor EVM bridge
|
|
230
|
+
exports.createAcrossBridgeExtrinsic = createAcrossBridgeExtrinsic;
|
|
231
|
+
const createBittensorToSubtensorEvmExtrinsic = async _ref6 => {
|
|
232
|
+
let {
|
|
233
|
+
destinationChain,
|
|
234
|
+
originChain,
|
|
235
|
+
recipient,
|
|
236
|
+
sendingValue,
|
|
237
|
+
substrateApi,
|
|
238
|
+
transferAll
|
|
239
|
+
} = _ref6;
|
|
240
|
+
if (!(0, _xcmParser._isBittensorToSubtensorEvmBridge)(originChain, destinationChain)) {
|
|
241
|
+
throw new Error('This is not a valid Bittensor bridge transfer');
|
|
242
|
+
}
|
|
243
|
+
if (!substrateApi) {
|
|
244
|
+
throw Error('Substrate API is not available');
|
|
245
|
+
}
|
|
246
|
+
const api = substrateApi.api;
|
|
247
|
+
await api.isReady;
|
|
248
|
+
const subtensorEvmAddress = (0, _bittensorBridge.evmToSs58)(recipient);
|
|
249
|
+
if (transferAll) {
|
|
250
|
+
return api.tx.balances.transferAll(subtensorEvmAddress, false);
|
|
251
|
+
}
|
|
252
|
+
return api.tx.balances.transferKeepAlive(subtensorEvmAddress, sendingValue);
|
|
253
|
+
};
|
|
254
|
+
exports.createBittensorToSubtensorEvmExtrinsic = createBittensorToSubtensorEvmExtrinsic;
|
|
255
|
+
const createSubtensorEvmToBittensorExtrinsic = async _ref7 => {
|
|
256
|
+
let {
|
|
257
|
+
destinationChain,
|
|
258
|
+
evmApi,
|
|
259
|
+
feeCustom,
|
|
260
|
+
feeInfo,
|
|
261
|
+
feeOption,
|
|
262
|
+
originChain,
|
|
263
|
+
recipient,
|
|
264
|
+
sender,
|
|
265
|
+
sendingValue
|
|
266
|
+
} = _ref7;
|
|
267
|
+
if (!(0, _xcmParser._isSubtensorEvmtoBittensorBridge)(originChain, destinationChain)) {
|
|
268
|
+
throw new Error('This is not a valid Subtensor EVM bridge transfer');
|
|
269
|
+
}
|
|
270
|
+
if (!evmApi) {
|
|
271
|
+
throw Error('Evm API is not available');
|
|
272
|
+
}
|
|
273
|
+
if (!sender) {
|
|
274
|
+
throw Error('Sender is required');
|
|
275
|
+
}
|
|
276
|
+
return (0, _bittensorBridge.getSubtensorEvmtoBittensorExtrinsic)(sender, recipient, sendingValue, evmApi, feeInfo, feeCustom, feeOption);
|
|
277
|
+
};
|
|
278
|
+
exports.createSubtensorEvmToBittensorExtrinsic = createSubtensorEvmToBittensorExtrinsic;
|
|
@@ -8,13 +8,22 @@ exports.buildXcm = buildXcm;
|
|
|
8
8
|
exports.dryRunPreviewXcm = dryRunPreviewXcm;
|
|
9
9
|
exports.dryRunXcm = dryRunXcm;
|
|
10
10
|
exports.estimateXcmFee = estimateXcmFee;
|
|
11
|
+
exports.fetchMinXcmTransferableAmount = fetchMinXcmTransferableAmount;
|
|
11
12
|
exports.isChainNotSupportDryRun = isChainNotSupportDryRun;
|
|
12
13
|
exports.isChainNotSupportPolkadotApi = isChainNotSupportPolkadotApi;
|
|
14
|
+
exports.isSubstrateCrossChain = isSubstrateCrossChain;
|
|
13
15
|
var _paraspellChainMap = require("@subwallet/extension-base/constants/paraspell-chain-map");
|
|
16
|
+
var _xcmParser = require("@subwallet/extension-base/core/substrate/xcm-parser");
|
|
17
|
+
var _acrossBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/acrossBridge");
|
|
18
|
+
var _availBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge");
|
|
19
|
+
var _polygonBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge");
|
|
20
|
+
var _posBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/posBridge");
|
|
21
|
+
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
14
22
|
var _environment = require("@subwallet/extension-base/types/environment");
|
|
15
|
-
var
|
|
23
|
+
var _utils2 = require("@subwallet/extension-base/utils");
|
|
16
24
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
17
25
|
var _util = require("@polkadot/util");
|
|
26
|
+
var _bittensorBridge = require("./bittensorBridge");
|
|
18
27
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
19
28
|
// SPDX-License-Identifier: Apache-2.0
|
|
20
29
|
|
|
@@ -23,7 +32,9 @@ const paraSpellApi = {
|
|
|
23
32
|
buildXcm: `${version}/x-transfer`,
|
|
24
33
|
feeXcm: `${version}/xcm-fee`,
|
|
25
34
|
dryRunXcm: `${version}/dry-run`,
|
|
26
|
-
dryRunPreviewXcm: `${version}/dry-run-preview
|
|
35
|
+
dryRunPreviewXcm: `${version}/dry-run-preview`,
|
|
36
|
+
maxTransferable: `${version}/transferable-amount`,
|
|
37
|
+
minTransferable: `${version}/min-transferable-amount`
|
|
27
38
|
};
|
|
28
39
|
function txHexToSubmittableExtrinsic(api, hex) {
|
|
29
40
|
try {
|
|
@@ -105,7 +116,7 @@ async function buildXcm(request) {
|
|
|
105
116
|
abstractDecimals: false
|
|
106
117
|
}
|
|
107
118
|
};
|
|
108
|
-
const response = await (0,
|
|
119
|
+
const response = await (0, _utils2.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.buildXcm, {
|
|
109
120
|
method: 'POST',
|
|
110
121
|
body: JSON.stringify(bodyData),
|
|
111
122
|
headers: {
|
|
@@ -146,7 +157,7 @@ async function dryRunXcm(request) {
|
|
|
146
157
|
abstractDecimals: false
|
|
147
158
|
}
|
|
148
159
|
};
|
|
149
|
-
const response = await (0,
|
|
160
|
+
const response = await (0, _utils2.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.dryRunXcm, {
|
|
150
161
|
method: 'POST',
|
|
151
162
|
body: JSON.stringify(bodyData),
|
|
152
163
|
headers: {
|
|
@@ -191,7 +202,7 @@ async function dryRunPreviewXcm(request) {
|
|
|
191
202
|
mintFeeAssets: true
|
|
192
203
|
}
|
|
193
204
|
};
|
|
194
|
-
const response = await (0,
|
|
205
|
+
const response = await (0, _utils2.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.dryRunPreviewXcm, {
|
|
195
206
|
method: 'POST',
|
|
196
207
|
body: JSON.stringify(bodyData),
|
|
197
208
|
headers: {
|
|
@@ -238,7 +249,7 @@ async function estimateXcmFee(request) {
|
|
|
238
249
|
abstractDecimals: false
|
|
239
250
|
}
|
|
240
251
|
};
|
|
241
|
-
const response = await (0,
|
|
252
|
+
const response = await (0, _utils2.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.feeXcm, {
|
|
242
253
|
method: 'POST',
|
|
243
254
|
body: JSON.stringify(bodyData),
|
|
244
255
|
headers: {
|
|
@@ -252,6 +263,41 @@ async function estimateXcmFee(request) {
|
|
|
252
263
|
}
|
|
253
264
|
return await response.json();
|
|
254
265
|
}
|
|
266
|
+
async function fetchMinXcmTransferableAmount(request) {
|
|
267
|
+
var _originTokenInfo$meta4;
|
|
268
|
+
const {
|
|
269
|
+
fromChainInfo: originChain,
|
|
270
|
+
fromTokenInfo: originTokenInfo,
|
|
271
|
+
recipient,
|
|
272
|
+
sender,
|
|
273
|
+
toChainInfo: destinationChain,
|
|
274
|
+
value: sendingValue
|
|
275
|
+
} = request;
|
|
276
|
+
const paraSpellChainMap = await (0, _paraspellChainMap.fetchParaSpellChainMap)();
|
|
277
|
+
const paraSpellIdentifyV4 = (_originTokenInfo$meta4 = originTokenInfo.metadata) === null || _originTokenInfo$meta4 === void 0 ? void 0 : _originTokenInfo$meta4.paraSpellIdentifyV4;
|
|
278
|
+
if (!paraSpellIdentifyV4) {
|
|
279
|
+
throw new Error('Token is not support XCM at this time');
|
|
280
|
+
}
|
|
281
|
+
const bodyData = {
|
|
282
|
+
senderAddress: sender,
|
|
283
|
+
address: recipient,
|
|
284
|
+
from: paraSpellChainMap[originChain.slug],
|
|
285
|
+
to: paraSpellChainMap[destinationChain.slug],
|
|
286
|
+
currency: createParaSpellCurrency(paraSpellIdentifyV4, sendingValue),
|
|
287
|
+
options: {
|
|
288
|
+
abstractDecimals: false
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
const response = await (0, _utils2.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.minTransferable, {
|
|
292
|
+
method: 'POST',
|
|
293
|
+
body: JSON.stringify(bodyData),
|
|
294
|
+
headers: {
|
|
295
|
+
'Content-Type': 'application/json',
|
|
296
|
+
Accept: 'application/json'
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
return await response.json();
|
|
300
|
+
}
|
|
255
301
|
function createParaSpellCurrency(paraSpellIdentifyV4, amount) {
|
|
256
302
|
return {
|
|
257
303
|
...paraSpellIdentifyV4,
|
|
@@ -267,4 +313,46 @@ function isChainNotSupportDryRun(str) {
|
|
|
267
313
|
const regex = /(?=.*DryRunApi)(?=.*not available).*/i; // Example: DryRunApi is not available on node Acala
|
|
268
314
|
|
|
269
315
|
return regex.test(str);
|
|
316
|
+
}
|
|
317
|
+
function isSubstrateCrossChain(originChainInfo, destinationChainInfo) {
|
|
318
|
+
if (originChainInfo.slug === destinationChainInfo.slug) {
|
|
319
|
+
return false;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// isAvailBridgeFromEvm
|
|
323
|
+
if ((0, _utils._isPureEvmChain)(originChainInfo) && (0, _availBridge.isAvailChainBridge)(destinationChainInfo.slug)) {
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// isAvailBridgeFromAvail
|
|
328
|
+
if ((0, _availBridge.isAvailChainBridge)(originChainInfo.slug) && (0, _utils._isPureEvmChain)(destinationChainInfo)) {
|
|
329
|
+
return false;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// isSnowBridgeEvmTransfer
|
|
333
|
+
if ((0, _utils._isPureEvmChain)(originChainInfo) && (0, _xcmParser._isSnowBridgeXcm)(originChainInfo, destinationChainInfo)) {
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// isPolygonBridgeTransfer
|
|
338
|
+
if ((0, _polygonBridge._isPolygonChainBridge)(originChainInfo.slug, destinationChainInfo.slug)) {
|
|
339
|
+
return false;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// isPosBridgeTransfer
|
|
343
|
+
if ((0, _posBridge._isPosChainBridge)(originChainInfo.slug, destinationChainInfo.slug)) {
|
|
344
|
+
return false;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// isAcrossBridgeTransfer
|
|
348
|
+
if ((0, _acrossBridge._isAcrossChainBridge)(originChainInfo.slug, destinationChainInfo.slug)) {
|
|
349
|
+
return false;
|
|
350
|
+
}
|
|
351
|
+
if ((0, _bittensorBridge._isBittensorToSubtensorBridge)(originChainInfo.slug, destinationChainInfo.slug)) {
|
|
352
|
+
return false;
|
|
353
|
+
}
|
|
354
|
+
if ((0, _bittensorBridge._isSubtensorToBittensorBridge)(originChainInfo.slug, destinationChainInfo.slug)) {
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
return true;
|
|
270
358
|
}
|
|
@@ -54,7 +54,8 @@ const _BALANCE_CHAIN_GROUP = {
|
|
|
54
54
|
supportBridged: ['rococo_assethub', 'statemint', 'statemine', 'polimec'],
|
|
55
55
|
bittensor: ['bittensor', 'bittensor_testnet'],
|
|
56
56
|
moonbeam: ['moonbeam', 'moonriver', 'moonbase'],
|
|
57
|
-
notSupportGetBalanceByType: ['vara_network', 'vara_testnet', 'availTuringTest', 'avail_mainnet']
|
|
57
|
+
notSupportGetBalanceByType: ['vara_network', 'vara_testnet', 'availTuringTest', 'avail_mainnet'],
|
|
58
|
+
subtensor_evm: ['subtensor_evm']
|
|
58
59
|
};
|
|
59
60
|
exports._BALANCE_CHAIN_GROUP = _BALANCE_CHAIN_GROUP;
|
|
60
61
|
const _BALANCE_LOCKED_ID_GROUP = {
|
|
@@ -313,7 +314,8 @@ const _TRANSFER_CHAIN_GROUP = {
|
|
|
313
314
|
pendulum: ['pendulum', 'amplitude', 'amplitude_test', 'hydradx_main', 'bifrost', 'bifrost_dot', 'jamton', 'hydradx_hollarnet'],
|
|
314
315
|
centrifuge: ['centrifuge'],
|
|
315
316
|
disable_transfer: ['crab', 'pangolin'],
|
|
316
|
-
truth: ['truth_network']
|
|
317
|
+
truth: ['truth_network'],
|
|
318
|
+
bittensor: ['bittensor', 'bittensor_testnet']
|
|
317
319
|
};
|
|
318
320
|
exports._TRANSFER_CHAIN_GROUP = _TRANSFER_CHAIN_GROUP;
|
|
319
321
|
const USE_MULTILOCATION_INDEX = ['energy_web_x'];
|
|
@@ -12,7 +12,7 @@ const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
|
|
|
12
12
|
const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
|
|
13
13
|
const fetchDomain = process.env.PATCH_CHAIN_LIST_URL || (PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'https://chain-list-assets.subwallet.app' : 'https://dev.sw-chain-list-assets.pages.dev');
|
|
14
14
|
const fetchFile = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'list.json' : 'preview.json';
|
|
15
|
-
const ChainListVersion = '0.2.
|
|
15
|
+
const ChainListVersion = '0.2.127'; // update this when build chain-list
|
|
16
16
|
|
|
17
17
|
// todo: move this interface to chainlist
|
|
18
18
|
exports.ChainListVersion = ChainListVersion;
|