forked from cerc-io/cosmos-explorer
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
622e2ba449 | ||
|
|
d075f04b8a |
+3
-5
@@ -5,8 +5,7 @@
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"lint": "vue-cli-service lint",
|
||||
"analyz": "vue-cli-service build --report"
|
||||
"lint": "vue-cli-service lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@casl/ability": "4.1.6",
|
||||
@@ -19,6 +18,7 @@
|
||||
"@cosmjs/math": "^0.26.5",
|
||||
"@cosmjs/proto-signing": "^0.26.5",
|
||||
"@cosmjs/stargate": "0.26.5",
|
||||
"@cosmostation/cosmosjs": "^0.10.6",
|
||||
"@intlify/vue-i18n-loader": "^2.1.2",
|
||||
"@ledgerhq/hw-app-cosmos": "^6.3.0",
|
||||
"@ledgerhq/hw-transport-web-ble": "^6.3.0",
|
||||
@@ -92,13 +92,11 @@
|
||||
"@vue/eslint-config-airbnb": "^5.3.0",
|
||||
"@vuepress/plugin-medium-zoom": "^1.7.1",
|
||||
"babel-eslint": "^10.0.3",
|
||||
"compression-webpack-plugin": "6.1.1",
|
||||
"eslint": "6.8.0",
|
||||
"eslint-plugin-import": "^2.22.1",
|
||||
"eslint-plugin-vue": "6.2.2",
|
||||
"sass": "1.32.*",
|
||||
"sass-loader": "^10.1.0",
|
||||
"vue-template-compiler": "2.x",
|
||||
"webpack-bundle-analyzer": "^4.5.0"
|
||||
"vue-template-compiler": "2.x"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,13 +20,4 @@ server {
|
||||
root /usr/share/nginx/html;
|
||||
}
|
||||
|
||||
gzip on;
|
||||
gzip_proxied any;
|
||||
gzip_static on;
|
||||
gzip_min_length 1024;
|
||||
gzip_buffers 4 16k;
|
||||
gzip_comp_level 2;
|
||||
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;
|
||||
gzip_vary off;
|
||||
gzip_disable "MSIE [1-6]\.";
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.1 KiB |
@@ -1,24 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="BACKGROUND" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#00D2FF;}
|
||||
</style>
|
||||
<path d="M369.3,459.5H142.7c-49.6,0-90.2-40.6-90.2-90.2V142.7c0-49.6,40.6-90.2,90.2-90.2h226.5c49.6,0,90.2,40.6,90.2,90.2v226.5
|
||||
C459.5,418.9,418.9,459.5,369.3,459.5z"/>
|
||||
<g id="Symbols">
|
||||
<g id="Header-Singed-In-Final" transform="translate(-27.000000, -14.000000)">
|
||||
<g id="ixo-logo" transform="translate(27.000000, 14.000000)">
|
||||
<path id="Fill-2" class="st0" d="M361.3,305.8c-12.4,0-22.5-10.1-22.5-22.5s10.1-22.5,22.5-22.5c12.4,0,22.5,10.1,22.5,22.5
|
||||
S373.7,305.8,361.3,305.8 M361.3,219.6c-35.2,0-63.7,28.5-63.7,63.7c0,35.2,28.5,63.7,63.7,63.7s63.7-28.5,63.7-63.7
|
||||
C425,248.1,396.5,219.6,361.3,219.6"/>
|
||||
<polygon id="Fill-4" class="st0" points="111,219.6 111,347 156.5,347 156.5,219.6 156.4,219.6 "/>
|
||||
<polygon id="Fill-6" class="st0" points="229.3,251.4 197.5,219.6 165.6,219.6 165.6,251.4 197.5,283.3 165.6,315.2 165.6,347
|
||||
197.5,347 229.3,315.2 261.2,347 261.2,347 261.2,347 293,347 293,315.2 261.2,283.3 293,251.4 293,219.6 261.2,219.6 "/>
|
||||
<path id="Fill-8" class="st0" d="M133.8,210.5c-12.6,0-22.8-10.2-22.8-22.8c0-12.6,10.2-22.8,22.8-22.8s22.8,10.2,22.8,22.8
|
||||
C156.5,200.3,146.3,210.5,133.8,210.5"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB |
@@ -21,6 +21,9 @@
|
||||
</b-input-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<operation-transfer-component
|
||||
:recipient-address.sync="selectedAddress"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -33,6 +36,7 @@ import Ripple from 'vue-ripple-directive'
|
||||
import {
|
||||
addressEnCode, addressDecode,
|
||||
} from '@/libs/utils'
|
||||
import OperationTransferComponent from '@/views/OperationTransferComponent.vue'
|
||||
|
||||
export default {
|
||||
name: 'AppFooter',
|
||||
@@ -43,6 +47,7 @@ export default {
|
||||
BFormInput,
|
||||
BInputGroupPrepend,
|
||||
BInputGroup,
|
||||
OperationTransferComponent,
|
||||
},
|
||||
directives: {
|
||||
Ripple,
|
||||
|
||||
+6
-4
@@ -7,10 +7,12 @@
|
||||
<component :is="layout">
|
||||
<router-view />
|
||||
</component>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
// This will be populated in `beforeCreate` hook
|
||||
import { $themeColors, $themeBreakpoints, $themeConfig } from '@themeConfig'
|
||||
import { provideToast } from 'vue-toastification/composition'
|
||||
@@ -27,17 +29,19 @@ const LayoutFull = () => import('@/layouts/full/LayoutFull.vue')
|
||||
|
||||
export default {
|
||||
components: {
|
||||
|
||||
// Layouts
|
||||
LayoutHorizontal,
|
||||
LayoutVertical,
|
||||
LayoutFull,
|
||||
|
||||
},
|
||||
|
||||
// ! We can move this computed: layout & contentLayoutType once we get to use Vue 3
|
||||
// Currently, router.currentRoute is not reactive and doesn't trigger any change
|
||||
computed: {
|
||||
layout() {
|
||||
if (!this.$route.name || this.$route.meta.layout === 'full') return 'layout-full'
|
||||
if (this.$route.meta.layout === 'full') return 'layout-full'
|
||||
return `layout-${this.contentLayoutType}`
|
||||
},
|
||||
contentLayoutType() {
|
||||
@@ -58,9 +62,7 @@ export default {
|
||||
|
||||
// eslint-disable-next-line no-plusplus
|
||||
for (let i = 0, len = breakpoints.length; i < len; i++) {
|
||||
$themeBreakpoints[breakpoints[i]] = Number(
|
||||
useCssVar(`--breakpoint-${breakpoints[i]}`, document.documentElement).value.slice(0, -2),
|
||||
)
|
||||
$themeBreakpoints[breakpoints[i]] = Number(useCssVar(`--breakpoint-${breakpoints[i]}`, document.documentElement).value.slice(0, -2))
|
||||
}
|
||||
|
||||
// Set RTL
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
{
|
||||
"chain_name": "agoric",
|
||||
"api": ["https://api.agoric.sgtstake.com", "https://main.api.agoric.net"],
|
||||
"sdk_version": "0.41.3",
|
||||
"coin_type": "564",
|
||||
"min_tx_fee": "8000",
|
||||
"assets": [{
|
||||
"base": "ubld",
|
||||
"symbol": "BLD",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "",
|
||||
"logo": ""
|
||||
},{
|
||||
"base": "urun",
|
||||
"symbol": "RUN",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "",
|
||||
"logo": ""
|
||||
}],
|
||||
"addr_prefix": "agoric",
|
||||
"logo": "https://dl.airtable.com/.attachments/0628c47ad886794451954f517daf254e/adc8afff/Agoric-logo-color1.png"
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"chain_name": "celestia",
|
||||
"coingecko": "",
|
||||
"api": "https://celestia-api.skynetvalidators.com",
|
||||
"sdk_version": "0.44.0",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "800",
|
||||
"addr_prefix": "celestia",
|
||||
"logo": "https://explorer-images.s3.filebase.com/celestia-logo.png",
|
||||
"assets": [{
|
||||
"base": "celes",
|
||||
"symbol": "CELES",
|
||||
"exponent": "0",
|
||||
"coingecko_id": "",
|
||||
"logo": "https://explorer-images.s3.filebase.com/celestia-logo.png"
|
||||
}]
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"chain_name": "cerberus",
|
||||
"coingecko": "",
|
||||
"api": ["https://api.cerberus.zone:1317"],
|
||||
"sdk_version": "0.44.5",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "5000",
|
||||
"addr_prefix": "cerberus",
|
||||
"logo": "https://cerberus-chain.s3.us-east-2.amazonaws.com/main/logo.png",
|
||||
"assets": [
|
||||
{
|
||||
"base": "ucrbrus",
|
||||
"symbol": "CRBRUS",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "",
|
||||
"logo": "https://cerberus-chain.s3.us-east-2.amazonaws.com/main/logo.png"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
{
|
||||
"chain_name": "shentu",
|
||||
"chain_name": "certik",
|
||||
"api":"https://azuredragon.noopsbycertik.com",
|
||||
"sdk_version": "0.42.9",
|
||||
"coin_type": "118",
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"chain_name": "chronic-token",
|
||||
"coingecko": "",
|
||||
"api": "https://chtd-api.skynetvalidators.com",
|
||||
"sdk_version": "0.44.5",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "800",
|
||||
"addr_prefix": "chronic",
|
||||
"logo": "https://explorer-images.s3.filebase.com/cht-logo.jpg",
|
||||
"assets": [{
|
||||
"base": "ucgas",
|
||||
"symbol": "CGAS",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "",
|
||||
"logo": "https://explorer-images.s3.filebase.com/cht-logo.jpg"
|
||||
},{
|
||||
"base": "ucht",
|
||||
"symbol": "CHT",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "ion",
|
||||
"logo": "https://explorer-images.s3.filebase.com/cht-logo.jpg"
|
||||
}]
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"chain_name": "cosmic-horizon",
|
||||
"api": ["https://coho-api.skynetvalidators.com"],
|
||||
"sdk_version": "0.44.5",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "300",
|
||||
"assets": [{
|
||||
"base": "ucoho",
|
||||
"symbol": "COHO",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "",
|
||||
"logo": "https://coho-images.s3.filebase.com/red_logo.png"
|
||||
}],
|
||||
"addr_prefix": "coho",
|
||||
"logo": "https://coho-images.s3.filebase.com/red_logo.png"
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"chain_name": "DWS",
|
||||
"coingecko": "",
|
||||
"api": "https://dws-api.skynetvalidators.com",
|
||||
"sdk_version": "0.44.3",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "200",
|
||||
"addr_prefix": "deweb",
|
||||
"logo": "https://dws-images.s3.filebase.com/logo.png",
|
||||
"assets": [{
|
||||
"base": "udws",
|
||||
"symbol": "DWS",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "",
|
||||
"logo": "https://dws-images.s3.filebase.com/logo.png"
|
||||
}]
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"chain_name": "fetchhub",
|
||||
"api": ["https://rest-fetchhub.fetch.ai"],
|
||||
"sdk_version": "0.45.1",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "3000000000000000",
|
||||
"addr_prefix": "fetch",
|
||||
"logo": "https://ping.pub/logos/fetchhub.png",
|
||||
"assets": [{
|
||||
"base": "afet",
|
||||
"symbol": "fet",
|
||||
"exponent": "18",
|
||||
"coingecko_id": "",
|
||||
"logo": "https://ping.pub/logos/fetchhub.png"
|
||||
}]
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"chain_name": "ixo",
|
||||
"api": ["https://impacthub.ixo.world/rest", "https://proxies.sifchain.finance/api/impacthub-3/rest"],
|
||||
"sdk_version": "0.42.6",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "3000",
|
||||
"addr_prefix": "ixo",
|
||||
"logo": "https://ping.pub/logos/ixo.svg",
|
||||
"assets": [{
|
||||
"base": "uixo",
|
||||
"symbol": "IXO",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "ixo",
|
||||
"logo": "https://ping.pub/logos/ixo.svg"
|
||||
}]
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"chain_name": "omniflix",
|
||||
"coingecko": "",
|
||||
"api": "https://omniflixhub-api.skynetvalidators.com",
|
||||
"sdk_version": "0.45.1",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "3000",
|
||||
"addr_prefix": "omniflix",
|
||||
"logo": "https://explorer-images.s3.filebase.com/omniflix-alpha-logo.png",
|
||||
"assets": [{
|
||||
"base": "uflix",
|
||||
"symbol": "FLIX",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "",
|
||||
"logo": "https://explorer-images.s3.filebase.com/omniflix-alpha-logo.png"
|
||||
}]
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{
|
||||
"chain_name": "sommelier",
|
||||
"api": ["https://lcd-sommelier.keplr.app"],
|
||||
"sdk_version": "0.44.5",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "8000",
|
||||
"addr_prefix": "somm",
|
||||
"logo": "https://dl.airtable.com/.attachments/0f37f3aa77836b2db0ed217560264ff1/6f51315b/St07WEsb_400x400.png",
|
||||
"assets": [{
|
||||
"base": "usomm",
|
||||
"symbol": "somm",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "",
|
||||
"logo": "https://dl.airtable.com/.attachments/0f37f3aa77836b2db0ed217560264ff1/6f51315b/St07WEsb_400x400.png"
|
||||
},{
|
||||
"base": "msomm",
|
||||
"symbol": "somm",
|
||||
"exponent": "3",
|
||||
"coingecko_id": "",
|
||||
"logo": "https://dl.airtable.com/.attachments/0f37f3aa77836b2db0ed217560264ff1/6f51315b/St07WEsb_400x400.png"
|
||||
}]
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"chain_id":"origin_1170-1",
|
||||
"chain_name": "Uptick Origin",
|
||||
"api": "https://rest.origin.uptick.network",
|
||||
"sdk_version": "v0.46.9",
|
||||
"coin_type": "60",
|
||||
"min_tx_fee": "40000",
|
||||
"addr_prefix": "uptick",
|
||||
"logo": "https://file.uptick.network/file/image/dNOLswid7dGe29CFhPp3Ow.png",
|
||||
"assets": [
|
||||
{
|
||||
"base": "auoc",
|
||||
"symbol": "UOC",
|
||||
"exponent": "18",
|
||||
"coingecko_id": "Uptick Origin",
|
||||
"logo": "https://file.uptick.network/file/image/dNOLswid7dGe29CFhPp3Ow.png"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -107,25 +107,15 @@
|
||||
</template>
|
||||
|
||||
<b-dropdown-item
|
||||
v-for="(item,k) in accounts"
|
||||
:key="k"
|
||||
:disabled="!item.address"
|
||||
@click="updateDefaultWallet(item.wallet)"
|
||||
:to="{ name: 'portfolio' }"
|
||||
class="d-none"
|
||||
>
|
||||
<div class="d-flex flex-column">
|
||||
<span class="font-weight-bolder">{{ item.wallet }}
|
||||
<b-avatar
|
||||
v-if="item.wallet===walletName"
|
||||
variant="success"
|
||||
size="sm"
|
||||
>
|
||||
<feather-icon icon="CheckIcon" />
|
||||
</b-avatar>
|
||||
</span>
|
||||
<small>{{ item.address ? formatAddr(item.address.addr) : `Not available for ${selected_chain.chain_name}` }}</small>
|
||||
</div>
|
||||
<feather-icon
|
||||
icon="PieChartIcon"
|
||||
size="16"
|
||||
/>
|
||||
<span class="align-middle ml-50">Portofolio</span>
|
||||
</b-dropdown-item>
|
||||
<b-dropdown-divider />
|
||||
|
||||
<b-dropdown-item :to="{ name: 'accounts' }">
|
||||
<feather-icon
|
||||
@@ -165,7 +155,7 @@
|
||||
<script>
|
||||
import {
|
||||
BLink, BNavbarNav, BMedia, BMediaAside, BAvatar, BMediaBody, VBTooltip, BButton,
|
||||
BDropdown, BDropdownItem, BDropdownDivider,
|
||||
BDropdown, BDropdownItem,
|
||||
} from 'bootstrap-vue'
|
||||
import Ripple from 'vue-ripple-directive'
|
||||
import DarkToggler from '@core/layouts/components/app-navbar/components/DarkToggler.vue'
|
||||
@@ -186,7 +176,6 @@ export default {
|
||||
BButton,
|
||||
BDropdown,
|
||||
BDropdownItem,
|
||||
BDropdownDivider,
|
||||
|
||||
// Navbar Components
|
||||
DarkToggler,
|
||||
@@ -235,26 +224,14 @@ export default {
|
||||
}
|
||||
return [conf.api]
|
||||
},
|
||||
accounts() {
|
||||
let accounts = getLocalAccounts() || {}
|
||||
accounts = Object.entries(accounts).map(v => ({ wallet: v[0], address: v[1].address.find(x => x.chain === this.selected_chain.chain_name) }))
|
||||
|
||||
if (!this.$store.state.chains.defaultWallet && this.accounts.length > 0) {
|
||||
this.updateDefaultWallet(this.accounts[0].wallet)
|
||||
}
|
||||
return accounts
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
|
||||
const accounts = Object.keys(getLocalAccounts() || {})
|
||||
if (!this.$store.state.chains.defaultWallet && accounts.length > 0) {
|
||||
this.$store.commit('setDefaultWallet', accounts[0])
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
formatAddr(v) {
|
||||
return v.substring(0, 10).concat('...', v.substring(v.length - 10))
|
||||
},
|
||||
updateDefaultWallet(v) {
|
||||
this.$store.commit('setDefaultWallet', v)
|
||||
},
|
||||
change(v) {
|
||||
this.index = v
|
||||
const conf = this.$store.state.chains.selected
|
||||
|
||||
+3
-24
@@ -60,7 +60,7 @@ export default class ChainFetch {
|
||||
if (conf.chain_name === 'injective') {
|
||||
return ChainFetch.fetch('https://tm.injective.network', '/block').then(data => Block.create(commonProcess(data)))
|
||||
}
|
||||
return this.get(`/blocks/latest?${new Date().getTime()}`, config).then(data => Block.create(data))
|
||||
return this.get('/blocks/latest', config).then(data => Block.create(data))
|
||||
}
|
||||
|
||||
async getBlockByHeight(height, config = null) {
|
||||
@@ -156,16 +156,8 @@ export default class ChainFetch {
|
||||
})
|
||||
}
|
||||
|
||||
async getValidatorListByStatus(status) {
|
||||
return this.get(`/cosmos/staking/v1beta1/validators?status=${status}&pagination.limit=500`).then(data => {
|
||||
const result = commonProcess(data)
|
||||
const vals = result.validators ? result.validators : result
|
||||
return vals.map(i => new Validator().init(i))
|
||||
})
|
||||
}
|
||||
|
||||
async getValidatorListByHeight(height, offset) {
|
||||
return this.get(`/cosmos/base/tendermint/v1beta1/validatorsets/${height}?pagination.limit=100&pagination.offset=${offset}`).then(data => commonProcess(data))
|
||||
async getValidatorListByHeight(height) {
|
||||
return this.get(`/validatorsets/${height}`).then(data => commonProcess(data))
|
||||
}
|
||||
|
||||
async getStakingValidator(address) {
|
||||
@@ -386,19 +378,6 @@ export default class ChainFetch {
|
||||
return ChainFetch.fetchCoinMarketCap(`/quote/${symbol}`)
|
||||
}
|
||||
|
||||
// Simulate Execution of tx
|
||||
async simulate(tx, config = null) {
|
||||
return this.post('/cosmos/tx/v1beta1/simulate', tx, config).then(res => {
|
||||
if (res.code && res.code !== 0) {
|
||||
throw new Error(res.message)
|
||||
}
|
||||
if (res.tx_response && res.tx_response.code !== 0) {
|
||||
throw new Error(res.tx_response.raw_log)
|
||||
}
|
||||
return res
|
||||
})
|
||||
}
|
||||
|
||||
// Tx Submit
|
||||
async broadcastTx(bodyBytes, config = null) {
|
||||
const txString = toBase64(TxRaw.encode(bodyBytes).finish())
|
||||
|
||||
+1
-9
@@ -91,18 +91,10 @@ export default class OsmosAPI {
|
||||
|
||||
async get(url) {
|
||||
const chains = getLocalChains()
|
||||
const conf = chains.osmosis
|
||||
const index = this.getApiIndex(conf)
|
||||
this.host = Array.isArray(conf.api) ? conf.api[index] : conf.api
|
||||
this.host = chains.osmosis.api
|
||||
return fetch(`${this.host}${url}`).then(res => res.json())
|
||||
}
|
||||
|
||||
getApiIndex(config = null) {
|
||||
const conf = config || this.config
|
||||
const index = Number(localStorage.getItem(`${conf.chain_name}-api-index`) || 0)
|
||||
return index < conf.api.length ? index : 0
|
||||
}
|
||||
|
||||
async getMarketData(from, to, days = 14) {
|
||||
if (from && to) {
|
||||
this.exe_time = ''
|
||||
|
||||
@@ -26,6 +26,34 @@ const router = new VueRouter({
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/wallet/setting',
|
||||
name: 'setting',
|
||||
component: () => import('@/views/WalletSetting.vue'),
|
||||
meta: {
|
||||
pageTitle: 'Setting',
|
||||
breadcrumb: [
|
||||
{
|
||||
text: 'Setting',
|
||||
active: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/wallet/portfolio',
|
||||
name: 'portfolio',
|
||||
component: () => import('@/views/WalletPortfolio.vue'),
|
||||
meta: {
|
||||
pageTitle: 'Portfolio',
|
||||
breadcrumb: [
|
||||
{
|
||||
text: 'Portfolio',
|
||||
active: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/coffee',
|
||||
name: 'coffee',
|
||||
@@ -69,6 +97,20 @@ const router = new VueRouter({
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/wallet/address',
|
||||
name: 'addresses',
|
||||
component: () => import('@/views/WalletAddressBook.vue'),
|
||||
meta: {
|
||||
pageTitle: 'Address Book',
|
||||
breadcrumb: [
|
||||
{
|
||||
text: 'Address Book',
|
||||
active: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/wallet/delegations',
|
||||
name: 'delegations',
|
||||
|
||||
+15
-12
@@ -157,19 +157,19 @@
|
||||
</router-link>
|
||||
<b-button
|
||||
v-if="p.status===1"
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.deposit-window
|
||||
variant="primary"
|
||||
class="btn float-right mg-2"
|
||||
@click="selectProposal('GovDeposit',p.id, p.title)"
|
||||
@click="selectProposal(p.id, p.title)"
|
||||
>
|
||||
{{ $t('btn_deposit') }}
|
||||
</b-button>
|
||||
<b-button
|
||||
v-if="p.status===2"
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.vote-window
|
||||
variant="primary"
|
||||
class="btn float-right mg-2"
|
||||
@click="selectProposal('Vote',p.id, p.title)"
|
||||
@click="selectProposal(p.id, p.title)"
|
||||
>
|
||||
{{ $t('btn_vote') }}
|
||||
</b-button>
|
||||
@@ -177,10 +177,13 @@
|
||||
</b-card>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<operation-modal
|
||||
:type="operationModalType"
|
||||
<operation-vote-component
|
||||
:proposal-id="selectedProposalId"
|
||||
:proposal-title="selectedTitle"
|
||||
:title="selectedTitle"
|
||||
/>
|
||||
<operation-gov-deposit-component
|
||||
:proposal-id="selectedProposalId"
|
||||
:title="selectedTitle"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
@@ -193,7 +196,8 @@ import Ripple from 'vue-ripple-directive'
|
||||
import { Proposal } from '@/libs/data'
|
||||
import { percent, tokenFormatter } from '@/libs/utils'
|
||||
import dayjs from 'dayjs'
|
||||
import OperationModal from '@/views/components/OperationModal/index.vue'
|
||||
import OperationVoteComponent from './OperationVoteComponent.vue'
|
||||
import OperationGovDepositComponent from './OperationGovDepositComponent.vue'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@@ -208,7 +212,8 @@ export default {
|
||||
BCardBody,
|
||||
BRow,
|
||||
BCol,
|
||||
OperationModal,
|
||||
OperationVoteComponent,
|
||||
OperationGovDepositComponent,
|
||||
},
|
||||
directives: {
|
||||
'b-modal': VBModal,
|
||||
@@ -220,7 +225,6 @@ export default {
|
||||
selectedTitle: '',
|
||||
proposals: [new Proposal()],
|
||||
max: 1,
|
||||
operationModalType: '',
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
@@ -230,8 +234,7 @@ export default {
|
||||
percent: v => percent(v),
|
||||
formatDate: v => dayjs(v).format('YYYY-MM-DD'),
|
||||
formatToken: v => tokenFormatter(v, {}),
|
||||
selectProposal(modal, pid, title) {
|
||||
this.operationModalType = modal
|
||||
selectProposal(pid, title) {
|
||||
this.selectedProposalId = Number(pid)
|
||||
this.selectedTitle = title
|
||||
},
|
||||
|
||||
@@ -109,11 +109,10 @@
|
||||
</b-button>
|
||||
</router-link>
|
||||
<b-button
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.vote-window
|
||||
:disabled="proposal.status!=2"
|
||||
variant="primary"
|
||||
class="btn float-right mg-2"
|
||||
@click="openModal('Vote')"
|
||||
>
|
||||
{{ $t('btn_vote') }}
|
||||
</b-button>
|
||||
@@ -233,29 +232,30 @@
|
||||
</b-button>
|
||||
</router-link>
|
||||
<b-button
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.deposit-window
|
||||
:disabled="proposal.status!=1"
|
||||
variant="primary"
|
||||
class="btn float-right mg-2"
|
||||
@click="openModal('GovDeposit')"
|
||||
>
|
||||
{{ $t('btn_deposit') }}
|
||||
</b-button>
|
||||
<b-button
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.vote-window
|
||||
:disabled="proposal.status!=2"
|
||||
variant="primary"
|
||||
class="btn float-right mg-2 mr-1"
|
||||
@click="openModal('Vote')"
|
||||
>
|
||||
{{ $t('btn_vote') }}
|
||||
</b-button>
|
||||
</b-card-footer>
|
||||
</b-card>
|
||||
<operation-modal
|
||||
:type="operationModalType"
|
||||
<operation-vote-component
|
||||
:proposal-id="Number(proposal.id)"
|
||||
:proposal-title="proposal.title"
|
||||
:title="proposal.title"
|
||||
/>
|
||||
<operation-gov-deposit-component
|
||||
:proposal-id="Number(proposal.id)"
|
||||
:title="proposal.title"
|
||||
/>
|
||||
</section>
|
||||
</template>
|
||||
@@ -273,9 +273,9 @@ import {
|
||||
} from '@/libs/utils'
|
||||
import { Proposal, Proposer } from '@/libs/data'
|
||||
import dayjs from 'dayjs'
|
||||
import OperationModal from '@/views/components/OperationModal/index.vue'
|
||||
import ObjectFieldComponent from './ObjectFieldComponent.vue'
|
||||
|
||||
import OperationVoteComponent from './OperationVoteComponent.vue'
|
||||
import OperationGovDepositComponent from './OperationGovDepositComponent.vue'
|
||||
// import { formatToken } from '@/libs/data/data'
|
||||
|
||||
export default {
|
||||
@@ -295,8 +295,9 @@ export default {
|
||||
BTooltip,
|
||||
BBadge,
|
||||
ObjectFieldComponent,
|
||||
OperationVoteComponent,
|
||||
OperationGovDepositComponent,
|
||||
FlipCountdown,
|
||||
OperationModal,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
@@ -306,7 +307,6 @@ export default {
|
||||
proposer: new Proposer(),
|
||||
deposits: [],
|
||||
votes: [],
|
||||
operationModalType: '',
|
||||
votes_fields: [
|
||||
{
|
||||
key: 'voter',
|
||||
@@ -411,9 +411,6 @@ export default {
|
||||
formatAddress(v) {
|
||||
return getStakingValidatorByAccount(this.$http.config.chain_name, v)
|
||||
},
|
||||
openModal(type) {
|
||||
this.operationModalType = type
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
+28
-30
@@ -40,7 +40,7 @@
|
||||
<b-col
|
||||
v-for="(data,index) in chains"
|
||||
:key="index"
|
||||
md="3"
|
||||
md="4"
|
||||
sm="6"
|
||||
>
|
||||
<router-link :to="data.chain_name">
|
||||
@@ -48,36 +48,34 @@
|
||||
v-if="data"
|
||||
class="earnings-card text-left"
|
||||
>
|
||||
<div>
|
||||
<b-card-title class="mb-1 text-uppercase">
|
||||
{{ data.chain_name }} <small class="font-small-2">{{ data.sdk_version }}</small>
|
||||
</b-card-title>
|
||||
|
||||
<div class="d-flex justify-content-between">
|
||||
<div>
|
||||
<div class="font-small-2">
|
||||
Height
|
||||
</div>
|
||||
<h5 class="mb-1">
|
||||
{{ data.height || '0' }}
|
||||
</h5>
|
||||
<b-row>
|
||||
<b-col cols="8">
|
||||
<b-card-title class="mb-1 text-uppercase">
|
||||
{{ data.chain_name }} <small class="font-small-2">{{ data.sdk_version }}</small>
|
||||
</b-card-title>
|
||||
<div class="font-small-2">
|
||||
Height
|
||||
</div>
|
||||
<div>
|
||||
<b-avatar
|
||||
:src="data.logo"
|
||||
class="badge-minimal"
|
||||
variant="light-primary"
|
||||
rounded
|
||||
size="md"
|
||||
badge
|
||||
:badge-variant="data.variant"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<b-card-text class="text-muted font-small-2">
|
||||
<span> Updated on </span><span class="font-weight-bolder">{{ data.time || '...' }}</span>
|
||||
</b-card-text>
|
||||
</div>
|
||||
<h5 class="mb-1">
|
||||
{{ data.height || '0' }}
|
||||
</h5>
|
||||
<b-card-text class="text-muted font-small-2">
|
||||
<span> Updated on </span><span class="font-weight-bolder">{{ data.time || '...' }}</span>
|
||||
</b-card-text>
|
||||
</b-col>
|
||||
<b-col
|
||||
cols="4"
|
||||
>
|
||||
<b-avatar
|
||||
:src="data.logo"
|
||||
class="mt-1 badge-minimal"
|
||||
variant="light-primary"
|
||||
rounded
|
||||
size="82"
|
||||
badge
|
||||
:badge-variant="data.variant"
|
||||
/></b-col>
|
||||
</b-row>
|
||||
</b-card>
|
||||
</router-link>
|
||||
</b-col>
|
||||
|
||||
@@ -219,6 +219,7 @@ import {
|
||||
extractAccountNumberAndSequence,
|
||||
formatToken, formatTokenDenom, getLocalAccounts, getLocalChains, getUnitAmount, setLocalTxHistory, sign, timeIn,
|
||||
} from '@/libs/utils'
|
||||
import { Cosmos } from '@cosmostation/cosmosjs'
|
||||
import ToastificationContent from '@core/components/toastification/ToastificationContent.vue'
|
||||
import WalletInputVue from './components/WalletInput.vue'
|
||||
|
||||
@@ -370,7 +371,10 @@ export default {
|
||||
format(v) {
|
||||
return formatToken(v, this.IBCDenom)
|
||||
},
|
||||
|
||||
async sendCosmos() {
|
||||
const cosmos = new Cosmos(this.selectedChain.api, this.chainId)
|
||||
cosmos.getAccounts()
|
||||
},
|
||||
async send() {
|
||||
const txMsgs = [
|
||||
{
|
||||
|
||||
+87
-106
@@ -78,7 +78,7 @@
|
||||
</template>
|
||||
<template #cell(operation)="data">
|
||||
<b-button
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.delegate-window
|
||||
:name="data.item.operator_address"
|
||||
variant="primary"
|
||||
size="sm"
|
||||
@@ -93,24 +93,22 @@
|
||||
no-body
|
||||
>
|
||||
<b-card-header class="d-flex justify-content-between">
|
||||
<b-form-group class="mb-0">
|
||||
<b-form-radio-group
|
||||
id="btn-radios-1"
|
||||
v-model="selectedStatus"
|
||||
button-variant="outline-primary"
|
||||
:options="statusOptions"
|
||||
buttons
|
||||
name="radios-btn-default"
|
||||
@change="getValidatorListByStatus"
|
||||
/>
|
||||
</b-form-group>
|
||||
<b-card-title class="d-none d-sm-block">
|
||||
<small class="d-none d-md-block">
|
||||
<b-badge variant="danger">
|
||||
|
||||
</b-badge>
|
||||
Top 33%
|
||||
<b-badge variant="warning">
|
||||
|
||||
</b-badge>
|
||||
Top 67% of Voting Power
|
||||
</small>
|
||||
<b-card-title>
|
||||
<span>Validators {{ validators.length }}/{{ stakingParameters.max_validators }} </span>
|
||||
</b-card-title>
|
||||
</b-card-header>
|
||||
<b-card-body class="pl-0 pr-0 pb-0">
|
||||
<b-card-body class="pl-0 pr-0">
|
||||
<b-table
|
||||
class="mb-0"
|
||||
:items="list"
|
||||
:fields="validator_fields"
|
||||
:sort-desc="true"
|
||||
@@ -186,7 +184,7 @@
|
||||
</template>
|
||||
<template #cell(operation)="data">
|
||||
<b-button
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.delegate-window
|
||||
:name="data.item.operator_address"
|
||||
variant="primary"
|
||||
size="sm"
|
||||
@@ -197,37 +195,22 @@
|
||||
</template>
|
||||
</b-table>
|
||||
</b-card-body>
|
||||
<template #footer>
|
||||
<small class="d-none d-md-block">
|
||||
<b-badge variant="danger">
|
||||
|
||||
</b-badge>
|
||||
Top 33%
|
||||
<b-badge variant="warning">
|
||||
|
||||
</b-badge>
|
||||
Top 67% of Voting Power
|
||||
</small>
|
||||
</template>
|
||||
</b-card>
|
||||
<operation-modal
|
||||
type="Delegate"
|
||||
:validator-address="validator_address"
|
||||
/>
|
||||
<operation-delegate-component :validator-address="validator_address" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
BTable, BMedia, BAvatar, BBadge, BCard, BCardHeader, BCardTitle, VBTooltip, BCardBody, BButton, BFormRadioGroup, BFormGroup,
|
||||
BTable, BMedia, BAvatar, BBadge, BCard, BCardHeader, BCardTitle, VBTooltip, BCardBody, BButton,
|
||||
} from 'bootstrap-vue'
|
||||
import {
|
||||
percent, StakingParameters, formatToken,
|
||||
Validator, percent, StakingParameters, formatToken,
|
||||
} from '@/libs/utils'
|
||||
import { keybase } from '@/libs/fetch'
|
||||
import OperationModal from '@/views/components/OperationModal/index.vue'
|
||||
// import { toHex } from '@cosmjs/encoding'
|
||||
// import fetch from 'node-fetch'
|
||||
import OperationDelegateComponent from './OperationDelegateComponent.vue'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@@ -240,22 +223,37 @@ export default {
|
||||
BCardTitle,
|
||||
BCardBody,
|
||||
BButton,
|
||||
BFormRadioGroup,
|
||||
BFormGroup,
|
||||
OperationModal,
|
||||
OperationDelegateComponent,
|
||||
},
|
||||
directives: {
|
||||
'b-tooltip': VBTooltip,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
keys: [
|
||||
'bitsongvaloper1jxv0u20scum4trha72c7ltfgfqef6nscl86wxa',
|
||||
'akashvaloper1vgstlgtsx4w80gphwgre0fcvc04lcnaelukvll',
|
||||
'certikvaloper1jxv0u20scum4trha72c7ltfgfqef6nsczkvcu7',
|
||||
'cosmosvaloper1jxv0u20scum4trha72c7ltfgfqef6nsch7q6cu',
|
||||
'iva16plp8cmfkjssp222taq6pv6mkm8c5pa9lcktta',
|
||||
'junovaloper1jxv0u20scum4trha72c7ltfgfqef6nscm9pmg2',
|
||||
'kavavaloper1xftqdxvq0xkv2mu8c5y0jrsc578tak4m9u0s44',
|
||||
'kivaloper1jxv0u20scum4trha72c7ltfgfqef6nschqtan9',
|
||||
'osmovaloper1jxv0u20scum4trha72c7ltfgfqef6nscqx0u46',
|
||||
'persistencevaloper1jxv0u20scum4trha72c7ltfgfqef6nsc4zjpnj',
|
||||
'starsvaloper1jxv0u20scum4trha72c7ltfgfqef6nscdghxyx',
|
||||
'digvaloper1jxv0u20scum4trha72c7ltfgfqef6nsc4s577p',
|
||||
'bcnavaloper1jxv0u20scum4trha72c7ltfgfqef6nsc384wxf',
|
||||
'pbvaloper1jxv0u20scum4trha72c7ltfgfqef6nsc5nn6cf',
|
||||
'rizonvaloper1jxv0u20scum4trha72c7ltfgfqef6nsczn2l68',
|
||||
],
|
||||
islive: true,
|
||||
validator_address: null,
|
||||
mintInflation: 0,
|
||||
stakingPool: 1,
|
||||
stakingParameters: new StakingParameters(),
|
||||
validators: [],
|
||||
delegations: [],
|
||||
validators: [new Validator()],
|
||||
delegations: [new Validator()],
|
||||
changes: {},
|
||||
validator_fields: [
|
||||
{
|
||||
@@ -290,21 +288,16 @@ export default {
|
||||
thClass: 'text-right',
|
||||
},
|
||||
],
|
||||
statusOptions: [
|
||||
{ text: 'Active', value: ['BOND_STATUS_BONDED'] },
|
||||
{ text: 'Inactive', value: ['BOND_STATUS_UNBONDED', 'BOND_STATUS_UNBONDING'] },
|
||||
],
|
||||
selectedStatus: ['BOND_STATUS_BONDED'],
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
pingVals() {
|
||||
return this.list.filter(x => x.description.identity === '6783E9F948541962')
|
||||
return this.list.filter(x => this.keys.includes(x.operator_address))
|
||||
},
|
||||
list() {
|
||||
return this.validators.map(x => {
|
||||
const xh = x
|
||||
const change = this.changes[x.consensus_pubkey.key]
|
||||
const change = this.changes[x.consensus_pubkey.value]
|
||||
if (change) {
|
||||
xh.changes = change.latest - change.previous
|
||||
}
|
||||
@@ -313,73 +306,61 @@ export default {
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.getValidatorListByHeight()
|
||||
this.$http.getValidatorListByHeight('latest').then(data => {
|
||||
let height = Number(data.block_height)
|
||||
if (height > 14400) {
|
||||
height -= 14400
|
||||
} else {
|
||||
height = 1
|
||||
}
|
||||
const changes = []
|
||||
data.validators.forEach(x => {
|
||||
changes[x.pub_key.value] = { latest: Number(x.voting_power), previous: 0 }
|
||||
})
|
||||
this.$http.getValidatorListByHeight(height).then(previous => {
|
||||
previous.validators.forEach(x => {
|
||||
if (changes[x.pub_key.value]) {
|
||||
changes[x.pub_key.value].previous = Number(x.voting_power)
|
||||
} else {
|
||||
changes[x.pub_key.value] = { latest: 0, previous: Number(x.voting_power) }
|
||||
}
|
||||
})
|
||||
this.$set(this, 'changes', changes)
|
||||
})
|
||||
})
|
||||
this.$http.getStakingParameters().then(res => {
|
||||
this.stakingParameters = res
|
||||
})
|
||||
this.getValidatorListByStatus(this.selectedStatus)
|
||||
this.$http.getValidatorList().then(res => {
|
||||
const identities = []
|
||||
const temp = res
|
||||
let total = 0
|
||||
for (let i = 0; i < temp.length; i += 1) {
|
||||
total += temp[i].tokens
|
||||
const { identity } = temp[i].description
|
||||
const url = this.$store.getters['chains/getAvatarById'](identity)
|
||||
if (url) {
|
||||
temp[i].avatar = url
|
||||
} else if (identity && identity !== '') {
|
||||
identities.push(identity)
|
||||
}
|
||||
}
|
||||
this.stakingPool = total
|
||||
this.validators = temp
|
||||
|
||||
// fetch avatar from keybase
|
||||
let promise = Promise.resolve()
|
||||
identities.forEach(item => {
|
||||
promise = promise.then(() => new Promise(resolve => {
|
||||
this.avatar(item, resolve)
|
||||
}))
|
||||
})
|
||||
})
|
||||
},
|
||||
beforeDestroy() {
|
||||
this.islive = false
|
||||
},
|
||||
methods: {
|
||||
getValidatorListByHeight(offset = 0) {
|
||||
this.$http.getValidatorListByHeight('latest', offset).then(data => {
|
||||
let height = Number(data.block_height)
|
||||
if (height > 14400) {
|
||||
height -= 14400
|
||||
} else {
|
||||
height = 1
|
||||
}
|
||||
const { changes } = this
|
||||
data.validators.forEach(x => {
|
||||
changes[x.pub_key.key] = { latest: Number(x.voting_power), previous: 0 }
|
||||
})
|
||||
this.$http.getValidatorListByHeight(height, offset).then(previous => {
|
||||
previous.validators.forEach(x => {
|
||||
if (changes[x.pub_key.key]) {
|
||||
changes[x.pub_key.key].previous = Number(x.voting_power)
|
||||
} else {
|
||||
changes[x.pub_key.key] = { latest: 0, previous: Number(x.voting_power) }
|
||||
}
|
||||
})
|
||||
this.$set(this, 'changes', changes)
|
||||
})
|
||||
})
|
||||
},
|
||||
getValidatorListByStatus(statusList) {
|
||||
this.validators = []
|
||||
statusList.forEach(status => {
|
||||
this.$http.getValidatorListByStatus(status).then(res => {
|
||||
const identities = []
|
||||
const temp = res
|
||||
let total = 0
|
||||
for (let i = 0; i < temp.length; i += 1) {
|
||||
total += temp[i].tokens
|
||||
const { identity } = temp[i].description
|
||||
const url = this.$store.getters['chains/getAvatarById'](identity)
|
||||
if (url) {
|
||||
temp[i].avatar = url
|
||||
} else if (identity && identity !== '') {
|
||||
identities.push(identity)
|
||||
}
|
||||
}
|
||||
this.stakingPool = total
|
||||
if (total > 100) {
|
||||
this.getValidatorListByHeight(100)
|
||||
}
|
||||
this.validators.push(...temp)
|
||||
|
||||
// fetch avatar from keybase
|
||||
let promise = Promise.resolve()
|
||||
identities.forEach(item => {
|
||||
promise = promise.then(() => new Promise(resolve => {
|
||||
this.avatar(item, resolve)
|
||||
}))
|
||||
})
|
||||
})
|
||||
})
|
||||
},
|
||||
selectValidator(da) {
|
||||
this.validator_address = da
|
||||
},
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<b-card-header>
|
||||
<b-card-title>Outstanding Rewards</b-card-title>
|
||||
<feather-icon
|
||||
v-b-modal.WithdrawCommission
|
||||
v-b-modal.withdraw-commission-window
|
||||
icon="MoreVerticalIcon"
|
||||
size="18"
|
||||
class="cursor-pointer"
|
||||
@@ -76,7 +76,7 @@
|
||||
</b-card-body>
|
||||
<b-card-body class="pt-0">
|
||||
<b-button
|
||||
v-b-modal.WithdrawCommission
|
||||
v-b-modal.withdraw-commission-window
|
||||
block
|
||||
size="sm"
|
||||
variant="primary"
|
||||
@@ -84,11 +84,9 @@
|
||||
Withdraw Commission
|
||||
</b-button>
|
||||
</b-card-body>
|
||||
<operation-modal
|
||||
type="WithdrawCommission"
|
||||
modal-id="WithdrawCommission"
|
||||
:address="address"
|
||||
<operation-withdraw-commission-component
|
||||
:validator-address="validator"
|
||||
:address="address"
|
||||
/>
|
||||
</b-card>
|
||||
</template>
|
||||
@@ -100,7 +98,7 @@ import {
|
||||
import { sha256 } from '@cosmjs/crypto'
|
||||
import { toHex } from '@cosmjs/encoding'
|
||||
import { formatToken, numberWithCommas } from '@/libs/utils'
|
||||
import OperationModal from '@/views/components/OperationModal/index.vue'
|
||||
import OperationWithdrawCommissionComponent from './OperationWithdrawCommissionComponent.vue'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@@ -113,7 +111,7 @@ export default {
|
||||
BMedia,
|
||||
BMediaAside,
|
||||
BAvatar,
|
||||
OperationModal,
|
||||
OperationWithdrawCommissionComponent,
|
||||
},
|
||||
props: {
|
||||
data: {
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
</div>
|
||||
<div class="d-flex flex-wrap">
|
||||
<b-button
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.delegate-window
|
||||
variant="primary"
|
||||
class="mr-25 mb-25"
|
||||
>
|
||||
@@ -268,10 +268,7 @@
|
||||
</b-col>
|
||||
</b-row>
|
||||
</template>
|
||||
<operation-modal
|
||||
type="Delegate"
|
||||
:validator-address="validator.operator_address"
|
||||
/>
|
||||
<operation-delegate-component :validator-address="validator.operator_address" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -284,10 +281,10 @@ import {
|
||||
percent, formatToken, StakingParameters, Validator, operatorAddressToAccount, consensusPubkeyToHexAddress, toDay, abbrMessage, abbrAddress,
|
||||
} from '@/libs/utils'
|
||||
import { keybase } from '@/libs/fetch'
|
||||
import OperationModal from '@/views/components/OperationModal/index.vue'
|
||||
import StakingAddressComponent from './StakingAddressComponent.vue'
|
||||
import StakingCommissionComponent from './StakingCommissionComponent.vue'
|
||||
import StakingRewardComponent from './StakingRewardComponent.vue'
|
||||
import OperationDelegateComponent from './OperationDelegateComponent.vue'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@@ -303,7 +300,7 @@ export default {
|
||||
StakingAddressComponent,
|
||||
StakingCommissionComponent,
|
||||
StakingRewardComponent,
|
||||
OperationModal,
|
||||
OperationDelegateComponent,
|
||||
},
|
||||
directives: {
|
||||
'b-modal': VBModal,
|
||||
|
||||
+11
-42
@@ -19,20 +19,10 @@
|
||||
>
|
||||
Browse favorite only
|
||||
</b-button>
|
||||
<b-input-group>
|
||||
<b-input-group-prepend is-text>
|
||||
<b-form-checkbox
|
||||
v-model="missedFilter"
|
||||
v-b-tooltip.hover
|
||||
title="Only missed blocks"
|
||||
name="viewMissed"
|
||||
/>
|
||||
</b-input-group-prepend>
|
||||
<b-form-input
|
||||
v-model="query"
|
||||
placeholder="Keywords to filter validators"
|
||||
/>
|
||||
</b-input-group>
|
||||
<b-form-input
|
||||
v-model="query"
|
||||
placeholder="Keywords to filter validators"
|
||||
/>
|
||||
</b-card>
|
||||
<b-row>
|
||||
<b-col
|
||||
@@ -51,25 +41,12 @@
|
||||
><span class="d-inline-block text-truncate font-weight-bold align-bottom">{{ index+1 }} {{ x.validator.moniker }}</span>
|
||||
</b-form-checkbox>
|
||||
<span
|
||||
v-if="missing[x.address]"
|
||||
v-if="missing[x.address] && missing[x.address].missed_blocks_counter > 0"
|
||||
v-b-tooltip.hover.v-danger
|
||||
:title="`missed blocks:${missing[x.address].missed_blocks_counter}`"
|
||||
class="text-danger text-bolder"
|
||||
>
|
||||
<b-badge
|
||||
v-if="missing[x.address].missed_blocks_counter > 0"
|
||||
v-b-tooltip.hover.v-danger
|
||||
variant="light-danger"
|
||||
:title="`${missing[x.address].missed_blocks_counter} missed blocks`"
|
||||
class="text-danger text-bolder"
|
||||
>
|
||||
{{ missing[x.address].missed_blocks_counter }}
|
||||
</b-badge>
|
||||
<b-badge
|
||||
v-else
|
||||
v-b-tooltip.hover.v-success
|
||||
variant="light-success"
|
||||
title="Perfect! No missed blocks"
|
||||
>
|
||||
0
|
||||
</b-badge>
|
||||
{{ missing[x.address].missed_blocks_counter }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between align-self-stretch flex-wrap">
|
||||
@@ -95,7 +72,7 @@
|
||||
|
||||
<script>
|
||||
import {
|
||||
BRow, BCol, VBTooltip, BFormInput, BCard, BAlert, BFormCheckbox, BButton, BBadge, BInputGroup, BInputGroupPrepend,
|
||||
BRow, BCol, VBTooltip, BFormInput, BCard, BAlert, BFormCheckbox, BButton,
|
||||
} from 'bootstrap-vue'
|
||||
|
||||
import {
|
||||
@@ -111,10 +88,7 @@ export default {
|
||||
BCard,
|
||||
BAlert,
|
||||
BButton,
|
||||
BBadge,
|
||||
BFormCheckbox,
|
||||
BInputGroup,
|
||||
BInputGroupPrepend,
|
||||
},
|
||||
directives: {
|
||||
'b-tooltip': VBTooltip,
|
||||
@@ -123,7 +97,6 @@ export default {
|
||||
const { chain } = this.$route.params
|
||||
const pinned = localStorage.getItem('pinned') ? localStorage.getItem('pinned').split(',') : ''
|
||||
return {
|
||||
missedFilter: false,
|
||||
pinned,
|
||||
chain,
|
||||
query: '',
|
||||
@@ -138,14 +111,10 @@ export default {
|
||||
uptime() {
|
||||
const vals = this.query ? this.validators.filter(x => String(x.description.moniker).indexOf(this.query) > -1) : this.validators
|
||||
vals.sort((a, b) => b.delegator_shares - a.delegator_shares)
|
||||
const rets = vals.map(x => ({
|
||||
return vals.map(x => ({
|
||||
validator: x.description,
|
||||
address: consensusPubkeyToHexAddress(x.consensus_pubkey),
|
||||
}))
|
||||
if (this.missedFilter) {
|
||||
return rets.filter(x => this.missing[x.address].missed_blocks_counter > 0)
|
||||
}
|
||||
return rets
|
||||
},
|
||||
},
|
||||
created() {
|
||||
|
||||
@@ -33,25 +33,12 @@
|
||||
<span class="d-inline-block text-truncate font-weight-bold align-bottom"> {{ x.validator.moniker }} </span>
|
||||
</b-form-checkbox>
|
||||
<span
|
||||
v-if="missing[x.address]"
|
||||
v-if="missing[x.address] && missing[x.address].missed_blocks_counter > 0"
|
||||
v-b-tooltip.hover.v-danger
|
||||
:title="`missed blocks:${missing[x.address].missed_blocks_counter}`"
|
||||
class="text-danger text-bolder"
|
||||
>
|
||||
<b-badge
|
||||
v-if="missing[x.address].missed_blocks_counter > 0"
|
||||
v-b-tooltip.hover.v-danger
|
||||
variant="light-danger"
|
||||
:title="`${missing[x.address].missed_blocks_counter} missed blocks`"
|
||||
class="text-danger text-bolder"
|
||||
>
|
||||
{{ missing[x.address].missed_blocks_counter }}
|
||||
</b-badge>
|
||||
<b-badge
|
||||
v-else
|
||||
v-b-tooltip.hover.v-success
|
||||
variant="light-success"
|
||||
title="Perfect! No missed blocks"
|
||||
>
|
||||
0
|
||||
</b-badge>
|
||||
{{ missing[x.address].missed_blocks_counter }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between align-self-stretch flex-wrap">
|
||||
@@ -77,7 +64,7 @@
|
||||
|
||||
<script>
|
||||
import {
|
||||
BRow, BCol, VBTooltip, BCard, BAlert, BCardTitle, BFormCheckbox, BBadge,
|
||||
BRow, BCol, VBTooltip, BCard, BAlert, BCardTitle, BFormCheckbox,
|
||||
} from 'bootstrap-vue'
|
||||
|
||||
import {
|
||||
@@ -88,7 +75,6 @@ import { Bech32, toHex } from '@cosmjs/encoding'
|
||||
export default {
|
||||
name: 'Blocks',
|
||||
components: {
|
||||
BBadge,
|
||||
BRow,
|
||||
BCol,
|
||||
BCard,
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
Note
|
||||
</div>
|
||||
<div class="alert-body">
|
||||
There are two ways to monitor your validators:
|
||||
<li> Pin a validator on Uptime pages.</li>
|
||||
There are two ways to monitor your valdiators:
|
||||
<li> Pin a validator on Uptime page.</li>
|
||||
<li> Specify parameters like following: <pre>https://ping.pub/cosmos/uptime/my?validators={"sifchain":["FBADE9A30473BB9ED6DFA16BFB3838E028F33650"],"chain_name":["hexAddress"]}</pre></li>
|
||||
</div>
|
||||
</b-alert>
|
||||
|
||||
@@ -39,28 +39,26 @@
|
||||
<b-card-title>Assets</b-card-title>
|
||||
<div>
|
||||
<b-button
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.transfer-window
|
||||
variant="primary"
|
||||
size="sm"
|
||||
class="mr-25"
|
||||
@click="setOperationModalType('Transfer')"
|
||||
>
|
||||
<feather-icon
|
||||
icon="SendIcon"
|
||||
class="d-md-none"
|
||||
/><small class="d-none d-md-block">Transfer</small>
|
||||
</b-button>
|
||||
<b-button
|
||||
v-b-modal.operation-modal
|
||||
variant="danger"
|
||||
size="sm"
|
||||
@click="setOperationModalType('IBCTransfer')"
|
||||
><feather-icon
|
||||
icon="SendIcon"
|
||||
class="d-md-none"
|
||||
/>
|
||||
<span class="d-none d-md-block">IBC Transfer</span>
|
||||
<span class="d-none d-md-block">Transfer</span>
|
||||
</b-button>
|
||||
<b-button
|
||||
v-b-modal.ibc-transfer-window
|
||||
variant="danger"
|
||||
size="sm"
|
||||
><feather-icon
|
||||
icon="SendIcon"
|
||||
class="d-md-none"
|
||||
/>
|
||||
<span class="d-none d-md-block">IBC Transfer
|
||||
</span></b-button>
|
||||
</div>
|
||||
</b-card-header>
|
||||
<b-card-body class="pl-0 pr-0">
|
||||
@@ -126,11 +124,10 @@
|
||||
<b-card-title>Delegation</b-card-title>
|
||||
<div>
|
||||
<b-button
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.delegate-window
|
||||
variant="primary"
|
||||
size="sm"
|
||||
class="mr-25"
|
||||
@click="setOperationModalType('Delegate')"
|
||||
>
|
||||
<feather-icon
|
||||
icon="LogInIcon"
|
||||
@@ -139,10 +136,9 @@
|
||||
</b-button>
|
||||
<b-button
|
||||
v-if="delegations"
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.withdraw-window
|
||||
variant="primary"
|
||||
size="sm"
|
||||
@click="setOperationModalType('Withdraw')"
|
||||
>
|
||||
<feather-icon
|
||||
icon="ShareIcon"
|
||||
@@ -162,29 +158,29 @@
|
||||
size="sm"
|
||||
>
|
||||
<b-button
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.delegate-window
|
||||
v-ripple.400="'rgba(113, 102, 240, 0.15)'"
|
||||
v-b-tooltip.hover.top="'Delegate'"
|
||||
variant="outline-primary"
|
||||
@click="selectValue(data.value,'Delegate')"
|
||||
@click="selectValue(data.value)"
|
||||
>
|
||||
<feather-icon icon="LogInIcon" />
|
||||
</b-button>
|
||||
<b-button
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.redelegate-window
|
||||
v-ripple.400="'rgba(113, 102, 240, 0.15)'"
|
||||
v-b-tooltip.hover.top="'Redelegate'"
|
||||
variant="outline-primary"
|
||||
@click="selectValue(data.value,'Redelegate')"
|
||||
@click="selectValue(data.value)"
|
||||
>
|
||||
<feather-icon icon="ShuffleIcon" />
|
||||
</b-button>
|
||||
<b-button
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.unbond-window
|
||||
v-ripple.400="'rgba(113, 102, 240, 0.15)'"
|
||||
v-b-tooltip.hover.top="'Unbond'"
|
||||
variant="outline-primary"
|
||||
@click="selectValue(data.value,'Unbond')"
|
||||
@click="selectValue(data.value)"
|
||||
>
|
||||
<feather-icon icon="LogOutIcon" />
|
||||
</b-button>
|
||||
@@ -342,10 +338,20 @@
|
||||
<vue-qr :text="address" />
|
||||
</b-popover>
|
||||
|
||||
<operation-modal
|
||||
:type="operationModalType"
|
||||
<operation-transfer-component :address="address" />
|
||||
<operation-transfer-2-component :address="address" />
|
||||
<operation-withdraw-component :address="address" />
|
||||
<operation-unbond-component
|
||||
:address="address"
|
||||
:validator-address="selectedValidator"
|
||||
:validator-address.sync="selectedValidator"
|
||||
/>
|
||||
<operation-delegate-component
|
||||
:address="address"
|
||||
:validator-address.sync="selectedValidator"
|
||||
/>
|
||||
<operation-redelegate-component
|
||||
:address="address"
|
||||
:validator-address.sync="selectedValidator"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
@@ -367,8 +373,13 @@ import {
|
||||
} from '@/libs/utils'
|
||||
import { sha256 } from '@cosmjs/crypto'
|
||||
import { toHex } from '@cosmjs/encoding'
|
||||
import OperationModal from '@/views/components/OperationModal/index.vue'
|
||||
import ObjectFieldComponent from './ObjectFieldComponent.vue'
|
||||
import OperationTransferComponent from './OperationTransferComponent.vue'
|
||||
import OperationWithdrawComponent from './OperationWithdrawComponent.vue'
|
||||
import OperationUnbondComponent from './OperationUnbondComponent.vue'
|
||||
import OperationDelegateComponent from './OperationDelegateComponent.vue'
|
||||
import OperationRedelegateComponent from './OperationRedelegateComponent.vue'
|
||||
import OperationTransfer2Component from './OperationTransfer2Component.vue'
|
||||
import ChartComponentDoughnut from './ChartComponentDoughnut.vue'
|
||||
|
||||
export default {
|
||||
@@ -394,8 +405,13 @@ export default {
|
||||
// eslint-disable-next-line vue/no-unused-components
|
||||
ToastificationContent,
|
||||
ObjectFieldComponent,
|
||||
OperationTransferComponent,
|
||||
OperationWithdrawComponent,
|
||||
OperationDelegateComponent,
|
||||
OperationRedelegateComponent,
|
||||
OperationUnbondComponent,
|
||||
OperationTransfer2Component,
|
||||
ChartComponentDoughnut,
|
||||
OperationModal,
|
||||
},
|
||||
directives: {
|
||||
'b-modal': VBModal,
|
||||
@@ -418,7 +434,6 @@ export default {
|
||||
unbonding: [],
|
||||
quotes: {},
|
||||
transactions: [],
|
||||
operationModalType: '',
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -605,12 +620,8 @@ export default {
|
||||
this.transactions = res
|
||||
})
|
||||
},
|
||||
selectValue(v, type) {
|
||||
selectValue(v) {
|
||||
this.selectedValidator = v
|
||||
this.setOperationModalType(type)
|
||||
},
|
||||
setOperationModalType(type) {
|
||||
this.operationModalType = type
|
||||
},
|
||||
formatHash: abbrAddress,
|
||||
formatDenom(v) {
|
||||
|
||||
@@ -153,15 +153,15 @@
|
||||
/>
|
||||
<b-dropdown-item
|
||||
v-if="balances[acc.addr]"
|
||||
v-b-modal.operation-modal
|
||||
@click="transfer('Transfer',acc.addr)"
|
||||
v-b-modal.transfer-window
|
||||
@click="transfer(acc.addr)"
|
||||
>
|
||||
<feather-icon icon="SendIcon" /> Transfer
|
||||
</b-dropdown-item>
|
||||
<b-dropdown-item
|
||||
v-if="balances[acc.addr]"
|
||||
v-b-modal.operation-modal
|
||||
@click="transfer('IBCTransfer',acc.addr)"
|
||||
v-b-modal.ibc-transfer-window
|
||||
@click="transfer(acc.addr)"
|
||||
>
|
||||
<feather-icon icon="SendIcon" /> IBC Transfer
|
||||
</b-dropdown-item>
|
||||
@@ -265,10 +265,10 @@
|
||||
Connect Wallet
|
||||
</b-card>
|
||||
</router-link>
|
||||
<operation-modal
|
||||
:type="operationModalType"
|
||||
:address="selectedAddress"
|
||||
<operation-transfer-component
|
||||
:address.sync="selectedAddress"
|
||||
/>
|
||||
<operation-transfer-2-component :address="selectedAddress" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -287,7 +287,8 @@ import {
|
||||
import ToastificationContent from '@core/components/toastification/ToastificationContent.vue'
|
||||
import AppCollapse from '@core/components/app-collapse/AppCollapse.vue'
|
||||
import AppCollapseItem from '@core/components/app-collapse/AppCollapseItem.vue'
|
||||
import OperationModal from '@/views/components/OperationModal/index.vue'
|
||||
import OperationTransferComponent from './OperationTransferComponent.vue'
|
||||
import OperationTransfer2Component from './OperationTransfer2Component.vue'
|
||||
import ChartComponentDoughnut from './ChartComponentDoughnut.vue'
|
||||
import EchartScatter from './components/charts/EchartScatter.vue'
|
||||
|
||||
@@ -308,13 +309,14 @@ export default {
|
||||
// eslint-disable-next-line vue/no-unused-components
|
||||
VBTooltip,
|
||||
FeatherIcon,
|
||||
OperationTransferComponent,
|
||||
// eslint-disable-next-line vue/no-unused-components
|
||||
ToastificationContent,
|
||||
OperationTransfer2Component,
|
||||
ChartComponentDoughnut,
|
||||
AppCollapse,
|
||||
AppCollapseItem,
|
||||
EchartScatter,
|
||||
OperationModal,
|
||||
},
|
||||
directives: {
|
||||
'b-tooltip': VBTooltip,
|
||||
@@ -333,7 +335,6 @@ export default {
|
||||
delegations: {},
|
||||
ibcDenom: {},
|
||||
quotes: {},
|
||||
operationModalType: '',
|
||||
options: {
|
||||
maintainAspectRatio: false,
|
||||
legend: {
|
||||
@@ -532,8 +533,7 @@ export default {
|
||||
this.currency2 = c
|
||||
this.currency = getUserCurrencySign()
|
||||
},
|
||||
transfer(type, addr) {
|
||||
this.operationModalType = type
|
||||
transfer(addr) {
|
||||
this.selectedAddress = addr
|
||||
},
|
||||
completeAdd() {
|
||||
|
||||
@@ -42,29 +42,29 @@
|
||||
size="sm"
|
||||
>
|
||||
<b-button
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.delegate-window
|
||||
v-ripple.400="'rgba(113, 102, 240, 0.15)'"
|
||||
v-b-tooltip.hover.top="'Delegate'"
|
||||
variant="outline-primary"
|
||||
@click="selectValue('Delegate',data.item)"
|
||||
@click="selectValue(data.item)"
|
||||
>
|
||||
<feather-icon icon="LogInIcon" />
|
||||
</b-button>
|
||||
<b-button
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.redelegate-window
|
||||
v-ripple.400="'rgba(113, 102, 240, 0.15)'"
|
||||
v-b-tooltip.hover.top="'Redelegate'"
|
||||
variant="outline-primary"
|
||||
@click="selectValue('Redelegate',data.item)"
|
||||
@click="selectValue(data.item)"
|
||||
>
|
||||
<feather-icon icon="ShuffleIcon" />
|
||||
</b-button>
|
||||
<b-button
|
||||
v-b-modal.operation-modal
|
||||
v-b-modal.unbond-window
|
||||
v-ripple.400="'rgba(113, 102, 240, 0.15)'"
|
||||
v-b-tooltip.hover.top="'Unbond'"
|
||||
variant="outline-primary"
|
||||
@click="selectValue('Unbond',data.item)"
|
||||
@click="selectValue(data.item)"
|
||||
>
|
||||
<feather-icon icon="LogOutIcon" />
|
||||
</b-button>
|
||||
@@ -74,10 +74,18 @@
|
||||
</b-card>
|
||||
|
||||
<!--- not completed--->
|
||||
<operation-modal
|
||||
:type="operationModalType"
|
||||
<operation-withdraw-component :address="address" />
|
||||
<operation-unbond-component
|
||||
:address="address"
|
||||
:validator-address="selectedValidator"
|
||||
:validator-address.sync="selectedValidator"
|
||||
/>
|
||||
<operation-delegate-component
|
||||
:address="address"
|
||||
:validator-address.sync="selectedValidator"
|
||||
/>
|
||||
<operation-redelegate-component
|
||||
:address="address"
|
||||
:validator-address.sync="selectedValidator"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
@@ -91,7 +99,11 @@ import {
|
||||
formatToken, getCachedValidators, getLocalAccounts, getLocalChains, tokenFormatter,
|
||||
} from '@/libs/utils'
|
||||
import FeatherIcon from '@/@core/components/feather-icon/FeatherIcon.vue'
|
||||
import OperationModal from '@/views/components/OperationModal/index.vue'
|
||||
|
||||
import OperationWithdrawComponent from './OperationWithdrawComponent.vue'
|
||||
import OperationUnbondComponent from './OperationUnbondComponent.vue'
|
||||
import OperationDelegateComponent from './OperationDelegateComponent.vue'
|
||||
import OperationRedelegateComponent from './OperationRedelegateComponent.vue'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@@ -101,7 +113,11 @@ export default {
|
||||
BTable,
|
||||
BCard,
|
||||
FeatherIcon,
|
||||
OperationModal,
|
||||
|
||||
OperationWithdrawComponent,
|
||||
OperationDelegateComponent,
|
||||
OperationRedelegateComponent,
|
||||
OperationUnbondComponent,
|
||||
},
|
||||
directives: {
|
||||
'b-tooltip': VBTooltip,
|
||||
@@ -137,7 +153,6 @@ export default {
|
||||
accounts: [],
|
||||
delegations: [],
|
||||
rewards: {},
|
||||
operationModalType: '',
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -185,8 +200,7 @@ export default {
|
||||
this.init()
|
||||
},
|
||||
methods: {
|
||||
selectValue(type, v) {
|
||||
this.operationModalType = type
|
||||
selectValue(v) {
|
||||
this.address = v.delegator_address
|
||||
this.selectedValidator = v.validator.validator
|
||||
return v
|
||||
|
||||
@@ -1,214 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<div
|
||||
v-if="false"
|
||||
class="board "
|
||||
>
|
||||
<div class="data">
|
||||
<div class="board-row">
|
||||
<div class="key">
|
||||
AMOUNT
|
||||
</div>
|
||||
<div class="value">
|
||||
1,233,000 USDT
|
||||
</div>
|
||||
</div>
|
||||
<div class="board-row">
|
||||
<div class="key">
|
||||
BRIDGE FEE
|
||||
</div>
|
||||
<div class="value">
|
||||
3,000 USDT
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sum">
|
||||
<div class="key">
|
||||
TRANSFER AMOUNT
|
||||
</div>
|
||||
<div class="value">
|
||||
1,213,000 USDT
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p
|
||||
v-if="succeed"
|
||||
class="result-text mt-1 text-success"
|
||||
>
|
||||
Congratulations! Transfer completed successfully.
|
||||
</p>
|
||||
<p
|
||||
v-else-if="error"
|
||||
class="result-text mt-1 text-danger"
|
||||
>
|
||||
{{ error }}
|
||||
</p>
|
||||
<p
|
||||
v-else
|
||||
class="result-text mt-1 text-primary"
|
||||
>
|
||||
Processing...
|
||||
</p>
|
||||
|
||||
<div class="status">
|
||||
<!-- <b-progress
|
||||
:value="100"
|
||||
:variant="progressColor"
|
||||
:animated="isLoading"
|
||||
/> -->
|
||||
<b-progress :animated="isLoading">
|
||||
<b-progress-bar
|
||||
variant="success"
|
||||
:value="progresBar[0]"
|
||||
/>
|
||||
<b-progress-bar
|
||||
variant="danger"
|
||||
:value="progresBar[1]"
|
||||
/>
|
||||
<b-progress-bar
|
||||
variant="info"
|
||||
:value="progresBar[2]"
|
||||
/>
|
||||
</b-progress>
|
||||
<div class="status-text">
|
||||
<span v-if="hash">SUBMITED</span>
|
||||
<span v-if="succeed">COMPLETED</span>
|
||||
<span v-if="error">FAILED</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="link">
|
||||
<router-link
|
||||
to="/"
|
||||
>
|
||||
View details
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { BProgress, BProgressBar } from 'bootstrap-vue'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
BProgress,
|
||||
BProgressBar,
|
||||
},
|
||||
props: {
|
||||
hash: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isLoading: true,
|
||||
succeed: false,
|
||||
error: '',
|
||||
checkTimes: 0,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
progresBar() {
|
||||
// success: [100, 0, 0]
|
||||
// fail: [50, 50, 0]
|
||||
// pending: [0, 0, 100]
|
||||
if (!this.hash) {
|
||||
return [0, 0, 100]
|
||||
}
|
||||
if (this.succeed) {
|
||||
return [100, 0, 0]
|
||||
}
|
||||
return [50, 0, 50]
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.timer = setInterval(this.trace, 6000)
|
||||
},
|
||||
beforeDestroy() {
|
||||
clearInterval(this.timer)
|
||||
},
|
||||
methods: {
|
||||
trace() {
|
||||
if (this.hash) {
|
||||
this.error = null
|
||||
this.$http.getTxs(this.hash).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.succeed = true
|
||||
clearInterval(this.timer)
|
||||
window.location.reload()
|
||||
} else if (res.code !== 3) { // code 3 is tx unconfirmed(not founded).
|
||||
this.error = res.raw_log
|
||||
clearInterval(this.timer)
|
||||
}
|
||||
}, () => {
|
||||
// error statement
|
||||
this.checkTimes += 1
|
||||
if (this.checkTimes > 5) {
|
||||
clearInterval(this.timer)
|
||||
this.error = 'Timeout'
|
||||
}
|
||||
}).catch(e => {
|
||||
this.error = e
|
||||
clearInterval(this.timer)
|
||||
})
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.board {
|
||||
background: #f8f8f8;
|
||||
border-radius: 8px;
|
||||
padding: 0 12px;
|
||||
margin: 35px 0;
|
||||
.data {
|
||||
padding: 10px 0;
|
||||
border-bottom: 1px solid #607d8b;
|
||||
}
|
||||
.board-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 16px;
|
||||
line-height: 34px;
|
||||
.key {
|
||||
color: #666;
|
||||
}
|
||||
.value {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
.sum {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
padding: 15px 0;
|
||||
}
|
||||
}
|
||||
.result-text {
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
}
|
||||
.status {
|
||||
margin-top: 30px;
|
||||
.status-text {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 20px;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
.link {
|
||||
margin-top: 20px;
|
||||
text-align: center;
|
||||
a {
|
||||
text-decoration: underline;
|
||||
color: var(--purple)
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
||||
@@ -1,240 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Delegator"
|
||||
label-for="Delegator"
|
||||
>
|
||||
<validation-provider
|
||||
#default="{ errors }"
|
||||
rules="required"
|
||||
name="Delegator"
|
||||
>
|
||||
<b-form-input
|
||||
v-model="selectedAddress"
|
||||
readonly
|
||||
/>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<validation-provider
|
||||
#default="{ errors }"
|
||||
rules="required"
|
||||
name="Validator"
|
||||
>
|
||||
<b-form-group
|
||||
label="Validator"
|
||||
label-for="validator"
|
||||
>
|
||||
<v-select
|
||||
v-model="selectedValidator"
|
||||
:options="valOptions"
|
||||
:reduce="val => val.value"
|
||||
placeholder="Select a validator"
|
||||
:readonly="validatorAddress"
|
||||
:selectable="(v) => v.value"
|
||||
/>
|
||||
</b-form-group>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Available Token"
|
||||
label-for="Token"
|
||||
>
|
||||
<validation-provider
|
||||
#default="{ errors }"
|
||||
rules="required"
|
||||
name="Token"
|
||||
>
|
||||
<b-form-select
|
||||
v-model="token"
|
||||
text-field="label"
|
||||
>
|
||||
<b-form-select-option
|
||||
v-for="x in balanceOptions"
|
||||
:key="x.denom"
|
||||
:value="x.denom"
|
||||
>
|
||||
{{ format(x) }}
|
||||
</b-form-select-option>
|
||||
</b-form-select>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Amount"
|
||||
label-for="Amount"
|
||||
>
|
||||
<validation-provider
|
||||
v-slot="{ errors }"
|
||||
rules="required|regex:^([0-9\.]+)$"
|
||||
name="amount"
|
||||
>
|
||||
<b-input-group>
|
||||
<b-form-input
|
||||
id="Amount"
|
||||
v-model="amount"
|
||||
:state="errors.length > 0 ? false:null"
|
||||
placeholder="Input a number"
|
||||
type="number"
|
||||
/>
|
||||
<b-input-group-append is-text>
|
||||
{{ printDenom() }}
|
||||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ValidationProvider } from 'vee-validate'
|
||||
import {
|
||||
BRow, BCol, BInputGroup, BFormInput, BFormGroup, BFormSelect, BFormSelectOption,
|
||||
BInputGroupAppend,
|
||||
} from 'bootstrap-vue'
|
||||
import {
|
||||
required, email, url, between, alpha, integer, password, min, digits, alphaDash, length,
|
||||
} from '@validations'
|
||||
import {
|
||||
formatToken, formatTokenDenom, getUnitAmount,
|
||||
} from '@/libs/utils'
|
||||
import vSelect from 'vue-select'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
BRow,
|
||||
BCol,
|
||||
BInputGroup,
|
||||
BFormInput,
|
||||
BFormGroup,
|
||||
BFormSelect,
|
||||
BFormSelectOption,
|
||||
vSelect,
|
||||
BInputGroupAppend,
|
||||
|
||||
ValidationProvider,
|
||||
},
|
||||
props: {
|
||||
validatorAddress: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
address: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
balance: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
selectedAddress: this.address,
|
||||
availableAddress: [],
|
||||
validators: [],
|
||||
unbundValidators: [],
|
||||
selectedValidator: this.validatorAddress,
|
||||
token: '',
|
||||
amount: null,
|
||||
selectedChain: '',
|
||||
IBCDenom: {},
|
||||
|
||||
required,
|
||||
password,
|
||||
email,
|
||||
min,
|
||||
integer,
|
||||
url,
|
||||
alpha,
|
||||
between,
|
||||
digits,
|
||||
length,
|
||||
alphaDash,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
valOptions() {
|
||||
let options = []
|
||||
const vals = this.validators.map(x => ({ value: x.operator_address, label: `${x.description.moniker} (${Number(x.commission.rate) * 100}%)` }))
|
||||
if (vals.length > 0) {
|
||||
options.push({ value: null, label: '=== ACTIVE VALIDATORS ===' })
|
||||
options = options.concat(vals)
|
||||
}
|
||||
const unbunded = this.unbundValidators.map(x => ({ value: x.operator_address, label: `* ${x.description.moniker} (${Number(x.commission.rate) * 100}%)` }))
|
||||
if (unbunded.length > 0) {
|
||||
options.push({ value: null, label: '=== INACTIVE VALIDATORS ===', disabled: true })
|
||||
options = options.concat(unbunded)
|
||||
}
|
||||
return options
|
||||
},
|
||||
balanceOptions() {
|
||||
return this.setupBalance()
|
||||
},
|
||||
msg() {
|
||||
return [{
|
||||
typeUrl: '/cosmos.staking.v1beta1.MsgDelegate',
|
||||
value: {
|
||||
delegatorAddress: this.selectedAddress,
|
||||
validatorAddress: this.selectedValidator,
|
||||
amount: {
|
||||
amount: getUnitAmount(this.amount, this.token),
|
||||
denom: this.token,
|
||||
},
|
||||
},
|
||||
}]
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.$emit('update', {
|
||||
modalTitle: 'Delegate Token',
|
||||
historyName: 'delegate',
|
||||
})
|
||||
this.loadData()
|
||||
},
|
||||
methods: {
|
||||
loadData() {
|
||||
this.$http.getValidatorList().then(v => {
|
||||
this.validators = v
|
||||
})
|
||||
this.$http.getValidatorUnbondedList().then(v => {
|
||||
this.unbundValidators = v
|
||||
})
|
||||
},
|
||||
setupBalance() {
|
||||
if (this.balance && this.balance.length > 0) {
|
||||
this.token = this.balance[0].denom
|
||||
return this.balance
|
||||
}
|
||||
return []
|
||||
},
|
||||
printDenom() {
|
||||
return formatTokenDenom(this.token)
|
||||
},
|
||||
format(v) {
|
||||
return formatToken(v, this.IBCDenom, 6)
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
</style>
|
||||
@@ -1,194 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<h4>{{ proposalId }}. {{ proposalTitle }}</h4>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Depositor"
|
||||
label-for="Voter"
|
||||
>
|
||||
<validation-provider
|
||||
#default="{ errors }"
|
||||
rules="required"
|
||||
name="Voter"
|
||||
>
|
||||
<b-form-input
|
||||
v-model="address"
|
||||
readonly
|
||||
/>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Available Token"
|
||||
label-for="Token"
|
||||
>
|
||||
<validation-provider
|
||||
#default="{ errors }"
|
||||
rules="required"
|
||||
name="Token"
|
||||
>
|
||||
<b-form-select
|
||||
v-model="token"
|
||||
>
|
||||
<b-form-select-option
|
||||
v-for="item in balanceOptions"
|
||||
:key="item.denom"
|
||||
:value="item.denom"
|
||||
>
|
||||
{{ format(item) }}
|
||||
</b-form-select-option>
|
||||
</b-form-select>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Amount"
|
||||
label-for="Amount"
|
||||
>
|
||||
<validation-provider
|
||||
v-slot="{ errors }"
|
||||
rules="required|regex:^([0-9\.]+)$"
|
||||
name="amount"
|
||||
>
|
||||
<b-input-group class="mb-25">
|
||||
<b-form-input
|
||||
id="Amount"
|
||||
v-model="amount"
|
||||
:state="errors.length > 0 ? false:null"
|
||||
placeholder="Input a number"
|
||||
type="number"
|
||||
/>
|
||||
<b-input-group-append is-text>
|
||||
{{ printDenom() }}
|
||||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ValidationProvider } from 'vee-validate'
|
||||
import {
|
||||
BRow, BCol, BInputGroup, BFormInput, BFormGroup, BFormSelect,
|
||||
BInputGroupAppend, BFormSelectOption,
|
||||
} from 'bootstrap-vue'
|
||||
import {
|
||||
required, email, url, between, alpha, integer, password, min, digits, alphaDash, length,
|
||||
} from '@validations'
|
||||
import {
|
||||
formatToken, formatTokenDenom, getUnitAmount,
|
||||
} from '@/libs/utils'
|
||||
|
||||
export default {
|
||||
name: 'DepositDialogue',
|
||||
components: {
|
||||
BRow,
|
||||
BCol,
|
||||
BInputGroup,
|
||||
BFormInput,
|
||||
BFormGroup,
|
||||
BFormSelect,
|
||||
BInputGroupAppend,
|
||||
BFormSelectOption,
|
||||
ValidationProvider,
|
||||
},
|
||||
props: {
|
||||
proposalId: {
|
||||
type: Number,
|
||||
required: true,
|
||||
},
|
||||
proposalTitle: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
balance: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
address: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
token: null,
|
||||
amount: '',
|
||||
|
||||
required,
|
||||
password,
|
||||
email,
|
||||
min,
|
||||
integer,
|
||||
url,
|
||||
alpha,
|
||||
between,
|
||||
digits,
|
||||
length,
|
||||
alphaDash,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
msg() {
|
||||
return [{
|
||||
typeUrl: '/cosmos.gov.v1beta1.MsgDeposit',
|
||||
value: {
|
||||
depositor: this.address,
|
||||
proposalId: String(this.proposalId),
|
||||
amount: [
|
||||
{
|
||||
amount: getUnitAmount(this.amount, this.token),
|
||||
denom: this.token,
|
||||
},
|
||||
],
|
||||
},
|
||||
}]
|
||||
},
|
||||
balanceOptions() {
|
||||
return this.setupBalance()
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.$emit('update', {
|
||||
modalTitle: 'Deposit',
|
||||
historyName: 'deposit',
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
printDenom() {
|
||||
return formatTokenDenom(this.token)
|
||||
},
|
||||
format(v) {
|
||||
return formatToken(v)
|
||||
},
|
||||
setupBalance() {
|
||||
if (this.balance && this.balance.length > 0) {
|
||||
this.token = this.balance[0].denom
|
||||
return this.balance
|
||||
}
|
||||
return []
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
@import '@core/scss/vue/libs/vue-select.scss';
|
||||
</style>
|
||||
@@ -1,307 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Sender"
|
||||
label-for="Account"
|
||||
>
|
||||
<b-input-group class="mb-25">
|
||||
<b-form-input
|
||||
:value="address"
|
||||
readonly
|
||||
/>
|
||||
</b-input-group>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Available Token"
|
||||
label-for="Token"
|
||||
>
|
||||
<validation-provider
|
||||
#default="{ errors }"
|
||||
rules="required"
|
||||
name="Token"
|
||||
>
|
||||
<b-form-select
|
||||
v-model="token"
|
||||
@change="tokenChange"
|
||||
>
|
||||
<template #first>
|
||||
<b-form-select-option
|
||||
value=""
|
||||
>
|
||||
-- Please select a token --
|
||||
</b-form-select-option>
|
||||
</template>
|
||||
<b-form-select-option
|
||||
v-for="item in balance"
|
||||
:key="item.denom"
|
||||
:value="item.denom"
|
||||
>
|
||||
{{ format(item) }}
|
||||
</b-form-select-option>
|
||||
</b-form-select>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Amount"
|
||||
label-for="Amount"
|
||||
>
|
||||
<validation-provider
|
||||
v-slot="{ errors }"
|
||||
rules="required|regex:^([0-9\.]+)$"
|
||||
name="amount"
|
||||
>
|
||||
<b-input-group class="mb-25">
|
||||
<b-form-input
|
||||
id="Amount"
|
||||
v-model="amount"
|
||||
:state="errors.length > 0 ? false:null"
|
||||
placeholder="Input a number"
|
||||
type="number"
|
||||
/>
|
||||
<b-input-group-append is-text>
|
||||
{{ printDenom() }}
|
||||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
:label="`Destination: ${targetChainId}`"
|
||||
label-for="destination"
|
||||
>
|
||||
<validation-provider
|
||||
#default="{ errors }"
|
||||
rules="required"
|
||||
name="destination"
|
||||
>
|
||||
<v-select
|
||||
v-model="destination"
|
||||
name="destination"
|
||||
:options="destinationOptions"
|
||||
placeholder="Select a channel"
|
||||
@input="onChannelChange()"
|
||||
/>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Recipient"
|
||||
label-for="Recipient"
|
||||
>
|
||||
<validation-provider
|
||||
#default="{ errors }"
|
||||
rules="required"
|
||||
name="recipient"
|
||||
>
|
||||
<b-input-group class="mb-25">
|
||||
<b-form-input
|
||||
id="Recipient"
|
||||
v-model="recipient"
|
||||
:state="errors.length > 0 ? false:null"
|
||||
placeholder="Input a destination address"
|
||||
/>
|
||||
</b-input-group>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ValidationProvider } from 'vee-validate'
|
||||
import {
|
||||
BRow, BCol, BInputGroup, BInputGroupAppend, BFormInput, BFormGroup, BFormSelect, BFormSelectOption,
|
||||
|
||||
} from 'bootstrap-vue'
|
||||
import {
|
||||
required, email, url, between, alpha, integer, password, min, digits, alphaDash, length,
|
||||
} from '@validations'
|
||||
import {
|
||||
formatToken, formatTokenDenom, getUnitAmount,
|
||||
} from '@/libs/utils'
|
||||
import vSelect from 'vue-select'
|
||||
import { coin } from '@cosmjs/amino'
|
||||
import dayjs from 'dayjs'
|
||||
import { toHex } from '@cosmjs/encoding'
|
||||
import { sha256 } from '@cosmjs/crypto'
|
||||
|
||||
export default {
|
||||
name: 'TransforDialogue',
|
||||
components: {
|
||||
BRow,
|
||||
BCol,
|
||||
BInputGroup,
|
||||
BInputGroupAppend,
|
||||
BFormInput,
|
||||
BFormGroup,
|
||||
BFormSelect,
|
||||
BFormSelectOption,
|
||||
vSelect,
|
||||
|
||||
ValidationProvider,
|
||||
},
|
||||
props: {
|
||||
address: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
balance: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
targetChainId: '',
|
||||
token: '',
|
||||
amount: null,
|
||||
recipient: null,
|
||||
IBCDenom: {},
|
||||
paths: {},
|
||||
destination: {},
|
||||
channels: [],
|
||||
|
||||
required,
|
||||
password,
|
||||
email,
|
||||
min,
|
||||
integer,
|
||||
url,
|
||||
alpha,
|
||||
between,
|
||||
digits,
|
||||
length,
|
||||
alphaDash,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
destinationOptions() {
|
||||
if (!this.token && this.token === '') return []
|
||||
const options = this.channels.map(x => ({ port_id: x.port_id, channel_id: x.channel_id, label: `${x.chain_id ? x.chain_id : ''} ${x.port_id}/${x.channel_id}` }))
|
||||
if (this.token.startsWith('ibc/')) {
|
||||
const query = this.paths[this.token]
|
||||
return query ? options.filter(x => x.channel_id === query.channel_id) : options
|
||||
}
|
||||
return options
|
||||
},
|
||||
|
||||
msg() {
|
||||
const timeout = dayjs().add(4, 'hour')
|
||||
return [
|
||||
{
|
||||
typeUrl: '/ibc.applications.transfer.v1.MsgTransfer',
|
||||
value: {
|
||||
sourcePort: this.destination.port_id,
|
||||
sourceChannel: this.destination.channel_id,
|
||||
token: coin(Number(getUnitAmount(this.amount, this.token)), this.token),
|
||||
sender: this.address,
|
||||
receiver: this.recipient,
|
||||
timeoutTimestamp: String(timeout.utc().valueOf() * 1000000),
|
||||
},
|
||||
},
|
||||
]
|
||||
},
|
||||
balanceOptions() {
|
||||
return this.setupBalance()
|
||||
},
|
||||
selectedChain() {
|
||||
return this.$store.state.chains.selected
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.$emit('update', {
|
||||
modalTitle: 'IBC Transfer Tokens',
|
||||
historyName: 'transfer',
|
||||
})
|
||||
this.setActionName()
|
||||
this.loadData()
|
||||
},
|
||||
methods: {
|
||||
loadData() {
|
||||
this.destination = null
|
||||
this.channels = []
|
||||
this.token = ''
|
||||
this.targetChainId = ''
|
||||
if (this.address) {
|
||||
this.$http.getAllIBCDenoms(this.selectedChain).then(x => {
|
||||
x.denom_traces.forEach(trace => {
|
||||
const hash = toHex(sha256(new TextEncoder().encode(`${trace.path}/${trace.base_denom}`)))
|
||||
const ibcDenom = `ibc/${hash.toUpperCase()}`
|
||||
// add base_denom to cache
|
||||
this.$set(this.IBCDenom, ibcDenom, trace.base_denom)
|
||||
// store channel/part for ibc denoms
|
||||
const path = trace.path.split('/')
|
||||
if (path.length >= 2) {
|
||||
this.paths[ibcDenom] = {
|
||||
channel_id: path[path.length - 1],
|
||||
port_id: path[path.length - 2],
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
this.$http.getIBCChannels(this.selectedChain, null).then(ret => {
|
||||
const chans = ret.channels.filter(x => x.state === 'STATE_OPEN').map(x => ({ channel_id: x.channel_id, port_id: x.port_id }))
|
||||
this.$set(this, 'channels', chans)
|
||||
})
|
||||
}
|
||||
},
|
||||
setupBalance() {
|
||||
if (this.balance && this.balance.length > 0) {
|
||||
this.token = this.balance[0].denom
|
||||
return this.balance
|
||||
}
|
||||
return []
|
||||
},
|
||||
tokenChange() {
|
||||
// eslint-disable-next-line prefer-destructuring
|
||||
this.destination = this.destinationOptions[0]
|
||||
this.recipient = null
|
||||
this.setActionName()
|
||||
this.onChannelChange()
|
||||
},
|
||||
|
||||
setActionName() {
|
||||
this.$emit('update', {
|
||||
actionName: this.token.startsWith('ibc') ? 'Withdraw' : 'Deposit',
|
||||
})
|
||||
},
|
||||
|
||||
format(v) {
|
||||
return formatToken(v, this.IBCDenom)
|
||||
},
|
||||
printDenom() {
|
||||
return formatTokenDenom(this.IBCDenom[this.token] || this.token)
|
||||
},
|
||||
onChannelChange() {
|
||||
this.$http.getIBCChannelClientState(this.destination.channel_id, this.destination.port_id, this.selectedChain).then(cs => {
|
||||
this.targetChainId = cs.identified_client_state.client_state.chain_id
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style lang="scss">
|
||||
@import '@core/scss/vue/libs/vue-select.scss';
|
||||
</style>
|
||||
@@ -1,239 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Delegator"
|
||||
label-for="Account"
|
||||
>
|
||||
<validation-provider
|
||||
#default="{ errors }"
|
||||
rules="required"
|
||||
name="Delegator"
|
||||
>
|
||||
<b-form-input
|
||||
v-model="address"
|
||||
readonly
|
||||
/>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="From Validator"
|
||||
label-for="validator"
|
||||
>
|
||||
<v-select
|
||||
:value="validatorAddress"
|
||||
:options="valOptions"
|
||||
:reduce="val => val.value"
|
||||
placeholder="Select a validator"
|
||||
:disabled="true"
|
||||
/>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Current Delegation"
|
||||
label-for="Token"
|
||||
>
|
||||
<validation-provider
|
||||
#default="{ errors }"
|
||||
rules="required"
|
||||
name="Token"
|
||||
>
|
||||
<v-select
|
||||
v-model="token"
|
||||
:options="tokenOptions"
|
||||
:reduce="token => token.value"
|
||||
/>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="To Validator"
|
||||
label-for="validator"
|
||||
>
|
||||
<v-select
|
||||
v-model="toValidator"
|
||||
:options="valOptions"
|
||||
:reduce="val => val.value"
|
||||
placeholder="Select a validator"
|
||||
:selectable="(v) => v.value"
|
||||
/>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Amount"
|
||||
label-for="Amount"
|
||||
>
|
||||
<validation-provider
|
||||
v-slot="{ errors }"
|
||||
rules="required|regex:^([0-9\.]+)$"
|
||||
name="amount"
|
||||
>
|
||||
<b-input-group>
|
||||
<b-form-input
|
||||
id="Amount"
|
||||
v-model="amount"
|
||||
:state="errors.length > 0 ? false:null"
|
||||
placeholder="Input a number"
|
||||
type="number"
|
||||
/>
|
||||
<b-input-group-append is-text>
|
||||
{{ printDenom() }}
|
||||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ValidationProvider } from 'vee-validate'
|
||||
import {
|
||||
BRow, BCol, BInputGroup, BFormInput, BFormGroup,
|
||||
BInputGroupAppend,
|
||||
} from 'bootstrap-vue'
|
||||
import {
|
||||
required, email, url, between, alpha, integer, password, min, digits, alphaDash, length,
|
||||
} from '@validations'
|
||||
import {
|
||||
formatToken, formatTokenDenom, getUnitAmount,
|
||||
} from '@/libs/utils'
|
||||
import vSelect from 'vue-select'
|
||||
|
||||
export default {
|
||||
name: 'Redelegate',
|
||||
components: {
|
||||
BRow,
|
||||
BCol,
|
||||
BInputGroup,
|
||||
BFormInput,
|
||||
BFormGroup,
|
||||
vSelect,
|
||||
BInputGroupAppend,
|
||||
ValidationProvider,
|
||||
},
|
||||
props: {
|
||||
validatorAddress: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
address: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
selectedAddress: this.address,
|
||||
unbundValidators: [],
|
||||
validators: [],
|
||||
toValidator: null,
|
||||
token: '',
|
||||
amount: null,
|
||||
delegations: [],
|
||||
|
||||
required,
|
||||
password,
|
||||
email,
|
||||
min,
|
||||
integer,
|
||||
url,
|
||||
alpha,
|
||||
between,
|
||||
digits,
|
||||
length,
|
||||
alphaDash,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
valOptions() {
|
||||
let options = []
|
||||
const vals = this.validators.map(x => ({ value: x.operator_address, label: `${x.description.moniker} (${Number(x.commission.rate) * 100}%)` }))
|
||||
if (vals.length > 0) {
|
||||
options.push({ value: null, label: '=== ACTIVE VALIDATORS ===' })
|
||||
options = options.concat(vals)
|
||||
}
|
||||
const unbunded = this.unbundValidators.map(x => ({ value: x.operator_address, label: `* ${x.description.moniker} (${Number(x.commission.rate) * 100}%)` }))
|
||||
if (unbunded.length > 0) {
|
||||
options.push({ value: null, label: '=== INACTIVE VALIDATORS ===', disabled: true })
|
||||
options = options.concat(unbunded)
|
||||
}
|
||||
return options
|
||||
},
|
||||
tokenOptions() {
|
||||
if (!this.delegations) return []
|
||||
return this.delegations.filter(x => x.delegation.validator_address === this.validatorAddress).map(x => ({ value: x.balance.denom, label: formatToken(x.balance) }))
|
||||
},
|
||||
msg() {
|
||||
return [{
|
||||
typeUrl: '/cosmos.staking.v1beta1.MsgBeginRedelegate',
|
||||
value: {
|
||||
delegatorAddress: this.address,
|
||||
validatorSrcAddress: this.validatorAddress,
|
||||
validatorDstAddress: this.toValidator,
|
||||
amount: {
|
||||
amount: getUnitAmount(this.amount, this.token),
|
||||
denom: this.token,
|
||||
},
|
||||
},
|
||||
}]
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.$emit('update', {
|
||||
modalTitle: 'Redelegate Token',
|
||||
historyName: 'redelegate',
|
||||
})
|
||||
this.loadData()
|
||||
},
|
||||
methods: {
|
||||
loadData() {
|
||||
this.$http.getValidatorList().then(v => {
|
||||
this.validators = v
|
||||
})
|
||||
this.$http.getValidatorUnbondedList().then(v => {
|
||||
this.unbundValidators = v
|
||||
})
|
||||
this.$http.getStakingDelegations(this.address).then(res => {
|
||||
this.delegations = res.delegation_responses
|
||||
this.delegations.forEach(x => {
|
||||
if (x.delegation.validator_address === this.validatorAddress) {
|
||||
this.token = x.balance.denom
|
||||
this.$emit('update', {
|
||||
feeDenom: x.balance.denom,
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
format(v) {
|
||||
return formatToken(v)
|
||||
},
|
||||
printDenom() {
|
||||
return formatTokenDenom(this.token)
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style lang="scss">
|
||||
@import '@core/scss/vue/libs/vue-select.scss';
|
||||
</style>
|
||||
@@ -1,204 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Sender"
|
||||
label-for="sender"
|
||||
>
|
||||
<b-input-group class="mb-25">
|
||||
|
||||
<b-form-input
|
||||
name="sender"
|
||||
:value="address"
|
||||
readonly
|
||||
/>
|
||||
</b-input-group>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Recipient"
|
||||
label-for="Recipient"
|
||||
>
|
||||
<validation-provider
|
||||
#default="{ errors }"
|
||||
rules="required"
|
||||
name="recipient"
|
||||
>
|
||||
<b-input-group class="mb-25">
|
||||
<b-form-input
|
||||
id="Recipient"
|
||||
v-model="recipient"
|
||||
:state="errors.length > 0 ? false:null"
|
||||
/>
|
||||
</b-input-group>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Available Token"
|
||||
label-for="Token"
|
||||
>
|
||||
<validation-provider
|
||||
#default="{ errors }"
|
||||
rules="required"
|
||||
name="Token"
|
||||
>
|
||||
<b-form-select
|
||||
v-model="token"
|
||||
>
|
||||
<b-form-select-option
|
||||
v-for="item in balanceOptions"
|
||||
:key="item.denom"
|
||||
:value="item.denom"
|
||||
>
|
||||
{{ format(item) }}
|
||||
</b-form-select-option>
|
||||
</b-form-select>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Amount"
|
||||
label-for="Amount"
|
||||
>
|
||||
<validation-provider
|
||||
v-slot="{ errors }"
|
||||
rules="required|regex:^([0-9\.]+)$"
|
||||
name="amount"
|
||||
>
|
||||
<b-input-group class="mb-25">
|
||||
<b-form-input
|
||||
id="Amount"
|
||||
v-model="amount"
|
||||
:state="errors.length > 0 ? false:null"
|
||||
placeholder="Input a number"
|
||||
type="number"
|
||||
/>
|
||||
<b-input-group-append is-text>
|
||||
{{ printDenom() }}
|
||||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ValidationProvider } from 'vee-validate'
|
||||
import {
|
||||
BRow, BCol, BInputGroup, BInputGroupAppend, BFormInput, BFormGroup, BFormSelect, BFormSelectOption,
|
||||
} from 'bootstrap-vue'
|
||||
import {
|
||||
required, email, url, between, alpha, integer, password, min, digits, alphaDash, length,
|
||||
} from '@validations'
|
||||
import {
|
||||
formatToken, formatTokenDenom, getUnitAmount,
|
||||
} from '@/libs/utils'
|
||||
|
||||
export default {
|
||||
name: 'TransforDialogue',
|
||||
components: {
|
||||
BRow,
|
||||
BCol,
|
||||
BInputGroup,
|
||||
BInputGroupAppend,
|
||||
BFormInput,
|
||||
BFormGroup,
|
||||
BFormSelect,
|
||||
BFormSelectOption,
|
||||
ValidationProvider,
|
||||
|
||||
},
|
||||
props: {
|
||||
address: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
balance: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
token: '',
|
||||
amount: null,
|
||||
recipient: '',
|
||||
IBCDenom: {},
|
||||
|
||||
required,
|
||||
password,
|
||||
email,
|
||||
min,
|
||||
integer,
|
||||
url,
|
||||
alpha,
|
||||
between,
|
||||
digits,
|
||||
length,
|
||||
alphaDash,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
msg() {
|
||||
return [
|
||||
{
|
||||
typeUrl: '/cosmos.bank.v1beta1.MsgSend',
|
||||
value: {
|
||||
fromAddress: this.address,
|
||||
toAddress: this.recipient,
|
||||
amount: [
|
||||
{
|
||||
amount: getUnitAmount(this.amount, this.token),
|
||||
denom: this.token,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
]
|
||||
},
|
||||
balanceOptions() {
|
||||
return this.setupBalance()
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.$emit('update', {
|
||||
modalTitle: 'Transfer Tokens',
|
||||
historyName: 'send',
|
||||
})
|
||||
},
|
||||
|
||||
methods: {
|
||||
setupBalance() {
|
||||
if (this.balance && this.balance.length > 0) {
|
||||
this.token = this.balance[0].denom
|
||||
return this.balance
|
||||
}
|
||||
return []
|
||||
},
|
||||
format(v) {
|
||||
return formatToken(v, this.IBCDenom)
|
||||
},
|
||||
printDenom() {
|
||||
return formatTokenDenom(this.IBCDenom[this.token] || this.token)
|
||||
},
|
||||
|
||||
},
|
||||
|
||||
}
|
||||
</script>
|
||||
@@ -1,197 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Delegator"
|
||||
label-for="Account"
|
||||
>
|
||||
<b-form-input
|
||||
v-model="address"
|
||||
readonly
|
||||
/>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Validator"
|
||||
label-for="validator"
|
||||
>
|
||||
<v-select
|
||||
:value="validatorAddress"
|
||||
:options="valOptions"
|
||||
:reduce="val => val.value"
|
||||
placeholder="Select a validator"
|
||||
:disabled="true"
|
||||
/>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Current Delegation"
|
||||
label-for="Token"
|
||||
>
|
||||
<validation-provider
|
||||
#default="{ errors }"
|
||||
rules="required"
|
||||
name="Token"
|
||||
>
|
||||
<v-select
|
||||
v-model="token"
|
||||
:options="tokenOptions"
|
||||
:reduce="token => token.value"
|
||||
/>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Amount"
|
||||
label-for="Amount"
|
||||
>
|
||||
<validation-provider
|
||||
v-slot="{ errors }"
|
||||
rules="required|regex:^([0-9\.]+)$"
|
||||
name="amount"
|
||||
>
|
||||
<b-input-group>
|
||||
<b-form-input
|
||||
id="Amount"
|
||||
v-model="amount"
|
||||
:state="errors.length > 0 ? false:null"
|
||||
placeholder="Input a number"
|
||||
type="number"
|
||||
/>
|
||||
<b-input-group-append is-text>
|
||||
{{ printDenom() }}
|
||||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ValidationProvider } from 'vee-validate'
|
||||
import {
|
||||
BRow, BCol, BInputGroup, BFormInput, BFormGroup, BInputGroupAppend,
|
||||
} from 'bootstrap-vue'
|
||||
import {
|
||||
required, email, url, between, alpha, integer, password, min, digits, alphaDash, length,
|
||||
} from '@validations'
|
||||
import {
|
||||
formatToken, formatTokenDenom, getUnitAmount,
|
||||
} from '@/libs/utils'
|
||||
import vSelect from 'vue-select'
|
||||
|
||||
export default {
|
||||
name: 'UnbondDialogue',
|
||||
components: {
|
||||
BRow,
|
||||
BCol,
|
||||
BInputGroup,
|
||||
BFormInput,
|
||||
BFormGroup,
|
||||
vSelect,
|
||||
BInputGroupAppend,
|
||||
ValidationProvider,
|
||||
},
|
||||
props: {
|
||||
validatorAddress: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
address: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
validators: [],
|
||||
token: '',
|
||||
amount: null,
|
||||
delegations: [],
|
||||
|
||||
required,
|
||||
password,
|
||||
email,
|
||||
min,
|
||||
integer,
|
||||
url,
|
||||
alpha,
|
||||
between,
|
||||
digits,
|
||||
length,
|
||||
alphaDash,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
valOptions() {
|
||||
return this.validators.map(x => ({ value: x.operator_address, label: `${x.description.moniker} (${Number(x.commission.rate) * 100}%)` }))
|
||||
},
|
||||
tokenOptions() {
|
||||
if (!this.delegations) return []
|
||||
return this.delegations.filter(x => x.delegation.validator_address === this.validatorAddress).map(x => ({ value: x.balance.denom, label: formatToken(x.balance) }))
|
||||
},
|
||||
msg() {
|
||||
return [{
|
||||
typeUrl: '/cosmos.staking.v1beta1.MsgUndelegate',
|
||||
value: {
|
||||
delegatorAddress: this.address,
|
||||
validatorAddress: this.validatorAddress,
|
||||
amount: {
|
||||
amount: getUnitAmount(this.amount, this.token),
|
||||
denom: this.token,
|
||||
},
|
||||
},
|
||||
}]
|
||||
},
|
||||
},
|
||||
|
||||
mounted() {
|
||||
this.$emit('update', {
|
||||
modalTitle: 'Unbond Token',
|
||||
historyName: 'unbond',
|
||||
})
|
||||
this.loadData()
|
||||
},
|
||||
|
||||
methods: {
|
||||
loadData() {
|
||||
if (this.address) {
|
||||
this.$http.getValidatorList().then(v => {
|
||||
this.validators = v
|
||||
})
|
||||
}
|
||||
this.$http.getStakingDelegations(this.address).then(res => {
|
||||
this.delegations = res.delegation_responses
|
||||
this.delegations.forEach(x => {
|
||||
if (x.delegation.validator_address === this.validatorAddress) {
|
||||
this.token = x.balance.denom
|
||||
this.$emit('update', {
|
||||
feeDenom: x.balance.denom,
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
printDenom() {
|
||||
return formatTokenDenom(this.token)
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style lang="scss">
|
||||
@import '@core/scss/vue/libs/vue-select.scss';
|
||||
</style>
|
||||
@@ -1,166 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<h4>{{ proposalId }}. {{ proposalTitle }}</h4>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Voter"
|
||||
label-for="Account"
|
||||
>
|
||||
<validation-provider
|
||||
#default="{ errors }"
|
||||
rules="required"
|
||||
name="Voter"
|
||||
>
|
||||
<b-form-input
|
||||
v-model="address"
|
||||
readonly
|
||||
/>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Option"
|
||||
label-for="option"
|
||||
>
|
||||
<validation-provider
|
||||
#default="{ errors }"
|
||||
rules="required"
|
||||
name="option"
|
||||
>
|
||||
<div class="demo-inline-spacing">
|
||||
|
||||
<b-form-radio
|
||||
v-model="option"
|
||||
name="option"
|
||||
value="1"
|
||||
class="custom-control-success"
|
||||
>
|
||||
Yes
|
||||
</b-form-radio>
|
||||
<b-form-radio
|
||||
v-model="option"
|
||||
name="option"
|
||||
value="3"
|
||||
class="custom-control-warning"
|
||||
>
|
||||
No
|
||||
</b-form-radio>
|
||||
<b-form-radio
|
||||
v-model="option"
|
||||
name="option"
|
||||
value="4"
|
||||
class="custom-control-danger"
|
||||
>
|
||||
No With Veto
|
||||
</b-form-radio>
|
||||
<b-form-radio
|
||||
v-model="option"
|
||||
name="option"
|
||||
value="2"
|
||||
class="custom-control-secondary"
|
||||
>
|
||||
Abstain
|
||||
</b-form-radio>
|
||||
</div>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ValidationProvider } from 'vee-validate'
|
||||
import {
|
||||
BRow, BCol, BFormGroup, BFormInput,
|
||||
BFormRadio,
|
||||
} from 'bootstrap-vue'
|
||||
import {
|
||||
required, email, url, between, alpha, integer, password, min, digits, alphaDash, length,
|
||||
} from '@validations'
|
||||
import {
|
||||
formatToken,
|
||||
} from '@/libs/utils'
|
||||
|
||||
export default {
|
||||
name: 'VoteDialogue',
|
||||
components: {
|
||||
BRow,
|
||||
BCol,
|
||||
BFormGroup,
|
||||
BFormRadio,
|
||||
ValidationProvider,
|
||||
BFormInput,
|
||||
},
|
||||
props: {
|
||||
proposalId: {
|
||||
type: Number,
|
||||
required: true,
|
||||
},
|
||||
proposalTitle: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
address: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
option: null,
|
||||
|
||||
required,
|
||||
password,
|
||||
email,
|
||||
min,
|
||||
integer,
|
||||
url,
|
||||
alpha,
|
||||
between,
|
||||
digits,
|
||||
length,
|
||||
alphaDash,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
msg() {
|
||||
return [{
|
||||
typeUrl: '/cosmos.gov.v1beta1.MsgVote',
|
||||
value: {
|
||||
voter: this.address,
|
||||
proposalId: this.proposalId,
|
||||
option: Number(this.option),
|
||||
},
|
||||
}]
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.$emit('update', {
|
||||
modalTitle: 'Vote',
|
||||
historyName: 'vote',
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
|
||||
format(v) {
|
||||
return formatToken(v)
|
||||
},
|
||||
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
@import '@core/scss/vue/libs/vue-select.scss';
|
||||
</style>
|
||||
@@ -1,80 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Sender"
|
||||
label-for="Account"
|
||||
>
|
||||
<b-input-group class="mb-25">
|
||||
<b-form-input
|
||||
:value="address"
|
||||
readonly
|
||||
/>
|
||||
</b-input-group>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
BRow, BCol, BInputGroup, BFormInput, BFormGroup,
|
||||
} from 'bootstrap-vue'
|
||||
|
||||
export default {
|
||||
name: 'WithdrawDialogue',
|
||||
components: {
|
||||
BRow,
|
||||
BCol,
|
||||
BInputGroup,
|
||||
BFormInput,
|
||||
BFormGroup,
|
||||
},
|
||||
props: {
|
||||
address: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
account: [],
|
||||
balance: [],
|
||||
delegations: [],
|
||||
feeDenom: '',
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
msg() {
|
||||
const txMsgs = []
|
||||
this.delegations.forEach(i => {
|
||||
txMsgs.push({
|
||||
typeUrl: '/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward',
|
||||
value: {
|
||||
delegatorAddress: this.address,
|
||||
validatorAddress: i.delegation.validator_address,
|
||||
},
|
||||
})
|
||||
})
|
||||
return txMsgs
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.$emit('update', {
|
||||
modalTitle: 'Withdraw Rewards',
|
||||
historyName: 'withdraw',
|
||||
})
|
||||
this.loadData()
|
||||
},
|
||||
|
||||
methods: {
|
||||
loadData() {
|
||||
this.$http.getStakingDelegations(this.address).then(res => {
|
||||
this.delegations = res.delegation_responses
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
@@ -1,84 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<b-form-group
|
||||
label="Sender"
|
||||
label-for="Account"
|
||||
>
|
||||
<b-input-group class="mb-25">
|
||||
<b-form-input
|
||||
:value="address"
|
||||
readonly
|
||||
/>
|
||||
</b-input-group>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
BRow,
|
||||
BCol,
|
||||
BInputGroup,
|
||||
BFormInput,
|
||||
BFormGroup,
|
||||
} from 'bootstrap-vue'
|
||||
|
||||
export default {
|
||||
name: 'WithdrawCommissionDialogue',
|
||||
components: {
|
||||
BRow,
|
||||
BCol,
|
||||
BInputGroup,
|
||||
BFormInput,
|
||||
BFormGroup,
|
||||
|
||||
},
|
||||
props: {
|
||||
address: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
validatorAddress: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
msg() {
|
||||
return [
|
||||
{
|
||||
typeUrl: '/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward',
|
||||
value: {
|
||||
delegatorAddress: this.address,
|
||||
validatorAddress: this.validatorAddress,
|
||||
},
|
||||
},
|
||||
{
|
||||
typeUrl: '/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission',
|
||||
value: {
|
||||
validatorAddress: this.validatorAddress,
|
||||
},
|
||||
},
|
||||
]
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.$emit('update', {
|
||||
modalTitle: 'Withdraw Validator Commission',
|
||||
historyName: 'withdraw',
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
|
||||
},
|
||||
}
|
||||
</script>
|
||||
@@ -1,431 +0,0 @@
|
||||
<template>
|
||||
<b-modal
|
||||
:id="modalId"
|
||||
centered
|
||||
size="md"
|
||||
:title="modalTitle"
|
||||
:ok-title="actionName"
|
||||
scrollable
|
||||
:hide-header-close="!showResult"
|
||||
:hide-footer="showResult"
|
||||
modal-class="custom-transaction-modal"
|
||||
:ok-disabled="isOwner"
|
||||
@hidden="resetModal"
|
||||
@ok="handleOk"
|
||||
@show="initialize"
|
||||
>
|
||||
<b-overlay
|
||||
:show="isOwner"
|
||||
rounded="sm"
|
||||
>
|
||||
<template #overlay>
|
||||
<div class="text-center">
|
||||
<b-avatar
|
||||
icon="stopwatch"
|
||||
font-scale="3"
|
||||
animation="cylon"
|
||||
/>
|
||||
<p id="cancel-label">
|
||||
{{ blockingMsg }}
|
||||
</p>
|
||||
<b-button
|
||||
v-ripple.400="'rgba(255, 255, 255, 0.15)'"
|
||||
variant="outline-primary"
|
||||
to="/wallet/import"
|
||||
>
|
||||
Connect Wallet
|
||||
</b-button>
|
||||
</div>
|
||||
</template>
|
||||
<validation-observer
|
||||
v-if="!showResult"
|
||||
ref="simpleRules"
|
||||
>
|
||||
<b-form>
|
||||
<component
|
||||
:is="type"
|
||||
ref="component"
|
||||
:address="selectedAddress"
|
||||
:validator-address="validatorAddress"
|
||||
:balance="balance"
|
||||
:proposal-id="proposalId"
|
||||
:proposal-title="proposalTitle"
|
||||
@update="componentUpdate"
|
||||
/>
|
||||
<b-row>
|
||||
<b-col cols="12">
|
||||
<b-form-group>
|
||||
<b-form-checkbox
|
||||
v-model="advance"
|
||||
name="advance"
|
||||
value="true"
|
||||
>
|
||||
<small>Advanced</small>
|
||||
</b-form-checkbox>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row v-if="advance">
|
||||
<b-col cols="12">
|
||||
<b-form-group
|
||||
label="Fee"
|
||||
label-for="Fee"
|
||||
>
|
||||
<validation-provider
|
||||
v-slot="{ errors }"
|
||||
rules="required|integer"
|
||||
name="fee"
|
||||
>
|
||||
<b-input-group>
|
||||
<b-form-input v-model="fee" />
|
||||
<b-input-group-append>
|
||||
<b-form-select
|
||||
v-model="feeDenom"
|
||||
:options="feeDenoms"
|
||||
value-field="denom"
|
||||
text-field="denom"
|
||||
/>
|
||||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
<b-col cols="12">
|
||||
<b-form-group
|
||||
label="Gas"
|
||||
label-for="gas"
|
||||
>
|
||||
<validation-provider
|
||||
v-slot="{ errors }"
|
||||
name="gas"
|
||||
>
|
||||
<b-form-input
|
||||
id="gas"
|
||||
v-model="gas"
|
||||
type="number"
|
||||
/>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
<b-col cols="12">
|
||||
<b-form-group
|
||||
label="Memo"
|
||||
label-for="Memo"
|
||||
>
|
||||
<validation-provider
|
||||
v-slot="{ errors }"
|
||||
name="memo"
|
||||
>
|
||||
<b-form-input
|
||||
id="Memo"
|
||||
v-model="memo"
|
||||
max="2"
|
||||
/>
|
||||
<small class="text-danger">{{ errors[0] }}</small>
|
||||
</validation-provider>
|
||||
</b-form-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row v-if="advance">
|
||||
<b-col>
|
||||
<wallet-input-vue v-model="wallet" />
|
||||
</b-col>
|
||||
</b-row>
|
||||
</b-form>
|
||||
{{ error }}
|
||||
</validation-observer>
|
||||
|
||||
<TransactionResult
|
||||
v-else
|
||||
:hash="txHash"
|
||||
/>
|
||||
</b-overlay>
|
||||
</b-modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ValidationProvider, ValidationObserver } from 'vee-validate'
|
||||
import {
|
||||
BAvatar, BModal, BRow, BCol, BInputGroup, BFormInput, BFormGroup, BFormSelect, BFormSelectOption,
|
||||
BForm, BButton, BInputGroupAppend, BFormCheckbox, BOverlay,
|
||||
} from 'bootstrap-vue'
|
||||
import Ripple from 'vue-ripple-directive'
|
||||
import {
|
||||
required, email, url, between, alpha, integer, password, min, digits, alphaDash, length,
|
||||
} from '@validations'
|
||||
import {
|
||||
extractAccountNumberAndSequence, getLocalAccounts, setLocalTxHistory, sign, timeIn,
|
||||
} from '@/libs/utils'
|
||||
import vSelect from 'vue-select'
|
||||
import ToastificationContent from '@core/components/toastification/ToastificationContent.vue'
|
||||
|
||||
import WalletInputVue from '../WalletInput.vue'
|
||||
import Delegate from './components/Delegate.vue'
|
||||
import Redelegate from './components/Redelegate.vue'
|
||||
import Withdraw from './components/Withdraw.vue'
|
||||
import Unbond from './components/Unbond.vue'
|
||||
import Transfer from './components/Transfer.vue'
|
||||
import IBCTransfer from './components/IBCTransfer.vue'
|
||||
import Vote from './components/Vote.vue'
|
||||
import WithdrawCommission from './components/WithdrawCommission.vue'
|
||||
import GovDeposit from './components/GovDeposit.vue'
|
||||
import TransactionResult from './TransactionResult.vue'
|
||||
|
||||
export default {
|
||||
name: 'DelegateDialogue',
|
||||
components: {
|
||||
BAvatar,
|
||||
BModal,
|
||||
BRow,
|
||||
BCol,
|
||||
BForm,
|
||||
BInputGroup,
|
||||
BFormInput,
|
||||
BFormGroup,
|
||||
BFormSelect,
|
||||
BFormSelectOption,
|
||||
BFormCheckbox,
|
||||
vSelect,
|
||||
BButton,
|
||||
BInputGroupAppend,
|
||||
BOverlay,
|
||||
WalletInputVue,
|
||||
|
||||
ValidationProvider,
|
||||
ValidationObserver,
|
||||
// eslint-disable-next-line vue/no-unused-components
|
||||
ToastificationContent,
|
||||
Delegate,
|
||||
Redelegate,
|
||||
Withdraw,
|
||||
Unbond,
|
||||
Transfer,
|
||||
IBCTransfer,
|
||||
Vote,
|
||||
WithdrawCommission,
|
||||
GovDeposit,
|
||||
TransactionResult,
|
||||
},
|
||||
directives: {
|
||||
Ripple,
|
||||
},
|
||||
props: {
|
||||
type: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
modalId: {
|
||||
type: String,
|
||||
default: 'operation-modal',
|
||||
},
|
||||
validatorAddress: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
address: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
proposalId: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
proposalTitle: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
modalTitle: '',
|
||||
historyName: '',
|
||||
selectedValidator: null,
|
||||
selectedChain: null,
|
||||
token: '',
|
||||
chainId: '',
|
||||
balance: [],
|
||||
IBCDenom: {},
|
||||
error: null,
|
||||
sequence: 1,
|
||||
accountNumber: 0,
|
||||
advance: false,
|
||||
fee: '900',
|
||||
feeDenom: '',
|
||||
wallet: 'ledgerUSB',
|
||||
gas: '250000',
|
||||
memo: '',
|
||||
blockingMsg: this.address ? 'You are not the owner' : 'No available account found.',
|
||||
actionName: 'Send',
|
||||
showResult: false,
|
||||
txHash: '',
|
||||
|
||||
required,
|
||||
password,
|
||||
email,
|
||||
min,
|
||||
integer,
|
||||
url,
|
||||
alpha,
|
||||
between,
|
||||
digits,
|
||||
length,
|
||||
alphaDash,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
feeDenoms() {
|
||||
if (!this.balance) return []
|
||||
return this.balance.filter(item => !item.denom.startsWith('ibc'))
|
||||
},
|
||||
accounts() {
|
||||
const accounts = getLocalAccounts()
|
||||
const selectedWallet = this.$store.state.chains.defaultWallet
|
||||
return accounts[selectedWallet]
|
||||
},
|
||||
isOwner() {
|
||||
if (this.accounts) {
|
||||
this.updateWallet(this.accounts.device)
|
||||
if (this.accounts.address.findIndex(x => x.addr === this.selectedAddress) > -1) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
},
|
||||
selectedAddress() {
|
||||
if (this.address) {
|
||||
return this.address
|
||||
}
|
||||
const chain = this.$store.state.chains.selected.chain_name
|
||||
const selectedAddress = this.accounts.address.find(x => x.chain === chain)
|
||||
return selectedAddress?.addr
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
initialize() {
|
||||
this.$http.getLatestBlock().then(ret => {
|
||||
this.chainId = ret.block.header.chain_id
|
||||
const notSynced = timeIn(ret.block.header.time, 10, 'm')
|
||||
if (notSynced) {
|
||||
this.error = 'Client is not synced or blockchain is halted'
|
||||
} else {
|
||||
this.error = null
|
||||
}
|
||||
})
|
||||
this.$http.getAuthAccount(this.selectedAddress).then(ret => {
|
||||
const account = extractAccountNumberAndSequence(ret)
|
||||
this.accountNumber = account.accountNumber
|
||||
this.sequence = account.sequence
|
||||
})
|
||||
this.$http.getBankBalances(this.selectedAddress).then(res => {
|
||||
if (res && res.length > 0) {
|
||||
this.balance = res.reverse()
|
||||
const token = this.balance.find(i => !i.denom.startsWith('ibc'))
|
||||
this.token = token.denom
|
||||
if (token) this.feeDenom = token.denom
|
||||
}
|
||||
})
|
||||
this.fee = this.$store.state.chains.selected?.min_tx_fee || '1000'
|
||||
this.feeDenom = this.$store.state.chains.selected?.assets[0]?.base || ''
|
||||
},
|
||||
componentUpdate(obj) {
|
||||
Object.keys(obj).forEach(key => {
|
||||
this[key] = obj[key]
|
||||
})
|
||||
},
|
||||
handleOk(bvModalEvt) {
|
||||
bvModalEvt.preventDefault()
|
||||
this.$refs.simpleRules.validate().then(ok => {
|
||||
if (ok) {
|
||||
this.sendTx().then(ret => {
|
||||
console.log(ret)
|
||||
this.error = ret
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
resetModal() {
|
||||
this.feeDenom = ''
|
||||
this.error = null
|
||||
this.showResult = false
|
||||
},
|
||||
async sendTx() {
|
||||
const txMsgs = this.$refs.component.msg
|
||||
if (txMsgs.length === 0) {
|
||||
this.error = 'No delegation found'
|
||||
return ''
|
||||
}
|
||||
if (!this.accountNumber) {
|
||||
this.error = 'Account number should not be empty!'
|
||||
return ''
|
||||
}
|
||||
|
||||
const txFee = {
|
||||
amount: [
|
||||
{
|
||||
amount: this.fee,
|
||||
denom: this.feeDenom,
|
||||
},
|
||||
],
|
||||
gas: this.gas,
|
||||
}
|
||||
|
||||
const signerData = {
|
||||
accountNumber: this.accountNumber,
|
||||
sequence: this.sequence,
|
||||
chainId: this.chainId,
|
||||
}
|
||||
|
||||
sign(
|
||||
this.wallet,
|
||||
this.chainId,
|
||||
this.selectedAddress,
|
||||
txMsgs,
|
||||
txFee,
|
||||
this.memo,
|
||||
signerData,
|
||||
).then(bodyBytes => {
|
||||
this.showResult = true
|
||||
this.$http.broadcastTx(bodyBytes, this.selectedChain).then(res => {
|
||||
this.txHash = res.tx_response.txhash
|
||||
setLocalTxHistory({
|
||||
chain: this.$store.state.chains.selected,
|
||||
op: this.historyName,
|
||||
hash: res.tx_response.txhash,
|
||||
time: new Date(),
|
||||
})
|
||||
}).catch(e => {
|
||||
console.log(e)
|
||||
this.error = e
|
||||
})
|
||||
}).catch(e => {
|
||||
console.log(e)
|
||||
|
||||
this.error = e
|
||||
})
|
||||
return ''
|
||||
},
|
||||
updateWallet(v) {
|
||||
console.log('device', v)
|
||||
if (v && v !== 'address') {
|
||||
this.wallet = v
|
||||
}
|
||||
this.wallet = 'keplr'
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style lang="scss">
|
||||
@import '@core/scss/vue/libs/vue-select.scss';
|
||||
.custom-transaction-modal {
|
||||
.modal-header {
|
||||
.modal-title {
|
||||
font-size: 24px;
|
||||
}
|
||||
.close {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -73,19 +73,22 @@ export default {
|
||||
return {
|
||||
title: {
|
||||
text: '',
|
||||
left: '5%',
|
||||
top: '3%',
|
||||
},
|
||||
legend: {
|
||||
scroll: 'scroll',
|
||||
right: '10%',
|
||||
top: '3%',
|
||||
data: assets,
|
||||
textStyle: {
|
||||
color: '#aaa',
|
||||
},
|
||||
top: 'top',
|
||||
},
|
||||
grid: { top: `${assets.length > 30 ? 30 : assets.length + 20}%` }, // */
|
||||
xAxis: {
|
||||
name: 'Qty',
|
||||
nameLocation: 'center',
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
type: 'dashed',
|
||||
},
|
||||
},
|
||||
axisLabel: {
|
||||
show: false,
|
||||
formatter(param) {
|
||||
@@ -102,9 +105,41 @@ export default {
|
||||
return formatNumber(param, true, 0)
|
||||
},
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
type: 'dashed',
|
||||
},
|
||||
},
|
||||
scale: true,
|
||||
},
|
||||
series,
|
||||
// series: [
|
||||
// {
|
||||
// name: '',
|
||||
// data: this.items.filter(x => x[1] > 0),
|
||||
// type: 'scatter',
|
||||
// symbolSize(data) {
|
||||
// const r = Math.log10(data[2])
|
||||
// return r * 5
|
||||
// },
|
||||
// emphasis: {
|
||||
// focus: 'series',
|
||||
// label: {
|
||||
// show: true,
|
||||
// formatter(param) {
|
||||
// return `${param.data[3]}, ${formatNumber(param.data[2], true, 0)}`
|
||||
// },
|
||||
// position: 'top',
|
||||
// },
|
||||
// },
|
||||
// itemStyle: {
|
||||
// shadowBlur: 10,
|
||||
// shadowColor: 'rgba(120, 36, 50, 0.5)',
|
||||
// shadowOffsetY: 5,
|
||||
// color: '#28c76f',
|
||||
// },
|
||||
// },
|
||||
// ],
|
||||
}
|
||||
},
|
||||
},
|
||||
@@ -113,7 +148,7 @@ export default {
|
||||
|
||||
<style scoped>
|
||||
.chart {
|
||||
min-height: 300px;
|
||||
height: 300px;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
const path = require('path')
|
||||
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer')
|
||||
const CompressionWebpackPlugin = require('compression-webpack-plugin')
|
||||
|
||||
const productionGzipExtensions = ['js', 'css']
|
||||
|
||||
module.exports = {
|
||||
publicPath: '/',
|
||||
@@ -25,17 +21,6 @@ module.exports = {
|
||||
'@axios': path.resolve(__dirname, 'src/libs/axios'),
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
new BundleAnalyzerPlugin({
|
||||
analyzerMode: 'static',
|
||||
openAnalyzer: false,
|
||||
}),
|
||||
new CompressionWebpackPlugin({
|
||||
test: new RegExp(`\\.(${productionGzipExtensions.join('|')})$`),
|
||||
threshold: 8192,
|
||||
minRatio: 0.8,
|
||||
}),
|
||||
],
|
||||
},
|
||||
chainWebpack: config => {
|
||||
config.module
|
||||
|
||||
@@ -1068,10 +1068,22 @@
|
||||
resolved "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.26.5.tgz"
|
||||
integrity sha512-VB4Z7lEIXA36q0RON15KexzEosToUtdDyMv7UXSBHSl4mLG/fIZgBIpBEYsaPZ1kh43xyINeKQJiGCp2z5rI+g==
|
||||
|
||||
"@gar/promisify@^1.0.1":
|
||||
version "1.1.3"
|
||||
resolved "https://registry.npmmirror.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
|
||||
integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==
|
||||
"@cosmostation/cosmosjs@^0.10.6":
|
||||
version "0.10.8"
|
||||
resolved "https://registry.npmjs.org/@cosmostation/cosmosjs/-/cosmosjs-0.10.8.tgz"
|
||||
integrity sha512-cR8ns+vlyB3i2mvNe5Ur3BHb/zuO3bPDmM4TfgOHSTJT5NtYbBXYiCcgeYto5tPJxKALmjwXXVwTZUy0C/u/aA==
|
||||
dependencies:
|
||||
ansi-regex "^5.0.1"
|
||||
bech32 "^1.1.3"
|
||||
bip32 "^2.0.5"
|
||||
bip39 "^2.5.0"
|
||||
bitcoinjs-lib "^4.0.2"
|
||||
google-protobuf "^3.14.0"
|
||||
lodash "^4.17.21"
|
||||
node-fetch "^2.6.1"
|
||||
protobufjs "^6.10.2"
|
||||
request "^2.88.2"
|
||||
secp256k1 "^3.8.0"
|
||||
|
||||
"@hapi/address@2.x.x":
|
||||
version "2.1.4"
|
||||
@@ -1299,22 +1311,6 @@
|
||||
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz"
|
||||
integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
|
||||
|
||||
"@npmcli/fs@^1.0.0":
|
||||
version "1.1.1"
|
||||
resolved "https://registry.npmmirror.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257"
|
||||
integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==
|
||||
dependencies:
|
||||
"@gar/promisify" "^1.0.1"
|
||||
semver "^7.3.5"
|
||||
|
||||
"@npmcli/move-file@^1.0.1":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmmirror.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674"
|
||||
integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==
|
||||
dependencies:
|
||||
mkdirp "^1.0.4"
|
||||
rimraf "^3.0.2"
|
||||
|
||||
"@nuxt/opencollective@^0.3.2":
|
||||
version "0.3.2"
|
||||
resolved "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.3.2.tgz"
|
||||
@@ -1324,11 +1320,6 @@
|
||||
consola "^2.15.0"
|
||||
node-fetch "^2.6.1"
|
||||
|
||||
"@polka/url@^1.0.0-next.20":
|
||||
version "1.0.0-next.21"
|
||||
resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
|
||||
integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==
|
||||
|
||||
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz"
|
||||
@@ -1484,6 +1475,11 @@
|
||||
resolved "https://registry.npmjs.org/@types/node/-/node-16.3.3.tgz"
|
||||
integrity sha512-8h7k1YgQKxKXWckzFCMfsIwn0Y61UK6tlD6y2lOb3hTOIMlK3t9/QwHOhc81TwU+RMf0As5fj7NPjroERCnejQ==
|
||||
|
||||
"@types/node@10.12.18":
|
||||
version "10.12.18"
|
||||
resolved "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz"
|
||||
integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==
|
||||
|
||||
"@types/node@11.11.6":
|
||||
version "11.11.6"
|
||||
resolved "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz"
|
||||
@@ -2064,11 +2060,6 @@ acorn-walk@^7.1.1:
|
||||
resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz"
|
||||
integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
|
||||
|
||||
acorn-walk@^8.0.0:
|
||||
version "8.2.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
|
||||
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
|
||||
|
||||
acorn@^3.0.4:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz"
|
||||
@@ -2089,24 +2080,11 @@ acorn@^7.1.1, acorn@^7.4.0:
|
||||
resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz"
|
||||
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
|
||||
|
||||
acorn@^8.0.4:
|
||||
version "8.7.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf"
|
||||
integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==
|
||||
|
||||
address@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmjs.org/address/-/address-1.1.2.tgz"
|
||||
integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==
|
||||
|
||||
aggregate-error@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
|
||||
integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
|
||||
dependencies:
|
||||
clean-stack "^2.0.0"
|
||||
indent-string "^4.0.0"
|
||||
|
||||
ajv-errors@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz"
|
||||
@@ -2174,6 +2152,11 @@ ansi-regex@^5.0.0:
|
||||
resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz"
|
||||
integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
|
||||
|
||||
ansi-regex@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
|
||||
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
|
||||
|
||||
ansi-styles@^3.2.0, ansi-styles@^3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"
|
||||
@@ -2485,6 +2468,13 @@ balanced-match@^1.0.0:
|
||||
resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
|
||||
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
||||
|
||||
base-x@^3.0.2:
|
||||
version "3.0.8"
|
||||
resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz"
|
||||
integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==
|
||||
dependencies:
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
base64-js@^1.0.2, base64-js@^1.3.0:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"
|
||||
@@ -2515,7 +2505,7 @@ bcrypt-pbkdf@^1.0.0:
|
||||
dependencies:
|
||||
tweetnacl "^0.14.3"
|
||||
|
||||
bech32@^1.1.4:
|
||||
bech32@^1.1.2, bech32@^1.1.3, bech32@^1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz"
|
||||
integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==
|
||||
@@ -2550,7 +2540,7 @@ binary-extensions@^2.0.0:
|
||||
resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz"
|
||||
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
|
||||
|
||||
bindings@^1.5.0:
|
||||
bindings@^1.3.0, bindings@^1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz"
|
||||
integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
|
||||
@@ -2562,6 +2552,42 @@ bip32-path@^0.4.2:
|
||||
resolved "https://registry.npmjs.org/bip32-path/-/bip32-path-0.4.2.tgz"
|
||||
integrity sha1-XbBBataCJxLwd4NuJVe4aXwMfJk=
|
||||
|
||||
bip32@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.npmjs.org/bip32/-/bip32-1.0.4.tgz"
|
||||
integrity sha512-8T21eLWylZETolyqCPgia+MNp+kY37zFr7PTFDTPObHeNi9JlfG4qGIh8WzerIJidtwoK+NsWq2I5i66YfHoIw==
|
||||
dependencies:
|
||||
bs58check "^2.1.1"
|
||||
create-hash "^1.2.0"
|
||||
create-hmac "^1.1.7"
|
||||
tiny-secp256k1 "^1.0.0"
|
||||
typeforce "^1.11.5"
|
||||
wif "^2.0.6"
|
||||
|
||||
bip32@^2.0.5:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.npmjs.org/bip32/-/bip32-2.0.6.tgz"
|
||||
integrity sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA==
|
||||
dependencies:
|
||||
"@types/node" "10.12.18"
|
||||
bs58check "^2.1.1"
|
||||
create-hash "^1.2.0"
|
||||
create-hmac "^1.1.7"
|
||||
tiny-secp256k1 "^1.1.3"
|
||||
typeforce "^1.11.5"
|
||||
wif "^2.0.6"
|
||||
|
||||
bip39@^2.5.0:
|
||||
version "2.6.0"
|
||||
resolved "https://registry.npmjs.org/bip39/-/bip39-2.6.0.tgz"
|
||||
integrity sha512-RrnQRG2EgEoqO24ea+Q/fftuPUZLmrEM3qNhhGsA3PbaXaCW791LTzPuVyx/VprXQcTbPJ3K3UeTna8ZnVl2sg==
|
||||
dependencies:
|
||||
create-hash "^1.1.0"
|
||||
pbkdf2 "^3.0.9"
|
||||
randombytes "^2.0.1"
|
||||
safe-buffer "^5.0.1"
|
||||
unorm "^1.3.3"
|
||||
|
||||
bip39@^3.0.2:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz"
|
||||
@@ -2572,6 +2598,39 @@ bip39@^3.0.2:
|
||||
pbkdf2 "^3.0.9"
|
||||
randombytes "^2.0.1"
|
||||
|
||||
bip66@^1.1.0, bip66@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz"
|
||||
integrity sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=
|
||||
dependencies:
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
bitcoin-ops@^1.3.0, bitcoin-ops@^1.4.0:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz"
|
||||
integrity sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==
|
||||
|
||||
bitcoinjs-lib@^4.0.2:
|
||||
version "4.0.5"
|
||||
resolved "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-4.0.5.tgz"
|
||||
integrity sha512-gYs7K2hiY4Xb96J8AIF+Rx+hqbwjVlp5Zt6L6AnHOdzfe/2tODdmDxsEytnaxVCdhOUg0JnsGpl+KowBpGLxtA==
|
||||
dependencies:
|
||||
bech32 "^1.1.2"
|
||||
bip32 "^1.0.4"
|
||||
bip66 "^1.1.0"
|
||||
bitcoin-ops "^1.4.0"
|
||||
bs58check "^2.0.0"
|
||||
create-hash "^1.1.0"
|
||||
create-hmac "^1.1.3"
|
||||
merkle-lib "^2.0.10"
|
||||
pushdata-bitcoin "^1.0.1"
|
||||
randombytes "^2.0.1"
|
||||
safe-buffer "^5.1.1"
|
||||
tiny-secp256k1 "^1.0.0"
|
||||
typeforce "^1.11.3"
|
||||
varuint-bitcoin "^1.0.4"
|
||||
wif "^2.0.1"
|
||||
|
||||
bluebird@^3.1.1, bluebird@^3.5.5, bluebird@^3.7.2:
|
||||
version "3.7.2"
|
||||
resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz"
|
||||
@@ -2672,7 +2731,7 @@ brorand@^1.0.1, brorand@^1.1.0:
|
||||
resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz"
|
||||
integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
|
||||
|
||||
browserify-aes@^1.0.0, browserify-aes@^1.0.4:
|
||||
browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz"
|
||||
integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
|
||||
@@ -2744,6 +2803,22 @@ browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6:
|
||||
escalade "^3.1.1"
|
||||
node-releases "^1.1.71"
|
||||
|
||||
bs58@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz"
|
||||
integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo=
|
||||
dependencies:
|
||||
base-x "^3.0.2"
|
||||
|
||||
bs58check@<3.0.0, bs58check@^2.0.0, bs58check@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz"
|
||||
integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==
|
||||
dependencies:
|
||||
bs58 "^4.0.0"
|
||||
create-hash "^1.1.0"
|
||||
safe-buffer "^5.1.2"
|
||||
|
||||
buffer-from@^1.0.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz"
|
||||
@@ -2809,30 +2884,6 @@ cacache@^12.0.2, cacache@^12.0.3:
|
||||
unique-filename "^1.1.1"
|
||||
y18n "^4.0.0"
|
||||
|
||||
cacache@^15.0.5:
|
||||
version "15.3.0"
|
||||
resolved "https://registry.npmmirror.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb"
|
||||
integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==
|
||||
dependencies:
|
||||
"@npmcli/fs" "^1.0.0"
|
||||
"@npmcli/move-file" "^1.0.1"
|
||||
chownr "^2.0.0"
|
||||
fs-minipass "^2.0.0"
|
||||
glob "^7.1.4"
|
||||
infer-owner "^1.0.4"
|
||||
lru-cache "^6.0.0"
|
||||
minipass "^3.1.1"
|
||||
minipass-collect "^1.0.2"
|
||||
minipass-flush "^1.0.5"
|
||||
minipass-pipeline "^1.2.2"
|
||||
mkdirp "^1.0.3"
|
||||
p-map "^4.0.0"
|
||||
promise-inflight "^1.0.1"
|
||||
rimraf "^3.0.2"
|
||||
ssri "^8.0.1"
|
||||
tar "^6.0.2"
|
||||
unique-filename "^1.1.1"
|
||||
|
||||
cache-base@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz"
|
||||
@@ -3036,11 +3087,6 @@ chownr@^1.1.1:
|
||||
resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz"
|
||||
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
|
||||
|
||||
chownr@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
|
||||
integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
|
||||
|
||||
chrome-trace-event@^1.0.2:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz"
|
||||
@@ -3076,11 +3122,6 @@ clean-css@4.2.x:
|
||||
dependencies:
|
||||
source-map "~0.6.0"
|
||||
|
||||
clean-stack@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
|
||||
integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
|
||||
|
||||
cleave.js@^1.4.7:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.npmjs.org/cleave.js/-/cleave.js-1.6.0.tgz"
|
||||
@@ -3256,11 +3297,6 @@ commander@^2.18.0, commander@^2.20.0:
|
||||
resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz"
|
||||
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
||||
|
||||
commander@^7.2.0:
|
||||
version "7.2.0"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
|
||||
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
|
||||
|
||||
commander@~2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz"
|
||||
@@ -3293,17 +3329,6 @@ compressible@~2.0.16:
|
||||
dependencies:
|
||||
mime-db ">= 1.43.0 < 2"
|
||||
|
||||
compression-webpack-plugin@6.1.1:
|
||||
version "6.1.1"
|
||||
resolved "https://registry.npmmirror.com/compression-webpack-plugin/-/compression-webpack-plugin-6.1.1.tgz#ae8e4b2ffdb7396bb776e66918d751a20d8ccf0e"
|
||||
integrity sha512-BEHft9M6lwOqVIQFMS/YJGmeCYXVOakC5KzQk05TFpMBlODByh1qNsZCWjUBxCQhUP9x0WfGidxTbGkjbWO/TQ==
|
||||
dependencies:
|
||||
cacache "^15.0.5"
|
||||
find-cache-dir "^3.3.1"
|
||||
schema-utils "^3.0.0"
|
||||
serialize-javascript "^5.0.1"
|
||||
webpack-sources "^1.4.3"
|
||||
|
||||
compression@^1.7.4:
|
||||
version "1.7.4"
|
||||
resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz"
|
||||
@@ -3488,7 +3513,7 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
|
||||
ripemd160 "^2.0.1"
|
||||
sha.js "^2.4.0"
|
||||
|
||||
create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
|
||||
create-hmac@^1.1.0, create-hmac@^1.1.3, create-hmac@^1.1.4, create-hmac@^1.1.7:
|
||||
version "1.1.7"
|
||||
resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz"
|
||||
integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
|
||||
@@ -4019,7 +4044,16 @@ dotenv@^8.2.0:
|
||||
resolved "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz"
|
||||
integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==
|
||||
|
||||
duplexer@^0.1.1, duplexer@^0.1.2:
|
||||
drbg.js@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz"
|
||||
integrity sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=
|
||||
dependencies:
|
||||
browserify-aes "^1.0.6"
|
||||
create-hash "^1.1.2"
|
||||
create-hmac "^1.1.4"
|
||||
|
||||
duplexer@^0.1.1:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz"
|
||||
integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
|
||||
@@ -4070,7 +4104,7 @@ electron-to-chromium@^1.3.723:
|
||||
resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz"
|
||||
integrity sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==
|
||||
|
||||
elliptic@^6.5.3:
|
||||
elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3:
|
||||
version "6.5.4"
|
||||
resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz"
|
||||
integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
|
||||
@@ -4893,13 +4927,6 @@ fs-extra@^7.0.1:
|
||||
jsonfile "^4.0.0"
|
||||
universalify "^0.1.0"
|
||||
|
||||
fs-minipass@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
|
||||
integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
|
||||
dependencies:
|
||||
minipass "^3.0.0"
|
||||
|
||||
fs-write-stream-atomic@^1.0.8:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz"
|
||||
@@ -5083,6 +5110,11 @@ good-listener@^1.2.2:
|
||||
dependencies:
|
||||
delegate "^3.1.2"
|
||||
|
||||
google-protobuf@^3.14.0:
|
||||
version "3.18.1"
|
||||
resolved "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.18.1.tgz"
|
||||
integrity sha512-cDqSamZ8rGs+pOzhIsBte7wpezUKg/sggeptDWN5odhnRY/eDLa5VWLeNeQvcfiqjS3yUwgM+6OePCJMB7aWZA==
|
||||
|
||||
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
|
||||
version "4.2.6"
|
||||
resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz"
|
||||
@@ -5096,13 +5128,6 @@ gzip-size@^5.0.0:
|
||||
duplexer "^0.1.1"
|
||||
pify "^4.0.1"
|
||||
|
||||
gzip-size@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"
|
||||
integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==
|
||||
dependencies:
|
||||
duplexer "^0.1.2"
|
||||
|
||||
hammerjs@^2.0.8:
|
||||
version "2.0.8"
|
||||
resolved "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz"
|
||||
@@ -5489,17 +5514,12 @@ imurmurhash@^0.1.4:
|
||||
resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
|
||||
integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
|
||||
|
||||
indent-string@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
|
||||
integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
|
||||
|
||||
indexes-of@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz"
|
||||
integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
|
||||
|
||||
infer-owner@^1.0.3, infer-owner@^1.0.4:
|
||||
infer-owner@^1.0.3:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz"
|
||||
integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
|
||||
@@ -6493,6 +6513,11 @@ merge2@^1.2.3:
|
||||
resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
|
||||
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
|
||||
|
||||
merkle-lib@^2.0.10:
|
||||
version "2.0.10"
|
||||
resolved "https://registry.npmjs.org/merkle-lib/-/merkle-lib-2.0.10.tgz"
|
||||
integrity sha1-grjbrnXieneFOItz+ddyXQ9vMyY=
|
||||
|
||||
methods@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz"
|
||||
@@ -6597,34 +6622,6 @@ minimist@^1.2.0, minimist@^1.2.5:
|
||||
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz"
|
||||
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
||||
|
||||
minipass-collect@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmmirror.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
|
||||
integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
|
||||
dependencies:
|
||||
minipass "^3.0.0"
|
||||
|
||||
minipass-flush@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.npmmirror.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
|
||||
integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
|
||||
dependencies:
|
||||
minipass "^3.0.0"
|
||||
|
||||
minipass-pipeline@^1.2.2:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.npmmirror.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
|
||||
integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
|
||||
dependencies:
|
||||
minipass "^3.0.0"
|
||||
|
||||
minipass@^3.0.0:
|
||||
version "3.1.6"
|
||||
resolved "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee"
|
||||
integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==
|
||||
dependencies:
|
||||
yallist "^4.0.0"
|
||||
|
||||
minipass@^3.1.1:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz"
|
||||
@@ -6632,14 +6629,6 @@ minipass@^3.1.1:
|
||||
dependencies:
|
||||
yallist "^4.0.0"
|
||||
|
||||
minizlib@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
|
||||
integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
|
||||
dependencies:
|
||||
minipass "^3.0.0"
|
||||
yallist "^4.0.0"
|
||||
|
||||
mississippi@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz"
|
||||
@@ -6671,7 +6660,7 @@ mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1:
|
||||
dependencies:
|
||||
minimist "^1.2.5"
|
||||
|
||||
mkdirp@^1.0.3, mkdirp@^1.0.4:
|
||||
mkdirp@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"
|
||||
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
|
||||
@@ -6693,11 +6682,6 @@ move-concurrently@^1.0.1:
|
||||
rimraf "^2.5.4"
|
||||
run-queue "^1.0.3"
|
||||
|
||||
mrmime@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.0.tgz#14d387f0585a5233d291baba339b063752a2398b"
|
||||
integrity sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==
|
||||
|
||||
ms@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
|
||||
@@ -6745,7 +6729,7 @@ mz@^2.4.0:
|
||||
object-assign "^4.0.1"
|
||||
thenify-all "^1.0.0"
|
||||
|
||||
nan@^2.12.1:
|
||||
nan@^2.12.1, nan@^2.13.2, nan@^2.14.0:
|
||||
version "2.14.2"
|
||||
resolved "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz"
|
||||
integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
|
||||
@@ -7067,7 +7051,7 @@ open@^6.3.0:
|
||||
dependencies:
|
||||
is-wsl "^1.1.0"
|
||||
|
||||
opener@^1.5.1, opener@^1.5.2:
|
||||
opener@^1.5.1:
|
||||
version "1.5.2"
|
||||
resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz"
|
||||
integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
|
||||
@@ -7170,13 +7154,6 @@ p-map@^2.0.0:
|
||||
resolved "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz"
|
||||
integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
|
||||
|
||||
p-map@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
|
||||
integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
|
||||
dependencies:
|
||||
aggregate-error "^3.0.0"
|
||||
|
||||
p-retry@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz"
|
||||
@@ -7888,7 +7865,7 @@ protobufjs-dbx@^7.0.0:
|
||||
"@types/node" "^10.1.0"
|
||||
long "^4.0.0"
|
||||
|
||||
protobufjs@^6.8.8, protobufjs@~6.10.2:
|
||||
protobufjs@^6.10.2, protobufjs@^6.8.8, protobufjs@~6.10.2:
|
||||
version "6.10.2"
|
||||
resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.2.tgz"
|
||||
integrity sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ==
|
||||
@@ -8001,6 +7978,13 @@ punycode@^2.1.0, punycode@^2.1.1:
|
||||
resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz"
|
||||
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
|
||||
|
||||
pushdata-bitcoin@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmjs.org/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz"
|
||||
integrity sha1-FZMdPNlnreUiBvUjqnMxrvfUOvc=
|
||||
dependencies:
|
||||
bitcoin-ops "^1.3.0"
|
||||
|
||||
q@^1.1.2:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz"
|
||||
@@ -8372,13 +8356,6 @@ rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3:
|
||||
dependencies:
|
||||
glob "^7.1.3"
|
||||
|
||||
rimraf@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
|
||||
integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
|
||||
dependencies:
|
||||
glob "^7.1.3"
|
||||
|
||||
ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz"
|
||||
@@ -8489,6 +8466,20 @@ schema-utils@^3.0.0:
|
||||
ajv "^6.12.5"
|
||||
ajv-keywords "^3.5.2"
|
||||
|
||||
secp256k1@^3.8.0:
|
||||
version "3.8.0"
|
||||
resolved "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz"
|
||||
integrity sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==
|
||||
dependencies:
|
||||
bindings "^1.5.0"
|
||||
bip66 "^1.1.5"
|
||||
bn.js "^4.11.8"
|
||||
create-hash "^1.2.0"
|
||||
drbg.js "^1.0.1"
|
||||
elliptic "^6.5.2"
|
||||
nan "^2.14.0"
|
||||
safe-buffer "^5.1.2"
|
||||
|
||||
select-hose@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz"
|
||||
@@ -8554,13 +8545,6 @@ serialize-javascript@^4.0.0:
|
||||
dependencies:
|
||||
randombytes "^2.1.0"
|
||||
|
||||
serialize-javascript@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4"
|
||||
integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==
|
||||
dependencies:
|
||||
randombytes "^2.1.0"
|
||||
|
||||
serve-index@^1.9.1:
|
||||
version "1.9.1"
|
||||
resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz"
|
||||
@@ -8668,15 +8652,6 @@ simple-swizzle@^0.2.2:
|
||||
dependencies:
|
||||
is-arrayish "^0.3.1"
|
||||
|
||||
sirv@^1.0.7:
|
||||
version "1.0.19"
|
||||
resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49"
|
||||
integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==
|
||||
dependencies:
|
||||
"@polka/url" "^1.0.0-next.20"
|
||||
mrmime "^1.0.0"
|
||||
totalist "^1.0.0"
|
||||
|
||||
slash@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz"
|
||||
@@ -9224,18 +9199,6 @@ tapable@^1.0.0, tapable@^1.1.3:
|
||||
resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz"
|
||||
integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
|
||||
|
||||
tar@^6.0.2:
|
||||
version "6.1.11"
|
||||
resolved "https://registry.npmmirror.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621"
|
||||
integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==
|
||||
dependencies:
|
||||
chownr "^2.0.0"
|
||||
fs-minipass "^2.0.0"
|
||||
minipass "^3.0.0"
|
||||
minizlib "^2.1.1"
|
||||
mkdirp "^1.0.3"
|
||||
yallist "^4.0.0"
|
||||
|
||||
terser-webpack-plugin@^1.4.3, terser-webpack-plugin@^1.4.4:
|
||||
version "1.4.5"
|
||||
resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz"
|
||||
@@ -9323,6 +9286,17 @@ tiny-emitter@^2.0.0:
|
||||
resolved "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz"
|
||||
integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
|
||||
|
||||
tiny-secp256k1@^1.0.0, tiny-secp256k1@^1.1.3:
|
||||
version "1.1.6"
|
||||
resolved "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz"
|
||||
integrity sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA==
|
||||
dependencies:
|
||||
bindings "^1.3.0"
|
||||
bn.js "^4.11.8"
|
||||
create-hmac "^1.1.7"
|
||||
elliptic "^6.4.0"
|
||||
nan "^2.13.2"
|
||||
|
||||
tmp@0.0.31:
|
||||
version "0.0.31"
|
||||
resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz"
|
||||
@@ -9389,11 +9363,6 @@ toposort@^1.0.0:
|
||||
resolved "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz"
|
||||
integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk=
|
||||
|
||||
totalist@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df"
|
||||
integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==
|
||||
|
||||
tough-cookie@~2.5.0:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz"
|
||||
@@ -9501,6 +9470,11 @@ typedarray@^0.0.6:
|
||||
resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
|
||||
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
||||
|
||||
typeforce@^1.11.3, typeforce@^1.11.5:
|
||||
version "1.18.0"
|
||||
resolved "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz"
|
||||
integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==
|
||||
|
||||
uc.micro@^1.0.1, uc.micro@^1.0.5:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz"
|
||||
@@ -9591,6 +9565,11 @@ universalify@^0.1.0:
|
||||
resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz"
|
||||
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
|
||||
|
||||
unorm@^1.3.3:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz"
|
||||
integrity sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==
|
||||
|
||||
unpipe@1.0.0, unpipe@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
|
||||
@@ -9731,6 +9710,13 @@ validate-npm-package-license@^3.0.1:
|
||||
spdx-correct "^3.0.0"
|
||||
spdx-expression-parse "^3.0.0"
|
||||
|
||||
varuint-bitcoin@^1.0.4:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz"
|
||||
integrity sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==
|
||||
dependencies:
|
||||
safe-buffer "^5.1.1"
|
||||
|
||||
vary@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
|
||||
@@ -10091,21 +10077,6 @@ webpack-bundle-analyzer@^3.8.0:
|
||||
opener "^1.5.1"
|
||||
ws "^6.0.0"
|
||||
|
||||
webpack-bundle-analyzer@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz#1b0eea2947e73528754a6f9af3e91b2b6e0f79d5"
|
||||
integrity sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==
|
||||
dependencies:
|
||||
acorn "^8.0.4"
|
||||
acorn-walk "^8.0.0"
|
||||
chalk "^4.1.0"
|
||||
commander "^7.2.0"
|
||||
gzip-size "^6.0.0"
|
||||
lodash "^4.17.20"
|
||||
opener "^1.5.2"
|
||||
sirv "^1.0.7"
|
||||
ws "^7.3.1"
|
||||
|
||||
webpack-chain@^6.4.0:
|
||||
version "6.5.1"
|
||||
resolved "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz"
|
||||
@@ -10179,7 +10150,7 @@ webpack-merge@^4.2.2:
|
||||
dependencies:
|
||||
lodash "^4.17.15"
|
||||
|
||||
webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3:
|
||||
webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1:
|
||||
version "1.4.3"
|
||||
resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz"
|
||||
integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
|
||||
@@ -10268,6 +10239,13 @@ which@^2.0.1:
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
wif@^2.0.1, wif@^2.0.6:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz"
|
||||
integrity sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=
|
||||
dependencies:
|
||||
bs58check "<3.0.0"
|
||||
|
||||
word-wrap@~1.2.3:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz"
|
||||
@@ -10331,11 +10309,6 @@ ws@^7:
|
||||
resolved "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz"
|
||||
integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==
|
||||
|
||||
ws@^7.3.1:
|
||||
version "7.5.7"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67"
|
||||
integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==
|
||||
|
||||
xmlcreate@^2.0.4:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz"
|
||||
|
||||
Reference in New Issue
Block a user