diff --git a/chains/testnet/bfhevm.json b/chains/testnet/bfhevm.json new file mode 100644 index 0000000000..f3c7789d57 --- /dev/null +++ b/chains/testnet/bfhevm.json @@ -0,0 +1,19 @@ +{ + "chain_name": "bfhevm_777-1", + "api": ["https://rest-testnet-bfhevm.xyz:443"], + "rpc": ["https://rpc-bfhevm.xyz:8443"], + "coingecko": "", + "snapshot_provider": "", + "sdk_version": "0.45.7", + "coin_type": "60", + "min_tx_fee": "700", + "addr_prefix": "bfh", + "logo": "", + "assets": [{ + "base": "abfh", + "symbol": "BFH", + "exponent": "18", + "coingecko_id": "", + "logo": "" + }] + } \ No newline at end of file diff --git a/src/components/ad/AdBanner.vue b/src/components/ad/AdBanner.vue index 2ceba49cbb..7b8b46cb04 100644 --- a/src/components/ad/AdBanner.vue +++ b/src/components/ad/AdBanner.vue @@ -1,30 +1,3 @@ - - - + diff --git a/src/components/charts/PriceMarketChart.vue b/src/components/charts/PriceMarketChart.vue index b86876e003..8b6ffc0090 100644 --- a/src/components/charts/PriceMarketChart.vue +++ b/src/components/charts/PriceMarketChart.vue @@ -16,7 +16,7 @@ const kind = ref('price'); const series = computed(() => { return [ { - name: 'Price', + name: kind.value === 'price' ? 'Price' : 'Volume', data: kind.value === 'price' ? store.marketData.prices.map((item: any) => item[1]) diff --git a/src/libs/api/customization/atomone.ts b/src/libs/api/customization/atomone.ts new file mode 100644 index 0000000000..5e03678cd9 --- /dev/null +++ b/src/libs/api/customization/atomone.ts @@ -0,0 +1,68 @@ +import type{ RequestRegistry } from '@/libs/api/registry' +// import dayjs from 'dayjs' +import { adapter } from '@/libs/api/registry' +import type { GovProposal, PaginatedProposals } from '@/types' + +// which registry is store +export const store = 'name' // name or version +// Blockchain Name +export const name = 'atomone' + +function proposalAdapter(p: any): GovProposal { + if(p) { + if(p.messages && p.messages.length >= 1) p.content = p.messages[0].content || p.messages[0] + //p.proposal_id = p.id + p.final_tally_result = { + yes: p.final_tally_result?.yes_count, + no: p.final_tally_result?.no_count, + no_with_veto: p.final_tally_result?.no_with_veto_count, + abstain: p.final_tally_result?.abstain_count, + } + } + return p +} + +// osmosis custom request +export const requests: Partial = { + // mint_inflation: { + // url: `https://public-osmosis-api.numia.xyz/apr?start_date=${new Date(new Date().getTime() - 186400*1000).toISOString().split('T')[0]}&end_date=${new Date().toISOString().split('T')[0]}`, + // adapter: async (data: any) => { + // const [first] = data + // return {inflation: String(Number(first?.apr|| "0")/100.0)} + // } + // }, + gov_params_voting: { url: '/atomone/gov/v1beta1/params/voting', adapter }, + gov_params_tally: { url: '/atomone/gov/v1beta1/params/tallying', adapter }, + gov_params_deposit: { url: '/atomone/gov/v1beta1/params/deposit', adapter }, + gov_proposals: { url: '/atomone/gov/v1beta1/proposals', adapter: async (source: any): Promise => { + const proposals = source.proposals.map((p:any) => proposalAdapter(p)) + return { + proposals, + pagination: source.pagination + } + }}, + gov_proposals_proposal_id: { + url: '/atomone/gov/v1beta1/proposals/{proposal_id}', + adapter: async (source: any): Promise<{proposal: GovProposal}> => { + return { + proposal: proposalAdapter(source.proposal) + } + }, + }, + gov_proposals_deposits: { + url: '/atomone/gov/v1beta1/proposals/{proposal_id}/deposits', + adapter, + }, + gov_proposals_tally: { + url: '/atomone/gov/v1beta1/proposals/{proposal_id}/tally', + adapter, + }, + gov_proposals_votes: { + url: '/atomone/gov/v1beta1/proposals/{proposal_id}/votes', + adapter, + }, + gov_proposals_votes_voter: { + url: '/atomone/gov/v1beta1/proposals/{proposal_id}/votes/{voter}', + adapter, + }, +} diff --git a/src/modules/[chain]/block/[height].vue b/src/modules/[chain]/block/[height].vue index 34e55542c4..295580ef88 100644 --- a/src/modules/[chain]/block/[height].vue +++ b/src/modules/[chain]/block/[height].vue @@ -38,7 +38,7 @@ const remainingBlocks = computed(() => { }) const estimateTime = computed(() => { - const seconds = remainingBlocks.value * Number((store.blocktime / 1000).toFixed()) * 1000 + const seconds = Number((remainingBlocks.value * store.blocktime).toFixed(2)) return seconds }) diff --git a/src/modules/[chain]/gov/[proposal_id].vue b/src/modules/[chain]/gov/[proposal_id].vue index 4cf268d274..cfc9aff896 100644 --- a/src/modules/[chain]/gov/[proposal_id].vue +++ b/src/modules/[chain]/gov/[proposal_id].vue @@ -197,12 +197,16 @@ const processList = computed(() => { }); function showValidatorName(voter: string) { - const { data } = fromBech32(voter); - const hex = toHex(data); - const v = stakingStore.validators.find( - (x) => toHex(fromBech32(x.operator_address).data) === hex - ); - return v ? v.description.moniker : voter; + try { + const { data } = fromBech32(voter); + const hex = toHex(data); + const v = stakingStore.validators.find( + (x) => toHex(fromBech32(x.operator_address).data) === hex + ); + return v ? v.description.moniker : voter; + } catch(e){ + return voter; + } } function pageload(p: number) { @@ -396,7 +400,7 @@ function metaItem(metadata: string|undefined): { title: string; summary: string {{ showValidatorName(item.voter) }} ; + const consumer_id = Object.keys(id_map).find((k) => chain_id.startsWith(k)) || 0; + return client.getInterchainSecurityConsumerValidators(id_map[consumer_id]) } else { return { validators: [] } }