@subwallet/extension-base 1.2.25-0 → 1.2.25-1
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 +9 -0
- package/background/errors/EvmProviderError.d.ts +1 -1
- package/background/errors/EvmProviderError.js +2 -2
- package/background/errors/SWError.d.ts +1 -1
- package/background/errors/SWError.js +4 -1
- package/background/errors/TransactionError.d.ts +1 -1
- package/background/errors/TransactionError.js +2 -2
- package/cjs/background/errors/EvmProviderError.js +2 -2
- package/cjs/background/errors/SWError.js +4 -1
- package/cjs/background/errors/TransactionError.js +2 -2
- package/cjs/core/logic-validation/index.js +49 -0
- package/cjs/core/logic-validation/request.js +488 -0
- package/cjs/core/logic-validation/transfer.js +25 -8
- package/cjs/koni/api/staking/bonding/utils.js +2 -2
- package/cjs/koni/background/handlers/Extension.js +33 -8
- package/cjs/koni/background/handlers/State.js +41 -160
- package/cjs/koni/background/handlers/Tabs.js +35 -33
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +16 -8
- package/cjs/services/chain-service/constants.js +6 -1
- package/cjs/services/chain-service/index.js +32 -2
- package/cjs/services/chain-service/utils/index.js +2 -2
- package/cjs/services/earning-service/constants/chains.js +2 -2
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +4 -3
- package/cjs/services/earning-service/service.js +1 -1
- package/cjs/services/event-service/index.js +1 -0
- package/cjs/services/request-service/handler/EvmRequestHandler.js +2 -1
- package/cjs/services/transaction-service/index.js +11 -7
- package/cjs/services/wallet-connect-service/handler/Eip155RequestHandler.js +12 -36
- package/core/logic-validation/index.d.ts +4 -0
- package/core/logic-validation/index.js +7 -0
- package/core/logic-validation/request.d.ts +23 -0
- package/core/logic-validation/request.js +475 -0
- package/core/logic-validation/transfer.d.ts +1 -1
- package/core/logic-validation/transfer.js +25 -8
- package/koni/api/staking/bonding/utils.js +2 -2
- package/koni/background/handlers/Extension.d.ts +1 -0
- package/koni/background/handlers/Extension.js +33 -8
- package/koni/background/handlers/State.d.ts +2 -2
- package/koni/background/handlers/State.js +42 -161
- package/koni/background/handlers/Tabs.d.ts +0 -1
- package/koni/background/handlers/Tabs.js +36 -34
- package/package.json +16 -6
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/substrate/index.js +16 -8
- package/services/chain-service/constants.js +6 -1
- package/services/chain-service/index.d.ts +9 -0
- package/services/chain-service/index.js +32 -2
- package/services/chain-service/utils/index.js +2 -2
- package/services/earning-service/constants/chains.js +2 -2
- package/services/earning-service/handlers/native-staking/relay-chain.js +4 -3
- package/services/earning-service/service.js +1 -1
- package/services/event-service/index.d.ts +1 -0
- package/services/event-service/index.js +1 -0
- package/services/event-service/types.d.ts +1 -0
- package/services/request-service/handler/EvmRequestHandler.js +2 -1
- package/services/transaction-service/index.js +11 -7
- package/services/wallet-connect-service/handler/Eip155RequestHandler.js +9 -33
|
@@ -10,6 +10,7 @@ var _helpers = require("@subwallet/extension-base/background/handlers/helpers");
|
|
|
10
10
|
var _subscriptions = require("@subwallet/extension-base/background/handlers/subscriptions");
|
|
11
11
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
12
12
|
var _constants = require("@subwallet/extension-base/constants");
|
|
13
|
+
var _logicValidation = require("@subwallet/extension-base/core/logic-validation");
|
|
13
14
|
var _balanceService = require("@subwallet/extension-base/services/balance-service");
|
|
14
15
|
var _types = require("@subwallet/extension-base/services/base/types");
|
|
15
16
|
var _buyService = _interopRequireDefault(require("@subwallet/extension-base/services/buy-service"));
|
|
@@ -39,11 +40,9 @@ var _walletConnectService = _interopRequireDefault(require("@subwallet/extension
|
|
|
39
40
|
var _storage = require("@subwallet/extension-base/storage");
|
|
40
41
|
var _AccountRef = _interopRequireDefault(require("@subwallet/extension-base/stores/AccountRef"));
|
|
41
42
|
var _utils3 = require("@subwallet/extension-base/utils");
|
|
42
|
-
var _parseTransaction = require("@subwallet/extension-base/utils/eth/parseTransaction");
|
|
43
43
|
var _promise = require("@subwallet/extension-base/utils/promise");
|
|
44
44
|
var _decode = require("@subwallet/keyring/pair/decode");
|
|
45
45
|
var _uiKeyring = require("@subwallet/ui-keyring");
|
|
46
|
-
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
47
46
|
var _bn = _interopRequireDefault(require("bn.js"));
|
|
48
47
|
var _ethSimpleKeyring = _interopRequireDefault(require("eth-simple-keyring"));
|
|
49
48
|
var _i18next = require("i18next");
|
|
@@ -58,6 +57,7 @@ var _subscription = require("../subscription");
|
|
|
58
57
|
// eslint-disable-next-line @typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-assignment
|
|
59
58
|
const passworder = require('browser-passworder');
|
|
60
59
|
const ETH_DERIVE_DEFAULT = '/m/44\'/60\'/0\'/0/0';
|
|
60
|
+
const ERROR_CONFIRMATION_TYPE = ['errorConnectNetwork'];
|
|
61
61
|
|
|
62
62
|
// List of providers passed into constructor. This is the list of providers
|
|
63
63
|
// exposed by the extension.
|
|
@@ -1099,7 +1099,7 @@ class KoniState {
|
|
|
1099
1099
|
resolve(ethKeyring);
|
|
1100
1100
|
});
|
|
1101
1101
|
}
|
|
1102
|
-
async evmSign(id, url, method, params,
|
|
1102
|
+
async evmSign(id, url, method, params, topic) {
|
|
1103
1103
|
let address = '';
|
|
1104
1104
|
let payload;
|
|
1105
1105
|
const [p1, p2] = params;
|
|
@@ -1110,60 +1110,21 @@ class KoniState {
|
|
|
1110
1110
|
address = p2;
|
|
1111
1111
|
payload = p1;
|
|
1112
1112
|
}
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
if (['eth_signTypedData_v3', 'eth_signTypedData_v4'].indexOf(method) > -1) {
|
|
1120
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-assignment
|
|
1121
|
-
payload = JSON.parse(payload);
|
|
1122
|
-
}
|
|
1123
|
-
|
|
1124
|
-
// Check sign abiblity
|
|
1125
|
-
if (!allowedAccounts.find(acc => acc.toLowerCase() === address.toLowerCase())) {
|
|
1126
|
-
throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, (0, _i18next.t)('You have rescinded allowance for this account in wallet'));
|
|
1127
|
-
}
|
|
1128
|
-
const pair = _uiKeyring.keyring.getPair(address);
|
|
1129
|
-
if (!pair) {
|
|
1130
|
-
throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, (0, _i18next.t)('Unable to find account'));
|
|
1131
|
-
}
|
|
1132
|
-
const account = {
|
|
1133
|
-
address: pair.address,
|
|
1134
|
-
...pair.meta
|
|
1113
|
+
const payloadValidation = {
|
|
1114
|
+
address,
|
|
1115
|
+
payloadAfterValidated: payload,
|
|
1116
|
+
method,
|
|
1117
|
+
errors: [],
|
|
1118
|
+
networkKey: ''
|
|
1135
1119
|
};
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
hashPayload = payload;
|
|
1142
|
-
break;
|
|
1143
|
-
case 'eth_sign':
|
|
1144
|
-
case 'eth_signTypedData':
|
|
1145
|
-
case 'eth_signTypedData_v1':
|
|
1146
|
-
case 'eth_signTypedData_v3':
|
|
1147
|
-
case 'eth_signTypedData_v4':
|
|
1148
|
-
if (!account.isExternal) {
|
|
1149
|
-
canSign = true;
|
|
1150
|
-
}
|
|
1151
|
-
break;
|
|
1152
|
-
default:
|
|
1153
|
-
throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, (0, _i18next.t)('Unsupported action'));
|
|
1154
|
-
}
|
|
1155
|
-
const signPayload = {
|
|
1156
|
-
account: account,
|
|
1157
|
-
type: method,
|
|
1158
|
-
payload: payload,
|
|
1159
|
-
hashPayload: hashPayload,
|
|
1160
|
-
canSign: canSign,
|
|
1120
|
+
const validationSteps = [topic ? _logicValidation.validationAuthWCMiddleware : _logicValidation.validationAuthMiddleware, _logicValidation.validationEvmSignMessageMiddleware];
|
|
1121
|
+
const result = await (0, _logicValidation.generateValidationProcess)(this, url, payloadValidation, validationSteps, topic);
|
|
1122
|
+
const payloadAfterValidated = {
|
|
1123
|
+
...result.payloadAfterValidated,
|
|
1124
|
+
errors: result.errors,
|
|
1161
1125
|
id
|
|
1162
1126
|
};
|
|
1163
|
-
return this.requestService.addConfirmation(id, url, 'evmSignatureRequest',
|
|
1164
|
-
requiredPassword: false,
|
|
1165
|
-
address
|
|
1166
|
-
}).then(_ref9 => {
|
|
1127
|
+
return this.requestService.addConfirmation(id, url, 'evmSignatureRequest', payloadAfterValidated, {}).then(_ref9 => {
|
|
1167
1128
|
let {
|
|
1168
1129
|
isApproved,
|
|
1169
1130
|
payload
|
|
@@ -1209,117 +1170,36 @@ class KoniState {
|
|
|
1209
1170
|
});
|
|
1210
1171
|
return Object.fromEntries(await Promise.all(promiseList));
|
|
1211
1172
|
}
|
|
1212
|
-
async evmSendTransaction(id, url,
|
|
1213
|
-
const
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
return new _bn.default(val.replace('0x', ''), 16).toString();
|
|
1219
|
-
} else if (typeof val === 'number') {
|
|
1220
|
-
return val.toString();
|
|
1221
|
-
}
|
|
1222
|
-
return val;
|
|
1173
|
+
async evmSendTransaction(id, url, transactionParams, networkKeyInit, topic) {
|
|
1174
|
+
const payloadValidation = {
|
|
1175
|
+
errors: [],
|
|
1176
|
+
networkKey: networkKeyInit || '',
|
|
1177
|
+
payloadAfterValidated: transactionParams,
|
|
1178
|
+
address: transactionParams.from
|
|
1223
1179
|
};
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
};
|
|
1237
|
-
if (!transactionParams.gas) {
|
|
1238
|
-
const getTransactionGas = async () => {
|
|
1239
|
-
try {
|
|
1240
|
-
transaction.gas = await web3.eth.estimateGas({
|
|
1241
|
-
...transaction
|
|
1242
|
-
});
|
|
1243
|
-
} catch (e) {
|
|
1244
|
-
// @ts-ignore
|
|
1245
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
1246
|
-
throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, e === null || e === void 0 ? void 0 : e.message);
|
|
1247
|
-
}
|
|
1248
|
-
};
|
|
1249
|
-
|
|
1250
|
-
// Calculate transaction data
|
|
1251
|
-
try {
|
|
1252
|
-
await Promise.race([getTransactionGas(), (0, _utils3.wait)(3000).then(async () => {
|
|
1253
|
-
if (!transaction.gas) {
|
|
1254
|
-
await this.chainService.initSingleApi(networkKey);
|
|
1255
|
-
await getTransactionGas();
|
|
1256
|
-
}
|
|
1257
|
-
})]);
|
|
1258
|
-
} catch (e) {
|
|
1259
|
-
// @ts-ignore
|
|
1260
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
1261
|
-
throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, e === null || e === void 0 ? void 0 : e.message);
|
|
1262
|
-
}
|
|
1263
|
-
}
|
|
1264
|
-
if (!transaction.gas) {
|
|
1265
|
-
throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS);
|
|
1266
|
-
}
|
|
1267
|
-
let estimateGas;
|
|
1268
|
-
|
|
1269
|
-
// TODO: Review, If not override, transaction maybe fail because fee too low
|
|
1270
|
-
if (transactionParams.maxPriorityFeePerGas && transactionParams.maxFeePerGas) {
|
|
1271
|
-
const maxFee = new _bignumber.default(transactionParams.maxFeePerGas);
|
|
1272
|
-
estimateGas = maxFee.multipliedBy(transaction.gas).toFixed(0);
|
|
1273
|
-
} else if (transactionParams.gasPrice) {
|
|
1274
|
-
estimateGas = new _bignumber.default(transactionParams.gasPrice).multipliedBy(transaction.gas).toFixed(0);
|
|
1275
|
-
} else {
|
|
1276
|
-
const priority = await (0, _utils2.calculateGasFeeParams)(evmApi, networkKey);
|
|
1277
|
-
if (priority.baseGasFee) {
|
|
1278
|
-
transaction.maxPriorityFeePerGas = priority.maxPriorityFeePerGas.toString();
|
|
1279
|
-
transaction.maxFeePerGas = priority.maxFeePerGas.toString();
|
|
1280
|
-
const maxFee = priority.maxFeePerGas;
|
|
1281
|
-
estimateGas = maxFee.multipliedBy(transaction.gas).toFixed(0);
|
|
1282
|
-
} else {
|
|
1283
|
-
transaction.gasPrice = priority.gasPrice;
|
|
1284
|
-
estimateGas = new _bignumber.default(priority.gasPrice).multipliedBy(transaction.gas).toFixed(0);
|
|
1180
|
+
const validationSteps = [topic ? _logicValidation.validationAuthWCMiddleware : _logicValidation.validationAuthMiddleware, _logicValidation.validationConnectMiddleware, _logicValidation.validationEvmDataTransactionMiddleware];
|
|
1181
|
+
const result = await (0, _logicValidation.generateValidationProcess)(this, url, payloadValidation, validationSteps, topic);
|
|
1182
|
+
const {
|
|
1183
|
+
confirmationType,
|
|
1184
|
+
errors,
|
|
1185
|
+
networkKey: networkKey_
|
|
1186
|
+
} = result;
|
|
1187
|
+
if (errors && errors.length > 0 && confirmationType) {
|
|
1188
|
+
if (ERROR_CONFIRMATION_TYPE.includes(confirmationType)) {
|
|
1189
|
+
return this.requestService.addConfirmation(id, url, confirmationType, result, {}).then(() => {
|
|
1190
|
+
throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.USER_REJECTED_REQUEST);
|
|
1191
|
+
});
|
|
1285
1192
|
}
|
|
1286
1193
|
}
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
const fromAddress = allowedAccounts.find(account => account.toLowerCase() === transaction.from.toLowerCase());
|
|
1290
|
-
if (!fromAddress) {
|
|
1291
|
-
throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, (0, _i18next.t)('You have rescinded allowance for this account in wallet'));
|
|
1292
|
-
}
|
|
1293
|
-
const pair = _uiKeyring.keyring.getPair(fromAddress);
|
|
1294
|
-
if (!pair) {
|
|
1295
|
-
throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, (0, _i18next.t)('Unable to find account'));
|
|
1296
|
-
}
|
|
1297
|
-
const account = {
|
|
1298
|
-
address: pair.address,
|
|
1299
|
-
...pair.meta
|
|
1300
|
-
};
|
|
1301
|
-
|
|
1302
|
-
// Validate balance
|
|
1303
|
-
const balance = new _bn.default((await web3.eth.getBalance(fromAddress)) || 0);
|
|
1304
|
-
if (balance.lt(new _bn.default(estimateGas).add(new _bn.default(autoFormatNumber(transactionParams.value) || '0')))) {
|
|
1305
|
-
throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, (0, _i18next.t)('Insufficient balance'));
|
|
1306
|
-
}
|
|
1307
|
-
transaction.nonce = await web3.eth.getTransactionCount(fromAddress);
|
|
1308
|
-
const hashPayload = this.transactionService.generateHashPayload(networkKey, transaction);
|
|
1309
|
-
const isToContract = await (0, _parseTransaction.isContractAddress)(transaction.to || '', evmApi);
|
|
1310
|
-
const parseData = isToContract ? transaction.data ? (await (0, _parseTransaction.parseContractInput)(transaction.data, transaction.to || '', evmNetwork)).result : '' : transaction.data || '';
|
|
1194
|
+
const transactionValidated = result.payloadAfterValidated;
|
|
1195
|
+
const networkKey = networkKey_ || '';
|
|
1311
1196
|
const requestPayload = {
|
|
1312
|
-
...
|
|
1313
|
-
|
|
1314
|
-
hashPayload,
|
|
1315
|
-
isToContract,
|
|
1316
|
-
parseData: parseData,
|
|
1317
|
-
account: account,
|
|
1318
|
-
canSign: true
|
|
1197
|
+
...transactionValidated,
|
|
1198
|
+
errors: errors
|
|
1319
1199
|
};
|
|
1320
|
-
const eType =
|
|
1200
|
+
const eType = transactionValidated.value ? _KoniTypes.ExtrinsicType.TRANSFER_BALANCE : _KoniTypes.ExtrinsicType.EVM_EXECUTE;
|
|
1321
1201
|
const transactionData = {
|
|
1322
|
-
...
|
|
1202
|
+
...transactionValidated
|
|
1323
1203
|
};
|
|
1324
1204
|
const token = this.chainService.getNativeTokenInfo(networkKey);
|
|
1325
1205
|
if (eType === _KoniTypes.ExtrinsicType.TRANSFER_BALANCE) {
|
|
@@ -1334,10 +1214,11 @@ class KoniState {
|
|
|
1334
1214
|
chain: networkKey,
|
|
1335
1215
|
url,
|
|
1336
1216
|
data: transactionData,
|
|
1217
|
+
errors: errors,
|
|
1337
1218
|
extrinsicType: eType,
|
|
1338
1219
|
chainType: _KoniTypes.ChainType.EVM,
|
|
1339
1220
|
estimateFee: {
|
|
1340
|
-
value: estimateGas,
|
|
1221
|
+
value: transactionValidated.estimateGas,
|
|
1341
1222
|
symbol: token.symbol,
|
|
1342
1223
|
decimals: token.decimals || 18
|
|
1343
1224
|
},
|
|
@@ -13,13 +13,12 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
|
13
13
|
var _RequestBytesSign = _interopRequireDefault(require("@subwallet/extension-base/background/RequestBytesSign"));
|
|
14
14
|
var _RequestExtrinsicSign = _interopRequireDefault(require("@subwallet/extension-base/background/RequestExtrinsicSign"));
|
|
15
15
|
var _constants = require("@subwallet/extension-base/constants");
|
|
16
|
+
var _logicValidation = require("@subwallet/extension-base/core/logic-validation");
|
|
16
17
|
var _defaults = require("@subwallet/extension-base/defaults");
|
|
17
18
|
var _types2 = require("@subwallet/extension-base/services/chain-service/handler/types");
|
|
18
19
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
19
20
|
var _constants2 = require("@subwallet/extension-base/services/setting-service/constants");
|
|
20
21
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
21
|
-
var _uiKeyring = _interopRequireDefault(require("@subwallet/ui-keyring"));
|
|
22
|
-
var _i18next = require("i18next");
|
|
23
22
|
var _web = _interopRequireDefault(require("web3"));
|
|
24
23
|
var _phishing = require("@polkadot/phishing");
|
|
25
24
|
var _util = require("@polkadot/util");
|
|
@@ -134,33 +133,36 @@ class KoniTabs {
|
|
|
134
133
|
}
|
|
135
134
|
|
|
136
135
|
/// Clone from Polkadot.js
|
|
137
|
-
getSigningPair(address) {
|
|
138
|
-
const pair = _uiKeyring.default.getPair(address);
|
|
139
|
-
(0, _util.assert)(pair, (0, _i18next.t)('Unable to find account'));
|
|
140
|
-
return pair;
|
|
141
|
-
}
|
|
142
136
|
async bytesSign(url, request) {
|
|
143
137
|
const address = request.address;
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
138
|
+
const payloadValidate = {
|
|
139
|
+
address,
|
|
140
|
+
networkKey: '',
|
|
141
|
+
errors: [],
|
|
142
|
+
payloadAfterValidated: request
|
|
143
|
+
};
|
|
144
|
+
const {
|
|
145
|
+
pair
|
|
146
|
+
} = await (0, _logicValidation.generateValidationProcess)(this.#koniState, url, payloadValidate, [_logicValidation.validationAuthMiddleware]);
|
|
149
147
|
return this.#koniState.sign(url, new _RequestBytesSign.default(request), {
|
|
150
148
|
address,
|
|
151
|
-
...pair.meta
|
|
149
|
+
...(pair === null || pair === void 0 ? void 0 : pair.meta)
|
|
152
150
|
});
|
|
153
151
|
}
|
|
154
152
|
async extrinsicSign(url, request) {
|
|
155
153
|
const address = request.address;
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
154
|
+
const payloadValidate = {
|
|
155
|
+
address,
|
|
156
|
+
networkKey: '',
|
|
157
|
+
errors: [],
|
|
158
|
+
payloadAfterValidated: request
|
|
159
|
+
};
|
|
160
|
+
const {
|
|
161
|
+
pair
|
|
162
|
+
} = await (0, _logicValidation.generateValidationProcess)(this.#koniState, url, payloadValidate, [_logicValidation.validationAuthMiddleware]);
|
|
161
163
|
return this.#koniState.sign(url, new _RequestExtrinsicSign.default(request), {
|
|
162
164
|
address,
|
|
163
|
-
...pair.meta
|
|
165
|
+
...(pair === null || pair === void 0 ? void 0 : pair.meta)
|
|
164
166
|
});
|
|
165
167
|
}
|
|
166
168
|
metadataProvide(url, request) {
|
|
@@ -795,8 +797,19 @@ class KoniTabs {
|
|
|
795
797
|
params: params,
|
|
796
798
|
id
|
|
797
799
|
}, (error, result) => {
|
|
798
|
-
|
|
800
|
+
let err = (result === null || result === void 0 ? void 0 : result.error) || error;
|
|
799
801
|
if (err) {
|
|
802
|
+
let message = err.message.toLowerCase();
|
|
803
|
+
if (message.includes('method not found') || message.includes('not supported') || message.includes('is not available')) {
|
|
804
|
+
message = 'This method is not supported by SubWallet. Try again or contact support at agent@subwallet.app';
|
|
805
|
+
}
|
|
806
|
+
if (message.includes('network is disconnected')) {
|
|
807
|
+
message = 'Re-enable the network or change RPC on the extension and try again';
|
|
808
|
+
}
|
|
809
|
+
err = {
|
|
810
|
+
...err,
|
|
811
|
+
message
|
|
812
|
+
};
|
|
800
813
|
reject(err);
|
|
801
814
|
} else {
|
|
802
815
|
const rs = result === null || result === void 0 ? void 0 : result.result;
|
|
@@ -815,8 +828,7 @@ class KoniTabs {
|
|
|
815
828
|
method,
|
|
816
829
|
params
|
|
817
830
|
} = _ref20;
|
|
818
|
-
const
|
|
819
|
-
const signResult = await this.#koniState.evmSign(id, url, method, params, allowedAccounts);
|
|
831
|
+
const signResult = await this.#koniState.evmSign(id, url, method, params);
|
|
820
832
|
if (signResult) {
|
|
821
833
|
return signResult;
|
|
822
834
|
} else {
|
|
@@ -828,17 +840,7 @@ class KoniTabs {
|
|
|
828
840
|
params
|
|
829
841
|
} = _ref21;
|
|
830
842
|
const transactionParams = params[0];
|
|
831
|
-
const
|
|
832
|
-
const evmState = await this.getEvmState(url);
|
|
833
|
-
const networkKey = evmState.networkKey;
|
|
834
|
-
if (!canUseAccount) {
|
|
835
|
-
throw new Error((0, _i18next.t)('You have rescinded allowance for this account in wallet'));
|
|
836
|
-
}
|
|
837
|
-
if (!networkKey) {
|
|
838
|
-
throw new Error('Network unavailable. Please switch network or manually add network to wallet');
|
|
839
|
-
}
|
|
840
|
-
const allowedAccounts = await this.getEvmCurrentAccount(url);
|
|
841
|
-
const transactionHash = await this.#koniState.evmSendTransaction(id, url, networkKey, allowedAccounts, transactionParams);
|
|
843
|
+
const transactionHash = await this.#koniState.evmSendTransaction(id, url, transactionParams);
|
|
842
844
|
if (!transactionHash) {
|
|
843
845
|
throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.USER_REJECTED_REQUEST);
|
|
844
846
|
}
|
package/cjs/packageInfo.js
CHANGED
|
@@ -114,6 +114,7 @@ const subscribeSubstrateBalance = async (addresses, chainInfo, assetMap, substra
|
|
|
114
114
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
115
115
|
exports.subscribeSubstrateBalance = subscribeSubstrateBalance;
|
|
116
116
|
const subscribeWithSystemAccountPallet = async _ref => {
|
|
117
|
+
var _substrateApi$api$tx, _substrateApi$api$tx$;
|
|
117
118
|
let {
|
|
118
119
|
addresses,
|
|
119
120
|
callback,
|
|
@@ -123,27 +124,34 @@ const subscribeWithSystemAccountPallet = async _ref => {
|
|
|
123
124
|
} = _ref;
|
|
124
125
|
const systemAccountKey = 'query_system_account';
|
|
125
126
|
const poolMembersKey = 'query_nominationPools_poolMembers';
|
|
127
|
+
const isNominationPoolMigrated = !!((_substrateApi$api$tx = substrateApi.api.tx) !== null && _substrateApi$api$tx !== void 0 && (_substrateApi$api$tx$ = _substrateApi$api$tx.nominationPools) !== null && _substrateApi$api$tx$ !== void 0 && _substrateApi$api$tx$.migrateDelegation);
|
|
126
128
|
const params = [{
|
|
127
129
|
section: 'query',
|
|
128
130
|
module: systemAccountKey.split('_')[1],
|
|
129
131
|
method: systemAccountKey.split('_')[2],
|
|
130
132
|
args: addresses
|
|
131
|
-
}, {
|
|
132
|
-
section: 'query',
|
|
133
|
-
module: poolMembersKey.split('_')[1],
|
|
134
|
-
method: poolMembersKey.split('_')[2],
|
|
135
|
-
args: addresses
|
|
136
133
|
}];
|
|
134
|
+
if (!isNominationPoolMigrated) {
|
|
135
|
+
params.push({
|
|
136
|
+
section: 'query',
|
|
137
|
+
module: poolMembersKey.split('_')[1],
|
|
138
|
+
method: poolMembersKey.split('_')[2],
|
|
139
|
+
args: addresses
|
|
140
|
+
});
|
|
141
|
+
}
|
|
137
142
|
const subscription = substrateApi.subscribeDataWithMulti(params, rs => {
|
|
138
143
|
const balances = rs[systemAccountKey];
|
|
139
144
|
const poolMemberInfos = rs[poolMembersKey];
|
|
140
145
|
const items = balances.map((_balance, index) => {
|
|
141
146
|
const balanceInfo = _balance;
|
|
142
|
-
const poolMemberInfo = poolMemberInfos[index];
|
|
143
|
-
const nominationPoolBalance = poolMemberInfo ? (0, _nominationpoolsPallet._getTotalStakeInNominationPool)(poolMemberInfo) : BigInt(0);
|
|
144
147
|
const transferableBalance = (0, _systemPallet._getSystemPalletTransferable)(balanceInfo, (0, _utils2._getChainExistentialDeposit)(chainInfo), extrinsicType);
|
|
145
148
|
const totalBalance = (0, _systemPallet._getSystemPalletTotalBalance)(balanceInfo);
|
|
146
|
-
|
|
149
|
+
let totalLockedFromTransfer = totalBalance - transferableBalance;
|
|
150
|
+
if (!isNominationPoolMigrated) {
|
|
151
|
+
const poolMemberInfo = poolMemberInfos[index];
|
|
152
|
+
const nominationPoolBalance = poolMemberInfo ? (0, _nominationpoolsPallet._getTotalStakeInNominationPool)(poolMemberInfo) : BigInt(0);
|
|
153
|
+
totalLockedFromTransfer += nominationPoolBalance;
|
|
154
|
+
}
|
|
147
155
|
return {
|
|
148
156
|
address: addresses[index],
|
|
149
157
|
tokenSlug: (0, _utils2._getChainNativeTokenSlug)(chainInfo),
|
|
@@ -143,7 +143,8 @@ const _EXPECTED_BLOCK_TIME = {
|
|
|
143
143
|
manta_network: 12,
|
|
144
144
|
enjin_relaychain: 6,
|
|
145
145
|
availTuringTest: 20,
|
|
146
|
-
avail_mainnet: 20
|
|
146
|
+
avail_mainnet: 20,
|
|
147
|
+
dentnet: 3
|
|
147
148
|
};
|
|
148
149
|
exports._EXPECTED_BLOCK_TIME = _EXPECTED_BLOCK_TIME;
|
|
149
150
|
const _PARACHAIN_INFLATION_DISTRIBUTION = {
|
|
@@ -243,6 +244,10 @@ const _KNOWN_CHAIN_INFLATION_PARAMS = {
|
|
|
243
244
|
..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
|
|
244
245
|
maxInflation: 0.05,
|
|
245
246
|
minInflation: 0.01
|
|
247
|
+
},
|
|
248
|
+
dentnet: {
|
|
249
|
+
..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
|
|
250
|
+
falloff: 0.5
|
|
246
251
|
}
|
|
247
252
|
};
|
|
248
253
|
|
|
@@ -28,7 +28,7 @@ const filterChainInfoMap = (data, ignoredChains) => {
|
|
|
28
28
|
return !info.bitcoinInfo && !ignoredChains.includes(slug);
|
|
29
29
|
}));
|
|
30
30
|
};
|
|
31
|
-
const ignoredList = ['bevm', 'bevmTest', 'bevm_testnet', 'layerEdge_testnet', 'merlinEvm', 'botanixEvmTest', 'syscoin_evm', 'syscoin_evm_testnet', 'rollux_evm', 'rollux_testnet', 'boolAlpha', 'boolBeta_testnet', 'core', 'satoshivm', 'satoshivm_testnet'];
|
|
31
|
+
const ignoredList = ['bevm', 'bevmTest', 'bevm_testnet', 'layerEdge_testnet', 'merlinEvm', 'botanixEvmTest', 'syscoin_evm', 'syscoin_evm_testnet', 'rollux_evm', 'rollux_testnet', 'boolAlpha', 'boolBeta_testnet', 'core', 'satoshivm', 'satoshivm_testnet', 'ton', 'ton_testnet'];
|
|
32
32
|
const filterAssetInfoMap = (chainInfo, assets) => {
|
|
33
33
|
return Object.fromEntries(Object.entries(assets).filter(_ref2 => {
|
|
34
34
|
let [, info] = _ref2;
|
|
@@ -75,6 +75,7 @@ class ChainService {
|
|
|
75
75
|
swapRefMapSubject = new _rxjs.Subject();
|
|
76
76
|
assetLogoMapSubject = new _rxjs.BehaviorSubject(_chainList.AssetLogoMap);
|
|
77
77
|
chainLogoMapSubject = new _rxjs.BehaviorSubject(_chainList.ChainLogoMap);
|
|
78
|
+
ledgerGenericAllowChainsSubject = new _rxjs.BehaviorSubject([]);
|
|
78
79
|
assetMapPatch = JSON.stringify({});
|
|
79
80
|
assetLogoPatch = JSON.stringify({});
|
|
80
81
|
|
|
@@ -97,6 +98,22 @@ class ChainService {
|
|
|
97
98
|
this.evmChainHandler = new _EvmChainHandler.EvmChainHandler(this);
|
|
98
99
|
this.logger = (0, _logger.logger)('chain-service');
|
|
99
100
|
}
|
|
101
|
+
get value() {
|
|
102
|
+
const ledgerGenericAllowChains = this.ledgerGenericAllowChainsSubject;
|
|
103
|
+
return {
|
|
104
|
+
get ledgerGenericAllowChains() {
|
|
105
|
+
return ledgerGenericAllowChains.value;
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
get observable() {
|
|
110
|
+
const ledgerGenericAllowChains = this.ledgerGenericAllowChainsSubject;
|
|
111
|
+
return {
|
|
112
|
+
get ledgerGenericAllowChains() {
|
|
113
|
+
return ledgerGenericAllowChains.asObservable();
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
100
117
|
subscribeSwapRefMap() {
|
|
101
118
|
return this.swapRefMapSubject;
|
|
102
119
|
}
|
|
@@ -624,6 +641,11 @@ class ChainService {
|
|
|
624
641
|
}
|
|
625
642
|
}
|
|
626
643
|
}
|
|
644
|
+
handleLatestLedgerGenericAllowChains(latestledgerGenericAllowChains) {
|
|
645
|
+
this.ledgerGenericAllowChainsSubject.next(latestledgerGenericAllowChains);
|
|
646
|
+
this.eventService.emit('ledger.ready', true);
|
|
647
|
+
this.logger.log('Finished updating latest ledger generic allow chains');
|
|
648
|
+
}
|
|
627
649
|
handleLatestData() {
|
|
628
650
|
this.fetchLatestAssetData().then(_ref9 => {
|
|
629
651
|
let [latestAssetInfo, latestAssetLogoMap] = _ref9;
|
|
@@ -641,6 +663,9 @@ class ChainService {
|
|
|
641
663
|
this.fetchLatestPriceIdsData().then(latestPriceIds => {
|
|
642
664
|
this.handleLatestPriceId(latestPriceIds);
|
|
643
665
|
}).catch(console.error);
|
|
666
|
+
this.fetchLatestLedgerGenericAllowChains().then(latestledgerGenericAllowChains => {
|
|
667
|
+
this.handleLatestLedgerGenericAllowChains(latestledgerGenericAllowChains);
|
|
668
|
+
}).catch(console.error);
|
|
644
669
|
}
|
|
645
670
|
async initApis() {
|
|
646
671
|
const chainInfoMap = this.getChainInfoMap();
|
|
@@ -898,6 +923,9 @@ class ChainService {
|
|
|
898
923
|
async fetchLatestAssetRef() {
|
|
899
924
|
return await Promise.all([(0, _utils2.fetchStaticData)('chain-assets/disabled-xcm-channels'), (0, _utils.fetchPatchData)('AssetRef.json')]);
|
|
900
925
|
}
|
|
926
|
+
async fetchLatestLedgerGenericAllowChains() {
|
|
927
|
+
return (await (0, _utils2.fetchStaticData)('chains/ledger-generic-allow-chains')) || [];
|
|
928
|
+
}
|
|
901
929
|
async initChains() {
|
|
902
930
|
const storedChainSettings = await this.dbService.getAllChainStore();
|
|
903
931
|
const defaultChainInfoMap = filterChainInfoMap(_chainList.ChainInfoMap, ignoredList);
|
|
@@ -1010,7 +1038,7 @@ class ChainService {
|
|
|
1010
1038
|
deprecatedChainMap[storedSlug] = duplicatedDefaultSlug;
|
|
1011
1039
|
deprecatedChains.push(storedSlug);
|
|
1012
1040
|
} else {
|
|
1013
|
-
var _storedChainInfo$bitc;
|
|
1041
|
+
var _storedChainInfo$bitc, _storedChainInfo$tonI;
|
|
1014
1042
|
mergedChainInfoMap[storedSlug] = {
|
|
1015
1043
|
slug: storedSlug,
|
|
1016
1044
|
name: storedChainInfo.name,
|
|
@@ -1019,6 +1047,7 @@ class ChainService {
|
|
|
1019
1047
|
evmInfo: storedChainInfo.evmInfo,
|
|
1020
1048
|
substrateInfo: storedChainInfo.substrateInfo,
|
|
1021
1049
|
bitcoinInfo: (_storedChainInfo$bitc = storedChainInfo.bitcoinInfo) !== null && _storedChainInfo$bitc !== void 0 ? _storedChainInfo$bitc : null,
|
|
1050
|
+
tonInfo: (_storedChainInfo$tonI = storedChainInfo.tonInfo) !== null && _storedChainInfo$tonI !== void 0 ? _storedChainInfo$tonI : null,
|
|
1022
1051
|
isTestnet: storedChainInfo.isTestnet,
|
|
1023
1052
|
chainStatus: storedChainInfo.chainStatus,
|
|
1024
1053
|
icon: storedChainInfo.icon,
|
|
@@ -1234,6 +1263,7 @@ class ChainService {
|
|
|
1234
1263
|
substrateInfo,
|
|
1235
1264
|
evmInfo,
|
|
1236
1265
|
bitcoinInfo: null,
|
|
1266
|
+
tonInfo: null,
|
|
1237
1267
|
isTestnet: false,
|
|
1238
1268
|
chainStatus: _types._ChainStatus.ACTIVE,
|
|
1239
1269
|
icon: '',
|
|
@@ -227,10 +227,10 @@ function _isEqualSmartContractAsset(asset1, asset2) {
|
|
|
227
227
|
return false;
|
|
228
228
|
}
|
|
229
229
|
function _isPureEvmChain(chainInfo) {
|
|
230
|
-
return chainInfo.evmInfo
|
|
230
|
+
return !!chainInfo.evmInfo && !chainInfo.substrateInfo;
|
|
231
231
|
}
|
|
232
232
|
function _isPureSubstrateChain(chainInfo) {
|
|
233
|
-
return chainInfo.evmInfo
|
|
233
|
+
return !chainInfo.evmInfo && !!chainInfo.substrateInfo;
|
|
234
234
|
}
|
|
235
235
|
function _getOriginChainOfAsset(assetSlug) {
|
|
236
236
|
if (assetSlug.startsWith(_types2._CUSTOM_PREFIX)) {
|
|
@@ -8,7 +8,7 @@ exports._UPDATED_RUNTIME_STAKING_GROUP = exports._STAKING_CHAIN_GROUP = exports.
|
|
|
8
8
|
// SPDX-License-Identifier: Apache-2.0
|
|
9
9
|
|
|
10
10
|
const _STAKING_CHAIN_GROUP = {
|
|
11
|
-
relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet', 'availTuringTest', 'avail_mainnet', 'vara_testnet'],
|
|
11
|
+
relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet', 'availTuringTest', 'avail_mainnet', 'vara_testnet', 'dentnet'],
|
|
12
12
|
para: ['moonbeam', 'moonriver', 'moonbase', 'turing', 'turingStaging', 'bifrost', 'bifrost_testnet', 'calamari_test', 'calamari', 'manta_network', 'polimec'],
|
|
13
13
|
astar: ['astar', 'shiden', 'shibuya'],
|
|
14
14
|
amplitude: ['amplitude', 'amplitude_test', 'kilt', 'kilt_peregrine', 'pendulum', 'krest_network'],
|
|
@@ -25,7 +25,7 @@ const _STAKING_CHAIN_GROUP = {
|
|
|
25
25
|
manta: ['manta_network']
|
|
26
26
|
};
|
|
27
27
|
exports._STAKING_CHAIN_GROUP = _STAKING_CHAIN_GROUP;
|
|
28
|
-
const _UPDATED_RUNTIME_STAKING_GROUP = ['kusama', 'polkadot', 'westend', 'availTuringTest', 'avail_mainnet'];
|
|
28
|
+
const _UPDATED_RUNTIME_STAKING_GROUP = ['kusama', 'polkadot', 'westend', 'availTuringTest', 'avail_mainnet', 'dentnet'];
|
|
29
29
|
exports._UPDATED_RUNTIME_STAKING_GROUP = _UPDATED_RUNTIME_STAKING_GROUP;
|
|
30
30
|
const MaxEraRewardPointsEras = 14;
|
|
31
31
|
|
|
@@ -308,7 +308,7 @@ class RelayNativeStakingPoolHandler extends _base.default {
|
|
|
308
308
|
const endEraForPoints = parseInt(activeEra) - 1;
|
|
309
309
|
const startEraForPoints = Math.max(endEraForPoints - maxEraRewardPointsEras + 1, 0);
|
|
310
310
|
let _eraStakersPromise;
|
|
311
|
-
if (
|
|
311
|
+
if (chainApi.api.query.staking.erasStakersOverview) {
|
|
312
312
|
// todo: review all relaychains later
|
|
313
313
|
_eraStakersPromise = chainApi.api.query.staking.erasStakersOverview.entries(parseInt(currentEra));
|
|
314
314
|
} else {
|
|
@@ -325,8 +325,9 @@ class RelayNativeStakingPoolHandler extends _base.default {
|
|
|
325
325
|
const waitingValidatorLedger = {};
|
|
326
326
|
if (_waitingValidatorLedger) {
|
|
327
327
|
waitingValidatorList.forEach((validator, i) => {
|
|
328
|
-
|
|
329
|
-
|
|
328
|
+
var _waitingValidatorLedg;
|
|
329
|
+
const validatorLedger = (_waitingValidatorLedg = _waitingValidatorLedger[i]) === null || _waitingValidatorLedg === void 0 ? void 0 : _waitingValidatorLedg.toPrimitive();
|
|
330
|
+
waitingValidatorLedger[validator] = new _bignumber.default((validatorLedger === null || validatorLedger === void 0 ? void 0 : validatorLedger.total) || 0).toFixed();
|
|
330
331
|
});
|
|
331
332
|
}
|
|
332
333
|
const unlimitedNominatorRewarded = chainApi.api.consts.staking.maxExposurePageSize !== undefined;
|
|
@@ -40,7 +40,7 @@ class EarningService {
|
|
|
40
40
|
yieldPositionSubject = new _rxjs.BehaviorSubject({});
|
|
41
41
|
yieldPositionListSubject = new _rxjs.BehaviorSubject([]); // virtual list of yieldPositionSubject with filter values
|
|
42
42
|
|
|
43
|
-
useOnlineCacheOnly =
|
|
43
|
+
useOnlineCacheOnly = false;
|
|
44
44
|
constructor(state) {
|
|
45
45
|
this.state = state;
|
|
46
46
|
this.dbService = state.dbService;
|
|
@@ -35,6 +35,7 @@ class EventService extends _eventemitter.default {
|
|
|
35
35
|
this.waitBuyTokenReady = this.generateWaitPromise('buy.tokens.ready');
|
|
36
36
|
this.waitBuyServiceReady = this.generateWaitPromise('buy.services.ready');
|
|
37
37
|
this.waitEarningReady = this.generateWaitPromise('earning.ready');
|
|
38
|
+
this.waitLedgerReady = this.generateWaitPromise('ledger.ready');
|
|
38
39
|
}
|
|
39
40
|
generateWaitPromise(eventType) {
|
|
40
41
|
return new Promise(resolve => {
|
|
@@ -29,7 +29,8 @@ class EvmRequestHandler {
|
|
|
29
29
|
switchNetworkRequest: {},
|
|
30
30
|
evmSignatureRequest: {},
|
|
31
31
|
evmSendTransactionRequest: {},
|
|
32
|
-
evmWatchTransactionRequest: {}
|
|
32
|
+
evmWatchTransactionRequest: {},
|
|
33
|
+
errorConnectNetwork: {}
|
|
33
34
|
});
|
|
34
35
|
confirmationsPromiseMap = {};
|
|
35
36
|
constructor(requestService) {
|