From de77ea57c1e06247806cb2156a447c759cfea9bf Mon Sep 17 00:00:00 2001 From: liangping <18786721@qq.com> Date: Sun, 8 Aug 2021 18:08:09 +0800 Subject: [PATCH] Make address human readable --- src/libs/data/data.js | 48 +++++++++++++- src/libs/fetch.js | 6 +- src/router/index.js | 2 +- src/views/ArrayFieldComponent.vue | 9 ++- src/views/Blocks.vue | 11 +++- ...salView.vue => GovernanceProposalView.vue} | 64 ++++++------------- src/views/ObjectFieldComponent.vue | 11 +++- 7 files changed, 99 insertions(+), 52 deletions(-) rename src/views/{ProposalView.vue => GovernanceProposalView.vue} (83%) diff --git a/src/libs/data/data.js b/src/libs/data/data.js index 88c0ea84..bf1cd07d 100644 --- a/src/libs/data/data.js +++ b/src/libs/data/data.js @@ -8,9 +8,9 @@ import duration from 'dayjs/plugin/duration' import relativeTime from 'dayjs/plugin/relativeTime' import localeData from 'dayjs/plugin/localeData' +dayjs.extend(localeData) dayjs.extend(duration) dayjs.extend(relativeTime) -dayjs.extend(localeData) export function toDuration(value) { return dayjs.duration(value).humanize() @@ -39,9 +39,16 @@ export function percent(num) { return parseFloat((num * 100).toFixed(2)) } -export function abbr(string, length = 6) { +export function abbr(string, length = 6, suffix = '...') { if (string && string.length > length) { - return `${string.substring(0, length)}...` + return `${string.substring(0, length)}${suffix}` + } + return string +} + +export function abbrRight(string, length = 6, suffix = '...') { + if (string && string.length > length) { + return `${string.substring(string.length - length)}${suffix}` } return string } @@ -105,6 +112,9 @@ export function tokenFormatter(tokens) { export function operatorAddressToAccount(operAddress) { const { prefix, data } = Bech32.decode(operAddress) + if (prefix === 'iva') { // handle special cases + return Bech32.encode('iaa', data) + } return Bech32.encode(prefix.replace('valoper', ''), data) } @@ -119,6 +129,38 @@ export function consensusPubkeyToHexAddress(consensusPubkey) { return address } +export function getCachedValidators(chainName) { + const locals = localStorage.getItem(`validators-${chainName}`) + return locals +} + +export function isHexAddress(v) { + const re = /^[A-Z\d]{40}$/ + return re.test(v) +} + +export function getStakingValidatorByHex(chainName, hex) { + const locals = localStorage.getItem(`validators-${chainName}`) + if (locals) { + const val = JSON.parse(locals).find(x => consensusPubkeyToHexAddress(x.consensus_pubkey) === hex) + if (val) { + return val.description.moniker + } + } + return abbr(hex) +} + +export function getStakingValidatorByAccount(chainName, addr) { + const locals = localStorage.getItem(`validators-${chainName}`) + if (locals) { + const val = JSON.parse(locals).find(x => operatorAddressToAccount(x.operator_address) === addr) + if (val) { + return val.description.moniker + } + } + return addr +} + export * from 'compare-versions' export class Data { diff --git a/src/libs/fetch.js b/src/libs/fetch.js index e72a8084..9b5aadc1 100644 --- a/src/libs/fetch.js +++ b/src/libs/fetch.js @@ -106,7 +106,11 @@ const chainAPI = class ChainFetch { } async getValidatorList() { - return this.get('/staking/validators').then(data => commonProcess(data).map(i => new Validator().init(i))) + return this.get('/staking/validators').then(data => { + const vals = commonProcess(data).map(i => new Validator().init(i)) + localStorage.setItem(`validators-${this.config.chain_name}`, JSON.stringify(vals)) + return vals + }) } async getStakingValidator(address) { diff --git a/src/router/index.js b/src/router/index.js index b70175b9..917ba5e8 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -95,7 +95,7 @@ const router = new VueRouter({ { path: '/:chain/gov/:proposalid', name: 'proposal', - component: () => import('@/views/ProposalView.vue'), + component: () => import('@/views/GovernanceProposalView.vue'), meta: { pageTitle: 'Governance', breadcrumb: [ diff --git a/src/views/ArrayFieldComponent.vue b/src/views/ArrayFieldComponent.vue index 920a1f46..2c9ea6d0 100644 --- a/src/views/ArrayFieldComponent.vue +++ b/src/views/ArrayFieldComponent.vue @@ -8,6 +8,7 @@ >