forked from cerc-io/cosmos-explorer
Merge pull request #453 from sxlmnwb/master
i18n update add en in ping-pub/explorer #2
This commit is contained in:
commit
bc525a3dd9
@ -135,7 +135,7 @@ const amount = computed({
|
||||
}}</span>)
|
||||
</div>
|
||||
<div class="text-xs mt-2">
|
||||
Rank:
|
||||
{{ $t('index.rank') }}:
|
||||
<div class="badge text-xs badge-error bg-[#fcebea] dark:bg-[#41384d] text-red-400">
|
||||
#{{ coinInfo.market_cap_rank }}
|
||||
</div>
|
||||
@ -209,7 +209,7 @@ const amount = computed({
|
||||
<input type="checkbox" id="calculator" class="modal-toggle" />
|
||||
<div class="modal">
|
||||
<div class="modal-box">
|
||||
<h3 class="text-lg font-bold">Price Calculator</h3>
|
||||
<h3 class="text-lg font-bold">{{ $t('index.price_calculator') }}</h3>
|
||||
<div class="flex flex-col w-full mt-5">
|
||||
<div class="grid h-20 flex-grow card rounded-box place-items-center">
|
||||
<div class="join w-full">
|
||||
@ -230,11 +230,11 @@ const amount = computed({
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<label class="modal-backdrop" for="calculator">Close</label>
|
||||
<label class="modal-backdrop" for="calculator">{{ $t('index.close') }}</label>
|
||||
</div>
|
||||
<a class="my-5 !text-white btn grow" :class="{'!btn-success': store.trustColor === 'green', '!btn-warning': store.trustColor === 'yellow'}" :href="ticker.trade_url"
|
||||
target="_blank">
|
||||
Buy {{ coinInfo.symbol || '' }}
|
||||
{{ $t('index.buy') }} {{ coinInfo.symbol || '' }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@ -264,13 +264,13 @@ const amount = computed({
|
||||
|
||||
<div v-if="blockchain.supportModule('governance')" class="bg-base-100 rounded mt-4 shadow">
|
||||
<div class="px-4 pt-4 pb-2 text-lg font-semibold text-main">
|
||||
Active Proposals
|
||||
{{ $t('index.active_proposals') }}
|
||||
</div>
|
||||
<div class="px-4 pb-4">
|
||||
<ProposalListItem :proposals="store?.proposals" />
|
||||
</div>
|
||||
<div class="pb-8 text-center" v-if="store.proposals?.proposals?.length === 0">
|
||||
No active proposals
|
||||
{{ $t('index.no_active_proposals') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -279,11 +279,11 @@ const amount = computed({
|
||||
<span class="truncate" >{{ walletStore.currentAddress || 'Not Connected' }}</span>
|
||||
<RouterLink v-if="walletStore.currentAddress"
|
||||
class="float-right text-sm cursor-pointert link link-primary no-underline font-medium"
|
||||
:to="`/${chain}/account/${walletStore.currentAddress}`">More</RouterLink>
|
||||
:to="`/${chain}/account/${walletStore.currentAddress}`">{{ $t('index.more') }}</RouterLink>
|
||||
</div>
|
||||
<div class="grid grid-cols-1 md:!grid-cols-4 auto-cols-auto gap-4 px-4 pb-6">
|
||||
<div class="bg-gray-100 dark:bg-[#373f59] rounded-sm px-4 py-3">
|
||||
<div class="text-sm mb-1">Balance</div>
|
||||
<div class="text-sm mb-1">{{ $t('account.balance') }}</div>
|
||||
<div class="text-lg font-semibold text-main">
|
||||
{{ format.formatToken(walletStore.balanceOfStakingToken) }}
|
||||
</div>
|
||||
@ -292,7 +292,7 @@ const amount = computed({
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-gray-100 dark:bg-[#373f59] rounded-sm px-4 py-3">
|
||||
<div class="text-sm mb-1">Staking</div>
|
||||
<div class="text-sm mb-1">{{ $t('module.staking') }}</div>
|
||||
<div class="text-lg font-semibold text-main">
|
||||
{{ format.formatToken(walletStore.stakingAmount) }}
|
||||
</div>
|
||||
@ -301,7 +301,7 @@ const amount = computed({
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-gray-100 dark:bg-[#373f59] rounded-sm px-4 py-3">
|
||||
<div class="text-sm mb-1">Reward</div>
|
||||
<div class="text-sm mb-1">{{ $t('index.reward') }}</div>
|
||||
<div class="text-lg font-semibold text-main">
|
||||
{{ format.formatToken(walletStore.rewardAmount) }}
|
||||
</div>
|
||||
@ -310,7 +310,7 @@ const amount = computed({
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-gray-100 dark:bg-[#373f59] rounded-sm px-4 py-3">
|
||||
<div class="text-sm mb-1">Unbonding</div>
|
||||
<div class="text-sm mb-1">{{ $t('index.unbonding') }}</div>
|
||||
<div class="text-lg font-semibold text-main">
|
||||
{{ format.formatToken(walletStore.unbondingAmount) }}
|
||||
</div>
|
||||
@ -324,10 +324,10 @@ const amount = computed({
|
||||
<table class="table table-compact w-full table-zebra">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Validator</th>
|
||||
<th>Delegations</th>
|
||||
<th>Rewards</th>
|
||||
<th>Actions</th>
|
||||
<th>{{ $t('account.validator') }}</th>
|
||||
<th>{{ $t('account.delegations') }}</th>
|
||||
<th>{{ $t('account.rewards') }}</th>
|
||||
<th>{{ $t('staking.actions') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@ -354,11 +354,11 @@ const amount = computed({
|
||||
<div>
|
||||
<label for="delegate" class="btn !btn-xs !btn-primary btn-ghost rounded-sm mr-2"
|
||||
@click="dialog.open('delegate', { validator_address: item.delegation.validator_address }, updateState)">
|
||||
Delegate
|
||||
{{ $t('account.btn_delegate') }}
|
||||
</label>
|
||||
<label for="withdraw" class="btn !btn-xs !btn-primary btn-ghost rounded-sm"
|
||||
@click="dialog.open('withdraw', { validator_address: item.delegation.validator_address }, updateState)">
|
||||
Withdraw Rewards
|
||||
{{ $t('index.btn_withdraw_reward') }}
|
||||
</label>
|
||||
</div>
|
||||
</td>
|
||||
@ -368,11 +368,11 @@ const amount = computed({
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-3 gap-4 px-4 pb-6 mt-4">
|
||||
<label for="PingTokenConvert" class="btn btn-primary text-white">Swap</label>
|
||||
<label for="send" class="btn !bg-yes !border-yes text-white" @click="dialog.open('send', {}, updateState)">Send</label>
|
||||
<label for="PingTokenConvert" class="btn btn-primary text-white">{{ $t('index.btn_swap') }}</label>
|
||||
<label for="send" class="btn !bg-yes !border-yes text-white" @click="dialog.open('send', {}, updateState)">{{ $t('account.btn_send') }}</label>
|
||||
<label for="delegate" class="btn !bg-info !border-info text-white"
|
||||
@click="dialog.open('delegate', {}, updateState)">Delegate</label>
|
||||
<RouterLink to="/wallet/receive" class="btn !bg-info !border-info text-white hidden">Receive</RouterLink>
|
||||
@click="dialog.open('delegate', {}, updateState)">{{ $t('account.btn_delegate') }}</label>
|
||||
<RouterLink to="/wallet/receive" class="btn !bg-info !border-info text-white hidden">{{ $t('index.receive') }}</RouterLink>
|
||||
</div>
|
||||
<Teleport to="body">
|
||||
<ping-token-convert :chain-name="blockchain?.current?.prettyName" :endpoint="blockchain?.endpoint?.address"
|
||||
@ -382,7 +382,7 @@ const amount = computed({
|
||||
|
||||
<div class="bg-base-100 rounded mt-4">
|
||||
<div class="px-4 pt-4 pb-2 text-lg font-semibold text-main">
|
||||
Application Versions
|
||||
{{ $t('index.app_versions') }}
|
||||
</div>
|
||||
<!-- Application Version -->
|
||||
<ArrayObjectElement :value="paramStore.appVersion?.items" :thead="false" />
|
||||
@ -391,7 +391,7 @@ const amount = computed({
|
||||
|
||||
<div v-if="!store.coingeckoId" class="bg-base-100 rounded mt-4">
|
||||
<div class="px-4 pt-4 pb-2 text-lg font-semibold text-main">
|
||||
Node Information
|
||||
{{ $t('index.node_info') }}
|
||||
</div>
|
||||
<ArrayObjectElement :value="paramStore.nodeVersion?.items" :thead="false" />
|
||||
<div class="h-4"></div>
|
||||
|
@ -193,16 +193,16 @@ const tipMsg = computed(() => {
|
||||
validator_address: v.operator_address,
|
||||
})
|
||||
"
|
||||
>Delegate</label
|
||||
>{{ $t('account.btn_delegate') }}</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="m-4 text-sm">
|
||||
<p class="text-sm mb-3 font-medium">About Us</p>
|
||||
<p class="text-sm mb-3 font-medium">{{ $t('staking.about_us') }}</p>
|
||||
<div class="card-list">
|
||||
<div class="flex items-center mb-2">
|
||||
<Icon icon="mdi-web" class="text-xl mr-1" />
|
||||
<span class="font-bold mr-2">Website: </span>
|
||||
<span class="font-bold mr-2">{{ $t('staking.website') }}: </span>
|
||||
<a
|
||||
:href="v?.description?.website || '#'"
|
||||
:class="
|
||||
@ -216,22 +216,22 @@ const tipMsg = computed(() => {
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<Icon icon="mdi-email-outline" class="text-xl mr-1" />
|
||||
<span class="font-bold mr-2">Contact: </span>
|
||||
<span class="font-bold mr-2">{{ $t('staking.contact') }}: </span>
|
||||
<span> {{ v.description?.security_contact }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<p class="text-sm mt-4 mb-3 font-medium">Validator Status</p>
|
||||
<p class="text-sm mt-4 mb-3 font-medium">{{ $t('staking.validator_status') }}</p>
|
||||
<div class="card-list">
|
||||
<div class="flex items-center mb-2">
|
||||
<Icon icon="mdi-shield-account-outline" class="text-xl mr-1" />
|
||||
<span class="font-bold mr-2">Status: </span
|
||||
<span class="font-bold mr-2">{{ $t('staking.status') }}: </span
|
||||
><span>
|
||||
{{ String(v.status).replace('BOND_STATUS_', '') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<Icon icon="mdi-shield-alert-outline" class="text-xl mr-1" />
|
||||
<span class="font-bold mr-2">Jailed: </span>
|
||||
<span class="font-bold mr-2">{{ $t('staking.jailed') }}: </span>
|
||||
<span> {{ v.jailed || '-' }} </span>
|
||||
</div>
|
||||
</div>
|
||||
@ -255,7 +255,7 @@ const tipMsg = computed(() => {
|
||||
})
|
||||
}}
|
||||
</h4>
|
||||
<span class="text-sm">Total Bonded Tokens</span>
|
||||
<span class="text-sm">{{ $t('staking.total_bonded') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex mb-2">
|
||||
@ -269,7 +269,7 @@ const tipMsg = computed(() => {
|
||||
<h4>
|
||||
{{ format.formatToken(selfBonded.balance) }} ({{ selfRate }})
|
||||
</h4>
|
||||
<span class="text-sm">Self Bonded</span>
|
||||
<span class="text-sm">{{ $t('staking.self_bonded') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -285,7 +285,7 @@ const tipMsg = computed(() => {
|
||||
<h4>
|
||||
{{ v.min_self_delegation }} {{ staking.params.bond_denom }}
|
||||
</h4>
|
||||
<span class="text-sm">Min Self Delegation:</span>
|
||||
<span class="text-sm">{{ $t('staking.min_self') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex mb-2">
|
||||
@ -297,7 +297,7 @@ const tipMsg = computed(() => {
|
||||
</div>
|
||||
<div class="ml-3 flex flex-col justify-center">
|
||||
<h4>{{ apr }}</h4>
|
||||
<span class="text-sm">Annual Profit</span>
|
||||
<span class="text-sm">{{ $t('staking.annual_profit') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -310,7 +310,7 @@ const tipMsg = computed(() => {
|
||||
</div>
|
||||
<div class="ml-3 flex flex-col justify-center">
|
||||
<h4>{{ v.unbonding_height }}</h4>
|
||||
<span class="text-sm">Unbonding Height</span>
|
||||
<span class="text-sm">{{ $t('staking.unbonding_height') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -324,7 +324,7 @@ const tipMsg = computed(() => {
|
||||
<div class="ml-3 flex flex-col justify-center">
|
||||
<h4 v-if="v.unbonding_time && !v.unbonding_time.startsWith('1970')">{{ format.toDay(v.unbonding_time, 'from') }}</h4>
|
||||
<h4 v-else>-</h4>
|
||||
<span class="text-sm">Unbonding Time</span>
|
||||
<span class="text-sm">{{ $t('staking.unbonding_time') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -339,14 +339,14 @@ const tipMsg = computed(() => {
|
||||
</div>
|
||||
<div class="bg-base-100 rounded shadow relative overflow-auto">
|
||||
<div class="text-lg font-semibold text-main px-4 pt-4">
|
||||
Commissions & Rewards
|
||||
{{ $t('staking.commissions_&_rewards') }}
|
||||
</div>
|
||||
<div
|
||||
class="px-4 mt-1 flex flex-col justify-between pb-4"
|
||||
style="height: calc(100% - 50px)"
|
||||
>
|
||||
<div class="overflow-auto flex-1">
|
||||
<div class="text-sm mb-2">Commissions</div>
|
||||
<div class="text-sm mb-2">{{ $t('staking.commissions') }}</div>
|
||||
<div
|
||||
v-for="(i, k) in commission"
|
||||
:key="`reward-${k}`"
|
||||
@ -357,7 +357,7 @@ const tipMsg = computed(() => {
|
||||
>
|
||||
{{ format.formatToken2(i) }}
|
||||
</div>
|
||||
<div class="text-sm mb-2 mt-2">Outstanding Rewards</div>
|
||||
<div class="text-sm mb-2 mt-2">{{ $t('staking.outstanding') }} {{ $t('account.rewards') }}</div>
|
||||
<div
|
||||
v-for="(i, k) in rewards"
|
||||
:key="`reward-${k}`"
|
||||
@ -375,18 +375,18 @@ const tipMsg = computed(() => {
|
||||
validator_address: v.operator_address,
|
||||
})
|
||||
"
|
||||
>Withdraw</label
|
||||
>{{ $t('account.btn_withdraw') }}</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-base-100 rounded shadow overflow-x-auto">
|
||||
<div class="px-4 pt-4 mb-2 text-main font-lg font-semibold">
|
||||
Addresses
|
||||
{{ $t('staking.addresses') }}
|
||||
</div>
|
||||
<div class="px-4 pb-4">
|
||||
<div class="mb-3">
|
||||
<div class="text-sm flex">Account
|
||||
<div class="text-sm flex">{{ $t('staking.account_addr') }}
|
||||
<Icon
|
||||
icon="mdi:content-copy"
|
||||
class="ml-2 cursor-pointer"
|
||||
@ -402,7 +402,7 @@ const tipMsg = computed(() => {
|
||||
</RouterLink>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<div class="text-sm flex">Operator Address
|
||||
<div class="text-sm flex">{{ $t('staking.operator_addr') }}
|
||||
<Icon
|
||||
icon="mdi:content-copy"
|
||||
class="ml-2 cursor-pointer"
|
||||
@ -414,7 +414,7 @@ const tipMsg = computed(() => {
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<div class="text-sm flex">Hex Address
|
||||
<div class="text-sm flex">{{ $t('staking.hex_addr') }}
|
||||
<Icon
|
||||
icon="mdi:content-copy"
|
||||
class="ml-2 cursor-pointer"
|
||||
@ -425,7 +425,7 @@ const tipMsg = computed(() => {
|
||||
<div class="text-xs">{{ addresses.hex }}</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<div class="text-sm flex">Signer Address
|
||||
<div class="text-sm flex">{{ $t('staking.signer_addr') }}
|
||||
<Icon
|
||||
icon="mdi:content-copy"
|
||||
class="ml-2 cursor-pointer"
|
||||
@ -436,7 +436,7 @@ const tipMsg = computed(() => {
|
||||
<div class="text-xs">{{ addresses.valCons }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-sm flex">Consensus Public Key
|
||||
<div class="text-sm flex">{{ $t('staking.consensus_pub_key') }}
|
||||
<Icon
|
||||
icon="mdi:content-copy"
|
||||
class="ml-2 cursor-pointer"
|
||||
@ -450,16 +450,16 @@ const tipMsg = computed(() => {
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-5 bg-base-100 shadow rounded p-4">
|
||||
<div class="text-lg mb-4 font-semibold">Transactions</div>
|
||||
<div class="text-lg mb-4 font-semibold">{{ $t('account.transactions') }}</div>
|
||||
<div class="rounded overflow-auto">
|
||||
<table class="table validatore-table w-full">
|
||||
<thead>
|
||||
<th class="text-left pl-4" style="position: relative; z-index: 2">
|
||||
Height
|
||||
{{ $t('account.height') }}
|
||||
</th>
|
||||
<th class="text-left pl-4">Hash</th>
|
||||
<th class="text-left pl-4" width="40%">Messages</th>
|
||||
<th class="text-left pl-4">Time</th>
|
||||
<th class="text-left pl-4">{{ $t('account.hash') }}</th>
|
||||
<th class="text-left pl-4" width="40%">{{ $t('account.messages') }}</th>
|
||||
<th class="text-left pl-4">{{ $t('account.time') }}</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="(item, i) in txs.tx_responses">
|
||||
|
@ -196,7 +196,7 @@ loadAvatars();
|
||||
</span>
|
||||
<span>
|
||||
<div class="font-bold">{{ format.percent(mintStore.inflation) }}</div>
|
||||
<div class="text-xs">Infalation</div>
|
||||
<div class="text-xs">{{ $t('staking.infalation') }}</div>
|
||||
</span>
|
||||
</div>
|
||||
<div class="flex">
|
||||
@ -208,7 +208,7 @@ loadAvatars();
|
||||
</span>
|
||||
<span>
|
||||
<div class="font-bold">{{ formatSeconds(staking.params?.unbonding_time) }}</div>
|
||||
<div class="text-xs">Unbonding Time</div>
|
||||
<div class="text-xs">{{ $t('staking.unbonding_time') }}</div>
|
||||
</span>
|
||||
</div>
|
||||
<div class="flex">
|
||||
@ -220,7 +220,7 @@ loadAvatars();
|
||||
</span>
|
||||
<span>
|
||||
<div class="font-bold">{{ format.percent(slashing.slash_fraction_double_sign) }}</div>
|
||||
<div class="text-xs">Double Sign Slashing</div>
|
||||
<div class="text-xs">{{ $t('staking.double_sign_slashing') }}</div>
|
||||
</span>
|
||||
</div>
|
||||
<div class="flex">
|
||||
@ -232,7 +232,7 @@ loadAvatars();
|
||||
</span>
|
||||
<span>
|
||||
<div class="font-bold">{{ format.percent(slashing.slash_fraction_downtime) }}</div>
|
||||
<div class="text-xs">Downtime Slashing</div>
|
||||
<div class="text-xs">{{ $t('staking.downtime_slashing') }}</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@ -244,19 +244,19 @@ loadAvatars();
|
||||
class="tab text-gray-400"
|
||||
:class="{ 'tab-active': tab === 'featured' }"
|
||||
@click="tab = 'featured'"
|
||||
>Popular</a
|
||||
>{{ $t('staking.popular') }}</a
|
||||
>
|
||||
<a
|
||||
class="tab text-gray-400"
|
||||
:class="{ 'tab-active': tab === 'active' }"
|
||||
@click="tab = 'active'"
|
||||
>Active</a
|
||||
>{{ $t('staking.active') }}</a
|
||||
>
|
||||
<a
|
||||
class="tab text-gray-400"
|
||||
:class="{ 'tab-active': tab === 'inactive' }"
|
||||
@click="tab = 'inactive'"
|
||||
>Inactive</a
|
||||
>{{ $t('staking.inactive') }}</a
|
||||
>
|
||||
</div>
|
||||
|
||||
@ -272,15 +272,16 @@ loadAvatars();
|
||||
<tr>
|
||||
<th
|
||||
scope="col"
|
||||
class="uppercase"
|
||||
style="width: 3rem; position: relative"
|
||||
>
|
||||
#
|
||||
{{ $t('staking.rank') }}
|
||||
</th>
|
||||
<th scope="col">VALIDATOR</th>
|
||||
<th scope="col" class="text-right">VOTING POWER</th>
|
||||
<th scope="col" class="text-right">24h CHANGES</th>
|
||||
<th scope="col" class="text-right">COMMISSION</th>
|
||||
<th scope="col" class="text-center">ACTIONS</th>
|
||||
<th scope="col" class="uppercase">{{ $t('staking.validator') }}</th>
|
||||
<th scope="col" class="text-right uppercase">{{ $t('staking.voting_power') }}</th>
|
||||
<th scope="col" class="text-right uppercase">{{ $t('staking.24h_changes') }}</th>
|
||||
<th scope="col" class="text-right uppercase">{{ $t('staking.commission') }}</th>
|
||||
<th scope="col" class="text-center uppercase">{{ $t('staking.actions') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@ -400,7 +401,7 @@ loadAvatars();
|
||||
v-if="v.jailed"
|
||||
class="badge badge-error gap-2 text-white"
|
||||
>
|
||||
Jailed
|
||||
{{ $t('staking.jailed') }}
|
||||
</div>
|
||||
<label
|
||||
v-else-if="rank !== 'error'"
|
||||
@ -412,7 +413,7 @@ loadAvatars();
|
||||
v.operator_address,
|
||||
})
|
||||
"
|
||||
>Delegate</label
|
||||
>{{ $t('account.btn_delegate') }}</label
|
||||
>
|
||||
</td>
|
||||
</tr>
|
||||
@ -428,7 +429,7 @@ loadAvatars();
|
||||
<span
|
||||
class="inset-x-0 inset-y-0 opacity-10 absolute bg-error"
|
||||
></span>
|
||||
Top 33%
|
||||
{{ $t('staking.top') }} 33%
|
||||
</div>
|
||||
<div
|
||||
class="text-xs truncate relative py-2 px-4 rounded-md w-fit text-warning"
|
||||
@ -436,10 +437,10 @@ loadAvatars();
|
||||
<span
|
||||
class="inset-x-0 inset-y-0 opacity-10 absolute bg-warning"
|
||||
></span>
|
||||
Top 67%
|
||||
{{ $t('staking.top') }} 67%
|
||||
</div>
|
||||
<div class="text-xs hidden md:!block pl-2">
|
||||
Delegating to lower-rank validators will increase the overall security of the network
|
||||
{{ $t('staking.description') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -38,37 +38,33 @@ onMounted(() => {
|
||||
<template>
|
||||
<div>
|
||||
<div class="bg-base-100 px-4 pt-3 pb-4 rounded mb-4 shadow">
|
||||
<h2 class="card-title truncate mb-2">What's State Sync?</h2>
|
||||
<h2 class="card-title truncate mb-2">{{ $t('statesync.title') }}</h2>
|
||||
<div class="text-sm">
|
||||
The Tendermint Core 0.34 release includes support for state sync, which
|
||||
allows a new node to join a network by fetching a snapshot of the
|
||||
application state at a recent height instead of fetching and replaying
|
||||
all historical blocks. This can reduce the time needed to sync with the
|
||||
network from days to minutes. Click
|
||||
{{ $t('statesync.description') }}
|
||||
<a
|
||||
class="text-primary"
|
||||
class="text-primary lowercase"
|
||||
href="https://blog.cosmos.network/cosmos-sdk-state-sync-guide-99e4cf43be2f"
|
||||
>here</a
|
||||
>{{ $t('statesync.here') }} </a
|
||||
>
|
||||
for more infomation.
|
||||
<a
|
||||
class="lowercase">
|
||||
{{ $t('statesync.for_more_info') }}.</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="bg-base-100 px-4 pt-3 pb-4 rounded mb-4 shadow">
|
||||
<h2 class="card-title truncate mb-2">
|
||||
Starting New Node From State Sync
|
||||
{{ $t('statesync.title_2') }}
|
||||
</h2>
|
||||
<div class="text-sm">
|
||||
1. Install Binary ({{ appName }} Version:
|
||||
1. {{ $t('statesync.text_1') }} ({{ appName }} {{ $t('statesync.version') }}:
|
||||
{{ nodeInfo.application_version?.version || '' }})
|
||||
<br />
|
||||
We need to install the binary first and make sure that the version is
|
||||
the one currently in use on mainnet.
|
||||
{{ $t('statesync.text_1_1') }}.
|
||||
<br />
|
||||
<br />
|
||||
2. Enable State Sync<br />
|
||||
We can configure Tendermint to use state sync in
|
||||
$DAEMON_HOME/config/config.toml.
|
||||
2. {{ $t('statesync.text_2') }}<br />
|
||||
{{ $t('statesync.text_2_1') }}.
|
||||
<br /><br />
|
||||
<div class="mockup-code bg-base-200 my-2">
|
||||
<pre data-prefix=">"><code class="text-gray-800 dark:invert">[state-sync]</code></pre>
|
||||
@ -82,20 +78,19 @@ onMounted(() => {
|
||||
<pre data-prefix=">"><code class="text-gray-800 dark:invert">trust_period = "168h"</code></pre>
|
||||
</div>
|
||||
<br />
|
||||
3. Start the daemon: <code class="bg-base-200 text-gray-600 px-2 py-px mx-1 rounded shadow">{{ appName }} start</code>
|
||||
3. {{ $t('statesync.text_3') }}: <code class="bg-base-200 text-gray-600 px-2 py-px mx-1 rounded shadow">{{ appName }} start</code>
|
||||
<br />
|
||||
If you are resetting node, run
|
||||
{{ $t('statesync.text_3_1') }}
|
||||
<code class="bg-base-200 text-gray-600 px-2 py-px mx-1 rounded shadow">{{ appName }} unsafe-reset-all</code> or
|
||||
<code class="bg-base-200 text-gray-600 px-2 py-px mx-1 rounded shadow">{{ appName }} tendermint unsafe-reset-all --home ~/.HOME</code>
|
||||
before you start the daemon.
|
||||
{{ $t('statesync.text_3_2') }}.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="bg-base-100 px-4 pt-3 pb-4 rounded shadow">
|
||||
<h2 class="card-title truncate mb-2">Enable Snapshot For State Sync</h2>
|
||||
<h2 class="card-title truncate mb-2">{{ $t('statesync.title_3') }}</h2>
|
||||
<div class="text-sm">
|
||||
To make state sync works, we can enable snapshot in
|
||||
$DAEMON_HOME/config/app.toml
|
||||
{{ $t('statesync.text_title_3') }}
|
||||
<br /><br />
|
||||
<div class="mockup-code bg-base-200 my-2">
|
||||
<pre data-prefix=">"><code class="text-gray-800 dark:invert">[state-sync]</code></pre>
|
||||
|
@ -26,16 +26,16 @@ const messages = computed(() => {
|
||||
<template>
|
||||
<div>
|
||||
<div v-if="tx.tx_response" class="bg-base-100 px-4 pt-3 pb-4 rounded shadow mb-4">
|
||||
<h2 class="card-title truncate mb-2">Summary</h2>
|
||||
<h2 class="card-title truncate mb-2">{{ $t('tx.title') }}</h2>
|
||||
<div class="overflow-auto-x">
|
||||
<table class="table text-sm">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Tx Hash</td>
|
||||
<td>{{ $t('tx.tx_hash') }}</td>
|
||||
<td>{{ tx.tx_response.txhash }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Height</td>
|
||||
<td>{{ $t('account.height') }}</td>
|
||||
<td>
|
||||
<RouterLink :to="`/${props.chain}/block/${tx.tx_response.height}`" class="text-primary dark:invert">{{ tx.tx_response.height
|
||||
}}
|
||||
@ -43,7 +43,7 @@ const messages = computed(() => {
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Status</td>
|
||||
<td>{{ $t('staking.status') }}</td>
|
||||
<td>
|
||||
<div class="text-xs truncate relative py-2 px-4 w-fit mr-2 rounded" :class="`text-${tx.tx_response.code === 0 ? 'success' : 'error'
|
||||
}`">
|
||||
@ -54,7 +54,7 @@ const messages = computed(() => {
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Time</td>
|
||||
<td>{{ $t('account.time') }}</td>
|
||||
<td>
|
||||
{{ format.toLocaleDate(tx.tx_response.timestamp) }} ({{
|
||||
format.toDay(tx.tx_response.timestamp, 'from')
|
||||
@ -62,13 +62,13 @@ const messages = computed(() => {
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Gas</td>
|
||||
<td>{{ $t('tx.gas') }}</td>
|
||||
<td>
|
||||
{{ tx.tx_response.gas_used }} / {{ tx.tx_response.gas_wanted }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Fee</td>
|
||||
<td>{{ $t('tx.fee') }}</td>
|
||||
<td>
|
||||
{{
|
||||
format.formatTokens(
|
||||
@ -80,7 +80,7 @@ const messages = computed(() => {
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Memo</td>
|
||||
<td>{{ $t('tx.memo') }}</td>
|
||||
<td>{{ tx.tx.body.memo }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@ -90,14 +90,14 @@ const messages = computed(() => {
|
||||
|
||||
<div v-if="tx.tx_response" class="bg-base-100 px-4 pt-3 pb-4 rounded shadow mb-4">
|
||||
<h2 class="card-title truncate mb-2">
|
||||
Messages: ({{ messages.length }})
|
||||
{{ $t('account.messages') }}: ({{ messages.length }})
|
||||
</h2>
|
||||
<div v-for="(msg, i) in messages">
|
||||
<div class="border border-slate-400 rounded-md mt-4">
|
||||
<DynamicComponent :value="msg" />
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="messages.length === 0">No messages</div>
|
||||
<div v-if="messages.length === 0">{{ $t('tx.no_messages') }}</div>
|
||||
</div>
|
||||
|
||||
<div v-if="tx.tx_response" class="bg-base-100 px-4 pt-3 pb-4 rounded shadow">
|
||||
|
@ -127,7 +127,7 @@ function color(v: string) {
|
||||
<div class="overflow-x-auto w-full">
|
||||
<div class="lg:!flex lg:!items-center lg:!justify-between bg-base-100 p-5">
|
||||
<div class="min-w-0 flex-1">
|
||||
<h2 class="text-2xl font-bold leading-7 sm:!truncate sm:!text-3xl sm:!tracking-tight">My Validators</h2>
|
||||
<h2 class="text-2xl font-bold leading-7 sm:!truncate sm:!text-3xl sm:!tracking-tight">{{ $t('uptime.my_validators') }}</h2>
|
||||
<div class="mt-1 flex flex-col sm:!mt-0 sm:!flex-row sm:!flex-wrap sm:!space-x-6">
|
||||
<div class="mt-2 flex items-center text-sm text-gray-500">
|
||||
<svg class="mr-1.5 h-5 w-5 flex-shrink-0 text-gray-400" viewBox="0 0 20 20" fill="currentColor"
|
||||
@ -138,7 +138,7 @@ function color(v: string) {
|
||||
<path
|
||||
d="M3 15.055v-.684c.126.053.255.1.39.142 2.092.642 4.313.987 6.61.987 2.297 0 4.518-.345 6.61-.987.135-.041.264-.089.39-.142v.684c0 1.347-.985 2.53-2.363 2.686a41.454 41.454 0 01-9.274 0C3.985 17.585 3 16.402 3 15.055z" />
|
||||
</svg>
|
||||
Add validators you want to monitor
|
||||
{{ $t('uptime.add_validators_monitor') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -149,13 +149,13 @@ function color(v: string) {
|
||||
<table class="table table-compact w-full">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>{{ $t('uptime.no') }}</th>
|
||||
<th>Blockchain</th>
|
||||
<th>Validator</th>
|
||||
<th>Signed Blocks</th>
|
||||
<th>Last Jailed Time</th>
|
||||
<th>Tombstoned</th>
|
||||
<th>Missing Blocks</th>
|
||||
<th>{{ $t('account.validator') }}</th>
|
||||
<th>{{ $t('uptime.signed_blocks') }}</th>
|
||||
<th>{{ $t('uptime.last_jailed_time') }}</th>
|
||||
<th>{{ $t('uptime.tombstoned') }}</th>
|
||||
<th>{{ $t('uptime.missing_blocks') }}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -173,14 +173,14 @@ function color(v: string) {
|
||||
</td>
|
||||
<td class=" capitalize">{{ v.sigingInfo?.tombstoned }}</td>
|
||||
<td><span v-if="v.sigingInfo" class="badge " :class="color( v.sigingInfo?.missed_blocks_counter)">{{ v.sigingInfo?.missed_blocks_counter }}</span></td>
|
||||
<td class=""><RouterLink :to="`/${v.chainName}/uptime/#blocks`" class="btn btn-xs btn-primary">Blocks</RouterLink></td>
|
||||
<td class=""><RouterLink :to="`/${v.chainName}/uptime/#blocks`" class="btn btn-xs btn-primary">{{ $t('module.blocks') }}</RouterLink></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
<label for="add-validator" class="btn btn-primary mt-5">Add Validators</label>
|
||||
<label for="add-validator" class="btn btn-primary mt-5">{{ $t('uptime.add_validators') }}</label>
|
||||
</div>
|
||||
|
||||
<!-- Put this part before </body> tag -->
|
||||
@ -188,7 +188,7 @@ function color(v: string) {
|
||||
<div class="modal">
|
||||
<div class="modal-box relative">
|
||||
<label for="add-validator" class="btn btn-sm btn-circle absolute right-2 top-2">✕</label>
|
||||
<h3 class="text-lg font-bold">Add Validators</h3>
|
||||
<h3 class="text-lg font-bold">{{ $t('uptime.add_validators') }}</h3>
|
||||
<div class="form-control my-5 border-2">
|
||||
<div class="input-group input-group-md">
|
||||
<select v-model="selectChain" class="select select-bordered capitalize" @change="changeChain">
|
||||
@ -203,7 +203,7 @@ function color(v: string) {
|
||||
|
||||
<table class="table table-compact w-full hover">
|
||||
<thead>
|
||||
<tr><th>Validator</th><th></th></tr>
|
||||
<tr><th>{{ $t('account.validator') }}</th><th></th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="(v, i) in filterValidators">
|
||||
@ -214,7 +214,7 @@ function color(v: string) {
|
||||
</table>
|
||||
</div>
|
||||
<div class="modal-action">
|
||||
<label class="btn btn-primary" @click="add">add</label>
|
||||
<label class="btn btn-primary" @click="add">{{ $t('uptime.add') }}</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -122,23 +122,23 @@ function changeTab(v: string) {
|
||||
class="tab text-gray-400 capitalize"
|
||||
:class="{ 'tab-active': tab === '3' }"
|
||||
@click="changeTab('3')"
|
||||
>Overall</a
|
||||
>{{ $t('uptime.overall') }}</a
|
||||
>
|
||||
<a
|
||||
class="tab text-gray-400 capitalize"
|
||||
:class="{ 'tab-active': tab === '2' }"
|
||||
@click="changeTab('2')"
|
||||
>Blocks</a
|
||||
>{{ $t('module.blocks') }}</a
|
||||
>
|
||||
<RouterLink :to="`/${chain}/uptime/customize`">
|
||||
<a class="tab text-gray-400 capitalize">Customize</a>
|
||||
<a class="tab text-gray-400 capitalize">{{ $t('uptime.customize') }}</a>
|
||||
</RouterLink>
|
||||
</div>
|
||||
<div class="bg-base-100 px-5 pt-5">
|
||||
<div class="flex items-center gap-x-4">
|
||||
<label v-if="chainStore.isConsumerChain" class="text-center">
|
||||
<input type="checkbox" v-model="filterOptout" class="checkbox" />
|
||||
Only Consumer Set
|
||||
{{ $t('uptime.only_consumer_set') }}
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
@ -180,12 +180,12 @@ function changeTab(v: string) {
|
||||
<table class="table table-compact w-full mt-5">
|
||||
<thead class="capitalize">
|
||||
<tr>
|
||||
<td>Validator</td>
|
||||
<td class="text-right">Uptime</td>
|
||||
<td>Last Jailed Time</td>
|
||||
<td class="text-right">Signed Precommits</td>
|
||||
<td class="text-right">Start Height</td>
|
||||
<td>Tombstoned</td>
|
||||
<td>{{ $t('account.validator') }}</td>
|
||||
<td class="text-right">{{ $t('module.uptime') }}</td>
|
||||
<td>{{ $t('uptime.last_jailed_time') }}</td>
|
||||
<td class="text-right">{{ $t('uptime.signed_precommits') }}</td>
|
||||
<td class="text-right">{{ $t('uptime.start_height') }}</td>
|
||||
<td>{{ $t('uptime.tombstoned') }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr v-for="({ v, signing, uptime }, i) in list" class="hover">
|
||||
@ -239,7 +239,7 @@ function changeTab(v: string) {
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="2" class="text-right">
|
||||
Minimum uptime per window:
|
||||
{{ $t('uptime.minimum_uptime') }}:
|
||||
<span
|
||||
class="lowercase tooltip"
|
||||
:data-tip="`Window size: ${slashingParam.signed_blocks_window}`"
|
||||
|
@ -19,33 +19,33 @@ const hdPath = computed(() => {
|
||||
<template>
|
||||
<div>
|
||||
<div class="bg-base-100 px-4 pt-3 pb-4 rounded shadow">
|
||||
<h2 class="card-title">Initial Setting</h2>
|
||||
<h2 class="card-title">{{ $t('widget.title') }}</h2>
|
||||
<div class="my-4 grid grid-flow-col auto-cols-max overflow-auto">
|
||||
<div class="form-control">
|
||||
<div class="input-group">
|
||||
<span>Endpoint</span>
|
||||
<span>{{ $t('widget.endpoint') }}</span>
|
||||
<select v-model="endpoint" class="select select-bordered w-fit">
|
||||
<option disabled selected>Select Endpoint</option>
|
||||
<option disabled selected>{{ $t('widget.select_endpoint') }}</option>
|
||||
<option v-for="v in chainStore.current?.endpoints.rest" :value="v.address">{{ v.address }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span class="text-base">Import global script </span>
|
||||
<span class="text-base">{{ $t('widget.text_1') }}</span>
|
||||
<div class="mockup-code bg-base-200 my-2">
|
||||
<pre data-prefix="1"><code class="text-gray-800 dark:invert"><script type="module" src="https://unpkg.com/ping-widget@latest/dist/ping-widget.js"></code></pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-base-100 my-5 px-4 pt-3 pb-4 rounded shadow">
|
||||
<h2 class="card-title">Widgets</h2>
|
||||
<h2 class="card-title">{{ $t('module.widget') }}</h2>
|
||||
<div class="mt-4">
|
||||
<span class="text-base"> 1. Connect Wallet </span>
|
||||
<span class="text-base"> 1. {{ $t('widget.text_2') }}</span>
|
||||
<div class="mockup-code bg-base-200 my-2">
|
||||
<pre data-prefix=">"><code class="text-green-400"><!-- This widget is optional. --> </code></pre>
|
||||
<pre data-prefix=">"><code class="text-gray-800 dark:invert"><ping-connect-wallet chain-id="{{ chainId }}" hd-path="{{ hdPath }}"/></code></pre>
|
||||
</div>
|
||||
|
||||
<span class="text-base"> 2. Osmosis Convert </span>
|
||||
<span class="text-base"> 2. {{ $t('widget.text_3') }}</span>
|
||||
<div class="mockup-code bg-base-200 my-2">
|
||||
<pre data-prefix=">"><code class=" text-gray-800 dark:invert"><ping-token-convert chain-name="{{ chainName }}" endpoint="{{endpoint}}" hd-path="{{hdPath}}"/></code></pre>
|
||||
<pre data-prefix=">"><code class="text-gray-800 dark:invert"><label for="PingTokenConvert" class="btn btn-sm">Buy {{chainName.toUpperCase()}}</label></code></pre>
|
||||
|
@ -168,5 +168,108 @@
|
||||
"time": "Time",
|
||||
"btn_out": "Out",
|
||||
"btn_in": "In"
|
||||
},
|
||||
"staking": {
|
||||
"infalation": "Infalation",
|
||||
"unbonding_time": "Unbonding Time",
|
||||
"double_sign_slashing": "Double Sign Slashing",
|
||||
"downtime_slashing": "Downtime Slashing",
|
||||
"popular": "Popular",
|
||||
"active": "Active",
|
||||
"inactive": "Inactive",
|
||||
"rank": "Rank",
|
||||
"validator": "Validator",
|
||||
"voting_power": "Voting Power",
|
||||
"24h_changes": "24h Changes",
|
||||
"commission": "Commission",
|
||||
"actions": "Actions",
|
||||
"jailed": "Jailed",
|
||||
"top": "Top",
|
||||
"description": "Delegating to lower-rank validators will increase the overall security of the network",
|
||||
"about_us": "About Us",
|
||||
"website": "Website",
|
||||
"contact": "Contact",
|
||||
"validator_status": "Validator Status",
|
||||
"status": "Status",
|
||||
"total_bonded": "Total Bonded Tokens",
|
||||
"self_bonded": "Self Bonded",
|
||||
"min_self": "Min Self Delegation",
|
||||
"annual_profit": "Annual Profit",
|
||||
"unbonding_height": "Unbonding Height",
|
||||
"commissions_&_rewards": "Commissions & Rewards",
|
||||
"commissions": "Commissions",
|
||||
"outstanding": "Outstanding",
|
||||
"addresses": "Addresses",
|
||||
"account_addr": "Account Address",
|
||||
"operator_addr": "Operator Address",
|
||||
"hex_addr": "Hex Address",
|
||||
"signer_addr": "Signer Address",
|
||||
"consensus_pub_key": "Consensus Public Key"
|
||||
},
|
||||
"statesync": {
|
||||
"title": "What's State Sync?",
|
||||
"title_2": "Starting New Node From State Sync",
|
||||
"title_3": "Enable Snapshot For State Sync",
|
||||
"description": "The Tendermint Core 0.34 release includes support for state sync, which allows a new node to join a network by fetching a snapshot of the application state at a recent height instead of fetching and replaying all historical blocks. This can reduce the time needed to sync with the network from days to minutes. Click",
|
||||
"here": "Here",
|
||||
"version": "Version",
|
||||
"for_more_info": "For more infomation",
|
||||
"text_1": "Install Binary",
|
||||
"text_1_1": "We need to install the binary first and make sure that the version is the one currently in use on mainnet",
|
||||
"text_2": "Enable State Sync",
|
||||
"text_2_1": "We can configure Tendermint to use state sync in $DAEMON_HOME/config/config.toml",
|
||||
"text_3": "Start the daemon",
|
||||
"text_3_1": "If you are resetting node, run",
|
||||
"text_3_2": "before you start the daemon",
|
||||
"text_title_3": "To make state sync works, we can enable snapshot in $DAEMON_HOME/config/app.toml"
|
||||
},
|
||||
"tx": {
|
||||
"title": "Summary",
|
||||
"tx_hash": "Tx Hash",
|
||||
"gas": "Gas",
|
||||
"fee": "Fee",
|
||||
"memo": "Memo",
|
||||
"no_messages": "No messages"
|
||||
},
|
||||
"uptime": {
|
||||
"overall": "Overall",
|
||||
"customize": "Customize",
|
||||
"only_consumer_set": "Only Consumer Set",
|
||||
"last_jailed_time": "Last Jailed Time",
|
||||
"signed_precommits": "Signed Precommits",
|
||||
"start_height": "Start Height",
|
||||
"tombstoned": "Tombstoned",
|
||||
"minimum_uptime": "Minimum uptime per window",
|
||||
"my_validators": "My Validators",
|
||||
"add_validators_monitor": "Add validators you want to monitor",
|
||||
"no": "No",
|
||||
"signed_blocks": "Signed Blocks",
|
||||
"missing_blocks": "Missing Blocks",
|
||||
"add_validators": "Add Validators",
|
||||
"add": "Add"
|
||||
},
|
||||
"widget": {
|
||||
"title": "Initial Setting",
|
||||
"endpoint": "Endpoint",
|
||||
"select_endpoint": "Select Endpoint",
|
||||
"text_1": "Import global script",
|
||||
"text_2": "Connect Wallet",
|
||||
"text_3": "Osmosis Convert"
|
||||
},
|
||||
"index": {
|
||||
"rank": "Rank",
|
||||
"price_calculator": "Price Calculator",
|
||||
"close": "Close",
|
||||
"buy": "Buy",
|
||||
"active_proposals": "Active Proposals",
|
||||
"no_active_proposals": "No active proposals",
|
||||
"more": "More",
|
||||
"reward": "Reward",
|
||||
"unbonding": "Unbonding",
|
||||
"btn_withdraw_reward": "Withdraw Rewards",
|
||||
"btn_swap": "Swap",
|
||||
"receive": "Receive",
|
||||
"app_versions": "Application Versions",
|
||||
"node_info": "Node Information"
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user