forked from cerc-io/cosmos-explorer
Merge branch 'ping-pub:master' into master
This commit is contained in:
commit
6f2fda712f
@ -13,7 +13,7 @@
|
|||||||
"base": "ppica",
|
"base": "ppica",
|
||||||
"symbol": "PICA",
|
"symbol": "PICA",
|
||||||
"exponent": "12",
|
"exponent": "12",
|
||||||
"coingecko_id": "",
|
"coingecko_id": "picasso",
|
||||||
"logo": "/logos/composable.jpg"
|
"logo": "/logos/composable.jpg"
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"chain_name": "haqq",
|
"chain_name": "haqq",
|
||||||
"coingecko": "",
|
"coingecko": "",
|
||||||
"api": ["https://rest.cosmos.haqq.network/", "https://m-s1-sdk.haqq.sh","https://api.haqq.nodestake.top"],
|
"api": ["https://rest.cosmos.haqq.network/", "https://m-s1-sdk.haqq.sh", "https://haqq-rest.publicnode.com"],
|
||||||
"rpc": ["https://rpc.tm.haqq.network/", "https://m-s1-tm.haqq.sh","https://rpc.haqq.nodestake.top"],
|
"rpc": ["https://rpc.tm.haqq.network/", "https://m-s1-tm.haqq.sh", "https://haqq-rpc.publicnode.com/"],
|
||||||
"snapshot_provider": "",
|
"snapshot_provider": "",
|
||||||
"sdk_version": "0.46.10",
|
"sdk_version": "0.46.10",
|
||||||
"coin_type": "60",
|
"coin_type": "60",
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"chain_name": "juno",
|
"chain_name": "juno",
|
||||||
"coingecko": "juno-network",
|
"coingecko": "juno-network",
|
||||||
"api": ["https://api-juno-ia.cosmosia.notional.ventures", "https://juno-api.polkachu.com", "https://lcd-juno.itastakers.com", "https://rest-juno.goldenratiostaking.net"],
|
"api": ["https://api-juno-ia.cosmosia.notional.ventures", "https://juno-api.polkachu.com", "https://lcd-juno.itastakers.com", "https://rest-juno.goldenratiostaking.net", "https://juno-api.reece.sh"],
|
||||||
"rpc": ["https://rpc-juno-ia.cosmosia.notional.ventures:443", "https://juno-rpc.polkachu.com:443", "https://rpc-juno.itastakers.com:443", "https://rpc-juno.itastakers.com:443", "https://rpc-juno.goldenratiostaking.net"],
|
"rpc": ["https://rpc-juno-ia.cosmosia.notional.ventures:443", "https://juno-rpc.polkachu.com:443", "https://rpc-juno.itastakers.com:443", "https://rpc-juno.itastakers.com:443", "https://rpc-juno.goldenratiostaking.net", "https://juno-rpc.reece.sh"],
|
||||||
"snapshot_provider": "",
|
"snapshot_provider": "",
|
||||||
"sdk_version": "0.45.8",
|
"sdk_version": "0.47.3",
|
||||||
"coin_type": "118",
|
"coin_type": "118",
|
||||||
"min_tx_fee": "3000",
|
"min_tx_fee": "3000",
|
||||||
"addr_prefix": "juno",
|
"addr_prefix": "juno",
|
||||||
|
22
chains/mainnet/mun.json
Normal file
22
chains/mainnet/mun.json
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"chain_name": "mun",
|
||||||
|
"coingecko": "",
|
||||||
|
"api": ["https://mainnet1.mun.money"],
|
||||||
|
"rpc": ["https://mainnet1rpc.mun.money"],
|
||||||
|
"snapshot_provider": "",
|
||||||
|
"sdk_version": "0.45.16",
|
||||||
|
"coin_type": "118",
|
||||||
|
"min_tx_fee": "8000",
|
||||||
|
"addr_prefix": "mun",
|
||||||
|
"logo": "/logos/mun.png",
|
||||||
|
"assets": [
|
||||||
|
{
|
||||||
|
"base": "umun",
|
||||||
|
"symbol": "MUN",
|
||||||
|
"exponent": "6",
|
||||||
|
"coingecko_id": "",
|
||||||
|
"logo": "/logos/mun.png"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -2,7 +2,10 @@
|
|||||||
"chain_name": "stride",
|
"chain_name": "stride",
|
||||||
"api": ["https://stride-api.polkachu.com", "https://api.stride.nodestake.top", "https://api-stride.nodeist.net", "https://stride.api.kjnodes.com"],
|
"api": ["https://stride-api.polkachu.com", "https://api.stride.nodestake.top", "https://api-stride.nodeist.net", "https://stride.api.kjnodes.com"],
|
||||||
"rpc": ["https://stride-rpc.polkachu.com:443", "https://rpc.stride.nodestake.top", "https://rpc-stride.nodeist.net", "https://stride.rpc.kjnodes.com:443"],
|
"rpc": ["https://stride-rpc.polkachu.com:443", "https://rpc.stride.nodestake.top", "https://rpc-stride.nodeist.net", "https://stride.rpc.kjnodes.com:443"],
|
||||||
"snapshot_provider": "",
|
"provider_chain": {
|
||||||
|
"api": ["https://api-cosmoshub-ia.cosmosia.notional.ventures"]
|
||||||
|
},
|
||||||
|
"features": ["dashboard","governance", "blocks", "ibc", "cosmwasm", "uptime", "parameters", "state-sync", "consensus", "supply", "widget"],
|
||||||
"sdk_version": "0.45.5",
|
"sdk_version": "0.45.5",
|
||||||
"coin_type": "118",
|
"coin_type": "118",
|
||||||
"min_tx_fee": "800",
|
"min_tx_fee": "800",
|
||||||
|
25
chains/testnet/injective.json
Normal file
25
chains/testnet/injective.json
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"chain_name": "injective-888",
|
||||||
|
"api": ["https://testnet.lcd.injective.network"],
|
||||||
|
"rpc": ["https://tesnet.tm.injective.network"],
|
||||||
|
"snapshot_provider": "",
|
||||||
|
"sdk_version": "v0.45.5",
|
||||||
|
"coin_type": "60",
|
||||||
|
"min_tx_fee": "5000",
|
||||||
|
"addr_prefix": "inj",
|
||||||
|
"excludes": "",
|
||||||
|
"logo": "/logos/injective.jpg",
|
||||||
|
"keplr_features": ["ibc-transfer", "ibc-go", "eth-address-gen", "eth-key-sign"],
|
||||||
|
"keplr_price_step": {
|
||||||
|
"low": 100000000000,
|
||||||
|
"average": 200000000000,
|
||||||
|
"high": 30000000000000
|
||||||
|
},
|
||||||
|
"assets": [{
|
||||||
|
"base": "inj",
|
||||||
|
"symbol": "INJ",
|
||||||
|
"exponent": "18",
|
||||||
|
"coingecko_id": "injective-protocol",
|
||||||
|
"logo": "/logos/injective.jpg"
|
||||||
|
}]
|
||||||
|
}
|
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"chain_name": "juno",
|
"chain_name": "juno",
|
||||||
"api": ["https://api.uni.junonetwork.io"],
|
"api": ["https://api.uni.junonetwork.io", "https://uni-api.reece.sh"],
|
||||||
"rpc": [""],
|
"rpc": ["https://uni-rpc.reece.sh"],
|
||||||
"sdk_version": "0.46.1",
|
"sdk_version": "0.47.3",
|
||||||
"coin_type": "118",
|
"coin_type": "118",
|
||||||
"min_tx_fee": "3000",
|
"min_tx_fee": "3000",
|
||||||
"addr_prefix": "juno",
|
"addr_prefix": "juno",
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
{
|
{
|
||||||
"chain_name": "side",
|
"chain_name": "side",
|
||||||
"api": ["https://rest.testnet.side.one"],
|
"registry_name": "SIDE",
|
||||||
"rpc": ["https://rpc.testnet.side.one"],
|
"api": ["https://testnet-rest.side.exchange/"],
|
||||||
"snapshot_provider": "",
|
"rpc": ["https://testnet-rpc.side.exchange/"],
|
||||||
"sdk_version": "0.46.4",
|
"sdk_version": "0.46.4",
|
||||||
"coin_type": "60",
|
"coin_type": "118",
|
||||||
"min_tx_fee": "800",
|
"min_tx_fee": "800",
|
||||||
"addr_prefix": "side",
|
"addr_prefix": "side",
|
||||||
"logo": "/logos/side.jpeg",
|
"logo": "/logos/side.jpeg",
|
||||||
"keplr_features": ["ibc-transfer", "ibc-go", "eth-address-gen", "eth-key-sign"],
|
|
||||||
"assets": [{
|
"assets": [{
|
||||||
"base": "aside",
|
"base": "aside",
|
||||||
"symbol": "SIDE",
|
"symbol": "SIDE",
|
||||||
|
82
installation.md
Normal file
82
installation.md
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
# Prerequisites
|
||||||
|
|
||||||
|
1. Node and Yarn - Acquired using Node Version Manager (https://github.com/nvm-sh/nvm)
|
||||||
|
|
||||||
|
# Quick Install for Prerequisites
|
||||||
|
|
||||||
|
1. Install Node Version Manager
|
||||||
|
```sh
|
||||||
|
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash
|
||||||
|
```
|
||||||
|
2. Install the latest version of NodeJS
|
||||||
|
```sh
|
||||||
|
nvm install node # "node" is an alias for the latest version
|
||||||
|
```
|
||||||
|
3. Install the latest version of NPM for Node
|
||||||
|
```sh
|
||||||
|
nvm install-latest-npm # get the latest supported npm version on the current node version
|
||||||
|
```
|
||||||
|
4. Install Yarn
|
||||||
|
```sh
|
||||||
|
npm install --global yarn
|
||||||
|
```
|
||||||
|
|
||||||
|
# Installation:
|
||||||
|
|
||||||
|
1. Running with yarn
|
||||||
|
```sh
|
||||||
|
yarn --ignore-engines && yarn serve
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Building for web servers, like nginx, apache
|
||||||
|
```sh
|
||||||
|
yarn --ignore-engines && yarn build
|
||||||
|
cp -r ./dist/* <ROOT_OF_WEB_SERVER>
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Running with docker
|
||||||
|
```sh
|
||||||
|
./docker.sh
|
||||||
|
docker run -d -p 8088:80 ping.pub/dashboard
|
||||||
|
```
|
||||||
|
|
||||||
|
# Enable LCD for Ping.pub (do this on the config for your chain)
|
||||||
|
|
||||||
|
1. Set `enable = true` in `./config/app.toml`
|
||||||
|
```
|
||||||
|
###############################################################################
|
||||||
|
### API Configuration ###
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
[api]
|
||||||
|
|
||||||
|
# Enable defines if the API server should be enabled.
|
||||||
|
enable = true
|
||||||
|
|
||||||
|
# Swagger defines if swagger documentation should automatically be registered.
|
||||||
|
swagger = false
|
||||||
|
|
||||||
|
# Address defines the API server to listen on.
|
||||||
|
address = "tcp://0.0.0.0:1317"
|
||||||
|
|
||||||
|
# MaxOpenConnections defines the number of maximum open connections.
|
||||||
|
max-open-connections = 1000
|
||||||
|
```
|
||||||
|
|
||||||
|
2. add proxy server and enable CORS. NOTE: You must enable https as well.
|
||||||
|
|
||||||
|
```
|
||||||
|
server {
|
||||||
|
server_name juno.api.ping.pub;
|
||||||
|
listen 443;
|
||||||
|
location / {
|
||||||
|
add_header Access-Control-Allow-Origin *;
|
||||||
|
add_header Access-Control-Max-Age 3600;
|
||||||
|
add_header Access-Control-Expose-Headers Content-Length;
|
||||||
|
|
||||||
|
proxy_pass http://<HOST>:1317;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
3. config your blockchain in [./src/chains]()
|
BIN
public/logos/mun.png
Normal file
BIN
public/logos/mun.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 189 KiB After Width: | Height: | Size: 189 KiB |
@ -14,8 +14,8 @@ const pages = computed(() => {
|
|||||||
if (total > 0 && props.limit && total > props.limit) {
|
if (total > 0 && props.limit && total > props.limit) {
|
||||||
let page = 0
|
let page = 0
|
||||||
while (true) {
|
while (true) {
|
||||||
if (page * props.limit > total) break
|
|
||||||
page += 1
|
page += 1
|
||||||
|
if (page * props.limit > total) break
|
||||||
if (total / props.limit > 10 && page > showSize && page < (total / props.limit - showSize + 1)) {
|
if (total / props.limit > 10 && page > showSize && page < (total / props.limit - showSize + 1)) {
|
||||||
if (!(page >= current.value - 1 && page <= current.value + 1)) {
|
if (!(page >= current.value - 1 && page <= current.value + 1)) {
|
||||||
continue
|
continue
|
||||||
|
@ -25,14 +25,14 @@ const bars = computed(() => {
|
|||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div class="flex items-center justify-evenly">
|
<div class="flex items-center justify-evenly gap-0.5">
|
||||||
<div class="cursor-default" v-for="(item, index) in bars" :key="index">
|
<div class="cursor-default" v-for="(item, index) in bars" :key="index">
|
||||||
<div class="tooltip" :data-tip="item.height">
|
<div class="tooltip"
|
||||||
<span
|
:data-tip="item.height"
|
||||||
:class="item.color"
|
:class="item.color"
|
||||||
style="width: 1.2%"
|
style="width: 4px;"
|
||||||
>
|
>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -254,7 +254,7 @@ export class CosmosRestClient extends BaseRestClient<RequestRegistry> {
|
|||||||
// tx
|
// tx
|
||||||
async getTxsBySender(sender: string, page?: PageRequest) {
|
async getTxsBySender(sender: string, page?: PageRequest) {
|
||||||
if(!page) page = new PageRequest()
|
if(!page) page = new PageRequest()
|
||||||
const query = `?order_by=ORDER_BY_DESC&events=message.sender='${sender}'`;
|
const query = `?order_by=2&events=message.sender='${sender}'&pagination.limit=${page.limit}&pagination.offset=${page.offset||0}`;
|
||||||
return this.request(this.registry.tx_txs, {}, query);
|
return this.request(this.registry.tx_txs, {}, query);
|
||||||
}
|
}
|
||||||
// query ibc sending msgs
|
// query ibc sending msgs
|
||||||
|
@ -7,7 +7,7 @@ import type {
|
|||||||
PaginabledContracts,
|
PaginabledContracts,
|
||||||
} from '../types';
|
} from '../types';
|
||||||
import DynamicComponent from '@/components/dynamic/DynamicComponent.vue';
|
import DynamicComponent from '@/components/dynamic/DynamicComponent.vue';
|
||||||
import { useBankStore, useBlockchain, useFormatter, useTxDialog } from '@/stores';
|
import { useBlockchain, useFormatter, useTxDialog } from '@/stores';
|
||||||
import PaginationBar from '@/components/PaginationBar.vue';
|
import PaginationBar from '@/components/PaginationBar.vue';
|
||||||
import { PageRequest, type PaginatedBalances } from '@/types';
|
import { PageRequest, type PaginatedBalances } from '@/types';
|
||||||
|
|
||||||
@ -159,11 +159,17 @@ const result = ref('');
|
|||||||
</label>
|
</label>
|
||||||
<label
|
<label
|
||||||
for="wasm_execute_contract"
|
for="wasm_execute_contract"
|
||||||
class="btn btn-primary btn-xs text-xs"
|
class="btn btn-primary btn-xs text-xs mr-2"
|
||||||
@click="dialog.open('wasm_execute_contract', { contract: v })"
|
@click="dialog.open('wasm_execute_contract', { contract: v })"
|
||||||
>
|
>
|
||||||
{{ $t('cosmwasm.btn_execute') }}
|
{{ $t('cosmwasm.btn_execute') }}
|
||||||
</label>
|
</label>
|
||||||
|
<RouterLink
|
||||||
|
:to="`transactions?contract=${v}`"
|
||||||
|
class="btn btn-primary btn-xs text-xs"
|
||||||
|
>
|
||||||
|
{{ $t('cosmwasm.btn_transactions') }}
|
||||||
|
</RouterLink>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
77
src/modules/[chain]/cosmwasm/[code_id]/transactions.vue
Normal file
77
src/modules/[chain]/cosmwasm/[code_id]/transactions.vue
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
<script lang="ts" setup>
|
||||||
|
import PaginationBar from '@/components/PaginationBar.vue';
|
||||||
|
import { useBlockchain, useFormatter } from '@/stores';
|
||||||
|
import { PageRequest, type PaginatedTxs } from '@/types';
|
||||||
|
import { Icon } from '@iconify/vue';
|
||||||
|
import { onMounted, ref } from 'vue';
|
||||||
|
import { useWasmStore } from '../WasmStore';
|
||||||
|
import DynamicComponent from '@/components/dynamic/DynamicComponent.vue';
|
||||||
|
import { useRoute } from 'vue-router';
|
||||||
|
|
||||||
|
const chainStore = useBlockchain();
|
||||||
|
const format = useFormatter();
|
||||||
|
const wasmStore = useWasmStore();
|
||||||
|
|
||||||
|
const route = useRoute()
|
||||||
|
const page = ref(new PageRequest())
|
||||||
|
|
||||||
|
const txs = ref<PaginatedTxs>({ txs: [], tx_responses: [], pagination: { total: "0" } });
|
||||||
|
const info = ref<any>(null);
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
const address = String(route.query.contract)
|
||||||
|
wasmStore.wasmClient.getWasmContracts(address).then((x) => {
|
||||||
|
info.value = x.contract_info;
|
||||||
|
});
|
||||||
|
chainStore.rpc.getTxs("?order_by=2&events=execute._contract_address='{address}'", { address }, page.value).then(res => {
|
||||||
|
txs.value = res
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
function pageload(pageNum: number) {
|
||||||
|
page.value.setPage(pageNum)
|
||||||
|
const address = String(route.query.contract)
|
||||||
|
chainStore.rpc.getTxs("?order_by=2&events=execute._contract_address='{address}'", { address }, page.value).then(res => {
|
||||||
|
txs.value = res
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<h2 class="card-title truncate w-full">
|
||||||
|
<RouterLink to="contracts"><span class="btn btn-sm"> < </span> </RouterLink>{{ $t('cosmwasm.contract_detail') }}
|
||||||
|
</h2>
|
||||||
|
<DynamicComponent :value="info" />
|
||||||
|
|
||||||
|
<h2 class="card-title truncate w-full mt-4">Transactions</h2>
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<td> {{ $t('ibc.height') }}</td>
|
||||||
|
<td>{{ $t('ibc.txhash') }}</td>
|
||||||
|
<td> {{ $t('ibc.messages') }}</td>
|
||||||
|
<td>{{ $t('ibc.time') }}</td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr v-for="resp in txs?.tx_responses">
|
||||||
|
<td>{{ resp.height }}</td>
|
||||||
|
<td>
|
||||||
|
<div class="text-xs truncate text-primary dark:invert">
|
||||||
|
<RouterLink :to="`/${chainStore.chainName}/tx/${resp.txhash}`">{{ resp.txhash }}</RouterLink>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div class="flex">
|
||||||
|
{{ format.messages(resp.tx.body.messages) }}
|
||||||
|
<Icon v-if="resp.code === 0" icon="mdi-check" class="text-success text-lg" />
|
||||||
|
<Icon v-else icon="mdi-multiply" class="text-error text-lg" />
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>{{ format.toLocaleDate(resp.timestamp) }}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<PaginationBar :limit="page.limit" :total="txs.pagination?.total" :callback="pageload" />
|
||||||
|
</div>
|
||||||
|
</template>
|
@ -68,7 +68,7 @@ function fetchSendingTxs(channel: string, port: string, pageNum = 0) {
|
|||||||
channel_id.value = channel
|
channel_id.value = channel
|
||||||
port_id.value = port
|
port_id.value = port
|
||||||
txs.value = {} as PaginatedTxs
|
txs.value = {} as PaginatedTxs
|
||||||
chainStore.rpc.getTxs("?order_by=ORDER_BY_DESC&events=send_packet.packet_src_channel='{channel}'&events=send_packet.packet_src_port='{port}'", { channel, port }, page.value).then(res => {
|
chainStore.rpc.getTxs("?order_by=2&events=send_packet.packet_src_channel='{channel}'&events=send_packet.packet_src_port='{port}'", { channel, port }, page.value).then(res => {
|
||||||
txs.value = res
|
txs.value = res
|
||||||
})
|
})
|
||||||
.finally(() => loading.value = false)
|
.finally(() => loading.value = false)
|
||||||
@ -80,7 +80,7 @@ function fetchRecevingTxs(channel: string, port: string, pageNum = 0) {
|
|||||||
channel_id.value = channel
|
channel_id.value = channel
|
||||||
port_id.value = port
|
port_id.value = port
|
||||||
txs.value = {} as PaginatedTxs
|
txs.value = {} as PaginatedTxs
|
||||||
chainStore.rpc.getTxs("?order_by=ORDER_BY_DESC&events=recv_packet.packet_dst_channel='{channel}'&events=recv_packet.packet_dst_port='{port}'", { channel, port }, page.value).then(res => {
|
chainStore.rpc.getTxs("?order_by=2&events=recv_packet.packet_dst_channel='{channel}'&events=recv_packet.packet_dst_port='{port}'", { channel, port }, page.value).then(res => {
|
||||||
txs.value = res
|
txs.value = res
|
||||||
})
|
})
|
||||||
.finally(() => loading.value = false)
|
.finally(() => loading.value = false)
|
||||||
|
@ -153,7 +153,7 @@ function changeTab(v: string) {
|
|||||||
:class="tab === '2' ? '' : 'hidden'"
|
:class="tab === '2' ? '' : 'hidden'"
|
||||||
>
|
>
|
||||||
<div v-for="({ v, signing, hex }, i) in list" :key="i">
|
<div v-for="({ v, signing, hex }, i) in list" :key="i">
|
||||||
<div class="flex items-center justify-between py-0 w-72">
|
<div class="flex items-center justify-between py-0 w-[298px]">
|
||||||
<label class="truncate text-sm">
|
<label class="truncate text-sm">
|
||||||
<span class="ml-1 text-black dark:text-white"
|
<span class="ml-1 text-black dark:text-white"
|
||||||
>{{ i + 1 }}.{{ v.description.moniker }}</span
|
>{{ i + 1 }}.{{ v.description.moniker }}</span
|
||||||
@ -161,13 +161,13 @@ function changeTab(v: string) {
|
|||||||
</label>
|
</label>
|
||||||
<div
|
<div
|
||||||
v-if="Number(signing?.missed_blocks_counter || 0) > 10"
|
v-if="Number(signing?.missed_blocks_counter || 0) > 10"
|
||||||
class="badge badge-sm bg-transparent border-0 text-red-500"
|
class="badge badge-sm bg-transparent border-0 text-red-500 font-bold"
|
||||||
>
|
>
|
||||||
{{ signing?.missed_blocks_counter }}
|
{{ signing?.missed_blocks_counter }}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-else
|
v-else
|
||||||
class="badge badge-sm bg-transparent text-green-600 border-0"
|
class="badge badge-sm bg-transparent text-green-600 border-0 font-bold"
|
||||||
>
|
>
|
||||||
{{ signing?.missed_blocks_counter }}
|
{{ signing?.missed_blocks_counter }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -113,6 +113,7 @@
|
|||||||
"btn_fees": "Fees",
|
"btn_fees": "Fees",
|
||||||
"btn_query": "Query",
|
"btn_query": "Query",
|
||||||
"btn_execute": "Execute",
|
"btn_execute": "Execute",
|
||||||
|
"btn_transactions": "Txs",
|
||||||
"instantiate_contract": "Instantiate Contract",
|
"instantiate_contract": "Instantiate Contract",
|
||||||
"contract_detail": "Contract Detail",
|
"contract_detail": "Contract Detail",
|
||||||
"contract_balances": "Contract Balances",
|
"contract_balances": "Contract Balances",
|
||||||
|
Loading…
Reference in New Issue
Block a user