@subwallet/extension-base 1.3.76-0 → 1.3.77-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 +2 -1
- package/cjs/core/substrate/xcm-parser.js +8 -11
- package/cjs/koni/background/handlers/Extension.js +258 -63
- package/cjs/koni/background/handlers/Tabs.js +2 -3
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/chain-service/utils/patch.js +1 -1
- package/cjs/services/earning-service/constants/chains.js +4 -1
- package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +8 -5
- package/cjs/services/earning-service/service.js +18 -2
- package/cjs/services/multisig-service/index.js +1 -1
- package/cjs/services/request-service/handler/SubstrateRequestHandler.js +12 -0
- package/cjs/services/request-service/index.js +3 -0
- package/cjs/services/setting-service/constants.js +2 -1
- package/cjs/services/storage-service/db-stores/InappNotification.js +1 -1
- package/cjs/services/transaction-service/index.js +9 -0
- package/core/substrate/xcm-parser.d.ts +1 -0
- package/core/substrate/xcm-parser.js +7 -11
- package/koni/background/handlers/Extension.d.ts +19 -0
- package/koni/background/handlers/Extension.js +197 -5
- package/koni/background/handlers/Tabs.js +2 -3
- package/package.json +6 -6
- package/packageInfo.js +1 -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 -0
- package/services/earning-service/handlers/liquid-staking/stella-swap.d.ts +1 -0
- package/services/earning-service/handlers/liquid-staking/stella-swap.js +6 -4
- package/services/earning-service/service.js +20 -4
- package/services/inapp-notification-service/interfaces.d.ts +1 -0
- package/services/multisig-service/index.js +1 -1
- package/services/request-service/handler/SubstrateRequestHandler.d.ts +1 -0
- package/services/request-service/handler/SubstrateRequestHandler.js +12 -0
- package/services/request-service/index.d.ts +1 -0
- package/services/request-service/index.js +3 -0
- package/services/request-service/types.d.ts +1 -0
- package/services/setting-service/constants.js +2 -1
- package/services/storage-service/db-stores/InappNotification.js +1 -1
- package/services/transaction-service/index.d.ts +1 -1
- package/services/transaction-service/index.js +9 -0
- package/types/balance/transfer.d.ts +2 -0
- package/types/multisig/index.d.ts +12 -0
|
@@ -19,6 +19,7 @@ export const getStellaswapLiquidStakingContract = (networkKey, assetAddress, evm
|
|
|
19
19
|
const APR_STATS_URL = 'https://stdot-apr.stellaswap.com/';
|
|
20
20
|
const SUBWALLET_REFERRAL = '0x7e6815f45E624768548d085231f2d453f16FD7DD';
|
|
21
21
|
const TOP_HOLDER = '0x4300e09284e3bB4d9044DdAB31EfAF5f3301DABa';
|
|
22
|
+
export const STELLA_SWAP_LIQUID_STAKING_SLUG = 'xcDOT___liquid_staking___stellaswap';
|
|
22
23
|
export default class StellaSwapLiquidStakingPoolHandler extends BaseLiquidStakingPoolHandler {
|
|
23
24
|
inputAsset = 'moonbeam-LOCAL-xcDOT';
|
|
24
25
|
altInputAsset = '';
|
|
@@ -28,8 +29,8 @@ export default class StellaSwapLiquidStakingPoolHandler extends BaseLiquidStakin
|
|
|
28
29
|
transactionChainType = ChainType.EVM;
|
|
29
30
|
rateDecimals = 10; // Derivative asset decimals
|
|
30
31
|
availableMethod = {
|
|
31
|
-
join:
|
|
32
|
-
defaultUnstake:
|
|
32
|
+
join: false,
|
|
33
|
+
defaultUnstake: false,
|
|
33
34
|
fastUnstake: false,
|
|
34
35
|
cancelUnstake: false,
|
|
35
36
|
withdraw: true,
|
|
@@ -38,7 +39,7 @@ export default class StellaSwapLiquidStakingPoolHandler extends BaseLiquidStakin
|
|
|
38
39
|
};
|
|
39
40
|
constructor(state, chain) {
|
|
40
41
|
super(state, chain);
|
|
41
|
-
this.slug =
|
|
42
|
+
this.slug = STELLA_SWAP_LIQUID_STAKING_SLUG;
|
|
42
43
|
this.name = 'StellaSwap Liquid Staking';
|
|
43
44
|
this._logo = 'stellaswap';
|
|
44
45
|
this.shortName = 'StellaSwap';
|
|
@@ -161,7 +162,8 @@ export default class StellaSwapLiquidStakingPoolHandler extends BaseLiquidStakin
|
|
|
161
162
|
unstakeBalance: unlockBalance.toString(),
|
|
162
163
|
isBondedBefore: totalBalance.gt(BN_ZERO),
|
|
163
164
|
derivativeToken: derivativeTokenSlug,
|
|
164
|
-
|
|
165
|
+
// StellaSwap announced all stDOT positions are auto-unstaking, so rewards are no longer earned.
|
|
166
|
+
status: EarningStatus.NOT_EARNING,
|
|
165
167
|
nominations: [],
|
|
166
168
|
unstakings
|
|
167
169
|
};
|
|
@@ -6,10 +6,10 @@ import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
|
6
6
|
import { CRON_REFRESH_CHAIN_STAKING_METADATA, CRON_REFRESH_EARNING_REWARD_HISTORY_INTERVAL, CRON_REFRESH_EARNING_TARGETS, CRON_REFRESH_STAKING_REWARD_FAST_INTERVAL } from '@subwallet/extension-base/constants';
|
|
7
7
|
import { ServiceStatus } from '@subwallet/extension-base/services/base/types';
|
|
8
8
|
import { _getChainSubstrateTokenSymbol, _isChainEnabled } from '@subwallet/extension-base/services/chain-service/utils';
|
|
9
|
-
import { _STAKING_CHAIN_GROUP, STAKING_IDENTITY_API_SLUG } from '@subwallet/extension-base/services/earning-service/constants';
|
|
9
|
+
import { _STAKING_CHAIN_GROUP, STAKING_IDENTITY_API_SLUG, SUNSETTED_YIELD_POOL_SLUGS } from '@subwallet/extension-base/services/earning-service/constants';
|
|
10
10
|
import BaseLiquidStakingPoolHandler from '@subwallet/extension-base/services/earning-service/handlers/liquid-staking/base';
|
|
11
11
|
import MythosNativeStakingPoolHandler from '@subwallet/extension-base/services/earning-service/handlers/native-staking/mythos';
|
|
12
|
-
import { BasicTxErrorType, YieldPoolType } from '@subwallet/extension-base/types';
|
|
12
|
+
import { BasicTxErrorType, EarningStatus, YieldPoolType } from '@subwallet/extension-base/types';
|
|
13
13
|
import { addLazy, createPromiseHandler, filterAddressByChainInfo, removeLazy } from '@subwallet/extension-base/utils';
|
|
14
14
|
import { fetchStaticCache } from '@subwallet/extension-base/utils/fetchStaticCache';
|
|
15
15
|
import { BehaviorSubject, combineLatest } from 'rxjs';
|
|
@@ -432,6 +432,14 @@ export default class EarningService {
|
|
|
432
432
|
}
|
|
433
433
|
const updatedItem = structuredClone(item);
|
|
434
434
|
updatedItem.metadata.availableMethod = handler.availableMethod;
|
|
435
|
+
|
|
436
|
+
// Disable staking for sunsetted pools
|
|
437
|
+
if (SUNSETTED_YIELD_POOL_SLUGS.includes(item.slug)) {
|
|
438
|
+
updatedItem.metadata.availableMethod = {
|
|
439
|
+
...updatedItem.metadata.availableMethod,
|
|
440
|
+
join: false
|
|
441
|
+
};
|
|
442
|
+
}
|
|
435
443
|
this.updateYieldPoolInfo(updatedItem);
|
|
436
444
|
});
|
|
437
445
|
return onlineData;
|
|
@@ -524,7 +532,11 @@ export default class EarningService {
|
|
|
524
532
|
const yieldPositionInfo = this.yieldPositionSubject.getValue();
|
|
525
533
|
existedYieldPosition.forEach(item => {
|
|
526
534
|
if (!this.inactivePoolSlug.has(item.slug)) {
|
|
527
|
-
|
|
535
|
+
const normalizedItem = SUNSETTED_YIELD_POOL_SLUGS.includes(item.slug) ? {
|
|
536
|
+
...item,
|
|
537
|
+
status: EarningStatus.NOT_EARNING
|
|
538
|
+
} : item;
|
|
539
|
+
yieldPositionInfo[this._getYieldPositionKey(item.slug, item.address)] = normalizedItem;
|
|
528
540
|
}
|
|
529
541
|
});
|
|
530
542
|
this.yieldPositionSubject.next(yieldPositionInfo);
|
|
@@ -547,7 +559,11 @@ export default class EarningService {
|
|
|
547
559
|
return `${slug}---${address}`;
|
|
548
560
|
}
|
|
549
561
|
updateYieldPosition(data) {
|
|
550
|
-
|
|
562
|
+
const normalizedData = SUNSETTED_YIELD_POOL_SLUGS.includes(data.slug) ? {
|
|
563
|
+
...data,
|
|
564
|
+
status: EarningStatus.NOT_EARNING
|
|
565
|
+
} : data;
|
|
566
|
+
this.yieldPositionPersistQueue.push(normalizedData);
|
|
551
567
|
addLazy('persistYieldPositionInfo', () => {
|
|
552
568
|
const yieldPositionInfo = this.yieldPositionSubject.getValue();
|
|
553
569
|
const queue = [...this.yieldPositionPersistQueue];
|
|
@@ -206,7 +206,7 @@ export class MultisigService {
|
|
|
206
206
|
*/
|
|
207
207
|
handleEvents(events, eventTypes) {
|
|
208
208
|
let needReload = false;
|
|
209
|
-
if (eventTypes.includes('account.add') || eventTypes.includes('account.remove')) {
|
|
209
|
+
if (eventTypes.includes('account.add') || eventTypes.includes('account.remove') || eventTypes.includes('account.updateCurrent')) {
|
|
210
210
|
needReload = true;
|
|
211
211
|
}
|
|
212
212
|
if (eventTypes.includes('chain.updateState') || eventTypes.includes('transaction.done')) {
|
|
@@ -9,6 +9,7 @@ export default class SubstrateRequestHandler {
|
|
|
9
9
|
constructor(requestService: RequestService);
|
|
10
10
|
getSignRequest(id: string): SignRequest | undefined;
|
|
11
11
|
get allSubstrateRequests(): SigningRequest[];
|
|
12
|
+
updateSignRequest(id: string, request: RequestSign, signerAddress?: string): void;
|
|
12
13
|
private updateIconSign;
|
|
13
14
|
private signComplete;
|
|
14
15
|
get numSubstrateRequests(): number;
|
|
@@ -34,6 +34,18 @@ export default class SubstrateRequestHandler {
|
|
|
34
34
|
isInternal: isInternalRequest(url)
|
|
35
35
|
}));
|
|
36
36
|
}
|
|
37
|
+
updateSignRequest(id, request, signerAddress) {
|
|
38
|
+
const current = this.getSignRequest(id);
|
|
39
|
+
if (!current) {
|
|
40
|
+
throw new TransactionError(BasicTxErrorType.INVALID_PARAMS, 'Sign request not found');
|
|
41
|
+
}
|
|
42
|
+
this.#substrateRequests[id] = {
|
|
43
|
+
...current,
|
|
44
|
+
request,
|
|
45
|
+
signerAddress: signerAddress || current.signerAddress
|
|
46
|
+
};
|
|
47
|
+
this.updateIconSign();
|
|
48
|
+
}
|
|
37
49
|
updateIconSign(shouldClose) {
|
|
38
50
|
this.signSubject.next(this.allSubstrateRequests);
|
|
39
51
|
this.#requestService.updateIconV2(shouldClose);
|
|
@@ -55,6 +55,7 @@ export default class RequestService {
|
|
|
55
55
|
get confirmationsQueueSubjectTon(): BehaviorSubject<ConfirmationsQueueTon>;
|
|
56
56
|
get confirmationsQueueSubjectCardano(): BehaviorSubject<ConfirmationsQueueCardano>;
|
|
57
57
|
getSignRequest(id: string): import("./types").SignRequest | undefined;
|
|
58
|
+
updateSignRequest(id: string, request: RequestSign, signerAddress?: string): void;
|
|
58
59
|
signInternalTransaction(id: string, address: string, url: string, payload: SignerPayloadJSON, onSign?: (id: string) => void, isWrappedTx?: SubstrateTransactionWrappingStatus): Promise<ResponseSigning>;
|
|
59
60
|
addConfirmation<CT extends ConfirmationType>(id: string, url: string, type: CT, payload: ConfirmationDefinitions[CT][0]['payload'], options?: ConfirmationsQueueItemOptions, validator?: (input: ConfirmationDefinitions[CT][1]) => Error | undefined): Promise<ConfirmationDefinitions[CT][1]>;
|
|
60
61
|
addConfirmationTon<CT extends ConfirmationTypeTon>(id: string, url: string, type: CT, payload: ConfirmationDefinitionsTon[CT][0]['payload'], options?: ConfirmationsQueueItemOptions, validator?: (input: ConfirmationDefinitionsTon[CT][1]) => Error | undefined): Promise<ConfirmationDefinitionsTon[CT][1]>;
|
|
@@ -167,6 +167,9 @@ export default class RequestService {
|
|
|
167
167
|
getSignRequest(id) {
|
|
168
168
|
return this.#substrateRequestHandler.getSignRequest(id);
|
|
169
169
|
}
|
|
170
|
+
updateSignRequest(id, request, signerAddress) {
|
|
171
|
+
this.#substrateRequestHandler.updateSignRequest(id, request, signerAddress);
|
|
172
|
+
}
|
|
170
173
|
async signInternalTransaction(id, address, url, payload, onSign, isWrappedTx) {
|
|
171
174
|
if (isWrappedTx === SubstrateTransactionWrappingStatus.WRAP_RESULT) {
|
|
172
175
|
return this.#substrateRequestHandler.signWrappedTransaction(id, address, url, payload, onSign);
|
|
@@ -2,6 +2,7 @@ import { AccountAuthType, RequestSign, Resolver, ResponseSigning } from '@subwal
|
|
|
2
2
|
import { MetadataDef } from '@subwallet/extension-inject/types';
|
|
3
3
|
export interface SignRequest extends Resolver<ResponseSigning> {
|
|
4
4
|
address: string;
|
|
5
|
+
signerAddress?: string;
|
|
5
6
|
id: string;
|
|
6
7
|
request: RequestSign;
|
|
7
8
|
url: string;
|
|
@@ -23,7 +23,8 @@ export const DEFAULT_NOTIFICATION_SETUP = {
|
|
|
23
23
|
earningClaim: true,
|
|
24
24
|
earningWithdraw: true,
|
|
25
25
|
availBridgeClaim: true,
|
|
26
|
-
polygonBridgeClaim: true
|
|
26
|
+
polygonBridgeClaim: true,
|
|
27
|
+
pendingMultisigApprovals: true
|
|
27
28
|
// isHideWithdraw: false, // todo: just for test, remove later
|
|
28
29
|
// isHideMarketing: false,
|
|
29
30
|
// isHideAnnouncement: false
|
|
@@ -82,7 +82,7 @@ export default class InappNotificationStore extends BaseStore {
|
|
|
82
82
|
isRead: true
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
|
-
return this.table.where('proxyId').equalsIgnoreCase(proxyId).modify({
|
|
85
|
+
return this.table.where('proxyId').equalsIgnoreCase(proxyId).filter(notification => !excludeNotificationIds.includes(notification.id)).modify({
|
|
86
86
|
isRead: true
|
|
87
87
|
});
|
|
88
88
|
}
|
|
@@ -74,7 +74,7 @@ export default class TransactionService {
|
|
|
74
74
|
private sendPermitTransaction;
|
|
75
75
|
private sendDutchTransaction;
|
|
76
76
|
private removeTransaction;
|
|
77
|
-
|
|
77
|
+
updateTransaction(id: string, data: Partial<Omit<SWTransactionBase, 'id'>>): void;
|
|
78
78
|
private getTransactionLink;
|
|
79
79
|
private transactionToHistories;
|
|
80
80
|
private onSigned;
|
|
@@ -1371,6 +1371,15 @@ export default class TransactionService {
|
|
|
1371
1371
|
case ExtrinsicType.UNKNOWN:
|
|
1372
1372
|
break;
|
|
1373
1373
|
}
|
|
1374
|
+
const txData = transaction.data;
|
|
1375
|
+
const signer = txData === null || txData === void 0 ? void 0 : txData.signer;
|
|
1376
|
+
if (signer) {
|
|
1377
|
+
const currentAdditionalInfo = historyItem.additionalInfo ? historyItem.additionalInfo : {};
|
|
1378
|
+
historyItem.additionalInfo = {
|
|
1379
|
+
...currentAdditionalInfo,
|
|
1380
|
+
signer
|
|
1381
|
+
};
|
|
1382
|
+
}
|
|
1374
1383
|
try {
|
|
1375
1384
|
// Return one more history record if transaction send to account in the wallets
|
|
1376
1385
|
const toAccount = (historyItem === null || historyItem === void 0 ? void 0 : historyItem.to) && keyring.getPair(historyItem.to);
|
|
@@ -35,6 +35,8 @@ export interface RequestSubmitTransfer extends BaseRequestSign, TransactionFee {
|
|
|
35
35
|
value: string;
|
|
36
36
|
transferBounceable?: boolean;
|
|
37
37
|
isSubstrateECDSATransaction?: boolean;
|
|
38
|
+
maxTransferableWithoutFee?: string;
|
|
39
|
+
maxTransferable?: string;
|
|
38
40
|
}
|
|
39
41
|
export interface RequestSubmitSignPsbtTransfer extends BaseRequestSign {
|
|
40
42
|
id: string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
1
2
|
import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
2
3
|
import { MultisigTxType } from '@subwallet/extension-base/services/multisig-service';
|
|
3
4
|
import { DecodeCallDataResponse } from '@subwallet/extension-base/services/multisig-service/utils';
|
|
@@ -44,6 +45,17 @@ export interface InitMultisigTxResponse {
|
|
|
44
45
|
networkFee: string;
|
|
45
46
|
error?: SelectSignatoryError;
|
|
46
47
|
}
|
|
48
|
+
export interface PrepareMultisigSignRequest {
|
|
49
|
+
id: string;
|
|
50
|
+
signer: string;
|
|
51
|
+
}
|
|
52
|
+
export interface PrepareMultisigSignResponse {
|
|
53
|
+
submittedCallData: HexString;
|
|
54
|
+
callData: HexString;
|
|
55
|
+
depositAmount: string;
|
|
56
|
+
networkFee: string;
|
|
57
|
+
errors: TransactionError[];
|
|
58
|
+
}
|
|
47
59
|
export interface RequestGetSignableAccountInfos {
|
|
48
60
|
multisigProxyId: string;
|
|
49
61
|
chain: string;
|