wative 1.1.13 → 1.1.15
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/lib/index.esm.js +1 -1
- package/lib/index.umd.js +1 -1
- package/package.json +1 -1
- package/src/account.ts +1 -4
- package/src/utils.ts +139 -88
- package/src/web3.ts +11 -5
package/src/utils.ts
CHANGED
|
@@ -5,7 +5,7 @@ import inquirer from 'inquirer'
|
|
|
5
5
|
import * as fs from 'fs'
|
|
6
6
|
import * as path from "path";
|
|
7
7
|
|
|
8
|
-
import { getChainIdByEvm,
|
|
8
|
+
import { getChainIdByEvm, batchHasTokenBalance } from "./web3";
|
|
9
9
|
import { MNEMONIC_WORDS } from './config';
|
|
10
10
|
import { getChainType } from './chain';
|
|
11
11
|
import { getBatchAccountBalance } from './assets';
|
|
@@ -632,6 +632,117 @@ export const formatAddr = (addr: string, force_full_addr: boolean = true) => {
|
|
|
632
632
|
return addr.slice(0, 6) + "..." + addr.slice(-6);
|
|
633
633
|
}
|
|
634
634
|
|
|
635
|
+
// 提取账户地址的辅助函数
|
|
636
|
+
const extractAccountFromChoice = (choice: any, is_evm: boolean): string | null => {
|
|
637
|
+
if (!choice.name) {
|
|
638
|
+
return null;
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
let account: any = null;
|
|
642
|
+
|
|
643
|
+
if (is_evm) {
|
|
644
|
+
account = /0x[0-9a-fA-f]{40}/.exec(choice.name);
|
|
645
|
+
account = account ? account[0] : null;
|
|
646
|
+
} else {
|
|
647
|
+
let re_result = /\s+([0-9a-zA-Z]*)/.exec(choice.name);
|
|
648
|
+
account = re_result ? re_result[1] : null;
|
|
649
|
+
|
|
650
|
+
if (account === "Back") {
|
|
651
|
+
account = null;
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
return account;
|
|
656
|
+
};
|
|
657
|
+
|
|
658
|
+
// 计算分页索引的辅助函数
|
|
659
|
+
const calculatePageIndices = (selected: number, pageSize: number, accountsLength: number): { fromIndex: number, toIndex: number } => {
|
|
660
|
+
let fromIndex: number, toIndex: number;
|
|
661
|
+
|
|
662
|
+
if (selected < pageSize / 2) {
|
|
663
|
+
if (accountsLength / 2 <= pageSize) {
|
|
664
|
+
fromIndex = 0;
|
|
665
|
+
toIndex = accountsLength / 2;
|
|
666
|
+
} else {
|
|
667
|
+
fromIndex = 0;
|
|
668
|
+
toIndex = pageSize;
|
|
669
|
+
}
|
|
670
|
+
} else {
|
|
671
|
+
if (accountsLength / 2 <= pageSize) {
|
|
672
|
+
fromIndex = 0;
|
|
673
|
+
toIndex = accountsLength / 2;
|
|
674
|
+
} else {
|
|
675
|
+
fromIndex = selected - pageSize / 2 + 1;
|
|
676
|
+
toIndex = selected + pageSize / 2 + 1;
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
return { fromIndex, toIndex };
|
|
681
|
+
};
|
|
682
|
+
|
|
683
|
+
// 提取账户列表的辅助函数
|
|
684
|
+
const extractAccountsList = (choices: any[], is_evm: boolean): (string | null)[] => {
|
|
685
|
+
const accounts: (string | null)[] = [];
|
|
686
|
+
|
|
687
|
+
for (let i = 0; i < choices.length; i++) {
|
|
688
|
+
const account = extractAccountFromChoice(choices[i], is_evm);
|
|
689
|
+
accounts.push(account);
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
return accounts.concat(accounts);
|
|
693
|
+
};
|
|
694
|
+
|
|
695
|
+
// 处理账户余额显示的辅助函数
|
|
696
|
+
const processAccountBalanceDisplay = (
|
|
697
|
+
choices: any[],
|
|
698
|
+
accounts: (string | null)[],
|
|
699
|
+
batchBalanceOf: any,
|
|
700
|
+
pad_index_map: any,
|
|
701
|
+
gas_token_name: string,
|
|
702
|
+
show_gas_token: boolean,
|
|
703
|
+
show_extended_token: boolean,
|
|
704
|
+
fromIndex: number,
|
|
705
|
+
toIndex: number
|
|
706
|
+
) => {
|
|
707
|
+
for (let i = fromIndex; i < toIndex; i++) {
|
|
708
|
+
let _index = i >= accounts.length / 2 ? i - accounts.length / 2 : i;
|
|
709
|
+
let _choice = choices[_index];
|
|
710
|
+
if (!_choice.name) {
|
|
711
|
+
continue;
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
let name = _choice.name;
|
|
715
|
+
let account_address = accounts[i];
|
|
716
|
+
let token_message = '';
|
|
717
|
+
if (!account_address) {
|
|
718
|
+
continue;
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
for (let token_name in batchBalanceOf[account_address]) {
|
|
722
|
+
if (!show_gas_token && token_name === gas_token_name) {
|
|
723
|
+
continue;
|
|
724
|
+
}
|
|
725
|
+
if (!show_extended_token && token_name !== gas_token_name) {
|
|
726
|
+
continue;
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
if (name.includes(token_name)) {
|
|
730
|
+
continue;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
token_message += `${token_name}:${batchBalanceOf[account_address][token_name].padEnd(pad_index_map[token_name])} `;
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
let nameList = name.split('(');
|
|
737
|
+
if (nameList.length > 1) {
|
|
738
|
+
let tag = nameList[1];
|
|
739
|
+
choices[_index].name = nameList[0] + ` ${token_message}` + `(${tag}`;
|
|
740
|
+
} else {
|
|
741
|
+
choices[_index].name = nameList[0] + ` ${token_message}`;
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
};
|
|
745
|
+
|
|
635
746
|
export const listWithLazyBalanceLoading = async (
|
|
636
747
|
options: string[],
|
|
637
748
|
is_evm: boolean,
|
|
@@ -642,8 +753,7 @@ export const listWithLazyBalanceLoading = async (
|
|
|
642
753
|
show_extended_token: boolean,
|
|
643
754
|
direct_display: boolean,
|
|
644
755
|
message?: string,
|
|
645
|
-
default_account?: any
|
|
646
|
-
default_account_addr?: any,
|
|
756
|
+
default_account?: any
|
|
647
757
|
) => {
|
|
648
758
|
const questions = [
|
|
649
759
|
{
|
|
@@ -665,6 +775,7 @@ export const listWithLazyBalanceLoading = async (
|
|
|
665
775
|
let selected = 0;
|
|
666
776
|
let round = 0;
|
|
667
777
|
let pre_selected: any;
|
|
778
|
+
|
|
668
779
|
while (!promise.ui.activePrompt.answers[promise.ui.activePrompt.opt.name]) {
|
|
669
780
|
if (!direct_display) {
|
|
670
781
|
await sleep(1000);
|
|
@@ -684,7 +795,13 @@ export const listWithLazyBalanceLoading = async (
|
|
|
684
795
|
if (direct_display) {
|
|
685
796
|
round = 6;
|
|
686
797
|
direct_display = false;
|
|
687
|
-
|
|
798
|
+
|
|
799
|
+
const pageSize = promise.ui.activePrompt.opt.pageSize;
|
|
800
|
+
const accounts = extractAccountsList(promise.ui.activePrompt.opt.choices.choices, is_evm);
|
|
801
|
+
const { fromIndex, toIndex } = calculatePageIndices(selected, pageSize, accounts.length);
|
|
802
|
+
const active_account: any = accounts.slice(fromIndex, toIndex);
|
|
803
|
+
|
|
804
|
+
let has_balance = batchHasTokenBalance(network_info.chainId.toString(), active_account);
|
|
688
805
|
if (!has_balance) {
|
|
689
806
|
round = 0;
|
|
690
807
|
continue;
|
|
@@ -694,57 +811,13 @@ export const listWithLazyBalanceLoading = async (
|
|
|
694
811
|
if (round < 5) {
|
|
695
812
|
continue;
|
|
696
813
|
}
|
|
814
|
+
|
|
697
815
|
round = 0;
|
|
698
816
|
const pageSize = promise.ui.activePrompt.opt.pageSize;
|
|
817
|
+
const accounts = extractAccountsList(promise.ui.activePrompt.opt.choices.choices, is_evm);
|
|
818
|
+
const { fromIndex, toIndex } = calculatePageIndices(selected, pageSize, accounts.length);
|
|
819
|
+
const active_account: any = accounts.slice(fromIndex, toIndex);
|
|
699
820
|
|
|
700
|
-
let accounts: any = [];
|
|
701
|
-
for (let i = 0; i < promise.ui.activePrompt.opt.choices.choices.length; i++) {
|
|
702
|
-
if (!promise.ui.activePrompt.opt.choices.choices[i].name) {
|
|
703
|
-
accounts.push(null);
|
|
704
|
-
continue;
|
|
705
|
-
}
|
|
706
|
-
|
|
707
|
-
let account: any = null;
|
|
708
|
-
|
|
709
|
-
if (is_evm) {
|
|
710
|
-
account = /0x[0-9a-fA-f]{40}/.exec(promise.ui.activePrompt.opt.choices.choices[i].name);
|
|
711
|
-
account = account ? account[0] : null;
|
|
712
|
-
} else {
|
|
713
|
-
let re_result = account = /\s+([0-9a-zA-Z]*)/.exec(promise.ui.activePrompt.opt.choices.choices[i].name);
|
|
714
|
-
account = re_result ? re_result[1] : null;
|
|
715
|
-
|
|
716
|
-
if (account === "Back") {
|
|
717
|
-
account = null;
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
|
-
|
|
721
|
-
if (account) {
|
|
722
|
-
accounts.push(account)
|
|
723
|
-
} else {
|
|
724
|
-
accounts.push(null);
|
|
725
|
-
}
|
|
726
|
-
}
|
|
727
|
-
accounts = accounts.concat(accounts);
|
|
728
|
-
let fromIndex: number, toIndex: number;
|
|
729
|
-
if (selected < pageSize / 2) {
|
|
730
|
-
if (accounts.length / 2 <= pageSize) {
|
|
731
|
-
fromIndex = 0;
|
|
732
|
-
toIndex = accounts.length / 2;
|
|
733
|
-
} else {
|
|
734
|
-
fromIndex = 0;
|
|
735
|
-
toIndex = pageSize;
|
|
736
|
-
}
|
|
737
|
-
} else {
|
|
738
|
-
if (accounts.length / 2 <= pageSize) {
|
|
739
|
-
fromIndex = 0;
|
|
740
|
-
toIndex = accounts.length / 2;
|
|
741
|
-
} else {
|
|
742
|
-
fromIndex = selected - pageSize / 2 + 1;
|
|
743
|
-
toIndex = selected + pageSize / 2 + 1;
|
|
744
|
-
}
|
|
745
|
-
}
|
|
746
|
-
|
|
747
|
-
let active_account: any = accounts.slice(fromIndex, toIndex);
|
|
748
821
|
let batchBalanceOf = await getBatchAccountBalance(
|
|
749
822
|
keystore_path,
|
|
750
823
|
active_account,
|
|
@@ -769,48 +842,26 @@ export const listWithLazyBalanceLoading = async (
|
|
|
769
842
|
}
|
|
770
843
|
}
|
|
771
844
|
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
if (!show_gas_token && token_name === gas_token_name) {
|
|
786
|
-
continue;
|
|
787
|
-
}
|
|
788
|
-
if (!show_extended_token && token_name !== gas_token_name) {
|
|
789
|
-
continue;
|
|
790
|
-
}
|
|
791
|
-
|
|
792
|
-
if (name.includes(token_name)) {
|
|
793
|
-
continue;
|
|
794
|
-
}
|
|
795
|
-
|
|
796
|
-
token_message += `${token_name}:${batchBalanceOf[account_address][token_name].padEnd(pad_index_map[token_name])} `;
|
|
797
|
-
}
|
|
798
|
-
|
|
799
|
-
let nameList = name.split('(');
|
|
800
|
-
if (nameList.length > 1) {
|
|
801
|
-
let tag = nameList[1];
|
|
802
|
-
promise.ui.activePrompt.opt.choices.choices[_index].name = nameList[0] + ` ${token_message}` + `(${tag}`;
|
|
803
|
-
} else {
|
|
804
|
-
promise.ui.activePrompt.opt.choices.choices[_index].name = nameList[0] + ` ${token_message}`;
|
|
805
|
-
}
|
|
806
|
-
}
|
|
845
|
+
const gas_token_name = network_info.nativeCurrency.symbol;
|
|
846
|
+
processAccountBalanceDisplay(
|
|
847
|
+
promise.ui.activePrompt.opt.choices.choices,
|
|
848
|
+
accounts,
|
|
849
|
+
batchBalanceOf,
|
|
850
|
+
pad_index_map,
|
|
851
|
+
gas_token_name,
|
|
852
|
+
show_gas_token,
|
|
853
|
+
show_extended_token,
|
|
854
|
+
fromIndex,
|
|
855
|
+
toIndex
|
|
856
|
+
);
|
|
857
|
+
|
|
807
858
|
promise.ui.activePrompt.screen.render('');
|
|
808
859
|
promise.ui.activePrompt.render();
|
|
809
860
|
pre_selected = selected;
|
|
810
861
|
}
|
|
811
862
|
|
|
812
863
|
return promise.ui.activePrompt.answers[promise.ui.activePrompt.opt.name];
|
|
813
|
-
}
|
|
864
|
+
};
|
|
814
865
|
|
|
815
866
|
export const updateStorage = (keystore_path: string) => {
|
|
816
867
|
const network_path = path.resolve(keystore_path, 'network.json');
|
package/src/web3.ts
CHANGED
|
@@ -397,13 +397,19 @@ export const batchUpdateUserTokenBalance = async (chain_id: string, account_addr
|
|
|
397
397
|
}
|
|
398
398
|
}
|
|
399
399
|
|
|
400
|
-
export const
|
|
400
|
+
export const batchHasTokenBalance = (chain_id: string, account_address_list: string[]) => {
|
|
401
|
+
let hasAccount = 0;
|
|
401
402
|
if (chain_id in chainIdAccountBalanceMap) {
|
|
402
|
-
if (
|
|
403
|
-
|
|
404
|
-
|
|
403
|
+
if ("0" in chainIdAccountBalanceMap[chain_id]) {
|
|
404
|
+
for (let i = 0; i < account_address_list.length; i++) {
|
|
405
|
+
if (account_address_list[i] in chainIdAccountBalanceMap[chain_id]["0"]) {
|
|
406
|
+
hasAccount += 1;
|
|
407
|
+
}
|
|
405
408
|
}
|
|
406
409
|
}
|
|
407
410
|
}
|
|
408
|
-
|
|
411
|
+
if (hasAccount === 0) {
|
|
412
|
+
return false
|
|
413
|
+
}
|
|
414
|
+
return hasAccount / account_address_list.length > 0.8;
|
|
409
415
|
}
|