Skip to content

Commit 587bad4

Browse files
committed
Merge branch 'refs/heads/subwallet-dev' into koni/dev/issue-4321
# Conflicts: # packages/extension-base/src/services/swap-service/handler/uniswap-handler.ts
2 parents 0bd7b6b + 7ce1b90 commit 587bad4

File tree

84 files changed

+999
-434
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+999
-434
lines changed

.123trigger

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,4 +197,6 @@
197197
1.3.29
198198
1.3.30
199199
1.3.31
200-
1.3.32
200+
1.3.32
201+
1.3.33
202+
1.3.34

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
# CHANGELOG
22

3+
## 1.3.34
4+
Build date: May 05, 2025.
5+
6+
Features & Update:
7+
- Support extension side panel (#4091)
8+
- Update padding for the time frame selector for price chart
9+
10+
11+
## 1.3.33
12+
Build date: Apr 30, 2025.
13+
14+
Features & Update:
15+
- Support price chart (#4122, #4266)
16+
- Update link for "Contact support" (#4324)
17+
18+
319
## 1.3.32
420
Build date: Apr 26, 2025.
521

CONTRIBUTORS

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
3017 AnhMTV Release version 1.3.32
1+
3022 AnhMTV Release version 1.3.34
22
2668 Nam Phạm disable block explorer for truth network
33
2549 S2kael [Isssue-4163] Update stable version for chain-list
44
869 lw-cdm [MasterAccount] Update logic to reorder account on select account modal
@@ -8,7 +8,7 @@
88
354 Thiendekaco [Issue-3707] [fix] Unified account - fix dApp ui bug #4
99
286 Frenkie Nguyen
1010
240 tunghp2002 [Issue-4290] Update: Change earning positions
11-
217 lw [Issue-4114] fix: Fix error in transaction submission screen
11+
237 lw [Issue-4332] refactor: Update padding for the time frame selector
1212
186 dominhquang [Issue-3507] Fix UI bug for Notification
1313
185 quangdo
1414
170 lw-cdm
@@ -22,12 +22,12 @@
2222
63 Roman fix ui issues
2323
53 Dominhquangdev update Bridge code
2424
28 S2kael [Issue-3658] Hide estimate fee field on Send Fund screen with cardano chain
25-
24 Thiendekaco [Issue-4100] fix: resolve PR feedback
25+
28 Thiendekaco [Issue-4100] fix: resolve PR feedback
26+
15 Thiendekaco [Issue-4122] feat: update price history product url
2627
10 Trang Trịnh api get karura and acala nfts
2728
10 tunghp2002
2829
9 Minh Le
2930
9 minhld1029 [#115] [ForgetAccount] catch exception refList undefined
30-
8 Thiendekaco [Issue-4100] fix: resolve ui bug
3131
7 Ivan Rukhavets Mention derivation in FAQ (#334)
3232
6 unknown refactor code
3333
5 anhnhu [issue-2231]: add condition branch_name webapp-dev auto increase run scripts change build number

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"url": "https://github.com/Koniverse/Subwallet-V2.git"
1111
},
1212
"sideEffects": false,
13-
"version": "1.3.32",
13+
"version": "1.3.34",
1414
"workspaces": [
1515
"packages/*"
1616
],

packages/extension-base/package.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"./detectPackage.cjs"
1818
],
1919
"type": "module",
20-
"version": "1.3.32-0",
20+
"version": "1.3.34-0",
2121
"main": "index.js",
2222
"dependencies": {
2323
"@acala-network/api": "^5.0.2",
@@ -55,12 +55,12 @@
5555
"@sora-substrate/type-definitions": "^1.17.7",
5656
"@substrate/connect": "^0.8.9",
5757
"@subwallet/chain-list": "0.2.104",
58-
"@subwallet/extension-base": "^1.3.32-0",
59-
"@subwallet/extension-chains": "^1.3.32-0",
60-
"@subwallet/extension-dapp": "^1.3.32-0",
61-
"@subwallet/extension-inject": "^1.3.32-0",
58+
"@subwallet/extension-base": "^1.3.34-0",
59+
"@subwallet/extension-chains": "^1.3.34-0",
60+
"@subwallet/extension-dapp": "^1.3.34-0",
61+
"@subwallet/extension-inject": "^1.3.34-0",
6262
"@subwallet/keyring": "^0.1.11",
63-
"@subwallet/subwallet-api-sdk": "^1.3.32-0",
63+
"@subwallet/subwallet-api-sdk": "^1.3.34-0",
6464
"@subwallet/ui-keyring": "^0.1.11",
6565
"@ton/core": "^0.56.3",
6666
"@ton/crypto": "^3.2.0",
@@ -105,7 +105,7 @@
105105
"web3-utils": "^1.10.0"
106106
},
107107
"devDependencies": {
108-
"@subwallet/extension-mocks": "^1.3.32-0",
108+
"@subwallet/extension-mocks": "^1.3.34-0",
109109
"@types/uuid": "^9.0.1"
110110
}
111111
}

packages/extension-base/src/core/logic-validation/request.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@ export async function validationEvmDataTransactionMiddleware (koni: KoniState, u
455455
transaction.maxPriorityFeePerGas = feeCombine.maxPriorityFeePerGas;
456456
} else if (feeCombine.gasPrice) {
457457
estimateGas = new BigN((feeCombine.gasPrice || 0)).multipliedBy(gasLimit).toFixed(0);
458-
transaction.maxPriorityFeePerGas = feeCombine.gasPrice;
458+
transaction.gasPrice = feeCombine.gasPrice;
459459
}
460460
}
461461
} catch (e) {

packages/extension-base/src/koni/background/handlers/Extension.ts

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { _AssetRef, _AssetType, _ChainAsset, _ChainInfo, _MultiChainAsset } from
77
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
88
import { withErrorLog } from '@subwallet/extension-base/background/handlers/helpers';
99
import { createSubscription } from '@subwallet/extension-base/background/handlers/subscriptions';
10-
import { AccountExternalError, AddressBookInfo, AmountData, AmountDataWithId, AssetSetting, AssetSettingUpdateReq, BondingOptionParams, BrowserConfirmationType, CampaignBanner, CampaignData, CampaignDataType, ChainType, CronReloadRequest, CrowdloanJson, ExternalRequestPromiseStatus, ExtrinsicType, HistoryTokenPriceJSON, KeyringState, MantaPayEnableMessage, MantaPayEnableParams, MantaPayEnableResponse, MantaPaySyncState, MetadataItem, NftCollection, NftJson, NftTransactionRequest, NftTransactionResponse, PriceJson, RequestAccountCreateExternalV2, RequestAccountCreateHardwareMultiple, RequestAccountCreateHardwareV2, RequestAccountCreateWithSecretKey, RequestAccountExportPrivateKey, RequestAddInjectedAccounts, RequestApproveConnectWalletSession, RequestApproveWalletConnectNotSupport, RequestAuthorization, RequestAuthorizationBlock, RequestAuthorizationPerAccount, RequestAuthorizationPerSite, RequestAuthorizeApproveV2, RequestBondingSubmit, RequestCameraSettings, RequestCampaignBannerComplete, RequestChangeEnableChainPatrol, RequestChangeLanguage, RequestChangeMasterPassword, RequestChangePriceCurrency, RequestChangeShowBalance, RequestChangeShowZeroBalance, RequestChangeTimeAutoLock, RequestConfirmationComplete, RequestConfirmationCompleteCardano, RequestConfirmationCompleteTon, RequestConnectWalletConnect, RequestCrowdloanContributions, RequestDeleteContactAccount, RequestDisconnectWalletConnectSession, RequestEditContactAccount, RequestFindRawMetadata, RequestForgetSite, RequestFreeBalance, RequestGetHistoryTokenPriceData, RequestGetTransaction, RequestKeyringExportMnemonic, RequestMigratePassword, RequestMigrateSoloAccount, RequestMigrateUnifiedAndFetchEligibleSoloAccounts, RequestParseEvmContractInput, RequestParseTransactionSubstrate, RequestPassPhishingPage, RequestPingSession, RequestQrParseRLP, RequestQrSignEvm, RequestQrSignSubstrate, RequestRejectConnectWalletSession, RequestRejectExternalRequest, RequestRejectWalletConnectNotSupport, RequestRemoveInjectedAccounts, RequestResetWallet, RequestResolveExternalRequest, RequestSaveAppConfig, RequestSaveBrowserConfig, RequestSaveMigrationAcknowledgedStatus, RequestSaveOSConfig, RequestSaveRecentAccount, RequestSaveUnifiedAccountMigrationInProgress, RequestSettingsType, RequestSigningApprovePasswordV2, RequestStakePoolingBonding, RequestStakePoolingUnbonding, RequestSubscribeHistory, RequestSubstrateNftSubmitTransaction, RequestTuringCancelStakeCompound, RequestTuringStakeCompound, RequestUnbondingSubmit, RequestUnlockKeyring, RequestUnlockType, ResolveAddressToDomainRequest, ResolveDomainRequest, ResponseAccountCreateWithSecretKey, ResponseAccountExportPrivateKey, ResponseChangeMasterPassword, ResponseFindRawMetadata, ResponseKeyringExportMnemonic, ResponseMigratePassword, ResponseMigrateSoloAccount, ResponseMigrateUnifiedAndFetchEligibleSoloAccounts, ResponseNftImport, ResponseParseEvmContractInput, ResponseParseTransactionSubstrate, ResponseQrParseRLP, ResponseQrSignEvm, ResponseQrSignSubstrate, ResponseRejectExternalRequest, ResponseResetWallet, ResponseResolveExternalRequest, ResponseSubscribeCurrentTokenPrice, ResponseSubscribeHistory, ResponseUnlockKeyring, ShowCampaignPopupRequest, StakingJson, StakingRewardJson, StakingType, ThemeNames, TokenPriorityDetails, TransactionHistoryItem, TransactionResponse, UiSettings, ValidateNetworkRequest, ValidateNetworkResponse, ValidatorInfo } from '@subwallet/extension-base/background/KoniTypes';
10+
import { AccountExternalError, AddressBookInfo, AmountData, AmountDataWithId, AssetSetting, AssetSettingUpdateReq, BondingOptionParams, BrowserConfirmationType, CampaignBanner, CampaignData, CampaignDataType, ChainType, CronReloadRequest, CrowdloanJson, ExternalRequestPromiseStatus, ExtrinsicType, HistoryTokenPriceJSON, KeyringState, MantaPayEnableMessage, MantaPayEnableParams, MantaPayEnableResponse, MantaPaySyncState, NftCollection, NftJson, NftTransactionRequest, NftTransactionResponse, PriceJson, RequestAccountCreateExternalV2, RequestAccountCreateHardwareMultiple, RequestAccountCreateHardwareV2, RequestAccountCreateWithSecretKey, RequestAccountExportPrivateKey, RequestAddInjectedAccounts, RequestApproveConnectWalletSession, RequestApproveWalletConnectNotSupport, RequestAuthorization, RequestAuthorizationBlock, RequestAuthorizationPerAccount, RequestAuthorizationPerSite, RequestAuthorizeApproveV2, RequestBondingSubmit, RequestCameraSettings, RequestCampaignBannerComplete, RequestChangeEnableChainPatrol, RequestChangeLanguage, RequestChangeMasterPassword, RequestChangePriceCurrency, RequestChangeShowBalance, RequestChangeShowZeroBalance, RequestChangeTimeAutoLock, RequestConfirmationComplete, RequestConfirmationCompleteCardano, RequestConfirmationCompleteTon, RequestConnectWalletConnect, RequestCrowdloanContributions, RequestDeleteContactAccount, RequestDisconnectWalletConnectSession, RequestEditContactAccount, RequestFindRawMetadata, RequestForgetSite, RequestFreeBalance, RequestGetHistoryTokenPriceData, RequestGetTransaction, RequestKeyringExportMnemonic, RequestMigratePassword, RequestMigrateSoloAccount, RequestMigrateUnifiedAndFetchEligibleSoloAccounts, RequestParseEvmContractInput, RequestParseTransactionSubstrate, RequestPassPhishingPage, RequestPingSession, RequestQrParseRLP, RequestQrSignEvm, RequestQrSignSubstrate, RequestRejectConnectWalletSession, RequestRejectExternalRequest, RequestRejectWalletConnectNotSupport, RequestRemoveInjectedAccounts, RequestResetWallet, RequestResolveExternalRequest, RequestSaveAppConfig, RequestSaveBrowserConfig, RequestSaveMigrationAcknowledgedStatus, RequestSaveOSConfig, RequestSaveRecentAccount, RequestSaveUnifiedAccountMigrationInProgress, RequestSettingsType, RequestSigningApprovePasswordV2, RequestStakePoolingBonding, RequestStakePoolingUnbonding, RequestSubscribeHistory, RequestSubstrateNftSubmitTransaction, RequestTuringCancelStakeCompound, RequestTuringStakeCompound, RequestUnbondingSubmit, RequestUnlockKeyring, RequestUnlockType, ResolveAddressToDomainRequest, ResolveDomainRequest, ResponseAccountCreateWithSecretKey, ResponseAccountExportPrivateKey, ResponseChangeMasterPassword, ResponseFindRawMetadata, ResponseKeyringExportMnemonic, ResponseMigratePassword, ResponseMigrateSoloAccount, ResponseMigrateUnifiedAndFetchEligibleSoloAccounts, ResponseNftImport, ResponseParseEvmContractInput, ResponseParseTransactionSubstrate, ResponseQrParseRLP, ResponseQrSignEvm, ResponseQrSignSubstrate, ResponseRejectExternalRequest, ResponseResetWallet, ResponseResolveExternalRequest, ResponseSubscribeCurrentTokenPrice, ResponseSubscribeHistory, ResponseUnlockKeyring, ShowCampaignPopupRequest, StakingJson, StakingRewardJson, StakingType, ThemeNames, TokenPriorityDetails, TransactionHistoryItem, TransactionResponse, UiSettings, ValidateNetworkRequest, ValidateNetworkResponse, ValidatorInfo } from '@subwallet/extension-base/background/KoniTypes';
1111
import { AccountAuthType, AuthorizeRequest, MessageTypes, MetadataRequest, RequestAccountExport, RequestAuthorizeCancel, RequestAuthorizeReject, RequestCurrentAccountAddress, RequestMetadataApprove, RequestMetadataReject, RequestSigningApproveSignature, RequestSigningCancel, RequestTypes, ResponseAccountExport, ResponseAuthorizeList, ResponseType, SigningRequest, WindowOpenParams } from '@subwallet/extension-base/background/types';
1212
import { TransactionWarning } from '@subwallet/extension-base/background/warnings/TransactionWarning';
1313
import { _SUPPORT_TOKEN_PAY_FEE_GROUP, ALL_ACCOUNT_KEY, LATEST_SESSION } from '@subwallet/extension-base/constants';
@@ -35,7 +35,7 @@ import { getERC20TransactionObject, getERC721Transaction, getEVMTransactionObjec
3535
import { createSubstrateExtrinsic } from '@subwallet/extension-base/services/balance-service/transfer/token';
3636
import { createTonTransaction } from '@subwallet/extension-base/services/balance-service/transfer/ton-transfer';
3737
import { createAcrossBridgeExtrinsic, createAvailBridgeExtrinsicFromAvail, createAvailBridgeTxFromEth, createPolygonBridgeExtrinsic, createSnowBridgeExtrinsic, CreateXcmExtrinsicProps, createXcmExtrinsicV2, dryRunXcmExtrinsicV2, FunctionCreateXcmExtrinsic } from '@subwallet/extension-base/services/balance-service/transfer/xcm';
38-
import { _isAcrossChainBridge, getAcrossQuote } from '@subwallet/extension-base/services/balance-service/transfer/xcm/acrossBridge';
38+
import { _isAcrossChainBridge, AcrossQuote, getAcrossQuote } from '@subwallet/extension-base/services/balance-service/transfer/xcm/acrossBridge';
3939
import { getClaimTxOnAvail, getClaimTxOnEthereum, isAvailChainBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge';
4040
import { _isPolygonChainBridge, getClaimPolygonBridge, isClaimedPolygonBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge';
4141
import { _isPosChainBridge, getClaimPosBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/posBridge';
@@ -1651,7 +1651,8 @@ export default class KoniExtension {
16511651
}
16521652

16531653
if (isAcrossBridgeTransfer) {
1654-
const metadata = await getAcrossQuote(params);
1654+
const data = await getAcrossQuote(params);
1655+
const metadata = data.metadata as AcrossQuote;
16551656

16561657
inputData.metadata = {
16571658
amountOut: metadata.outputAmount,
@@ -2860,23 +2861,18 @@ export default class KoniExtension {
28602861
if (isJsonPayload(payload)) {
28612862
const [, chainInfo] = this.#koniState.findNetworkKeyByGenesisHash(payload.genesisHash);
28622863

2863-
const allRegistry: RegistrySource[] = [
2864+
const registries = await Promise.all([
28642865
setupApiRegistry(chainInfo, this.#koniState),
2865-
setupDatabaseRegistry(
2866-
await this.#koniState.chainService.getMetadataByHash(payload.genesisHash) as MetadataItem,
2867-
chainInfo,
2868-
payload
2869-
),
2870-
setupDappRegistry(
2871-
this.#koniState.knownMetadata.find((meta: MetadataDef) => meta.genesisHash === payload.genesisHash) as MetadataDef,
2872-
payload
2873-
)
2874-
].filter((item): item is RegistrySource => item !== null && item.registry !== undefined);
2875-
2876-
if (allRegistry.length === 0) {
2866+
setupDatabaseRegistry(chainInfo, payload, this.#koniState),
2867+
setupDappRegistry(payload, this.#koniState)
2868+
]);
2869+
2870+
const validRegistries = registries.filter((item): item is RegistrySource => !!item?.registry);
2871+
2872+
if (validRegistries.length === 0) {
28772873
registry.setSignedExtensions(payload.signedExtensions);
28782874
} else {
2879-
registry = getSuitableRegistry(allRegistry, payload);
2875+
registry = getSuitableRegistry(validRegistries, payload);
28802876
}
28812877
}
28822878

packages/extension-base/src/koni/background/utils.ts

Lines changed: 76 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import { _ChainInfo } from '@subwallet/chain-list/types';
55
import { MetadataItem } from '@subwallet/extension-base/background/KoniTypes';
6+
import { wait } from '@subwallet/extension-base/utils';
67
import { metadataExpand } from '@subwallet/extension-chains/bundle';
78
import { MetadataDef } from '@subwallet/extension-inject/types';
89

@@ -44,51 +45,97 @@ export function getSuitableRegistry (registries: RegistrySource[], payload: Sign
4445
return sortedRegistries[0].registry;
4546
}
4647

47-
export function setupApiRegistry (chainInfo: _ChainInfo | undefined, koniState: KoniState): RegistrySource | null {
48+
export async function setupApiRegistry (chainInfo: _ChainInfo | undefined, koniState: KoniState): Promise<RegistrySource | null> {
4849
if (!chainInfo) {
4950
return null;
5051
}
5152

52-
const api = koniState.getSubstrateApi(chainInfo.slug).api;
53-
const apiSpecVersion = api?.runtimeVersion.specVersion.toString();
54-
const registry = api?.registry as unknown as TypeRegistry;
53+
try {
54+
const api = koniState.getSubstrateApi(chainInfo.slug).api;
5555

56-
return {
57-
registry,
58-
specVersion: apiSpecVersion
59-
};
56+
if (!api) {
57+
return null;
58+
}
59+
60+
// Wait for the API to be ready or timeout after 1 second
61+
await Promise.race([
62+
wait(1000).then(() => {
63+
throw new Error('Timeout waiting for API to be ready');
64+
}),
65+
api.isReady
66+
]);
67+
68+
// Extract the spec version and registry
69+
const apiSpecVersion = api.runtimeVersion.specVersion.toString();
70+
const registry = api.registry as TypeRegistry;
71+
72+
return {
73+
registry,
74+
specVersion: apiSpecVersion
75+
};
76+
} catch (e) {
77+
console.error('Error in setupApiRegistry:', e);
78+
79+
return null;
80+
}
6081
}
6182

62-
export function setupDatabaseRegistry (metadata: MetadataItem, chainInfo: _ChainInfo | undefined, payload: SignerPayloadJSON): RegistrySource | null {
63-
if (!metadata || !metadata.genesisHash || !chainInfo) {
83+
export async function setupDatabaseRegistry (chainInfo: _ChainInfo | undefined, payload: SignerPayloadJSON, koniState: KoniState): Promise<RegistrySource | null> {
84+
if (!chainInfo) {
85+
console.warn('setupDatabaseRegistry: Missing chainInfo');
86+
6487
return null;
6588
}
6689

67-
const registry = new TypeRegistry();
68-
const _metadata = new Metadata(registry, metadata.hexValue);
90+
try {
91+
const metadata = await koniState.chainService.getMetadataByHash(payload.genesisHash) as MetadataItem;
6992

70-
registry.register(metadata.types);
71-
registry.setChainProperties(registry.createType('ChainProperties', metadata.tokenInfo) as unknown as ChainProperties);
72-
registry.setMetadata(_metadata, payload.signedExtensions, metadata.userExtensions);
93+
if (!metadata?.genesisHash) {
94+
console.warn('setupDatabaseRegistry: Metadata not found or invalid for genesisHash:', payload.genesisHash);
7395

74-
return {
75-
registry,
76-
specVersion: metadata.specVersion
77-
};
78-
}
96+
return null;
97+
}
98+
99+
const registry = new TypeRegistry();
100+
const _metadata = new Metadata(registry, metadata.hexValue);
101+
102+
registry.register(metadata.types);
103+
registry.setChainProperties(registry.createType('ChainProperties', metadata.tokenInfo) as unknown as ChainProperties);
104+
registry.setMetadata(_metadata, payload.signedExtensions, metadata.userExtensions);
105+
106+
return {
107+
registry,
108+
specVersion: metadata.specVersion
109+
};
110+
} catch (e) {
111+
console.error('setupDatabaseRegistry: Error setting up database registry:', e);
79112

80-
export function setupDappRegistry (metadata: MetadataDef, payload: SignerPayloadJSON): RegistrySource | null {
81-
if (!metadata || !metadata.genesisHash) {
82113
return null;
83114
}
115+
}
116+
117+
export function setupDappRegistry (payload: SignerPayloadJSON, koniState: KoniState): Promise<RegistrySource | null> {
118+
return new Promise((resolve) => {
119+
const metadata = koniState.knownMetadata.find((meta: MetadataDef) => meta.genesisHash === payload.genesisHash);
120+
121+
if (!metadata?.genesisHash) {
122+
return resolve(null);
123+
}
124+
125+
try {
126+
const expanded = metadataExpand(metadata, false);
127+
const registry = expanded.registry;
84128

85-
const expanded = metadataExpand(metadata, false);
86-
const registry = expanded.registry;
129+
registry.setSignedExtensions(payload.signedExtensions, expanded.definition.userExtensions);
87130

88-
registry.setSignedExtensions(payload.signedExtensions, expanded.definition.userExtensions);
131+
resolve({
132+
registry,
133+
specVersion: metadata.specVersion
134+
});
135+
} catch (e) {
136+
console.error('setupDappRegistry: Error setting up DApp registry:', e);
89137

90-
return {
91-
registry,
92-
specVersion: metadata.specVersion
93-
};
138+
resolve(null);
139+
}
140+
});
94141
}

0 commit comments

Comments
 (0)