Skip to content

Commit

Permalink
Merge branch 'koni/dev/issue-4026' into web-runner-cron
Browse files Browse the repository at this point in the history
  • Loading branch information
PDTnhah committed Feb 11, 2025
2 parents d16a99e + 67e34f5 commit 1242739
Show file tree
Hide file tree
Showing 18 changed files with 266 additions and 47 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@
"@polkadot/types-support": "^15.0.1",
"@polkadot/util": "^13.2.3",
"@polkadot/util-crypto": "^13.2.3",
"@subwallet/chain-list": "0.2.99-beta.14",
"@subwallet/chain-list": "0.2.98",
"@subwallet/keyring": "^0.1.8-beta.0",
"@subwallet/react-ui": "5.1.2-b79",
"@subwallet/ui-keyring": "0.1.8-beta.0",
Expand Down
12 changes: 12 additions & 0 deletions packages/extension-base/src/background/KoniTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1720,6 +1720,13 @@ export interface RequestAddPspToken {
};
}

// Popular tokens

export interface TokenPriorityDetails {
tokenGroup: Record<string, number>;
token: Record<string, number>
}

/// WalletConnect

// Connect
Expand Down Expand Up @@ -2308,6 +2315,11 @@ export interface KoniRequestSignatures {

/* Ledger */
'pri(ledger.generic.allow)': [null, string[], string[]];
/* Ledger */

/* Popular tokens */
'pri(tokens.subscribePriority)': [null, TokenPriorityDetails, TokenPriorityDetails];
/* Popular tokens */
}

export interface ApplicationMetadataType {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -575,7 +575,7 @@ export function getSupportedDaysByHistoryDepth (erasPerDay: number, maxSupported
const maxSupportDay = Math.floor(maxSupportedEras / erasPerDay);

if (liveDay && liveDay <= 30) {
return Math.min(liveDay - 1, maxSupportDay);
return Math.min(Math.floor(liveDay - 1), maxSupportDay);
}

if (maxSupportDay > 30) {
Expand Down
31 changes: 27 additions & 4 deletions packages/extension-base/src/koni/background/handlers/Extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { _AssetRef, _AssetType, _ChainAsset, _ChainInfo, _MultiChainAsset } from
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
import { withErrorLog } from '@subwallet/extension-base/background/handlers/helpers';
import { createSubscription } from '@subwallet/extension-base/background/handlers/subscriptions';
import { AccountExternalError, AddressBookInfo, AmountData, AmountDataWithId, AssetSetting, AssetSettingUpdateReq, BondingOptionParams, BrowserConfirmationType, CampaignBanner, CampaignData, CampaignDataType, ChainType, CronReloadRequest, CrowdloanJson, ExternalRequestPromiseStatus, ExtrinsicType, 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, RequestConfirmationCompleteTon, RequestConnectWalletConnect, RequestCrowdloanContributions, RequestDeleteContactAccount, RequestDisconnectWalletConnectSession, RequestEditContactAccount, RequestFindRawMetadata, RequestForgetSite, RequestFreeBalance, RequestGetTransaction, RequestKeyringExportMnemonic, RequestMaxTransferable, RequestMigratePassword, RequestParseEvmContractInput, RequestParseTransactionSubstrate, RequestPassPhishingPage, RequestQrParseRLP, RequestQrSignEvm, RequestQrSignSubstrate, RequestRejectConnectWalletSession, RequestRejectExternalRequest, RequestRejectWalletConnectNotSupport, RequestRemoveInjectedAccounts, RequestResetWallet, RequestResolveExternalRequest, RequestSaveAppConfig, RequestSaveBrowserConfig, RequestSaveOSConfig, RequestSaveRecentAccount, RequestSettingsType, RequestSigningApprovePasswordV2, RequestStakePoolingBonding, RequestStakePoolingUnbonding, RequestSubscribeHistory, RequestSubstrateNftSubmitTransaction, RequestTuringCancelStakeCompound, RequestTuringStakeCompound, RequestUnbondingSubmit, RequestUnlockKeyring, RequestUnlockType, ResolveAddressToDomainRequest, ResolveDomainRequest, ResponseAccountCreateWithSecretKey, ResponseAccountExportPrivateKey, ResponseChangeMasterPassword, ResponseFindRawMetadata, ResponseKeyringExportMnemonic, ResponseMigratePassword, ResponseNftImport, ResponseParseEvmContractInput, ResponseParseTransactionSubstrate, ResponseQrParseRLP, ResponseQrSignEvm, ResponseQrSignSubstrate, ResponseRejectExternalRequest, ResponseResetWallet, ResponseResolveExternalRequest, ResponseSubscribeHistory, ResponseUnlockKeyring, ShowCampaignPopupRequest, StakingJson, StakingRewardJson, StakingType, SufficientMetadata, ThemeNames, TransactionHistoryItem, TransactionResponse, ValidateNetworkRequest, ValidateNetworkResponse, ValidatorInfo } from '@subwallet/extension-base/background/KoniTypes';
import { AccountExternalError, AddressBookInfo, AmountData, AmountDataWithId, AssetSetting, AssetSettingUpdateReq, BondingOptionParams, BrowserConfirmationType, CampaignBanner, CampaignData, CampaignDataType, ChainType, CronReloadRequest, CrowdloanJson, ExternalRequestPromiseStatus, ExtrinsicType, 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, RequestConfirmationCompleteTon, RequestConnectWalletConnect, RequestCrowdloanContributions, RequestDeleteContactAccount, RequestDisconnectWalletConnectSession, RequestEditContactAccount, RequestFindRawMetadata, RequestForgetSite, RequestFreeBalance, RequestGetTransaction, RequestKeyringExportMnemonic, RequestMaxTransferable, RequestMigratePassword, RequestParseEvmContractInput, RequestParseTransactionSubstrate, RequestPassPhishingPage, RequestQrParseRLP, RequestQrSignEvm, RequestQrSignSubstrate, RequestRejectConnectWalletSession, RequestRejectExternalRequest, RequestRejectWalletConnectNotSupport, RequestRemoveInjectedAccounts, RequestResetWallet, RequestResolveExternalRequest, RequestSaveAppConfig, RequestSaveBrowserConfig, RequestSaveOSConfig, RequestSaveRecentAccount, RequestSettingsType, RequestSigningApprovePasswordV2, RequestStakePoolingBonding, RequestStakePoolingUnbonding, RequestSubscribeHistory, RequestSubstrateNftSubmitTransaction, RequestTuringCancelStakeCompound, RequestTuringStakeCompound, RequestUnbondingSubmit, RequestUnlockKeyring, RequestUnlockType, ResolveAddressToDomainRequest, ResolveDomainRequest, ResponseAccountCreateWithSecretKey, ResponseAccountExportPrivateKey, ResponseChangeMasterPassword, ResponseFindRawMetadata, ResponseKeyringExportMnemonic, ResponseMigratePassword, ResponseNftImport, ResponseParseEvmContractInput, ResponseParseTransactionSubstrate, ResponseQrParseRLP, ResponseQrSignEvm, ResponseQrSignSubstrate, ResponseRejectExternalRequest, ResponseResetWallet, ResponseResolveExternalRequest, ResponseSubscribeHistory, ResponseUnlockKeyring, ShowCampaignPopupRequest, StakingJson, StakingRewardJson, StakingType, SufficientMetadata, ThemeNames, TokenPriorityDetails, TransactionHistoryItem, TransactionResponse, ValidateNetworkRequest, ValidateNetworkResponse, ValidatorInfo } from '@subwallet/extension-base/background/KoniTypes';
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';
import { TransactionWarning } from '@subwallet/extension-base/background/warnings/TransactionWarning';
import { ALL_ACCOUNT_KEY, LATEST_SESSION, XCM_FEE_RATIO } from '@subwallet/extension-base/constants';
Expand Down Expand Up @@ -1782,7 +1782,6 @@ export default class KoniExtension {
const substrateApi = this.#koniState.chainService.getSubstrateApi(originTokenInfo.originChain);
const chainInfoMap = this.#koniState.chainService.getChainInfoMap();
const destinationTokenInfo = this.#koniState.getXcmEqualAssetByChain(destChain, originTokenInfo.slug);
const existentialDeposit = originTokenInfo.minAmount || '0';

// todo: improve this case. Currently set 1 AVAIL for covering fee as default.
const isSpecialBridgeFromAvail = originTokenInfo.slug === 'avail_mainnet-NATIVE-AVAIL' && destChain === COMMON_CHAIN_SLUGS.ETHEREUM;
Expand All @@ -1795,9 +1794,9 @@ export default class KoniExtension {
]);

const bnMaxTransferable = new BigN(value);
const estimatedFee = isSpecialBridgeFromAvail ? specialBridgeFromAvailFee : bnMockExecutionFee.multipliedBy(XCM_FEE_RATIO).plus(new BigN(existentialDeposit));
const txFee = isSpecialBridgeFromAvail ? specialBridgeFromAvailFee : bnMockExecutionFee.multipliedBy(XCM_FEE_RATIO);

return bnMaxTransferable.minus(estimatedFee);
return bnMaxTransferable.minus(txFee);
}

return new BigN(0);
Expand Down Expand Up @@ -3898,6 +3897,24 @@ export default class KoniExtension {

/* Ledger */

/* Popular tokens */

private subscribePriorityTokens (id: string, port: chrome.runtime.Port): TokenPriorityDetails {
const cb = createSubscription<'pri(tokens.subscribePriority)'>(id, port);

const subscription = this.#koniState.chainService.observable.priorityTokens.subscribe(cb);

this.createUnsubscriptionHandle(id, subscription.unsubscribe);

port.onDisconnect.addListener((): void => {
this.cancelSubscription(id);
});

return this.#koniState.chainService.value.priorityTokens;
}

/* Popular tokens */

// --------------------------------------------------------------
// eslint-disable-next-line @typescript-eslint/require-await
public async handle<TMessageType extends MessageTypes> (id: string, type: TMessageType, request: RequestTypes[TMessageType], port: chrome.runtime.Port): Promise<ResponseType<TMessageType>> {
Expand Down Expand Up @@ -4508,6 +4525,12 @@ export default class KoniExtension {
case 'pri(ledger.generic.allow)':
return this.subscribeLedgerGenericAllowChains(id, port);
/* Ledger */

/* Priority tokens */
case 'pri(tokens.subscribePriority)':
return this.subscribePriorityTokens(id, port);
/* Priority tokens */

// Default
default:
throw new Error(`Unable to handle message of type ${type}`);
Expand Down
29 changes: 28 additions & 1 deletion packages/extension-base/src/services/chain-service/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import { AssetLogoMap, AssetRefMap, ChainAssetMap, ChainInfoMap, ChainLogoMap, MultiChainAssetMap } from '@subwallet/chain-list';
import { _AssetRef, _AssetRefPath, _AssetType, _ChainAsset, _ChainInfo, _ChainStatus, _EvmInfo, _MultiChainAsset, _SubstrateChainType, _SubstrateInfo, _TonInfo } from '@subwallet/chain-list/types';
import { AssetSetting, MetadataItem, ValidateNetworkResponse } from '@subwallet/extension-base/background/KoniTypes';
import { AssetSetting, MetadataItem, TokenPriorityDetails, ValidateNetworkResponse } from '@subwallet/extension-base/background/KoniTypes';
import { _DEFAULT_ACTIVE_CHAINS, _ZK_ASSET_PREFIX, LATEST_CHAIN_DATA_FETCHING_INTERVAL } from '@subwallet/extension-base/services/chain-service/constants';
import { EvmChainHandler } from '@subwallet/extension-base/services/chain-service/handler/EvmChainHandler';
import { MantaPrivateHandler } from '@subwallet/extension-base/services/chain-service/handler/manta/MantaPrivateHandler';
Expand Down Expand Up @@ -92,6 +92,7 @@ export class ChainService {
private assetLogoMapSubject = new BehaviorSubject<Record<string, string>>(AssetLogoMap);
private chainLogoMapSubject = new BehaviorSubject<Record<string, string>>(ChainLogoMap);
private ledgerGenericAllowChainsSubject = new BehaviorSubject<string[]>([]);
private priorityTokensSubject = new BehaviorSubject({} as TokenPriorityDetails);

// Todo: Update to new store indexed DB
private store: AssetSettingStore = new AssetSettingStore();
Expand Down Expand Up @@ -123,20 +124,28 @@ export class ChainService {

public get value () {
const ledgerGenericAllowChains = this.ledgerGenericAllowChainsSubject;
const priorityTokens = this.priorityTokensSubject;

return {
get ledgerGenericAllowChains () {
return ledgerGenericAllowChains.value;
},
get priorityTokens () {
return priorityTokens.value;
}
};
}

public get observable () {
const ledgerGenericAllowChains = this.ledgerGenericAllowChainsSubject;
const priorityTokens = this.priorityTokensSubject;

return {
get ledgerGenericAllowChains () {
return ledgerGenericAllowChains.asObservable();
},
get priorityTokens () {
return priorityTokens.asObservable();
}
};
}
Expand Down Expand Up @@ -767,6 +776,11 @@ export class ChainService {
this.logger.log('Finished updating latest ledger generic allow chains');
}

handleLatestPriorityTokens (latestPriorityTokens: TokenPriorityDetails) {
this.priorityTokensSubject.next(latestPriorityTokens);
this.logger.log('Finished updating latest popular tokens');
}

handleLatestData () {
this.fetchLatestChainData().then((latestChainInfo) => {
this.lockChainInfoMap = true; // do not need to check current lockChainInfoMap because all remains action is fast enough and don't affect this feature.
Expand All @@ -786,6 +800,12 @@ export class ChainService {
this.handleLatestLedgerGenericAllowChains(latestledgerGenericAllowChains);
})
.catch(console.error);

this.fetchLatestPriorityTokens()
.then((latestPriorityTokens) => {
this.handleLatestPriorityTokens(latestPriorityTokens);
})
.catch(console.error);
}

private async initApis () {
Expand Down Expand Up @@ -1089,6 +1109,13 @@ export class ChainService {
return await fetchStaticData<string[]>('chains/ledger-generic-allow-chains') || [];
}

private async fetchLatestPriorityTokens () {
return await fetchStaticData<TokenPriorityDetails>('chain-assets/priority-tokens') || {
tokenGroup: {},
token: {}
};
}

private async initChains () {
const storedChainSettings = await this.dbService.getAllChainStore();
const defaultChainInfoMap = filterChainInfoMap(ChainInfoMap, ignoredList);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,12 +120,13 @@ export default class NominationPoolHandler extends BasePoolHandler {
substrateApi.api.query.balances.totalIssuance(),
substrateApi.api.query.auctions?.auctionCounter(),
substrateApi.api.query.nominationPools?.minJoinBond(),
substrateApi.api.query.staking.erasValidatorReward.multi([...Array(supportedDays.toString()).keys()].map((i) => i + startEra))
substrateApi.api.query.staking.erasValidatorReward.multi([...Array(supportedDays).keys()].map((i) => i + startEra))
]);

const maxPoolMembers = _maxPoolMember ? parseInt(_maxPoolMember.toString()) : undefined;

const [_totalEraStake, _lastTotalStaked] = _EraStakeInfo;

const validatorEraReward = getAvgValidatorEraReward(supportedDays, _eraReward[0]);
const lastTotalStaked = _lastTotalStaked.toString();
const rawTotalEraStake = _totalEraStake.toString();
Expand Down
Loading

0 comments on commit 1242739

Please sign in to comment.