@subwallet/extension-base 1.3.62-0 → 1.3.64-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/koni/api/staking/bonding/utils.js +6 -0
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/transfer/smart-contract.js +14 -10
- package/cjs/services/balance-service/transfer/xcm/acrossBridge/index.js +0 -6
- package/cjs/services/balance-service/transfer/xcm/utils.js +2 -0
- package/cjs/services/chain-service/constants.js +16 -0
- package/cjs/services/chain-service/utils/index.js +24 -4
- package/cjs/services/chain-service/utils/patch.js +1 -1
- package/cjs/services/earning-service/constants/chains.js +2 -1
- package/cjs/services/earning-service/handlers/native-staking/base-para.js +6 -3
- package/cjs/services/earning-service/handlers/native-staking/energy.js +60 -6
- package/cjs/services/earning-service/handlers/native-staking/tanssi.js +496 -0
- package/cjs/services/earning-service/service.js +4 -0
- package/cjs/services/earning-service/utils/index.js +2 -0
- package/cjs/services/migration-service/scripts/MigrateTransactionHistoryBySymbol20251027.js +51 -0
- package/cjs/services/migration-service/scripts/databases/MigrateAssetSetting20251027.js +37 -0
- package/cjs/services/migration-service/scripts/index.js +5 -1
- package/cjs/services/swap-service/handler/base-handler.js +4 -1
- package/cjs/services/swap-service/handler/chainflip-handler.js +1 -17
- package/cjs/services/swap-service/handler/optimex-handler.js +421 -0
- package/cjs/services/swap-service/handler/simpleswap-handler.js +4 -2
- package/cjs/services/swap-service/index.js +38 -140
- package/cjs/services/swap-service/utils.js +16 -157
- package/cjs/services/transaction-service/helpers/index.js +2 -1
- package/cjs/types/service-base.js +0 -1
- package/cjs/types/swap/index.js +5 -8
- package/cjs/utils/account/common.js +1 -2
- package/koni/api/staking/bonding/utils.d.ts +1 -0
- package/koni/api/staking/bonding/utils.js +5 -0
- package/package.json +26 -6
- package/packageInfo.js +1 -1
- package/services/balance-service/transfer/smart-contract.d.ts +3 -2
- package/services/balance-service/transfer/smart-contract.js +35 -29
- package/services/balance-service/transfer/xcm/acrossBridge/index.d.ts +0 -4
- package/services/balance-service/transfer/xcm/acrossBridge/index.js +0 -4
- package/services/balance-service/transfer/xcm/utils.js +2 -0
- package/services/chain-service/constants.js +16 -0
- package/services/chain-service/utils/index.d.ts +3 -2
- package/services/chain-service/utils/index.js +20 -1
- 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 +1 -0
- package/services/earning-service/constants/chains.js +2 -1
- package/services/earning-service/handlers/native-staking/base-para.js +6 -3
- package/services/earning-service/handlers/native-staking/energy.d.ts +6 -0
- package/services/earning-service/handlers/native-staking/energy.js +60 -8
- package/services/earning-service/handlers/native-staking/tanssi.d.ts +16 -0
- package/services/earning-service/handlers/native-staking/tanssi.js +478 -0
- package/services/earning-service/service.js +4 -0
- package/services/earning-service/utils/index.js +2 -0
- package/services/migration-service/scripts/MigrateTransactionHistoryBySymbol20251027.d.ts +4 -0
- package/services/migration-service/scripts/MigrateTransactionHistoryBySymbol20251027.js +42 -0
- package/services/migration-service/scripts/databases/MigrateAssetSetting20251027.d.ts +4 -0
- package/services/migration-service/scripts/databases/MigrateAssetSetting20251027.js +29 -0
- package/services/migration-service/scripts/index.js +5 -1
- package/services/swap-service/handler/base-handler.js +6 -3
- package/services/swap-service/handler/chainflip-handler.d.ts +0 -2
- package/services/swap-service/handler/chainflip-handler.js +2 -18
- package/services/swap-service/handler/optimex-handler.d.ts +43 -0
- package/services/swap-service/handler/optimex-handler.js +410 -0
- package/services/swap-service/handler/simpleswap-handler.js +5 -3
- package/services/swap-service/index.d.ts +0 -1
- package/services/swap-service/index.js +21 -123
- package/services/swap-service/utils.d.ts +6 -12
- package/services/swap-service/utils.js +8 -138
- package/services/transaction-service/helpers/index.js +2 -1
- package/types/service-base.d.ts +3 -4
- package/types/service-base.js +0 -2
- package/types/swap/index.d.ts +3 -1
- package/types/swap/index.js +7 -6
- package/types/yield/info/account/info.d.ts +5 -0
- package/utils/account/common.js +2 -3
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"./cjs/detectPackage.js"
|
|
18
18
|
],
|
|
19
19
|
"type": "module",
|
|
20
|
-
"version": "1.3.
|
|
20
|
+
"version": "1.3.64-0",
|
|
21
21
|
"main": "./cjs/index.js",
|
|
22
22
|
"module": "./index.js",
|
|
23
23
|
"types": "./index.d.ts",
|
|
@@ -1191,6 +1191,11 @@
|
|
|
1191
1191
|
"require": "./cjs/services/earning-service/handlers/native-staking/relay-chain.js",
|
|
1192
1192
|
"default": "./services/earning-service/handlers/native-staking/relay-chain.js"
|
|
1193
1193
|
},
|
|
1194
|
+
"./services/earning-service/handlers/native-staking/tanssi": {
|
|
1195
|
+
"types": "./services/earning-service/handlers/native-staking/tanssi.d.ts",
|
|
1196
|
+
"require": "./cjs/services/earning-service/handlers/native-staking/tanssi.js",
|
|
1197
|
+
"default": "./services/earning-service/handlers/native-staking/tanssi.js"
|
|
1198
|
+
},
|
|
1194
1199
|
"./services/earning-service/handlers/native-staking/tao": {
|
|
1195
1200
|
"types": "./services/earning-service/handlers/native-staking/tao.d.ts",
|
|
1196
1201
|
"require": "./cjs/services/earning-service/handlers/native-staking/tao.js",
|
|
@@ -1481,6 +1486,11 @@
|
|
|
1481
1486
|
"require": "./cjs/services/migration-service/scripts/databases/MigrateAssetSetting.js",
|
|
1482
1487
|
"default": "./services/migration-service/scripts/databases/MigrateAssetSetting.js"
|
|
1483
1488
|
},
|
|
1489
|
+
"./services/migration-service/scripts/databases/MigrateAssetSetting20251027": {
|
|
1490
|
+
"types": "./services/migration-service/scripts/databases/MigrateAssetSetting20251027.d.ts",
|
|
1491
|
+
"require": "./cjs/services/migration-service/scripts/databases/MigrateAssetSetting20251027.js",
|
|
1492
|
+
"default": "./services/migration-service/scripts/databases/MigrateAssetSetting20251027.js"
|
|
1493
|
+
},
|
|
1484
1494
|
"./services/migration-service/scripts/databases/MigrateEarningHistory": {
|
|
1485
1495
|
"types": "./services/migration-service/scripts/databases/MigrateEarningHistory.d.ts",
|
|
1486
1496
|
"require": "./cjs/services/migration-service/scripts/databases/MigrateEarningHistory.js",
|
|
@@ -1611,6 +1621,11 @@
|
|
|
1611
1621
|
"require": "./cjs/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.js",
|
|
1612
1622
|
"default": "./services/migration-service/scripts/MigrateTransactionHistoryBySymbol.js"
|
|
1613
1623
|
},
|
|
1624
|
+
"./services/migration-service/scripts/MigrateTransactionHistoryBySymbol20251027": {
|
|
1625
|
+
"types": "./services/migration-service/scripts/MigrateTransactionHistoryBySymbol20251027.d.ts",
|
|
1626
|
+
"require": "./cjs/services/migration-service/scripts/MigrateTransactionHistoryBySymbol20251027.js",
|
|
1627
|
+
"default": "./services/migration-service/scripts/MigrateTransactionHistoryBySymbol20251027.js"
|
|
1628
|
+
},
|
|
1614
1629
|
"./services/migration-service/scripts/MigrateWalletReference": {
|
|
1615
1630
|
"types": "./services/migration-service/scripts/MigrateWalletReference.d.ts",
|
|
1616
1631
|
"require": "./cjs/services/migration-service/scripts/MigrateWalletReference.js",
|
|
@@ -2016,6 +2031,11 @@
|
|
|
2016
2031
|
"require": "./cjs/services/swap-service/handler/kyber-handler.js",
|
|
2017
2032
|
"default": "./services/swap-service/handler/kyber-handler.js"
|
|
2018
2033
|
},
|
|
2034
|
+
"./services/swap-service/handler/optimex-handler": {
|
|
2035
|
+
"types": "./services/swap-service/handler/optimex-handler.d.ts",
|
|
2036
|
+
"require": "./cjs/services/swap-service/handler/optimex-handler.js",
|
|
2037
|
+
"default": "./services/swap-service/handler/optimex-handler.js"
|
|
2038
|
+
},
|
|
2019
2039
|
"./services/swap-service/handler/simpleswap-handler": {
|
|
2020
2040
|
"types": "./services/swap-service/handler/simpleswap-handler.d.ts",
|
|
2021
2041
|
"require": "./cjs/services/swap-service/handler/simpleswap-handler.js",
|
|
@@ -2883,11 +2903,11 @@
|
|
|
2883
2903
|
"@sora-substrate/type-definitions": "^1.17.7",
|
|
2884
2904
|
"@substrate/connect": "^0.8.9",
|
|
2885
2905
|
"@subwallet-monorepos/subwallet-services-sdk": "^0.1.8",
|
|
2886
|
-
"@subwallet/chain-list": "0.2.
|
|
2887
|
-
"@subwallet/extension-base": "^1.3.
|
|
2888
|
-
"@subwallet/extension-chains": "^1.3.
|
|
2889
|
-
"@subwallet/extension-dapp": "^1.3.
|
|
2890
|
-
"@subwallet/extension-inject": "^1.3.
|
|
2906
|
+
"@subwallet/chain-list": "0.2.120",
|
|
2907
|
+
"@subwallet/extension-base": "^1.3.64-0",
|
|
2908
|
+
"@subwallet/extension-chains": "^1.3.64-0",
|
|
2909
|
+
"@subwallet/extension-dapp": "^1.3.64-0",
|
|
2910
|
+
"@subwallet/extension-inject": "^1.3.64-0",
|
|
2891
2911
|
"@subwallet/keyring": "^0.1.13",
|
|
2892
2912
|
"@subwallet/ui-keyring": "^0.1.13",
|
|
2893
2913
|
"@ton/core": "^0.56.3",
|
package/packageInfo.js
CHANGED
|
@@ -7,5 +7,5 @@ export const packageInfo = {
|
|
|
7
7
|
name: '@subwallet/extension-base',
|
|
8
8
|
path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
|
|
9
9
|
type: 'esm',
|
|
10
|
-
version: '1.3.
|
|
10
|
+
version: '1.3.64-0'
|
|
11
11
|
};
|
|
@@ -10,9 +10,10 @@ interface TransferEvmProps extends TransactionFee {
|
|
|
10
10
|
value: string;
|
|
11
11
|
evmApi: _EvmApi;
|
|
12
12
|
fallbackFee?: boolean;
|
|
13
|
+
data?: string;
|
|
13
14
|
}
|
|
14
|
-
export declare function getEVMTransactionObject(
|
|
15
|
-
export declare function getERC20TransactionObject(
|
|
15
|
+
export declare function getEVMTransactionObject(props: TransferEvmProps): Promise<[TransactionConfig, string, string]>;
|
|
16
|
+
export declare function getERC20TransactionObject(props: TransferERC20Props): Promise<[TransactionConfig, string, string]>;
|
|
16
17
|
interface TransferERC20Props extends TransactionFee {
|
|
17
18
|
assetAddress: string;
|
|
18
19
|
chain: string;
|
|
@@ -9,29 +9,32 @@ import { EVM_REFORMAT_DECIMALS } from '@subwallet/extension-base/services/chain-
|
|
|
9
9
|
import { combineEthFee } from '@subwallet/extension-base/utils';
|
|
10
10
|
import BigN from 'bignumber.js';
|
|
11
11
|
import { t } from 'i18next';
|
|
12
|
-
export async function getEVMTransactionObject({
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
12
|
+
export async function getEVMTransactionObject(props) {
|
|
13
|
+
const {
|
|
14
|
+
chain,
|
|
15
|
+
data,
|
|
16
|
+
evmApi,
|
|
17
|
+
fallbackFee,
|
|
18
|
+
feeCustom: _feeCustom,
|
|
19
|
+
feeInfo: _feeInfo,
|
|
20
|
+
feeOption,
|
|
21
|
+
from,
|
|
22
|
+
to,
|
|
23
|
+
transferAll,
|
|
24
|
+
value
|
|
25
|
+
} = props;
|
|
24
26
|
const feeCustom = _feeCustom;
|
|
25
27
|
const feeInfo = _feeInfo;
|
|
26
28
|
const feeCombine = combineEthFee(feeInfo, feeOption, feeCustom);
|
|
27
29
|
let errorOnEstimateFee = '';
|
|
28
30
|
const transactionObject = {
|
|
29
|
-
to
|
|
30
|
-
value
|
|
31
|
-
from
|
|
31
|
+
to,
|
|
32
|
+
value,
|
|
33
|
+
from,
|
|
34
|
+
data,
|
|
32
35
|
...feeCombine
|
|
33
36
|
};
|
|
34
|
-
const
|
|
37
|
+
const gasEstimate = await evmApi.api.eth.estimateGas(transactionObject).catch(e => {
|
|
35
38
|
console.log('Cannot estimate fee with native transfer on', chain, e);
|
|
36
39
|
if (fallbackFee) {
|
|
37
40
|
errorOnEstimateFee = e.message;
|
|
@@ -40,6 +43,8 @@ export async function getEVMTransactionObject({
|
|
|
40
43
|
throw Error('Unable to estimate fee for this transaction. Edit fee and try again.');
|
|
41
44
|
}
|
|
42
45
|
});
|
|
46
|
+
const gasLimit = Math.floor(gasEstimate * 1.1); // 10% buffer for fluctuations
|
|
47
|
+
|
|
43
48
|
transactionObject.gas = gasLimit;
|
|
44
49
|
let estimateFee;
|
|
45
50
|
if (feeCombine.maxFeePerGas) {
|
|
@@ -55,19 +60,20 @@ export async function getEVMTransactionObject({
|
|
|
55
60
|
}
|
|
56
61
|
return [transactionObject, transactionObject.value.toString(), errorOnEstimateFee];
|
|
57
62
|
}
|
|
58
|
-
export async function getERC20TransactionObject({
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
63
|
+
export async function getERC20TransactionObject(props) {
|
|
64
|
+
const {
|
|
65
|
+
assetAddress,
|
|
66
|
+
chain,
|
|
67
|
+
evmApi,
|
|
68
|
+
fallbackFee,
|
|
69
|
+
feeCustom: _feeCustom,
|
|
70
|
+
feeInfo: _feeInfo,
|
|
71
|
+
feeOption,
|
|
72
|
+
from,
|
|
73
|
+
to,
|
|
74
|
+
transferAll,
|
|
75
|
+
value
|
|
76
|
+
} = props;
|
|
71
77
|
const erc20Contract = getERC20Contract(assetAddress, evmApi);
|
|
72
78
|
const feeCustom = _feeCustom;
|
|
73
79
|
let freeAmount = new BigN(0);
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import { CreateXcmExtrinsicProps } from '..';
|
|
2
2
|
export declare function _isAcrossChainBridge(srcChain: string, destChain: string): boolean;
|
|
3
3
|
export declare function _isAcrossTestnetBridge(srcChain: string): boolean;
|
|
4
|
-
export declare const AcrossErrorMsg: {
|
|
5
|
-
AMOUNT_TOO_LOW: string;
|
|
6
|
-
AMOUNT_TOO_HIGH: string;
|
|
7
|
-
};
|
|
8
4
|
export interface AcrossQuote {
|
|
9
5
|
outputAmount: string;
|
|
10
6
|
rate: string;
|
|
@@ -15,10 +15,6 @@ export function _isAcrossChainBridge(srcChain, destChain) {
|
|
|
15
15
|
export function _isAcrossTestnetBridge(srcChain) {
|
|
16
16
|
return srcChain === 'base_sepolia' || srcChain === 'arbitrum_sepolia' || srcChain === COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA;
|
|
17
17
|
}
|
|
18
|
-
export const AcrossErrorMsg = {
|
|
19
|
-
AMOUNT_TOO_LOW: 'amount too low',
|
|
20
|
-
AMOUNT_TOO_HIGH: 'amount too high'
|
|
21
|
-
};
|
|
22
18
|
// Calculate fee for across bridge transfer
|
|
23
19
|
export const getAcrossQuote = async ({
|
|
24
20
|
destinationChain,
|
|
@@ -69,6 +69,7 @@ export async function buildXcm(request) {
|
|
|
69
69
|
originChain,
|
|
70
70
|
originTokenInfo,
|
|
71
71
|
recipient,
|
|
72
|
+
sender,
|
|
72
73
|
sendingValue,
|
|
73
74
|
substrateApi
|
|
74
75
|
} = request;
|
|
@@ -81,6 +82,7 @@ export async function buildXcm(request) {
|
|
|
81
82
|
}
|
|
82
83
|
const paraSpellChainMap = await fetchParaSpellChainMap();
|
|
83
84
|
const bodyData = {
|
|
85
|
+
senderAddress: sender,
|
|
84
86
|
address: recipient,
|
|
85
87
|
from: paraSpellChainMap[originChain.slug],
|
|
86
88
|
to: paraSpellChainMap[destinationChain.slug],
|
|
@@ -67,6 +67,8 @@ export const _STAKING_ERA_LENGTH_MAP = {
|
|
|
67
67
|
aleph: 24,
|
|
68
68
|
polkadot: 24,
|
|
69
69
|
kusama: 6,
|
|
70
|
+
statemint: 24,
|
|
71
|
+
statemine: 6,
|
|
70
72
|
westend: 6,
|
|
71
73
|
hydradx: 24,
|
|
72
74
|
default: 24,
|
|
@@ -121,6 +123,8 @@ export const _EXPECTED_BLOCK_TIME = {
|
|
|
121
123
|
aleph: 1,
|
|
122
124
|
polkadot: 6,
|
|
123
125
|
kusama: 6,
|
|
126
|
+
statemint: 6,
|
|
127
|
+
statemine: 6,
|
|
124
128
|
polkadex: 12,
|
|
125
129
|
ternoa: 6,
|
|
126
130
|
ternoa_alphanet: 6,
|
|
@@ -224,6 +228,13 @@ export const _KNOWN_CHAIN_INFLATION_PARAMS = {
|
|
|
224
228
|
auctionMax: 60,
|
|
225
229
|
stakeTarget: 0.75
|
|
226
230
|
},
|
|
231
|
+
statemine: {
|
|
232
|
+
..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
|
|
233
|
+
auctionAdjust: 0.3 / 60,
|
|
234
|
+
auctionMax: 60,
|
|
235
|
+
stakeTarget: 0.75
|
|
236
|
+
},
|
|
237
|
+
// todo: recheck
|
|
227
238
|
neatcoin: {
|
|
228
239
|
..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
|
|
229
240
|
stakeTarget: 0.75
|
|
@@ -237,6 +248,11 @@ export const _KNOWN_CHAIN_INFLATION_PARAMS = {
|
|
|
237
248
|
..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
|
|
238
249
|
stakeTarget: 0.75
|
|
239
250
|
},
|
|
251
|
+
statemint: {
|
|
252
|
+
..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
|
|
253
|
+
stakeTarget: 0.75
|
|
254
|
+
},
|
|
255
|
+
// todo: recheck
|
|
240
256
|
vara_network: {
|
|
241
257
|
..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
|
|
242
258
|
stakeTarget: 0.8
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { _AssetRef, _AssetType, _ChainAsset, _ChainInfo, _MultiChainAsset } from '@subwallet/chain-list/types';
|
|
2
|
-
import { BasicTokenInfo } from '@subwallet/extension-base/background/KoniTypes';
|
|
2
|
+
import { BasicTokenInfo, ChainType } from '@subwallet/extension-base/background/KoniTypes';
|
|
3
3
|
import { _ChainState, _DataMap } from '@subwallet/extension-base/services/chain-service/types';
|
|
4
4
|
import { IChain } from '@subwallet/extension-base/services/storage-service/databases';
|
|
5
5
|
import { AccountChainType, AccountSignMode } from '@subwallet/extension-base/types';
|
|
@@ -122,7 +122,8 @@ export declare function updateLatestChainInfo(currentDataMap: _DataMap, latestCh
|
|
|
122
122
|
storedChainInfoList: IChain[];
|
|
123
123
|
needUpdateChainApiList: _ChainInfo[];
|
|
124
124
|
};
|
|
125
|
-
export declare const
|
|
125
|
+
export declare const _chainInfoToAccountChainType: (chainInfo: _ChainInfo) => AccountChainType;
|
|
126
|
+
export declare const _chainInfoToChainType: (chainInfo: _ChainInfo) => ChainType | undefined;
|
|
126
127
|
interface AccountInfo {
|
|
127
128
|
chainType: AccountChainType;
|
|
128
129
|
type: KeypairType;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import { _AssetRefPath, _AssetType, _ChainStatus, _SubstrateChainType } from '@subwallet/chain-list/types';
|
|
5
|
+
import { ChainType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
6
|
import { _MANTA_ZK_CHAIN_GROUP, _ZK_ASSET_PREFIX } from '@subwallet/extension-base/services/chain-service/constants';
|
|
6
7
|
import { _CUSTOM_PREFIX, _SMART_CONTRACT_STANDARDS } from '@subwallet/extension-base/services/chain-service/types';
|
|
7
8
|
import { AccountChainType, AccountSignMode } from '@subwallet/extension-base/types';
|
|
@@ -596,7 +597,7 @@ export function updateLatestChainInfo(currentDataMap, latestChainInfoList) {
|
|
|
596
597
|
needUpdateChainApiList
|
|
597
598
|
};
|
|
598
599
|
}
|
|
599
|
-
export const
|
|
600
|
+
export const _chainInfoToAccountChainType = chainInfo => {
|
|
600
601
|
if (_isPureSubstrateChain(chainInfo)) {
|
|
601
602
|
return AccountChainType.SUBSTRATE;
|
|
602
603
|
}
|
|
@@ -614,6 +615,24 @@ export const _chainInfoToChainType = chainInfo => {
|
|
|
614
615
|
}
|
|
615
616
|
return AccountChainType.SUBSTRATE;
|
|
616
617
|
};
|
|
618
|
+
export const _chainInfoToChainType = chainInfo => {
|
|
619
|
+
if (_isChainSubstrateCompatible(chainInfo)) {
|
|
620
|
+
return ChainType.SUBSTRATE;
|
|
621
|
+
}
|
|
622
|
+
if (_isPureEvmChain(chainInfo)) {
|
|
623
|
+
return ChainType.EVM;
|
|
624
|
+
}
|
|
625
|
+
if (_isPureTonChain(chainInfo)) {
|
|
626
|
+
return ChainType.TON;
|
|
627
|
+
}
|
|
628
|
+
if (_isPureCardanoChain(chainInfo)) {
|
|
629
|
+
return ChainType.CARDANO;
|
|
630
|
+
}
|
|
631
|
+
if (_isPureBitcoinChain(chainInfo)) {
|
|
632
|
+
return ChainType.BITCOIN;
|
|
633
|
+
}
|
|
634
|
+
return undefined;
|
|
635
|
+
};
|
|
617
636
|
export const _isChainInfoCompatibleWithAccountInfo = (chainInfo, accountInfo) => {
|
|
618
637
|
const {
|
|
619
638
|
chainType: accountChainType,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { _ChainAsset, _ChainInfo, _MultiChainAsset } from '@subwallet/chain-list/types';
|
|
2
|
-
export declare const ChainListVersion = "0.2.
|
|
2
|
+
export declare const ChainListVersion = "0.2.120";
|
|
3
3
|
export interface PatchInfo {
|
|
4
4
|
patchVersion: string;
|
|
5
5
|
appliedVersion: string;
|
|
@@ -5,7 +5,7 @@ const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
|
|
|
5
5
|
const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
|
|
6
6
|
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');
|
|
7
7
|
const fetchFile = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'list.json' : 'preview.json';
|
|
8
|
-
export const ChainListVersion = '0.2.
|
|
8
|
+
export const ChainListVersion = '0.2.120'; // update this when build chain-list
|
|
9
9
|
|
|
10
10
|
// todo: move this interface to chainlist
|
|
11
11
|
|
|
@@ -19,7 +19,8 @@ export const _STAKING_CHAIN_GROUP = {
|
|
|
19
19
|
manta: ['manta_network'],
|
|
20
20
|
bittensor: ['bittensor', 'bittensor_testnet'],
|
|
21
21
|
energy: ['energy_web_x_testnet', 'energy_web_x'],
|
|
22
|
-
mythos: ['mythos', 'muse_testnet']
|
|
22
|
+
mythos: ['mythos', 'muse_testnet'],
|
|
23
|
+
tanssi: ['tanssi', 'dancelight']
|
|
23
24
|
};
|
|
24
25
|
export const RELAY_HANDLER_DIRECT_STAKING_CHAINS = [..._STAKING_CHAIN_GROUP.relay, ..._STAKING_CHAIN_GROUP.assetHub];
|
|
25
26
|
export const TON_CHAINS = ['ton', 'ton_testnet'];
|
|
@@ -9,6 +9,7 @@ import { BasicTxErrorType, EarningStatus, StakingTxErrorType, YieldStepType } fr
|
|
|
9
9
|
import { isSameAddress, reformatAddress } from '@subwallet/extension-base/utils';
|
|
10
10
|
import { t } from 'i18next';
|
|
11
11
|
import { BN, BN_ZERO } from '@polkadot/util';
|
|
12
|
+
import { _STAKING_CHAIN_GROUP } from "../../constants/index.js";
|
|
12
13
|
export default class BaseParaNativeStakingPoolHandler extends BaseNativeStakingPoolHandler {
|
|
13
14
|
/* Join pool action */
|
|
14
15
|
|
|
@@ -125,9 +126,11 @@ export default class BaseParaNativeStakingPoolHandler extends BaseNativeStakingP
|
|
|
125
126
|
const bnChainMinStake = new BN(poolInfo.statistic.earningThreshold.join || '0');
|
|
126
127
|
const bnCollatorMinStake = new BN(targetNomination.validatorMinStake || '0');
|
|
127
128
|
const bnMinStake = BN.max(bnCollatorMinStake, bnChainMinStake);
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
129
|
+
if (!_STAKING_CHAIN_GROUP.tanssi.includes(this.chain)) {
|
|
130
|
+
const existUnstakeErrorMessage = getExistUnstakeErrorMessage(this.chain, StakingType.NOMINATED);
|
|
131
|
+
if (targetNomination.hasUnstaking) {
|
|
132
|
+
errors.push(new TransactionError(StakingTxErrorType.EXIST_UNSTAKING_REQUEST, existUnstakeErrorMessage));
|
|
133
|
+
}
|
|
131
134
|
}
|
|
132
135
|
if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(bnMinStake))) {
|
|
133
136
|
errors.push(new TransactionError(StakingTxErrorType.INVALID_ACTIVE_STAKE));
|
|
@@ -16,6 +16,12 @@ export interface PalletEnergyStakingNominationRequestsScheduledRequest {
|
|
|
16
16
|
whenExecutable: number;
|
|
17
17
|
action: Record<PalletParachainStakingRequestType, number>;
|
|
18
18
|
}
|
|
19
|
+
export interface PalletEnergyStakingTopNominations {
|
|
20
|
+
nominations: Array<{
|
|
21
|
+
owner: string;
|
|
22
|
+
amount: string;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
19
25
|
export default class EnergyNativeStakingPoolHandler extends BaseParaNativeStakingPoolHandler {
|
|
20
26
|
subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
|
|
21
27
|
parseNominatorMetadata(chainInfo: _ChainInfo, address: string, substrateApi: _SubstrateApi, nominatorState: PalletEnergyStakingNominator): Promise<Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>>;
|
|
@@ -3,13 +3,16 @@
|
|
|
3
3
|
|
|
4
4
|
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
5
5
|
import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
6
|
-
import { getBondedValidators, getEarningStatusByNominations, isUnstakeAll } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
|
|
6
|
+
import { calculateEnergyWebCollatorReturn, getBondedValidators, getEarningStatusByNominations, isUnstakeAll } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
|
|
7
7
|
import { _EXPECTED_BLOCK_TIME, _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
|
|
8
8
|
import { parseIdentity } from '@subwallet/extension-base/services/earning-service/utils';
|
|
9
9
|
import { BasicTxErrorType, EarningStatus, UnstakingStatus } from '@subwallet/extension-base/types';
|
|
10
10
|
import { balanceFormatter, formatNumber, parseRawNumber, reformatAddress } from '@subwallet/extension-base/utils';
|
|
11
|
-
import { BN, BN_ZERO } from '@polkadot/util';
|
|
11
|
+
import { BN, BN_TEN, BN_ZERO } from '@polkadot/util';
|
|
12
12
|
import BaseParaNativeStakingPoolHandler from "./base-para.js";
|
|
13
|
+
const DEFAULT_ANNUAL_REWARD = {
|
|
14
|
+
energy_web_x: 2000000
|
|
15
|
+
};
|
|
13
16
|
export default class EnergyNativeStakingPoolHandler extends BaseParaNativeStakingPoolHandler {
|
|
14
17
|
/* Subscribe pool info */
|
|
15
18
|
|
|
@@ -53,6 +56,13 @@ export default class EnergyNativeStakingPoolHandler extends BaseParaNativeStakin
|
|
|
53
56
|
const unstakingPeriod = parseInt(unstakingDelay.toString()) * eraTime;
|
|
54
57
|
const minStake = '0';
|
|
55
58
|
const minToHuman = formatNumber(minStake.toString(), nativeToken.decimals || 0, balanceFormatter);
|
|
59
|
+
const collators = await this.getPoolTargets();
|
|
60
|
+
let maxApy = 0;
|
|
61
|
+
for (const collator of collators) {
|
|
62
|
+
if (collator.expectedReturn && collator.expectedReturn > maxApy) {
|
|
63
|
+
maxApy = collator.expectedReturn;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
56
66
|
const data = {
|
|
57
67
|
...this.baseInfo,
|
|
58
68
|
type: this.type,
|
|
@@ -76,8 +86,7 @@ export default class EnergyNativeStakingPoolHandler extends BaseParaNativeStakin
|
|
|
76
86
|
// TODO recheck
|
|
77
87
|
era,
|
|
78
88
|
eraTime,
|
|
79
|
-
totalApy:
|
|
80
|
-
// not have
|
|
89
|
+
totalApy: maxApy,
|
|
81
90
|
tvl: totalStake.toString(),
|
|
82
91
|
unstakingPeriod: unstakingPeriod
|
|
83
92
|
},
|
|
@@ -250,12 +259,21 @@ export default class EnergyNativeStakingPoolHandler extends BaseParaNativeStakin
|
|
|
250
259
|
const apiProps = await this.substrateApi.isReady;
|
|
251
260
|
const substrateIdentityApi = this.substrateIdentityApi;
|
|
252
261
|
const allCollators = [];
|
|
253
|
-
const [_allCollators, _selectedCandidates] = await Promise.all([apiProps.api.query.parachainStaking.candidateInfo.entries(),
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
262
|
+
const [_allCollators, _selectedCandidates, _eraInfo, unstakingDelay] = await Promise.all([apiProps.api.query.parachainStaking.candidateInfo.entries(), apiProps.api.query.parachainStaking.selectedCandidates(), apiProps.api.query.parachainStaking.era(), apiProps.api.query.parachainStaking.delay()]);
|
|
263
|
+
const delay = parseInt(unstakingDelay.toString()); // in era unit
|
|
264
|
+
const roundInfo = _eraInfo.toPrimitive();
|
|
265
|
+
const currentRound = roundInfo.current;
|
|
266
|
+
let defaultCommission = 0;
|
|
267
|
+
if (apiProps.api.query.parachainStaking.defaultCollatorCommission) {
|
|
268
|
+
const _defaultCommission = await apiProps.api.query.parachainStaking.defaultCollatorCommission();
|
|
269
|
+
const {
|
|
270
|
+
current
|
|
271
|
+
} = _defaultCommission.toPrimitive();
|
|
272
|
+
defaultCommission = current / 1000000000;
|
|
273
|
+
}
|
|
257
274
|
const maxNominationPerCollator = apiProps.api.consts.parachainStaking.maxTopNominationsPerCandidate.toString();
|
|
258
275
|
const selectedCollators = _selectedCandidates.toPrimitive();
|
|
276
|
+
const selectedCollatorsCount = selectedCollators.length;
|
|
259
277
|
for (const collator of _allCollators) {
|
|
260
278
|
const _collatorAddress = collator[0].toHuman();
|
|
261
279
|
const collatorAddress = _collatorAddress[0];
|
|
@@ -282,6 +300,39 @@ export default class EnergyNativeStakingPoolHandler extends BaseParaNativeStakin
|
|
|
282
300
|
});
|
|
283
301
|
}
|
|
284
302
|
}
|
|
303
|
+
const annualReward = DEFAULT_ANNUAL_REWARD[this.chain] ? new BN(DEFAULT_ANNUAL_REWARD[this.chain]).mul(BN_TEN.pow(new BN(this.nativeToken.decimals || 18))) : BN_ZERO;
|
|
304
|
+
|
|
305
|
+
// calculate expected return
|
|
306
|
+
await Promise.all(allCollators.map(async collator => {
|
|
307
|
+
if (!selectedCollators.includes(collator.address) || annualReward.lte(BN_ZERO)) {
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
const [_topNominations, _nominationScheduledRequests] = await Promise.all([apiProps.api.query.parachainStaking.topNominations(collator.address), apiProps.api.query.parachainStaking.nominationScheduledRequests(collator.address)]);
|
|
311
|
+
const nominationScheduledRequests = _nominationScheduledRequests.toPrimitive();
|
|
312
|
+
const topNominations = _topNominations.toPrimitive();
|
|
313
|
+
const topNominationsRecord = topNominations.nominations.reduce((record, {
|
|
314
|
+
amount,
|
|
315
|
+
owner
|
|
316
|
+
}) => {
|
|
317
|
+
record[owner] = amount || '0';
|
|
318
|
+
return record;
|
|
319
|
+
}, {});
|
|
320
|
+
let bnTotalActiveStake = new BN(collator.totalStake);
|
|
321
|
+
if (nominationScheduledRequests !== null && nominationScheduledRequests !== void 0 && nominationScheduledRequests.length) {
|
|
322
|
+
const bnTotalInactiveStake = nominationScheduledRequests.reduce((partialSum, {
|
|
323
|
+
action,
|
|
324
|
+
nominator,
|
|
325
|
+
whenExecutable
|
|
326
|
+
}) => {
|
|
327
|
+
if (whenExecutable + delay - parseInt(currentRound) < 0 && action) {
|
|
328
|
+
return partialSum.add(new BN(topNominationsRecord[nominator] || Object.values(action)[0] || BN_ZERO));
|
|
329
|
+
}
|
|
330
|
+
return partialSum;
|
|
331
|
+
}, BN_ZERO);
|
|
332
|
+
bnTotalActiveStake = bnTotalActiveStake.sub(bnTotalInactiveStake);
|
|
333
|
+
}
|
|
334
|
+
collator.expectedReturn = calculateEnergyWebCollatorReturn(annualReward.toString(), defaultCommission, selectedCollatorsCount, bnTotalActiveStake.toString());
|
|
335
|
+
}));
|
|
285
336
|
const extraInfoMap = {};
|
|
286
337
|
await Promise.all(allCollators.map(async collator => {
|
|
287
338
|
const [_info, [identity, isReasonable]] = await Promise.all([apiProps.api.query.parachainStaking.candidateInfo(collator.address), parseIdentity(substrateIdentityApi, collator.address)]);
|
|
@@ -297,6 +348,7 @@ export default class EnergyNativeStakingPoolHandler extends BaseParaNativeStakin
|
|
|
297
348
|
validator.blocked = !extraInfoMap[validator.address].active;
|
|
298
349
|
validator.identity = extraInfoMap[validator.address].identity;
|
|
299
350
|
validator.isVerified = extraInfoMap[validator.address].isVerified;
|
|
351
|
+
validator.commission = defaultCommission * 100;
|
|
300
352
|
}
|
|
301
353
|
return allCollators;
|
|
302
354
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
2
|
+
import { EarningRewardItem, StakeCancelWithdrawalParams, SubmitJoinNativeStaking, TransactionData, UnstakingInfo, YieldPoolInfo, YieldPoolMethodInfo, YieldPoolTarget, YieldPositionInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
|
|
3
|
+
import BaseParaNativeStakingPoolHandler from './base-para';
|
|
4
|
+
export default class TanssiNativeStakingPoolHandler extends BaseParaNativeStakingPoolHandler {
|
|
5
|
+
readonly availableMethod: YieldPoolMethodInfo;
|
|
6
|
+
subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
|
|
7
|
+
subscribePoolPosition(useAddresses: string[], onUpdate: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
|
|
8
|
+
checkAccountHaveStake(addresses: string[]): Promise<string[]>;
|
|
9
|
+
getPoolTargets(): Promise<YieldPoolTarget[]>;
|
|
10
|
+
createJoinExtrinsic(data: SubmitJoinNativeStaking, positionInfo?: YieldPositionInfo, bondDest?: string, netuid?: number): Promise<[TransactionData, YieldTokenBaseInfo]>;
|
|
11
|
+
protected handleYieldUnstake(amount: string, address: string, selectedTarget?: string): Promise<[ExtrinsicType, TransactionData]>;
|
|
12
|
+
getPoolReward(useAddresses: string[], callback: (rs: EarningRewardItem) => void): Promise<VoidFunction>;
|
|
13
|
+
handleYieldClaimReward(address: string, bondReward?: boolean): Promise<TransactionData>;
|
|
14
|
+
handleYieldWithdraw(address: string, unstakingInfo: UnstakingInfo): Promise<TransactionData>;
|
|
15
|
+
handleYieldCancelUnstake(params: StakeCancelWithdrawalParams): Promise<TransactionData>;
|
|
16
|
+
}
|