@subwallet/extension-base 1.3.45-1 → 1.3.46-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 +5 -0
- package/background/KoniTypes.js +5 -0
- package/background/types.d.ts +2 -0
- package/cjs/background/KoniTypes.js +7 -1
- package/cjs/core/logic-validation/request.js +55 -28
- package/cjs/core/utils.js +22 -0
- package/cjs/koni/background/handlers/Extension.js +84 -61
- package/cjs/koni/background/handlers/Tabs.js +11 -3
- package/cjs/packageInfo.js +1 -1
- package/cjs/page/evm/index.js +64 -105
- package/cjs/page/index.js +5 -3
- package/cjs/page/substrate/Accounts.js +2 -1
- package/cjs/services/balance-service/helpers/subscribe/index.js +3 -76
- package/cjs/services/chain-service/index.js +3 -0
- package/cjs/services/chain-service/utils/index.js +31 -1
- package/cjs/services/earning-service/constants/chains.js +2 -1
- package/cjs/services/earning-service/handlers/native-staking/base.js +3 -0
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +9 -2
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +6 -3
- package/cjs/services/earning-service/service.js +39 -17
- package/cjs/services/keyring-service/context/handlers/Json.js +2 -1
- package/cjs/services/keyring-service/context/handlers/Ledger.js +7 -2
- package/cjs/services/request-service/handler/AuthRequestHandler.js +30 -6
- package/cjs/types/account/info/keyring.js +1 -0
- package/cjs/utils/account/analyze.js +5 -2
- package/cjs/utils/account/common.js +93 -2
- package/cjs/utils/account/transform.js +10 -0
- package/cjs/utils/asset.js +9 -2
- package/cjs/utils/staticData/index.js +7 -2
- package/core/logic-validation/request.js +31 -4
- package/core/types.d.ts +3 -2
- package/core/utils.js +24 -2
- package/koni/background/handlers/Extension.js +31 -8
- package/koni/background/handlers/Tabs.js +11 -4
- package/package.json +7 -6
- package/packageInfo.js +1 -1
- package/page/evm/index.d.ts +9 -18
- package/page/evm/index.js +62 -101
- package/page/index.js +5 -3
- package/page/substrate/Accounts.js +2 -1
- package/services/balance-service/helpers/subscribe/index.d.ts +1 -11
- package/services/balance-service/helpers/subscribe/index.js +3 -74
- package/services/chain-service/index.d.ts +1 -0
- package/services/chain-service/index.js +3 -0
- package/services/chain-service/utils/index.d.ts +10 -2
- package/services/chain-service/utils/index.js +26 -2
- package/services/earning-service/constants/chains.d.ts +1 -0
- package/services/earning-service/constants/chains.js +2 -1
- package/services/earning-service/handlers/native-staking/base.d.ts +1 -0
- package/services/earning-service/handlers/native-staking/base.js +3 -0
- package/services/earning-service/handlers/native-staking/relay-chain.js +9 -2
- package/services/earning-service/handlers/nomination-pool/index.d.ts +1 -0
- package/services/earning-service/handlers/nomination-pool/index.js +6 -3
- package/services/earning-service/service.d.ts +2 -0
- package/services/earning-service/service.js +42 -20
- package/services/keyring-service/context/handlers/Json.js +2 -1
- package/services/keyring-service/context/handlers/Ledger.js +7 -2
- package/services/request-service/handler/AuthRequestHandler.d.ts +1 -0
- package/services/request-service/handler/AuthRequestHandler.js +30 -6
- package/services/request-service/types.d.ts +1 -0
- package/types/account/action/subscribe.d.ts +3 -0
- package/types/account/info/keyring.d.ts +3 -0
- package/types/account/info/keyring.js +1 -0
- package/types/balance/transfer.d.ts +1 -0
- package/utils/account/analyze.js +5 -2
- package/utils/account/common.d.ts +13 -1
- package/utils/account/common.js +91 -2
- package/utils/account/transform.js +10 -0
- package/utils/asset.d.ts +2 -1
- package/utils/asset.js +7 -1
- package/utils/staticData/assetHubStaking.json +1 -0
- package/utils/staticData/index.d.ts +4 -1
- package/utils/staticData/index.js +5 -1
package/cjs/page/evm/index.js
CHANGED
|
@@ -4,124 +4,51 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.
|
|
7
|
+
exports.createSubWalletEvmProvider = createSubWalletEvmProvider;
|
|
8
8
|
var _safeEventEmitter = _interopRequireDefault(require("@metamask/safe-event-emitter"));
|
|
9
9
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
10
10
|
// SPDX-License-Identifier: Apache-2.0
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
get connected() {
|
|
24
|
-
return this._connected;
|
|
25
|
-
}
|
|
26
|
-
isConnected() {
|
|
27
|
-
return this._connected;
|
|
28
|
-
}
|
|
29
|
-
subscribeExtensionEvents() {
|
|
12
|
+
function createSubWalletEvmProvider(sendMessage, version) {
|
|
13
|
+
const emitter = new _safeEventEmitter.default();
|
|
14
|
+
let connected = true;
|
|
15
|
+
let subscribeFlag = false;
|
|
16
|
+
const provider = Object.assign(emitter, {
|
|
17
|
+
isSubWallet: true,
|
|
18
|
+
isMetaMask: false,
|
|
19
|
+
version
|
|
20
|
+
});
|
|
21
|
+
function subscribeExtensionEvents() {
|
|
30
22
|
if (subscribeFlag) {
|
|
31
23
|
return;
|
|
32
24
|
}
|
|
33
|
-
|
|
25
|
+
sendMessage('evm(events.subscribe)', null, _ref => {
|
|
34
26
|
let {
|
|
35
27
|
payload,
|
|
36
28
|
type
|
|
37
29
|
} = _ref;
|
|
38
30
|
if (['connect', 'disconnect', 'accountsChanged', 'chainChanged', 'message', 'data', 'reconnect', 'error'].includes(type)) {
|
|
39
31
|
if (type === 'connect') {
|
|
40
|
-
|
|
32
|
+
connected = true;
|
|
41
33
|
} else if (type === 'disconnect') {
|
|
42
|
-
|
|
34
|
+
connected = false;
|
|
43
35
|
}
|
|
44
36
|
const finalType = type === 'data' ? 'message' : type;
|
|
45
|
-
|
|
46
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
47
|
-
this.emit(finalType, payload);
|
|
37
|
+
emitter.emit(finalType, payload);
|
|
48
38
|
} else {
|
|
49
39
|
console.warn('Can not handle event', type, payload);
|
|
50
40
|
}
|
|
51
|
-
}).then(
|
|
41
|
+
}).then(() => {
|
|
52
42
|
subscribeFlag = true;
|
|
53
43
|
}).catch(() => {
|
|
54
44
|
subscribeFlag = false;
|
|
55
45
|
});
|
|
56
|
-
subscribeFlag = true;
|
|
57
|
-
}
|
|
58
|
-
async enable() {
|
|
59
|
-
return this.request({
|
|
60
|
-
method: 'eth_requestAccounts'
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
on(eventName, listener) {
|
|
64
|
-
this.subscribeExtensionEvents();
|
|
65
|
-
super.on(eventName, listener);
|
|
66
|
-
return this;
|
|
67
46
|
}
|
|
68
|
-
|
|
69
|
-
this.subscribeExtensionEvents();
|
|
70
|
-
super.once(eventName, listener);
|
|
71
|
-
return this;
|
|
72
|
-
}
|
|
73
|
-
request(_ref2) {
|
|
74
|
-
let {
|
|
75
|
-
method,
|
|
76
|
-
params
|
|
77
|
-
} = _ref2;
|
|
78
|
-
// if (!this._isEnable) {
|
|
79
|
-
// if (method === 'eth_accounts') {
|
|
80
|
-
// return this.request<T>({ method: 'eth_requestAccounts' });
|
|
81
|
-
// }
|
|
82
|
-
// }
|
|
83
|
-
|
|
84
|
-
// Subscribe events
|
|
85
|
-
switch (method) {
|
|
86
|
-
case 'eth_requestAccounts':
|
|
87
|
-
return new Promise((resolve, reject) => {
|
|
88
|
-
const origin = document.title !== '' ? document.title : window.location.hostname;
|
|
89
|
-
this.sendMessage('pub(authorize.tabV2)', {
|
|
90
|
-
origin,
|
|
91
|
-
accountAuthTypes: ['evm']
|
|
92
|
-
}).then(() => {
|
|
93
|
-
// Return account list
|
|
94
|
-
this.request({
|
|
95
|
-
method: 'eth_accounts'
|
|
96
|
-
}).then(accounts => {
|
|
97
|
-
// @ts-ignore
|
|
98
|
-
resolve(accounts);
|
|
99
|
-
}).catch(e => {
|
|
100
|
-
reject(e);
|
|
101
|
-
});
|
|
102
|
-
}).catch(e => {
|
|
103
|
-
reject(e);
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
default:
|
|
107
|
-
return new Promise((resolve, reject) => {
|
|
108
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
109
|
-
this.sendMessage('evm(request)', {
|
|
110
|
-
params,
|
|
111
|
-
method
|
|
112
|
-
}).then(result => {
|
|
113
|
-
resolve(result);
|
|
114
|
-
}).catch(e => {
|
|
115
|
-
reject(e);
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
_sendSync(payload) {
|
|
47
|
+
const _sendSync = payload => {
|
|
121
48
|
let result;
|
|
122
49
|
switch (payload.method) {
|
|
123
50
|
case 'net_version':
|
|
124
|
-
result =
|
|
51
|
+
result = version ? `SubWallet v${version}` : null;
|
|
125
52
|
break;
|
|
126
53
|
default:
|
|
127
54
|
throw new Error(`Not support ${payload.method}`);
|
|
@@ -131,29 +58,61 @@ class SubWalletEvmProvider extends _safeEventEmitter.default {
|
|
|
131
58
|
jsonrpc: payload.jsonrpc,
|
|
132
59
|
result
|
|
133
60
|
};
|
|
134
|
-
}
|
|
135
|
-
|
|
61
|
+
};
|
|
62
|
+
provider.isConnected = () => connected;
|
|
63
|
+
provider.request = arg => {
|
|
64
|
+
if (arg.method === 'eth_requestAccounts') {
|
|
65
|
+
const origin = document.title || window.location.hostname;
|
|
66
|
+
return sendMessage('pub(authorize.tabV2)', {
|
|
67
|
+
origin,
|
|
68
|
+
accountAuthTypes: ['evm']
|
|
69
|
+
}).then(() => provider.request({
|
|
70
|
+
method: 'eth_accounts'
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
return sendMessage('evm(request)', arg);
|
|
74
|
+
};
|
|
75
|
+
provider.send = (methodOrPayload, callbackOrArgs) => {
|
|
136
76
|
if (typeof methodOrPayload === 'string' && (!callbackOrArgs || Array.isArray(callbackOrArgs))) {
|
|
137
|
-
return
|
|
77
|
+
return provider.request({
|
|
138
78
|
method: methodOrPayload,
|
|
139
79
|
params: callbackOrArgs
|
|
140
80
|
});
|
|
141
|
-
} else if (
|
|
142
|
-
return
|
|
143
|
-
callbackOrArgs(
|
|
81
|
+
} else if (typeof methodOrPayload === 'object' && typeof callbackOrArgs === 'function') {
|
|
82
|
+
return provider.request(methodOrPayload).then(result => {
|
|
83
|
+
callbackOrArgs(null, result);
|
|
144
84
|
});
|
|
145
85
|
}
|
|
146
|
-
return
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
86
|
+
return _sendSync(methodOrPayload);
|
|
87
|
+
};
|
|
88
|
+
provider.enable = async () => {
|
|
89
|
+
const accounts = await provider.request({
|
|
90
|
+
method: 'eth_requestAccounts'
|
|
91
|
+
});
|
|
92
|
+
connected = accounts.length > 0;
|
|
93
|
+
return accounts;
|
|
94
|
+
};
|
|
95
|
+
provider.sendAsync = (payload, callback) => {
|
|
96
|
+
provider.request(payload).then(result => {
|
|
151
97
|
callback(null, {
|
|
98
|
+
id: payload.id,
|
|
99
|
+
jsonrpc: payload.jsonrpc,
|
|
100
|
+
// @ts-ignore
|
|
152
101
|
result
|
|
153
102
|
});
|
|
154
103
|
}).catch(e => {
|
|
155
104
|
callback(e);
|
|
156
105
|
});
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
|
|
106
|
+
};
|
|
107
|
+
provider.on = (eventName, listener) => {
|
|
108
|
+
subscribeExtensionEvents();
|
|
109
|
+
_safeEventEmitter.default.prototype.on.call(emitter, eventName, listener);
|
|
110
|
+
return provider;
|
|
111
|
+
};
|
|
112
|
+
provider.once = (eventName, listener) => {
|
|
113
|
+
subscribeExtensionEvents();
|
|
114
|
+
_safeEventEmitter.default.prototype.once.call(emitter, eventName, listener);
|
|
115
|
+
return provider;
|
|
116
|
+
};
|
|
117
|
+
return provider;
|
|
118
|
+
}
|
package/cjs/page/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var _ProviderError = require("@subwallet/extension-base/background/errors/Provid
|
|
|
14
14
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
15
15
|
var _bitcoin = _interopRequireDefault(require("@subwallet/extension-base/page/bitcoin"));
|
|
16
16
|
var _cardano = _interopRequireDefault(require("@subwallet/extension-base/page/cardano"));
|
|
17
|
-
var _evm =
|
|
17
|
+
var _evm = require("@subwallet/extension-base/page/evm");
|
|
18
18
|
var _substrate = _interopRequireDefault(require("@subwallet/extension-base/page/substrate"));
|
|
19
19
|
var _defaults = require("../defaults");
|
|
20
20
|
var _getId = require("../utils/getId");
|
|
@@ -48,9 +48,11 @@ function sendMessage(message, request, subscriber) {
|
|
|
48
48
|
|
|
49
49
|
async function enable(origin, opt) {
|
|
50
50
|
const accountAuthTypes = (opt === null || opt === void 0 ? void 0 : opt.accountAuthType) === 'both' ? ['substrate', 'evm'] : [(opt === null || opt === void 0 ? void 0 : opt.accountAuthType) || 'substrate'];
|
|
51
|
+
const canConnectSubstrateEcdsa = accountAuthTypes.includes('evm');
|
|
51
52
|
await sendMessage('pub(authorize.tabV2)', {
|
|
52
53
|
origin,
|
|
53
|
-
accountAuthTypes
|
|
54
|
+
accountAuthTypes,
|
|
55
|
+
canConnectSubstrateEcdsa
|
|
54
56
|
});
|
|
55
57
|
return new _substrate.default(sendMessage);
|
|
56
58
|
}
|
|
@@ -74,7 +76,7 @@ function handleResponse(data) {
|
|
|
74
76
|
}
|
|
75
77
|
}
|
|
76
78
|
function initEvmProvider(version) {
|
|
77
|
-
return
|
|
79
|
+
return (0, _evm.createSubWalletEvmProvider)(sendMessage, version);
|
|
78
80
|
}
|
|
79
81
|
function initCardanoProvider() {
|
|
80
82
|
return new _cardano.default(sendMessage);
|
|
@@ -1,94 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
|
-
exports.getAccountJsonByAddress = void 0;
|
|
8
6
|
exports.subscribeBalance = subscribeBalance;
|
|
9
7
|
var _types = require("@subwallet/chain-list/types");
|
|
10
8
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
11
|
-
var
|
|
9
|
+
var _bitcoin = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/bitcoin");
|
|
12
10
|
var _cardano = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano");
|
|
13
11
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
14
12
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
15
|
-
var _uiKeyring = _interopRequireDefault(require("@subwallet/ui-keyring"));
|
|
16
13
|
var _ton = require("./ton/ton");
|
|
17
14
|
var _evm = require("./evm");
|
|
18
15
|
var _substrate = require("./substrate");
|
|
19
16
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
20
17
|
// SPDX-License-Identifier: Apache-2.0
|
|
21
18
|
|
|
22
|
-
/**
|
|
23
|
-
* @function getAccountJsonByAddress
|
|
24
|
-
* @desc Get account info by address
|
|
25
|
-
* <p>
|
|
26
|
-
* Note: Use on the background only
|
|
27
|
-
* </p>
|
|
28
|
-
* @param {string} address - Address
|
|
29
|
-
* @returns {AccountJson|null} - Account info or null if not found
|
|
30
|
-
*/
|
|
31
|
-
const getAccountJsonByAddress = address => {
|
|
32
|
-
try {
|
|
33
|
-
const pair = _uiKeyring.default.getPair(address);
|
|
34
|
-
if (pair) {
|
|
35
|
-
return (0, _utils2.pairToAccount)(pair);
|
|
36
|
-
} else {
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
} catch (e) {
|
|
40
|
-
console.warn(e);
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
/** Filter addresses to subscribe by chain info */
|
|
46
|
-
exports.getAccountJsonByAddress = getAccountJsonByAddress;
|
|
47
|
-
const filterAddress = (addresses, chainInfo) => {
|
|
48
|
-
const {
|
|
49
|
-
_bitcoin,
|
|
50
|
-
bitcoin,
|
|
51
|
-
cardano,
|
|
52
|
-
evm,
|
|
53
|
-
substrate,
|
|
54
|
-
ton
|
|
55
|
-
} = (0, _utils2.getAddressesByChainTypeMap)(addresses, chainInfo);
|
|
56
|
-
if ((0, _utils._isChainEvmCompatible)(chainInfo)) {
|
|
57
|
-
return [evm, [bitcoin, substrate, ton, cardano, _bitcoin].flat()];
|
|
58
|
-
} else if ((0, _utils._isChainBitcoinCompatible)(chainInfo)) {
|
|
59
|
-
return [bitcoin, [evm, substrate, ton, cardano, _bitcoin].flat()];
|
|
60
|
-
} else if ((0, _utils._isChainTonCompatible)(chainInfo)) {
|
|
61
|
-
return [ton, [bitcoin, evm, substrate, cardano, _bitcoin].flat()];
|
|
62
|
-
} else if ((0, _utils._isChainCardanoCompatible)(chainInfo)) {
|
|
63
|
-
return [cardano, [bitcoin, evm, substrate, ton, _bitcoin].flat()];
|
|
64
|
-
} else {
|
|
65
|
-
const fetchList = [];
|
|
66
|
-
const unfetchList = [];
|
|
67
|
-
substrate.forEach(address => {
|
|
68
|
-
const account = getAccountJsonByAddress(address);
|
|
69
|
-
if (account) {
|
|
70
|
-
if (account.isHardware) {
|
|
71
|
-
if (account.isGeneric) {
|
|
72
|
-
fetchList.push(address);
|
|
73
|
-
} else {
|
|
74
|
-
const availGen = account.availableGenesisHashes || [];
|
|
75
|
-
const gen = (0, _utils._getSubstrateGenesisHash)(chainInfo);
|
|
76
|
-
if (availGen.includes(gen)) {
|
|
77
|
-
fetchList.push(address);
|
|
78
|
-
} else {
|
|
79
|
-
unfetchList.push(address);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
} else {
|
|
83
|
-
fetchList.push(address);
|
|
84
|
-
}
|
|
85
|
-
} else {
|
|
86
|
-
fetchList.push(address);
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
return [fetchList, [unfetchList, bitcoin, evm, ton, cardano, _bitcoin].flat()];
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
19
|
const handleUnsupportedOrPendingAddresses = (addresses, chainSlug, chainAssetMap, state, callback) => {
|
|
93
20
|
const tokens = (0, _utils2.filterAssetsByChainAndType)(chainAssetMap, chainSlug, [_types._AssetType.NATIVE, _types._AssetType.ERC20, _types._AssetType.PSP22, _types._AssetType.LOCAL, _types._AssetType.GRC20, _types._AssetType.VFT, _types._AssetType.TEP74, _types._AssetType.CIP26]);
|
|
94
21
|
const now = new Date().getTime();
|
|
@@ -120,7 +47,7 @@ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoM
|
|
|
120
47
|
// Looping over each chain
|
|
121
48
|
const unsubList = Object.values(chainInfoMap).map(async chainInfo => {
|
|
122
49
|
const chainSlug = chainInfo.slug;
|
|
123
|
-
const [useAddresses, notSupportAddresses] =
|
|
50
|
+
const [useAddresses, notSupportAddresses] = (0, _utils2.filterAddressByChainInfo)(addresses, chainInfo);
|
|
124
51
|
if (notSupportAddresses.length) {
|
|
125
52
|
handleUnsupportedOrPendingAddresses(notSupportAddresses, chainSlug, chainAssetMap, _KoniTypes.APIItemState.NOT_SUPPORT, callback);
|
|
126
53
|
}
|
|
@@ -156,7 +83,7 @@ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoM
|
|
|
156
83
|
}
|
|
157
84
|
const bitcoinApi = bitcoinApiMap[chainSlug];
|
|
158
85
|
if ((0, _utils._isPureBitcoinChain)(chainInfo)) {
|
|
159
|
-
return (0,
|
|
86
|
+
return (0, _bitcoin.subscribeBitcoinBalance)({
|
|
160
87
|
addresses: useAddresses,
|
|
161
88
|
assetMap: chainAssetMap,
|
|
162
89
|
bitcoinApi,
|
|
@@ -1043,6 +1043,9 @@ class ChainService {
|
|
|
1043
1043
|
async fetchLatestSufficientChains() {
|
|
1044
1044
|
return (await (0, _utils2.fetchStaticData)('chains/supported-sufficient-chains')) || [];
|
|
1045
1045
|
}
|
|
1046
|
+
async fetchAhMapChain() {
|
|
1047
|
+
return await (0, _utils2.fetchStaticData)('asset-hub-staking-map');
|
|
1048
|
+
}
|
|
1046
1049
|
async initChains() {
|
|
1047
1050
|
const storedChainSettings = await this.dbService.getAllChainStore();
|
|
1048
1051
|
const defaultChainInfoMap = filterChainInfoMap(_chainList.ChainInfoMap, ignoredList);
|
|
@@ -28,6 +28,8 @@ var _exportNames = {
|
|
|
28
28
|
_isBridgedToken: true,
|
|
29
29
|
_getTokenMinAmount: true,
|
|
30
30
|
_isChainEvmCompatible: true,
|
|
31
|
+
_isChainCompatibleLedgerEvm: true,
|
|
32
|
+
_isSubstrateEvmCompatibleChain: true,
|
|
31
33
|
_isChainBitcoinCompatible: true,
|
|
32
34
|
_isChainTonCompatible: true,
|
|
33
35
|
_isChainCardanoCompatible: true,
|
|
@@ -56,6 +58,7 @@ var _exportNames = {
|
|
|
56
58
|
_getTokenTypesSupportedByChain: true,
|
|
57
59
|
_getChainNativeTokenBasicInfo: true,
|
|
58
60
|
_getChainNativeTokenSlug: true,
|
|
61
|
+
_getChainSubstrateTokenSymbol: true,
|
|
59
62
|
_isLocalToken: true,
|
|
60
63
|
_isTokenEvmSmartContract: true,
|
|
61
64
|
_isTokenTonSmartContract: true,
|
|
@@ -120,6 +123,7 @@ exports._getChainName = _getChainName;
|
|
|
120
123
|
exports._getChainNativeTokenBasicInfo = _getChainNativeTokenBasicInfo;
|
|
121
124
|
exports._getChainNativeTokenSlug = _getChainNativeTokenSlug;
|
|
122
125
|
exports._getChainSubstrateAddressPrefix = _getChainSubstrateAddressPrefix;
|
|
126
|
+
exports._getChainSubstrateTokenSymbol = _getChainSubstrateTokenSymbol;
|
|
123
127
|
exports._getContractAddressOfToken = _getContractAddressOfToken;
|
|
124
128
|
exports._getCrowdloanUrlFromChain = _getCrowdloanUrlFromChain;
|
|
125
129
|
exports._getCustomAssets = _getCustomAssets;
|
|
@@ -152,6 +156,7 @@ exports._isBridgedToken = _isBridgedToken;
|
|
|
152
156
|
exports._isCIP26Token = _isCIP26Token;
|
|
153
157
|
exports._isChainBitcoinCompatible = _isChainBitcoinCompatible;
|
|
154
158
|
exports._isChainCardanoCompatible = _isChainCardanoCompatible;
|
|
159
|
+
exports._isChainCompatibleLedgerEvm = _isChainCompatibleLedgerEvm;
|
|
155
160
|
exports._isChainEnabled = _isChainEnabled;
|
|
156
161
|
exports._isChainEvmCompatible = _isChainEvmCompatible;
|
|
157
162
|
exports._isChainInfoCompatibleWithAccountInfo = void 0;
|
|
@@ -184,6 +189,7 @@ exports._isPureSubstrateChain = _isPureSubstrateChain;
|
|
|
184
189
|
exports._isPureTonChain = _isPureTonChain;
|
|
185
190
|
exports._isRelayChain = _isRelayChain;
|
|
186
191
|
exports._isSmartContractToken = _isSmartContractToken;
|
|
192
|
+
exports._isSubstrateEvmCompatibleChain = _isSubstrateEvmCompatibleChain;
|
|
187
193
|
exports._isSubstrateParaChain = _isSubstrateParaChain;
|
|
188
194
|
exports._isSubstrateRelayChain = _isSubstrateRelayChain;
|
|
189
195
|
exports._isSupportOrdinal = void 0;
|
|
@@ -358,6 +364,12 @@ function _getTokenMinAmount(tokenInfo) {
|
|
|
358
364
|
function _isChainEvmCompatible(chainInfo) {
|
|
359
365
|
return !!chainInfo.evmInfo;
|
|
360
366
|
}
|
|
367
|
+
function _isChainCompatibleLedgerEvm(chainInfo) {
|
|
368
|
+
return !!chainInfo.evmInfo && chainInfo.evmInfo.evmChainId > 0;
|
|
369
|
+
}
|
|
370
|
+
function _isSubstrateEvmCompatibleChain(chainInfo) {
|
|
371
|
+
return !!chainInfo.evmInfo && !!chainInfo.substrateInfo;
|
|
372
|
+
}
|
|
361
373
|
function _isChainBitcoinCompatible(chainInfo) {
|
|
362
374
|
return !!chainInfo.bitcoinInfo;
|
|
363
375
|
}
|
|
@@ -529,6 +541,13 @@ function _getChainNativeTokenSlug(chainInfo) {
|
|
|
529
541
|
}
|
|
530
542
|
return `${chainInfo.slug}-${_types._AssetType.NATIVE}-${_getChainNativeTokenBasicInfo(chainInfo).symbol}`;
|
|
531
543
|
}
|
|
544
|
+
function _getChainSubstrateTokenSymbol(chainInfo) {
|
|
545
|
+
if (chainInfo.substrateInfo) {
|
|
546
|
+
return chainInfo.substrateInfo.symbol || '';
|
|
547
|
+
} else {
|
|
548
|
+
return '';
|
|
549
|
+
}
|
|
550
|
+
}
|
|
532
551
|
function _isLocalToken(tokenInfo) {
|
|
533
552
|
return tokenInfo.assetType === _types._AssetType.LOCAL;
|
|
534
553
|
}
|
|
@@ -816,11 +835,22 @@ const _chainInfoToChainType = chainInfo => {
|
|
|
816
835
|
return _types3.AccountChainType.SUBSTRATE;
|
|
817
836
|
};
|
|
818
837
|
exports._chainInfoToChainType = _chainInfoToChainType;
|
|
819
|
-
const _isChainInfoCompatibleWithAccountInfo = (chainInfo,
|
|
838
|
+
const _isChainInfoCompatibleWithAccountInfo = (chainInfo, accountInfo) => {
|
|
839
|
+
const {
|
|
840
|
+
chainType: accountChainType,
|
|
841
|
+
signMode: accountSignMode,
|
|
842
|
+
type: accountType
|
|
843
|
+
} = accountInfo;
|
|
820
844
|
if (accountChainType === _types3.AccountChainType.SUBSTRATE) {
|
|
821
845
|
return _isPureSubstrateChain(chainInfo) && _types4.SubstrateKeypairTypes.includes(accountType);
|
|
822
846
|
}
|
|
823
847
|
if (accountChainType === _types3.AccountChainType.ETHEREUM) {
|
|
848
|
+
if (accountSignMode === _types3.AccountSignMode.ECDSA_SUBSTRATE_LEDGER) {
|
|
849
|
+
return _isSubstrateEvmCompatibleChain(chainInfo) && _types4.EthereumKeypairTypes.includes(accountType);
|
|
850
|
+
}
|
|
851
|
+
if (accountSignMode === _types3.AccountSignMode.GENERIC_LEDGER) {
|
|
852
|
+
return _isChainCompatibleLedgerEvm(chainInfo) && _types4.EthereumKeypairTypes.includes(accountType);
|
|
853
|
+
}
|
|
824
854
|
return _isChainEvmCompatible(chainInfo) && _types4.EthereumKeypairTypes.includes(accountType);
|
|
825
855
|
}
|
|
826
856
|
if (accountChainType === _types3.AccountChainType.TON) {
|
|
@@ -8,7 +8,8 @@ exports._STAKING_CHAIN_GROUP = exports.TON_CHAINS = exports.ST_LIQUID_TOKEN_ABI
|
|
|
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', 'dentnet', 'cere'],
|
|
11
|
+
relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet', 'availTuringTest', 'avail_mainnet', 'vara_testnet', 'dentnet', 'cere', 'statemine', 'statemint', 'westend_assethub'],
|
|
12
|
+
assetHub: ['statemine', 'statemint', 'westend_assethub'],
|
|
12
13
|
para: ['moonbeam', 'moonriver', 'moonbase', 'turing', 'turingStaging', 'bifrost', 'bifrost_testnet', 'calamari_test', 'calamari', 'manta_network', 'polimec'],
|
|
13
14
|
astar: ['astar', 'shiden', 'shibuya'],
|
|
14
15
|
amplitude: ['amplitude', 'amplitude_test', 'kilt', 'kilt_peregrine', 'pendulum', 'krest_network'],
|
|
@@ -23,6 +23,9 @@ class BaseNativeStakingPoolHandler extends _base.default {
|
|
|
23
23
|
withdraw: true,
|
|
24
24
|
claimReward: false
|
|
25
25
|
};
|
|
26
|
+
static generateSlug(symbol, chain) {
|
|
27
|
+
return `${symbol}___native_staking___${chain}`;
|
|
28
|
+
}
|
|
26
29
|
constructor(state, chain) {
|
|
27
30
|
super(state, chain);
|
|
28
31
|
const _chainAsset = this.nativeToken;
|
|
@@ -659,8 +659,15 @@ class RelayNativeStakingPoolHandler extends _base.default {
|
|
|
659
659
|
async handleYieldWithdraw(address, unstakingInfo) {
|
|
660
660
|
const chainApi = await this.substrateApi.isReady;
|
|
661
661
|
if (chainApi.api.tx.staking.withdrawUnbonded.meta.args.length === 1) {
|
|
662
|
-
|
|
663
|
-
|
|
662
|
+
let slashingSpanCount;
|
|
663
|
+
if (chainApi.api.query.staking.nominatorSlashInEra) {
|
|
664
|
+
const currentEra = await chainApi.api.query.staking.currentEra();
|
|
665
|
+
const slashingSpans = (await chainApi.api.query.staking.nominatorSlashInEra(currentEra.toPrimitive(), address)).toPrimitive();
|
|
666
|
+
slashingSpanCount = slashingSpans !== null ? slashingSpans.toString() : '0';
|
|
667
|
+
} else {
|
|
668
|
+
const _slashingSpans = (await chainApi.api.query.staking.slashingSpans(address)).toHuman();
|
|
669
|
+
slashingSpanCount = _slashingSpans !== null ? _slashingSpans.spanIndex : '0';
|
|
670
|
+
}
|
|
664
671
|
return chainApi.api.tx.staking.withdrawUnbonded(slashingSpanCount);
|
|
665
672
|
} else {
|
|
666
673
|
// @ts-ignore
|
|
@@ -29,6 +29,9 @@ class NominationPoolHandler extends _base.default {
|
|
|
29
29
|
withdraw: true,
|
|
30
30
|
claimReward: true
|
|
31
31
|
};
|
|
32
|
+
static generateSlug(symbol, chain) {
|
|
33
|
+
return `${symbol}___nomination_pool___${chain}`;
|
|
34
|
+
}
|
|
32
35
|
constructor(state, chain) {
|
|
33
36
|
super(state, chain);
|
|
34
37
|
const _chainAsset = this.nativeToken;
|
|
@@ -87,7 +90,8 @@ class NominationPoolHandler extends _base.default {
|
|
|
87
90
|
const maxUnlockingChunks = substrateApi.api.consts.staking.maxUnlockingChunks.toString();
|
|
88
91
|
const unlockingEras = substrateApi.api.consts.staking.bondingDuration.toString();
|
|
89
92
|
const maxSupportedEras = substrateApi.api.consts.staking.historyDepth.toString();
|
|
90
|
-
const
|
|
93
|
+
const eraInHours = _constants._STAKING_ERA_LENGTH_MAP[chainInfo.slug] || _constants._STAKING_ERA_LENGTH_MAP.default; // in hours
|
|
94
|
+
const erasPerDay = 24 / eraInHours; // Can be exactly calculate from epochDuration, blockTime, sessionsPerEra
|
|
91
95
|
|
|
92
96
|
const supportedDays = (0, _utils.getSupportedDaysByHistoryDepth)(erasPerDay, parseInt(maxSupportedEras), parseInt(currentEra) / erasPerDay);
|
|
93
97
|
const startEra = parseInt(currentEra) - supportedDays * erasPerDay;
|
|
@@ -569,8 +573,7 @@ class NominationPoolHandler extends _base.default {
|
|
|
569
573
|
async handleYieldWithdraw(address, unstakingInfo) {
|
|
570
574
|
const chainApi = await this.substrateApi.isReady;
|
|
571
575
|
if (chainApi.api.tx.nominationPools.withdrawUnbonded.meta.args.length === 2) {
|
|
572
|
-
const
|
|
573
|
-
const slashingSpanCount = _slashingSpans !== null ? _slashingSpans.spanIndex : '0';
|
|
576
|
+
const slashingSpanCount = await chainApi.api.call.nominationPoolsApi.memberPendingSlash(address);
|
|
574
577
|
return chainApi.api.tx.nominationPools.withdrawUnbonded({
|
|
575
578
|
Id: address
|
|
576
579
|
}, slashingSpanCount);
|