Compare commits
No commits in common. "master" and "v1" have entirely different histories.
5
.github/FUNDING.yml
vendored
@ -1,5 +0,0 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: ping-pub
|
||||
issuehunt: ping-pub # Replace with a single IssueHunt username
|
||||
|
21
.github/workflows/config-check.yaml
vendored
@ -1,21 +0,0 @@
|
||||
|
||||
name: Config Checker
|
||||
|
||||
on:
|
||||
# push:
|
||||
# branches: [ master ]
|
||||
pull_request:
|
||||
# branches: [ master ]
|
||||
paths:
|
||||
- 'chains/mainnet/**'
|
||||
- 'chains/testnet/**'
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
name: Check Blockchain Config
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Git Checkout Latest
|
||||
uses: actions/checkout@v3
|
||||
- name: Check Chain Configs
|
||||
uses: ping-pub/ping-dashboard-config-checker@v1.0
|
51
.github/workflows/docker.yaml
vendored
@ -1,51 +0,0 @@
|
||||
name: docker
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'master-backup'
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
# -
|
||||
# name: Set up QEMU
|
||||
# uses: docker/setup-qemu-action@v1
|
||||
# -
|
||||
# name: Set up Docker Buildx
|
||||
# uses: docker/setup-buildx-action@v1
|
||||
- name: Install
|
||||
run: yarn install
|
||||
- name: Build
|
||||
run: yarn run vue-cli-service build
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v3
|
||||
with:
|
||||
# list of Docker images to use as base name for tags
|
||||
images: |
|
||||
yaoling/wallet
|
||||
# generate Docker tags based on the following events/attributes
|
||||
tags: |
|
||||
type=sha
|
||||
type=schedule
|
||||
type=ref,event=branch
|
||||
type=ref,event=pr
|
||||
type=semver,pattern={{version}}
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
type=semver,pattern={{major}}
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
context: .
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
28
.github/workflows/mainnet-deploy.yaml.disabled
vendored
@ -1,28 +0,0 @@
|
||||
|
||||
name: Deploy to ping.pub
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master2 ]
|
||||
# pull_request:
|
||||
# branches: [ master ]
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
name: Ping deploy
|
||||
runs-on: mainnet
|
||||
steps:
|
||||
- name: Environment
|
||||
run: export NODE_OPTIONS="--max_old_space_size=4096"
|
||||
|
||||
- name: Git Checkout Latest
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install
|
||||
run: yarn install --ignore-engines
|
||||
|
||||
- name: Build
|
||||
run: yarn build
|
||||
|
||||
- name: Deploy
|
||||
run: cp -rf ./dist/* /var/www/html/
|
24
.github/workflows/node.js.yml
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
|
||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
|
||||
|
||||
name: Look CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
name: Look deploy
|
||||
runs-on: self-hosted
|
||||
steps:
|
||||
- name: Git Checkout master
|
||||
uses: actions/checkout@master
|
||||
|
||||
- name: PM2 status
|
||||
run: pm2 status
|
||||
|
||||
- name: deploy
|
||||
run: cd server && npm i && npm run start
|
27
.github/workflows/testnet-deploy.yaml
vendored
@ -1,27 +0,0 @@
|
||||
|
||||
name: Testnet Deploy
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ testnet ]
|
||||
pull_request:
|
||||
branches: [ testnet ]
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
name: Ping deploy
|
||||
runs-on: testnet
|
||||
steps:
|
||||
- name: print
|
||||
run: echo ${GITHUB_REF#refs/heads/}
|
||||
- name: Git Checkout Latest
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Install
|
||||
run: yarn install
|
||||
|
||||
- name: Build
|
||||
run: yarn run vue-cli-service build
|
||||
|
||||
- name: Deploy
|
||||
run: cp -rf ./dist/* /var/www/html/
|
24
.gitignore
vendored
@ -1,5 +1,21 @@
|
||||
node_modules/
|
||||
**/.vscode
|
||||
yarn-error.log
|
||||
dist
|
||||
.DS_Store
|
||||
node_modules
|
||||
|
||||
# local env files
|
||||
.env.local
|
||||
.env.*.local
|
||||
|
||||
# Log files
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
.vscode
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
package-lock.json
|
@ -1,9 +0,0 @@
|
||||
{
|
||||
"tabWidth": 2,
|
||||
"singleQuote": true,
|
||||
"semi": true,
|
||||
"endOfLine": "auto",
|
||||
"bracketSpacing": true,
|
||||
"TrailingCooma": true,
|
||||
"arrowParens": "always"
|
||||
}
|
339
LICENSE
@ -1,339 +0,0 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
104
README.md
@ -1,56 +1,72 @@
|
||||
<div align="center">
|
||||
# LOOK Explorer
|
||||
|
||||
![Ping Wallet](./public/logo.svg)
|
||||
Look is a light explorer for Cosmos-based Blockchains. https://look.ping.pub .
|
||||
|
||||
<h1>Ping Dashboard</h1>
|
||||
## What is the difference between Look and other explorers?
|
||||
|
||||
**Ping Dashboard is not only an explorer but also a wallet and more ... 🛠**
|
||||
Look is designed to explore blockchain data as real as possible, therefore there is no cache, no analysis. Look does not cache/save blockchain data on its server. Look only fetch data from Cosmos full node via LCD/RPC endpoints. We call it "Light Explorer".
|
||||
|
||||
[![version](https://img.shields.io/github/tag/ping-pub/explorer.svg)](https://github.com/ping-pub/explorer/releases/latest)
|
||||
[![GitHub](https://img.shields.io/github/license/ping-pub/explorer.svg)](https://github.com/ping-pub/explorer/blob/master/LICENSE)
|
||||
[![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/bukotsunikki.svg?style=social&label=Follow%20%40ping_pub)](https://twitter.com/ping_pub)
|
||||
[![https://discord.gg/CmjYVSr6GW](https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&longCache=true&style=flat)](https://discord.gg/CmjYVSr6GW)
|
||||
## Do you want Look to explore your blockchain?
|
||||
|
||||
If you want Look to explore your blockchain, pull a request [here](https://github.com/liangping/look/issues), We will explore your chains as soon as possibe. And the most important thing is that Look is free for all public cosmos-based blockchains.
|
||||
|
||||
</div>
|
||||
|
||||
`Ping Dashboard` is a light explorer for Cosmos-based Blockchains. https://ping.pub .
|
||||
|
||||
## What sets Ping Dashboard apart from other explorers?
|
||||
**Ping Dashboard** stands out by providing a real-time exploration of blockchain data without relying on caching or pre-processing. It exclusively fetches data from the Cosmos full node via LCD/RPC endpoints, ensuring a truly authentic experience. This approach is referred to as the "Light Explorer."
|
||||
|
||||
## Are you interested in listing your blockchain on https://ping.pub?
|
||||
|
||||
To make this repository clean, please submit your request to https://github.com/ping-pub/ping.pub.git
|
||||
|
||||
|
||||
## Why does Ping Dashboard rely on official/trusted third-party public LCD/RPC servers?
|
||||
There are two primary reasons for this choice:
|
||||
|
||||
- Trust: In a decentralized system, it is crucial to avoid relying solely on a single entity. By utilizing official/trusted third-party public LCD/RPC servers, Ping Dashboard ensures that the data is sourced from a network of trusted participants.
|
||||
- Limited Resources: As Ping Dashboard plans to list hundreds of Cosmos-based blockchains in the future, it is impractical for the Ping team to operate validators or full nodes for all of them. Leveraging trusted third-party servers allows for more efficient resource allocation.
|
||||
|
||||
## Donation
|
||||
|
||||
Your donation will help us make better products. Thanks in advance.
|
||||
|
||||
- Address for ERC20: USDC, USDT, ETH
|
||||
```
|
||||
0x88BFec573Dd3E4b7d2E6BfD4D0D6B11F843F8aa1
|
||||
```
|
||||
|
||||
#### Donations from project
|
||||
|
||||
- Point Network: 1000USDC and $1000 worth of POINT
|
||||
- Bitsong: 50k BTSG
|
||||
- IRISnet: 100k IRIS
|
||||
|
||||
## Hire us
|
||||
|
||||
You can hire us by submitting an issue and fund the issue on [IssueHunter](https://issuehunt.io/r/ping-pub/explorer)
|
||||
## Why LOOK explorer use official/trusted third party public LCD/rpc server?
|
||||
|
||||
We have two considerations: 1, Trust, In decentralize system, everything controled by one single team/orgnization could be risks. So we decided to co-build LOOK explorer with the community. 2. Look explorer will explose handreds and thousands cosmos-based blockchains in the future, it's impossible for our team to run validators or fullnodes for all of those chains.
|
||||
|
||||
## Contributors
|
||||
|
||||
Developers: @liangping @dingyiming
|
||||
|
||||
Data providers: [full list](https://github.com/ping-pub/look/blob/master/hosts.json)
|
||||
|
||||
* irisnet.org,
|
||||
* nylira.net,
|
||||
* 01node.com,
|
||||
* kava.io
|
||||
|
||||
*If you don't want to provide data services for LOOK exporer, let us know.*
|
||||
|
||||
## Blockchains on LOOK explorer:
|
||||
* https://cosmos.ping.pub
|
||||
* https://iris.ping.pub
|
||||
* https://kava.ping.pub
|
||||
* https://sentinel.ping.pub
|
||||
|
||||
# LOOK 浏览器
|
||||
|
||||
Look是一个轻浏览器,免费为所有的基于Cosmos-SDK开发的区块链提供浏览服务
|
||||
|
||||
## Look 和其他区块链浏览器有什么不同?
|
||||
|
||||
Look的设计理念是尽可能的保持数据的真实性,所以,他不会在服务器端缓存或者保存任何数据,也不会增加任何分析处理。它仅仅通过LCD/RPC来获取他所需要的所有数据。因此我们叫它“轻浏览器”。
|
||||
|
||||
## 你希望Look来浏览你的区块链吗?
|
||||
|
||||
如果你需要Look来浏览你的区块链,请在[这里](https://github.com/liangping/look/issues) 提交申请,我们会尽快开通。而且是免费的。
|
||||
|
||||
## 为什么LOOK要使用官方或者可信赖的第三方的LCD/RPC服务器?
|
||||
|
||||
我们主要是基于以下两个考虑:1,可信,在去中心化的系统里,任何有一个由单个团队或者实体控制的事情都是有风险的,所以我们选择和社区一起来共建LOOK浏览器。2,LOOK浏览器计划在未来支持成百上千条区块链,因此对我们团队来说,不可能为所有这些链去提供一个验证人节点或者全节点。
|
||||
|
||||
## 项目贡献者
|
||||
|
||||
开发者: @liangping @dingyiming
|
||||
|
||||
数据服务方: [列表](https://github.com/ping-pub/look/blob/master/hosts.json)
|
||||
|
||||
* irisnet.org,
|
||||
* nylira.net,
|
||||
* 01node.com,
|
||||
* kava.io
|
||||
|
||||
*如果你觉得我们滥用了你的服务器资源,请告知我们。*
|
||||
|
||||
## LOOK explorer 上的区块链:
|
||||
* https://cosmos.ping.pub
|
||||
* https://iris.ping.pub
|
||||
* https://kava.ping.pub
|
||||
* https://sentinel.ping.pub
|
||||
|
||||
# Contact Us
|
||||
Email:18786721#qq.com
|
606
auto-imports.d.ts
vendored
@ -1,606 +0,0 @@
|
||||
// Generated by 'unplugin-auto-import'
|
||||
export {}
|
||||
declare global {
|
||||
const EffectScope: typeof import('vue')['EffectScope']
|
||||
const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
|
||||
const asyncComputed: typeof import('@vueuse/core')['asyncComputed']
|
||||
const autoResetRef: typeof import('@vueuse/core')['autoResetRef']
|
||||
const computed: typeof import('vue')['computed']
|
||||
const computedAsync: typeof import('@vueuse/core')['computedAsync']
|
||||
const computedEager: typeof import('@vueuse/core')['computedEager']
|
||||
const computedInject: typeof import('@vueuse/core')['computedInject']
|
||||
const computedWithControl: typeof import('@vueuse/core')['computedWithControl']
|
||||
const controlledComputed: typeof import('@vueuse/core')['controlledComputed']
|
||||
const controlledRef: typeof import('@vueuse/core')['controlledRef']
|
||||
const createApp: typeof import('vue')['createApp']
|
||||
const createEventHook: typeof import('@vueuse/core')['createEventHook']
|
||||
const createGenericProjection: typeof import('@vueuse/math')['createGenericProjection']
|
||||
const createGlobalState: typeof import('@vueuse/core')['createGlobalState']
|
||||
const createInjectionState: typeof import('@vueuse/core')['createInjectionState']
|
||||
const createPinia: typeof import('pinia')['createPinia']
|
||||
const createProjection: typeof import('@vueuse/math')['createProjection']
|
||||
const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn']
|
||||
const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable']
|
||||
const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn']
|
||||
const customRef: typeof import('vue')['customRef']
|
||||
const debouncedRef: typeof import('@vueuse/core')['debouncedRef']
|
||||
const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch']
|
||||
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
|
||||
const defineComponent: typeof import('vue')['defineComponent']
|
||||
const defineStore: typeof import('pinia')['defineStore']
|
||||
const eagerComputed: typeof import('@vueuse/core')['eagerComputed']
|
||||
const effectScope: typeof import('vue')['effectScope']
|
||||
const extendRef: typeof import('@vueuse/core')['extendRef']
|
||||
const getActivePinia: typeof import('pinia')['getActivePinia']
|
||||
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
|
||||
const getCurrentScope: typeof import('vue')['getCurrentScope']
|
||||
const h: typeof import('vue')['h']
|
||||
const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch']
|
||||
const inject: typeof import('vue')['inject']
|
||||
const isDefined: typeof import('@vueuse/core')['isDefined']
|
||||
const isProxy: typeof import('vue')['isProxy']
|
||||
const isReactive: typeof import('vue')['isReactive']
|
||||
const isReadonly: typeof import('vue')['isReadonly']
|
||||
const isRef: typeof import('vue')['isRef']
|
||||
const logicAnd: typeof import('@vueuse/math')['logicAnd']
|
||||
const logicNot: typeof import('@vueuse/math')['logicNot']
|
||||
const logicOr: typeof import('@vueuse/math')['logicOr']
|
||||
const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable']
|
||||
const mapActions: typeof import('pinia')['mapActions']
|
||||
const mapGetters: typeof import('pinia')['mapGetters']
|
||||
const mapState: typeof import('pinia')['mapState']
|
||||
const mapStores: typeof import('pinia')['mapStores']
|
||||
const mapWritableState: typeof import('pinia')['mapWritableState']
|
||||
const markRaw: typeof import('vue')['markRaw']
|
||||
const nextTick: typeof import('vue')['nextTick']
|
||||
const onActivated: typeof import('vue')['onActivated']
|
||||
const onBeforeMount: typeof import('vue')['onBeforeMount']
|
||||
const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave']
|
||||
const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate']
|
||||
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
|
||||
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
|
||||
const onClickOutside: typeof import('@vueuse/core')['onClickOutside']
|
||||
const onDeactivated: typeof import('vue')['onDeactivated']
|
||||
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
|
||||
const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke']
|
||||
const onLongPress: typeof import('@vueuse/core')['onLongPress']
|
||||
const onMounted: typeof import('vue')['onMounted']
|
||||
const onRenderTracked: typeof import('vue')['onRenderTracked']
|
||||
const onRenderTriggered: typeof import('vue')['onRenderTriggered']
|
||||
const onScopeDispose: typeof import('vue')['onScopeDispose']
|
||||
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
|
||||
const onStartTyping: typeof import('@vueuse/core')['onStartTyping']
|
||||
const onUnmounted: typeof import('vue')['onUnmounted']
|
||||
const onUpdated: typeof import('vue')['onUpdated']
|
||||
const pausableWatch: typeof import('@vueuse/core')['pausableWatch']
|
||||
const provide: typeof import('vue')['provide']
|
||||
const reactify: typeof import('@vueuse/core')['reactify']
|
||||
const reactifyObject: typeof import('@vueuse/core')['reactifyObject']
|
||||
const reactive: typeof import('vue')['reactive']
|
||||
const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed']
|
||||
const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit']
|
||||
const reactivePick: typeof import('@vueuse/core')['reactivePick']
|
||||
const readonly: typeof import('vue')['readonly']
|
||||
const ref: typeof import('vue')['ref']
|
||||
const refAutoReset: typeof import('@vueuse/core')['refAutoReset']
|
||||
const refDebounced: typeof import('@vueuse/core')['refDebounced']
|
||||
const refDefault: typeof import('@vueuse/core')['refDefault']
|
||||
const refThrottled: typeof import('@vueuse/core')['refThrottled']
|
||||
const refWithControl: typeof import('@vueuse/core')['refWithControl']
|
||||
const resolveComponent: typeof import('vue')['resolveComponent']
|
||||
const resolveDirective: typeof import('vue')['resolveDirective']
|
||||
const resolveRef: typeof import('@vueuse/core')['resolveRef']
|
||||
const resolveUnref: typeof import('@vueuse/core')['resolveUnref']
|
||||
const setActivePinia: typeof import('pinia')['setActivePinia']
|
||||
const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix']
|
||||
const shallowReactive: typeof import('vue')['shallowReactive']
|
||||
const shallowReadonly: typeof import('vue')['shallowReadonly']
|
||||
const shallowRef: typeof import('vue')['shallowRef']
|
||||
const storeToRefs: typeof import('pinia')['storeToRefs']
|
||||
const syncRef: typeof import('@vueuse/core')['syncRef']
|
||||
const syncRefs: typeof import('@vueuse/core')['syncRefs']
|
||||
const templateRef: typeof import('@vueuse/core')['templateRef']
|
||||
const throttledRef: typeof import('@vueuse/core')['throttledRef']
|
||||
const throttledWatch: typeof import('@vueuse/core')['throttledWatch']
|
||||
const toRaw: typeof import('vue')['toRaw']
|
||||
const toReactive: typeof import('@vueuse/core')['toReactive']
|
||||
const toRef: typeof import('vue')['toRef']
|
||||
const toRefs: typeof import('vue')['toRefs']
|
||||
const triggerRef: typeof import('vue')['triggerRef']
|
||||
const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount']
|
||||
const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount']
|
||||
const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted']
|
||||
const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose']
|
||||
const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted']
|
||||
const unref: typeof import('vue')['unref']
|
||||
const unrefElement: typeof import('@vueuse/core')['unrefElement']
|
||||
const until: typeof import('@vueuse/core')['until']
|
||||
const useAbs: typeof import('@vueuse/math')['useAbs']
|
||||
const useActiveElement: typeof import('@vueuse/core')['useActiveElement']
|
||||
const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery']
|
||||
const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter']
|
||||
const useArrayFind: typeof import('@vueuse/core')['useArrayFind']
|
||||
const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex']
|
||||
const useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast']
|
||||
const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin']
|
||||
const useArrayMap: typeof import('@vueuse/core')['useArrayMap']
|
||||
const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce']
|
||||
const useArraySome: typeof import('@vueuse/core')['useArraySome']
|
||||
const useArrayUnique: typeof import('@vueuse/core')['useArrayUnique']
|
||||
const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue']
|
||||
const useAsyncState: typeof import('@vueuse/core')['useAsyncState']
|
||||
const useAttrs: typeof import('vue')['useAttrs']
|
||||
const useAverage: typeof import('@vueuse/math')['useAverage']
|
||||
const useBase64: typeof import('@vueuse/core')['useBase64']
|
||||
const useBattery: typeof import('@vueuse/core')['useBattery']
|
||||
const useBluetooth: typeof import('@vueuse/core')['useBluetooth']
|
||||
const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints']
|
||||
const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel']
|
||||
const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation']
|
||||
const useCached: typeof import('@vueuse/core')['useCached']
|
||||
const useCeil: typeof import('@vueuse/math')['useCeil']
|
||||
const useClamp: typeof import('@vueuse/math')['useClamp']
|
||||
const useClipboard: typeof import('@vueuse/core')['useClipboard']
|
||||
const useCloned: typeof import('@vueuse/core')['useCloned']
|
||||
const useColorMode: typeof import('@vueuse/core')['useColorMode']
|
||||
const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog']
|
||||
const useCounter: typeof import('@vueuse/core')['useCounter']
|
||||
const useCssModule: typeof import('vue')['useCssModule']
|
||||
const useCssVar: typeof import('@vueuse/core')['useCssVar']
|
||||
const useCssVars: typeof import('vue')['useCssVars']
|
||||
const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement']
|
||||
const useCycleList: typeof import('@vueuse/core')['useCycleList']
|
||||
const useDark: typeof import('@vueuse/core')['useDark']
|
||||
const useDateFormat: typeof import('@vueuse/core')['useDateFormat']
|
||||
const useDebounce: typeof import('@vueuse/core')['useDebounce']
|
||||
const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn']
|
||||
const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory']
|
||||
const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion']
|
||||
const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation']
|
||||
const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio']
|
||||
const useDevicesList: typeof import('@vueuse/core')['useDevicesList']
|
||||
const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia']
|
||||
const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility']
|
||||
const useDraggable: typeof import('@vueuse/core')['useDraggable']
|
||||
const useDropZone: typeof import('@vueuse/core')['useDropZone']
|
||||
const useElementBounding: typeof import('@vueuse/core')['useElementBounding']
|
||||
const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint']
|
||||
const useElementHover: typeof import('@vueuse/core')['useElementHover']
|
||||
const useElementSize: typeof import('@vueuse/core')['useElementSize']
|
||||
const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility']
|
||||
const useEventBus: typeof import('@vueuse/core')['useEventBus']
|
||||
const useEventListener: typeof import('@vueuse/core')['useEventListener']
|
||||
const useEventSource: typeof import('@vueuse/core')['useEventSource']
|
||||
const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper']
|
||||
const useFavicon: typeof import('@vueuse/core')['useFavicon']
|
||||
const useFetch: typeof import('@vueuse/core')['useFetch']
|
||||
const useFileDialog: typeof import('@vueuse/core')['useFileDialog']
|
||||
const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess']
|
||||
const useFloor: typeof import('@vueuse/math')['useFloor']
|
||||
const useFocus: typeof import('@vueuse/core')['useFocus']
|
||||
const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin']
|
||||
const useFps: typeof import('@vueuse/core')['useFps']
|
||||
const useFullscreen: typeof import('@vueuse/core')['useFullscreen']
|
||||
const useGamepad: typeof import('@vueuse/core')['useGamepad']
|
||||
const useGeolocation: typeof import('@vueuse/core')['useGeolocation']
|
||||
const useI18n: typeof import('vue-i18n')['useI18n']
|
||||
const useIdle: typeof import('@vueuse/core')['useIdle']
|
||||
const useImage: typeof import('@vueuse/core')['useImage']
|
||||
const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll']
|
||||
const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver']
|
||||
const useInterval: typeof import('@vueuse/core')['useInterval']
|
||||
const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn']
|
||||
const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier']
|
||||
const useLastChanged: typeof import('@vueuse/core')['useLastChanged']
|
||||
const useLink: typeof import('vue-router')['useLink']
|
||||
const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage']
|
||||
const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys']
|
||||
const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory']
|
||||
const useMath: typeof import('@vueuse/math')['useMath']
|
||||
const useMax: typeof import('@vueuse/math')['useMax']
|
||||
const useMediaControls: typeof import('@vueuse/core')['useMediaControls']
|
||||
const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery']
|
||||
const useMemoize: typeof import('@vueuse/core')['useMemoize']
|
||||
const useMemory: typeof import('@vueuse/core')['useMemory']
|
||||
const useMin: typeof import('@vueuse/math')['useMin']
|
||||
const useMounted: typeof import('@vueuse/core')['useMounted']
|
||||
const useMouse: typeof import('@vueuse/core')['useMouse']
|
||||
const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement']
|
||||
const useMousePressed: typeof import('@vueuse/core')['useMousePressed']
|
||||
const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver']
|
||||
const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage']
|
||||
const useNetwork: typeof import('@vueuse/core')['useNetwork']
|
||||
const useNow: typeof import('@vueuse/core')['useNow']
|
||||
const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl']
|
||||
const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination']
|
||||
const useOnline: typeof import('@vueuse/core')['useOnline']
|
||||
const usePageLeave: typeof import('@vueuse/core')['usePageLeave']
|
||||
const useParallax: typeof import('@vueuse/core')['useParallax']
|
||||
const usePermission: typeof import('@vueuse/core')['usePermission']
|
||||
const usePointer: typeof import('@vueuse/core')['usePointer']
|
||||
const usePointerLock: typeof import('@vueuse/core')['usePointerLock']
|
||||
const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe']
|
||||
const usePrecision: typeof import('@vueuse/math')['usePrecision']
|
||||
const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme']
|
||||
const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast']
|
||||
const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark']
|
||||
const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages']
|
||||
const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion']
|
||||
const usePrevious: typeof import('@vueuse/core')['usePrevious']
|
||||
const useProjection: typeof import('@vueuse/math')['useProjection']
|
||||
const useRafFn: typeof import('@vueuse/core')['useRafFn']
|
||||
const useRefHistory: typeof import('@vueuse/core')['useRefHistory']
|
||||
const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver']
|
||||
const useRound: typeof import('@vueuse/math')['useRound']
|
||||
const useRoute: typeof import('vue-router')['useRoute']
|
||||
const useRouter: typeof import('vue-router')['useRouter']
|
||||
const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation']
|
||||
const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea']
|
||||
const useScriptTag: typeof import('@vueuse/core')['useScriptTag']
|
||||
const useScroll: typeof import('@vueuse/core')['useScroll']
|
||||
const useScrollLock: typeof import('@vueuse/core')['useScrollLock']
|
||||
const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage']
|
||||
const useShare: typeof import('@vueuse/core')['useShare']
|
||||
const useSlots: typeof import('vue')['useSlots']
|
||||
const useSorted: typeof import('@vueuse/core')['useSorted']
|
||||
const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition']
|
||||
const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis']
|
||||
const useStepper: typeof import('@vueuse/core')['useStepper']
|
||||
const useStorage: typeof import('@vueuse/core')['useStorage']
|
||||
const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync']
|
||||
const useStyleTag: typeof import('@vueuse/core')['useStyleTag']
|
||||
const useSum: typeof import('@vueuse/math')['useSum']
|
||||
const useSupported: typeof import('@vueuse/core')['useSupported']
|
||||
const useSwipe: typeof import('@vueuse/core')['useSwipe']
|
||||
const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList']
|
||||
const useTextDirection: typeof import('@vueuse/core')['useTextDirection']
|
||||
const useTextSelection: typeof import('@vueuse/core')['useTextSelection']
|
||||
const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize']
|
||||
const useThrottle: typeof import('@vueuse/core')['useThrottle']
|
||||
const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn']
|
||||
const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory']
|
||||
const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo']
|
||||
const useTimeout: typeof import('@vueuse/core')['useTimeout']
|
||||
const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn']
|
||||
const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll']
|
||||
const useTimestamp: typeof import('@vueuse/core')['useTimestamp']
|
||||
const useTitle: typeof import('@vueuse/core')['useTitle']
|
||||
const useToFixed: typeof import('@vueuse/math')['useToFixed']
|
||||
const useToNumber: typeof import('@vueuse/core')['useToNumber']
|
||||
const useToString: typeof import('@vueuse/core')['useToString']
|
||||
const useToggle: typeof import('@vueuse/core')['useToggle']
|
||||
const useTransition: typeof import('@vueuse/core')['useTransition']
|
||||
const useTrunc: typeof import('@vueuse/math')['useTrunc']
|
||||
const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams']
|
||||
const useUserMedia: typeof import('@vueuse/core')['useUserMedia']
|
||||
const useVModel: typeof import('@vueuse/core')['useVModel']
|
||||
const useVModels: typeof import('@vueuse/core')['useVModels']
|
||||
const useVibrate: typeof import('@vueuse/core')['useVibrate']
|
||||
const useVirtualList: typeof import('@vueuse/core')['useVirtualList']
|
||||
const useWakeLock: typeof import('@vueuse/core')['useWakeLock']
|
||||
const useWebNotification: typeof import('@vueuse/core')['useWebNotification']
|
||||
const useWebSocket: typeof import('@vueuse/core')['useWebSocket']
|
||||
const useWebWorker: typeof import('@vueuse/core')['useWebWorker']
|
||||
const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn']
|
||||
const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus']
|
||||
const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll']
|
||||
const useWindowSize: typeof import('@vueuse/core')['useWindowSize']
|
||||
const watch: typeof import('vue')['watch']
|
||||
const watchArray: typeof import('@vueuse/core')['watchArray']
|
||||
const watchAtMost: typeof import('@vueuse/core')['watchAtMost']
|
||||
const watchDebounced: typeof import('@vueuse/core')['watchDebounced']
|
||||
const watchEffect: typeof import('vue')['watchEffect']
|
||||
const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable']
|
||||
const watchOnce: typeof import('@vueuse/core')['watchOnce']
|
||||
const watchPausable: typeof import('@vueuse/core')['watchPausable']
|
||||
const watchPostEffect: typeof import('vue')['watchPostEffect']
|
||||
const watchSyncEffect: typeof import('vue')['watchSyncEffect']
|
||||
const watchThrottled: typeof import('@vueuse/core')['watchThrottled']
|
||||
const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable']
|
||||
const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter']
|
||||
const whenever: typeof import('@vueuse/core')['whenever']
|
||||
}
|
||||
// for vue template auto import
|
||||
import { UnwrapRef } from 'vue'
|
||||
declare module 'vue' {
|
||||
interface ComponentCustomProperties {
|
||||
readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']>
|
||||
readonly acceptHMRUpdate: UnwrapRef<typeof import('pinia')['acceptHMRUpdate']>
|
||||
readonly asyncComputed: UnwrapRef<typeof import('@vueuse/core')['asyncComputed']>
|
||||
readonly autoResetRef: UnwrapRef<typeof import('@vueuse/core')['autoResetRef']>
|
||||
readonly computed: UnwrapRef<typeof import('vue')['computed']>
|
||||
readonly computedAsync: UnwrapRef<typeof import('@vueuse/core')['computedAsync']>
|
||||
readonly computedEager: UnwrapRef<typeof import('@vueuse/core')['computedEager']>
|
||||
readonly computedInject: UnwrapRef<typeof import('@vueuse/core')['computedInject']>
|
||||
readonly computedWithControl: UnwrapRef<typeof import('@vueuse/core')['computedWithControl']>
|
||||
readonly controlledComputed: UnwrapRef<typeof import('@vueuse/core')['controlledComputed']>
|
||||
readonly controlledRef: UnwrapRef<typeof import('@vueuse/core')['controlledRef']>
|
||||
readonly createApp: UnwrapRef<typeof import('vue')['createApp']>
|
||||
readonly createEventHook: UnwrapRef<typeof import('@vueuse/core')['createEventHook']>
|
||||
readonly createGenericProjection: UnwrapRef<typeof import('@vueuse/math')['createGenericProjection']>
|
||||
readonly createGlobalState: UnwrapRef<typeof import('@vueuse/core')['createGlobalState']>
|
||||
readonly createInjectionState: UnwrapRef<typeof import('@vueuse/core')['createInjectionState']>
|
||||
readonly createPinia: UnwrapRef<typeof import('pinia')['createPinia']>
|
||||
readonly createProjection: UnwrapRef<typeof import('@vueuse/math')['createProjection']>
|
||||
readonly createReactiveFn: UnwrapRef<typeof import('@vueuse/core')['createReactiveFn']>
|
||||
readonly createSharedComposable: UnwrapRef<typeof import('@vueuse/core')['createSharedComposable']>
|
||||
readonly createUnrefFn: UnwrapRef<typeof import('@vueuse/core')['createUnrefFn']>
|
||||
readonly customRef: UnwrapRef<typeof import('vue')['customRef']>
|
||||
readonly debouncedRef: UnwrapRef<typeof import('@vueuse/core')['debouncedRef']>
|
||||
readonly debouncedWatch: UnwrapRef<typeof import('@vueuse/core')['debouncedWatch']>
|
||||
readonly defineAsyncComponent: UnwrapRef<typeof import('vue')['defineAsyncComponent']>
|
||||
readonly defineComponent: UnwrapRef<typeof import('vue')['defineComponent']>
|
||||
readonly defineStore: UnwrapRef<typeof import('pinia')['defineStore']>
|
||||
readonly eagerComputed: UnwrapRef<typeof import('@vueuse/core')['eagerComputed']>
|
||||
readonly effectScope: UnwrapRef<typeof import('vue')['effectScope']>
|
||||
readonly extendRef: UnwrapRef<typeof import('@vueuse/core')['extendRef']>
|
||||
readonly getActivePinia: UnwrapRef<typeof import('pinia')['getActivePinia']>
|
||||
readonly getCurrentInstance: UnwrapRef<typeof import('vue')['getCurrentInstance']>
|
||||
readonly getCurrentScope: UnwrapRef<typeof import('vue')['getCurrentScope']>
|
||||
readonly h: UnwrapRef<typeof import('vue')['h']>
|
||||
readonly ignorableWatch: UnwrapRef<typeof import('@vueuse/core')['ignorableWatch']>
|
||||
readonly inject: UnwrapRef<typeof import('vue')['inject']>
|
||||
readonly isDefined: UnwrapRef<typeof import('@vueuse/core')['isDefined']>
|
||||
readonly isProxy: UnwrapRef<typeof import('vue')['isProxy']>
|
||||
readonly isReactive: UnwrapRef<typeof import('vue')['isReactive']>
|
||||
readonly isReadonly: UnwrapRef<typeof import('vue')['isReadonly']>
|
||||
readonly isRef: UnwrapRef<typeof import('vue')['isRef']>
|
||||
readonly logicAnd: UnwrapRef<typeof import('@vueuse/math')['logicAnd']>
|
||||
readonly logicNot: UnwrapRef<typeof import('@vueuse/math')['logicNot']>
|
||||
readonly logicOr: UnwrapRef<typeof import('@vueuse/math')['logicOr']>
|
||||
readonly makeDestructurable: UnwrapRef<typeof import('@vueuse/core')['makeDestructurable']>
|
||||
readonly mapActions: UnwrapRef<typeof import('pinia')['mapActions']>
|
||||
readonly mapGetters: UnwrapRef<typeof import('pinia')['mapGetters']>
|
||||
readonly mapState: UnwrapRef<typeof import('pinia')['mapState']>
|
||||
readonly mapStores: UnwrapRef<typeof import('pinia')['mapStores']>
|
||||
readonly mapWritableState: UnwrapRef<typeof import('pinia')['mapWritableState']>
|
||||
readonly markRaw: UnwrapRef<typeof import('vue')['markRaw']>
|
||||
readonly nextTick: UnwrapRef<typeof import('vue')['nextTick']>
|
||||
readonly onActivated: UnwrapRef<typeof import('vue')['onActivated']>
|
||||
readonly onBeforeMount: UnwrapRef<typeof import('vue')['onBeforeMount']>
|
||||
readonly onBeforeRouteLeave: UnwrapRef<typeof import('vue-router')['onBeforeRouteLeave']>
|
||||
readonly onBeforeRouteUpdate: UnwrapRef<typeof import('vue-router')['onBeforeRouteUpdate']>
|
||||
readonly onBeforeUnmount: UnwrapRef<typeof import('vue')['onBeforeUnmount']>
|
||||
readonly onBeforeUpdate: UnwrapRef<typeof import('vue')['onBeforeUpdate']>
|
||||
readonly onClickOutside: UnwrapRef<typeof import('@vueuse/core')['onClickOutside']>
|
||||
readonly onDeactivated: UnwrapRef<typeof import('vue')['onDeactivated']>
|
||||
readonly onErrorCaptured: UnwrapRef<typeof import('vue')['onErrorCaptured']>
|
||||
readonly onKeyStroke: UnwrapRef<typeof import('@vueuse/core')['onKeyStroke']>
|
||||
readonly onLongPress: UnwrapRef<typeof import('@vueuse/core')['onLongPress']>
|
||||
readonly onMounted: UnwrapRef<typeof import('vue')['onMounted']>
|
||||
readonly onRenderTracked: UnwrapRef<typeof import('vue')['onRenderTracked']>
|
||||
readonly onRenderTriggered: UnwrapRef<typeof import('vue')['onRenderTriggered']>
|
||||
readonly onScopeDispose: UnwrapRef<typeof import('vue')['onScopeDispose']>
|
||||
readonly onServerPrefetch: UnwrapRef<typeof import('vue')['onServerPrefetch']>
|
||||
readonly onStartTyping: UnwrapRef<typeof import('@vueuse/core')['onStartTyping']>
|
||||
readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']>
|
||||
readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']>
|
||||
readonly pausableWatch: UnwrapRef<typeof import('@vueuse/core')['pausableWatch']>
|
||||
readonly provide: UnwrapRef<typeof import('vue')['provide']>
|
||||
readonly reactify: UnwrapRef<typeof import('@vueuse/core')['reactify']>
|
||||
readonly reactifyObject: UnwrapRef<typeof import('@vueuse/core')['reactifyObject']>
|
||||
readonly reactive: UnwrapRef<typeof import('vue')['reactive']>
|
||||
readonly reactiveComputed: UnwrapRef<typeof import('@vueuse/core')['reactiveComputed']>
|
||||
readonly reactiveOmit: UnwrapRef<typeof import('@vueuse/core')['reactiveOmit']>
|
||||
readonly reactivePick: UnwrapRef<typeof import('@vueuse/core')['reactivePick']>
|
||||
readonly readonly: UnwrapRef<typeof import('vue')['readonly']>
|
||||
readonly ref: UnwrapRef<typeof import('vue')['ref']>
|
||||
readonly refAutoReset: UnwrapRef<typeof import('@vueuse/core')['refAutoReset']>
|
||||
readonly refDebounced: UnwrapRef<typeof import('@vueuse/core')['refDebounced']>
|
||||
readonly refDefault: UnwrapRef<typeof import('@vueuse/core')['refDefault']>
|
||||
readonly refThrottled: UnwrapRef<typeof import('@vueuse/core')['refThrottled']>
|
||||
readonly refWithControl: UnwrapRef<typeof import('@vueuse/core')['refWithControl']>
|
||||
readonly resolveComponent: UnwrapRef<typeof import('vue')['resolveComponent']>
|
||||
readonly resolveDirective: UnwrapRef<typeof import('vue')['resolveDirective']>
|
||||
readonly resolveRef: UnwrapRef<typeof import('@vueuse/core')['resolveRef']>
|
||||
readonly resolveUnref: UnwrapRef<typeof import('@vueuse/core')['resolveUnref']>
|
||||
readonly setActivePinia: UnwrapRef<typeof import('pinia')['setActivePinia']>
|
||||
readonly setMapStoreSuffix: UnwrapRef<typeof import('pinia')['setMapStoreSuffix']>
|
||||
readonly shallowReactive: UnwrapRef<typeof import('vue')['shallowReactive']>
|
||||
readonly shallowReadonly: UnwrapRef<typeof import('vue')['shallowReadonly']>
|
||||
readonly shallowRef: UnwrapRef<typeof import('vue')['shallowRef']>
|
||||
readonly storeToRefs: UnwrapRef<typeof import('pinia')['storeToRefs']>
|
||||
readonly syncRef: UnwrapRef<typeof import('@vueuse/core')['syncRef']>
|
||||
readonly syncRefs: UnwrapRef<typeof import('@vueuse/core')['syncRefs']>
|
||||
readonly templateRef: UnwrapRef<typeof import('@vueuse/core')['templateRef']>
|
||||
readonly throttledRef: UnwrapRef<typeof import('@vueuse/core')['throttledRef']>
|
||||
readonly throttledWatch: UnwrapRef<typeof import('@vueuse/core')['throttledWatch']>
|
||||
readonly toRaw: UnwrapRef<typeof import('vue')['toRaw']>
|
||||
readonly toReactive: UnwrapRef<typeof import('@vueuse/core')['toReactive']>
|
||||
readonly toRef: UnwrapRef<typeof import('vue')['toRef']>
|
||||
readonly toRefs: UnwrapRef<typeof import('vue')['toRefs']>
|
||||
readonly triggerRef: UnwrapRef<typeof import('vue')['triggerRef']>
|
||||
readonly tryOnBeforeMount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeMount']>
|
||||
readonly tryOnBeforeUnmount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeUnmount']>
|
||||
readonly tryOnMounted: UnwrapRef<typeof import('@vueuse/core')['tryOnMounted']>
|
||||
readonly tryOnScopeDispose: UnwrapRef<typeof import('@vueuse/core')['tryOnScopeDispose']>
|
||||
readonly tryOnUnmounted: UnwrapRef<typeof import('@vueuse/core')['tryOnUnmounted']>
|
||||
readonly unref: UnwrapRef<typeof import('vue')['unref']>
|
||||
readonly unrefElement: UnwrapRef<typeof import('@vueuse/core')['unrefElement']>
|
||||
readonly until: UnwrapRef<typeof import('@vueuse/core')['until']>
|
||||
readonly useAbs: UnwrapRef<typeof import('@vueuse/math')['useAbs']>
|
||||
readonly useActiveElement: UnwrapRef<typeof import('@vueuse/core')['useActiveElement']>
|
||||
readonly useArrayEvery: UnwrapRef<typeof import('@vueuse/core')['useArrayEvery']>
|
||||
readonly useArrayFilter: UnwrapRef<typeof import('@vueuse/core')['useArrayFilter']>
|
||||
readonly useArrayFind: UnwrapRef<typeof import('@vueuse/core')['useArrayFind']>
|
||||
readonly useArrayFindIndex: UnwrapRef<typeof import('@vueuse/core')['useArrayFindIndex']>
|
||||
readonly useArrayFindLast: UnwrapRef<typeof import('@vueuse/core')['useArrayFindLast']>
|
||||
readonly useArrayJoin: UnwrapRef<typeof import('@vueuse/core')['useArrayJoin']>
|
||||
readonly useArrayMap: UnwrapRef<typeof import('@vueuse/core')['useArrayMap']>
|
||||
readonly useArrayReduce: UnwrapRef<typeof import('@vueuse/core')['useArrayReduce']>
|
||||
readonly useArraySome: UnwrapRef<typeof import('@vueuse/core')['useArraySome']>
|
||||
readonly useArrayUnique: UnwrapRef<typeof import('@vueuse/core')['useArrayUnique']>
|
||||
readonly useAsyncQueue: UnwrapRef<typeof import('@vueuse/core')['useAsyncQueue']>
|
||||
readonly useAsyncState: UnwrapRef<typeof import('@vueuse/core')['useAsyncState']>
|
||||
readonly useAttrs: UnwrapRef<typeof import('vue')['useAttrs']>
|
||||
readonly useAverage: UnwrapRef<typeof import('@vueuse/math')['useAverage']>
|
||||
readonly useBase64: UnwrapRef<typeof import('@vueuse/core')['useBase64']>
|
||||
readonly useBattery: UnwrapRef<typeof import('@vueuse/core')['useBattery']>
|
||||
readonly useBluetooth: UnwrapRef<typeof import('@vueuse/core')['useBluetooth']>
|
||||
readonly useBreakpoints: UnwrapRef<typeof import('@vueuse/core')['useBreakpoints']>
|
||||
readonly useBroadcastChannel: UnwrapRef<typeof import('@vueuse/core')['useBroadcastChannel']>
|
||||
readonly useBrowserLocation: UnwrapRef<typeof import('@vueuse/core')['useBrowserLocation']>
|
||||
readonly useCached: UnwrapRef<typeof import('@vueuse/core')['useCached']>
|
||||
readonly useCeil: UnwrapRef<typeof import('@vueuse/math')['useCeil']>
|
||||
readonly useClamp: UnwrapRef<typeof import('@vueuse/math')['useClamp']>
|
||||
readonly useClipboard: UnwrapRef<typeof import('@vueuse/core')['useClipboard']>
|
||||
readonly useCloned: UnwrapRef<typeof import('@vueuse/core')['useCloned']>
|
||||
readonly useColorMode: UnwrapRef<typeof import('@vueuse/core')['useColorMode']>
|
||||
readonly useConfirmDialog: UnwrapRef<typeof import('@vueuse/core')['useConfirmDialog']>
|
||||
readonly useCounter: UnwrapRef<typeof import('@vueuse/core')['useCounter']>
|
||||
readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']>
|
||||
readonly useCssVar: UnwrapRef<typeof import('@vueuse/core')['useCssVar']>
|
||||
readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']>
|
||||
readonly useCurrentElement: UnwrapRef<typeof import('@vueuse/core')['useCurrentElement']>
|
||||
readonly useCycleList: UnwrapRef<typeof import('@vueuse/core')['useCycleList']>
|
||||
readonly useDark: UnwrapRef<typeof import('@vueuse/core')['useDark']>
|
||||
readonly useDateFormat: UnwrapRef<typeof import('@vueuse/core')['useDateFormat']>
|
||||
readonly useDebounce: UnwrapRef<typeof import('@vueuse/core')['useDebounce']>
|
||||
readonly useDebounceFn: UnwrapRef<typeof import('@vueuse/core')['useDebounceFn']>
|
||||
readonly useDebouncedRefHistory: UnwrapRef<typeof import('@vueuse/core')['useDebouncedRefHistory']>
|
||||
readonly useDeviceMotion: UnwrapRef<typeof import('@vueuse/core')['useDeviceMotion']>
|
||||
readonly useDeviceOrientation: UnwrapRef<typeof import('@vueuse/core')['useDeviceOrientation']>
|
||||
readonly useDevicePixelRatio: UnwrapRef<typeof import('@vueuse/core')['useDevicePixelRatio']>
|
||||
readonly useDevicesList: UnwrapRef<typeof import('@vueuse/core')['useDevicesList']>
|
||||
readonly useDisplayMedia: UnwrapRef<typeof import('@vueuse/core')['useDisplayMedia']>
|
||||
readonly useDocumentVisibility: UnwrapRef<typeof import('@vueuse/core')['useDocumentVisibility']>
|
||||
readonly useDraggable: UnwrapRef<typeof import('@vueuse/core')['useDraggable']>
|
||||
readonly useDropZone: UnwrapRef<typeof import('@vueuse/core')['useDropZone']>
|
||||
readonly useElementBounding: UnwrapRef<typeof import('@vueuse/core')['useElementBounding']>
|
||||
readonly useElementByPoint: UnwrapRef<typeof import('@vueuse/core')['useElementByPoint']>
|
||||
readonly useElementHover: UnwrapRef<typeof import('@vueuse/core')['useElementHover']>
|
||||
readonly useElementSize: UnwrapRef<typeof import('@vueuse/core')['useElementSize']>
|
||||
readonly useElementVisibility: UnwrapRef<typeof import('@vueuse/core')['useElementVisibility']>
|
||||
readonly useEventBus: UnwrapRef<typeof import('@vueuse/core')['useEventBus']>
|
||||
readonly useEventListener: UnwrapRef<typeof import('@vueuse/core')['useEventListener']>
|
||||
readonly useEventSource: UnwrapRef<typeof import('@vueuse/core')['useEventSource']>
|
||||
readonly useEyeDropper: UnwrapRef<typeof import('@vueuse/core')['useEyeDropper']>
|
||||
readonly useFavicon: UnwrapRef<typeof import('@vueuse/core')['useFavicon']>
|
||||
readonly useFetch: UnwrapRef<typeof import('@vueuse/core')['useFetch']>
|
||||
readonly useFileDialog: UnwrapRef<typeof import('@vueuse/core')['useFileDialog']>
|
||||
readonly useFileSystemAccess: UnwrapRef<typeof import('@vueuse/core')['useFileSystemAccess']>
|
||||
readonly useFloor: UnwrapRef<typeof import('@vueuse/math')['useFloor']>
|
||||
readonly useFocus: UnwrapRef<typeof import('@vueuse/core')['useFocus']>
|
||||
readonly useFocusWithin: UnwrapRef<typeof import('@vueuse/core')['useFocusWithin']>
|
||||
readonly useFps: UnwrapRef<typeof import('@vueuse/core')['useFps']>
|
||||
readonly useFullscreen: UnwrapRef<typeof import('@vueuse/core')['useFullscreen']>
|
||||
readonly useGamepad: UnwrapRef<typeof import('@vueuse/core')['useGamepad']>
|
||||
readonly useGeolocation: UnwrapRef<typeof import('@vueuse/core')['useGeolocation']>
|
||||
readonly useI18n: UnwrapRef<typeof import('vue-i18n')['useI18n']>
|
||||
readonly useIdle: UnwrapRef<typeof import('@vueuse/core')['useIdle']>
|
||||
readonly useImage: UnwrapRef<typeof import('@vueuse/core')['useImage']>
|
||||
readonly useInfiniteScroll: UnwrapRef<typeof import('@vueuse/core')['useInfiniteScroll']>
|
||||
readonly useIntersectionObserver: UnwrapRef<typeof import('@vueuse/core')['useIntersectionObserver']>
|
||||
readonly useInterval: UnwrapRef<typeof import('@vueuse/core')['useInterval']>
|
||||
readonly useIntervalFn: UnwrapRef<typeof import('@vueuse/core')['useIntervalFn']>
|
||||
readonly useKeyModifier: UnwrapRef<typeof import('@vueuse/core')['useKeyModifier']>
|
||||
readonly useLastChanged: UnwrapRef<typeof import('@vueuse/core')['useLastChanged']>
|
||||
readonly useLink: UnwrapRef<typeof import('vue-router')['useLink']>
|
||||
readonly useLocalStorage: UnwrapRef<typeof import('@vueuse/core')['useLocalStorage']>
|
||||
readonly useMagicKeys: UnwrapRef<typeof import('@vueuse/core')['useMagicKeys']>
|
||||
readonly useManualRefHistory: UnwrapRef<typeof import('@vueuse/core')['useManualRefHistory']>
|
||||
readonly useMath: UnwrapRef<typeof import('@vueuse/math')['useMath']>
|
||||
readonly useMax: UnwrapRef<typeof import('@vueuse/math')['useMax']>
|
||||
readonly useMediaControls: UnwrapRef<typeof import('@vueuse/core')['useMediaControls']>
|
||||
readonly useMediaQuery: UnwrapRef<typeof import('@vueuse/core')['useMediaQuery']>
|
||||
readonly useMemoize: UnwrapRef<typeof import('@vueuse/core')['useMemoize']>
|
||||
readonly useMemory: UnwrapRef<typeof import('@vueuse/core')['useMemory']>
|
||||
readonly useMin: UnwrapRef<typeof import('@vueuse/math')['useMin']>
|
||||
readonly useMounted: UnwrapRef<typeof import('@vueuse/core')['useMounted']>
|
||||
readonly useMouse: UnwrapRef<typeof import('@vueuse/core')['useMouse']>
|
||||
readonly useMouseInElement: UnwrapRef<typeof import('@vueuse/core')['useMouseInElement']>
|
||||
readonly useMousePressed: UnwrapRef<typeof import('@vueuse/core')['useMousePressed']>
|
||||
readonly useMutationObserver: UnwrapRef<typeof import('@vueuse/core')['useMutationObserver']>
|
||||
readonly useNavigatorLanguage: UnwrapRef<typeof import('@vueuse/core')['useNavigatorLanguage']>
|
||||
readonly useNetwork: UnwrapRef<typeof import('@vueuse/core')['useNetwork']>
|
||||
readonly useNow: UnwrapRef<typeof import('@vueuse/core')['useNow']>
|
||||
readonly useObjectUrl: UnwrapRef<typeof import('@vueuse/core')['useObjectUrl']>
|
||||
readonly useOffsetPagination: UnwrapRef<typeof import('@vueuse/core')['useOffsetPagination']>
|
||||
readonly useOnline: UnwrapRef<typeof import('@vueuse/core')['useOnline']>
|
||||
readonly usePageLeave: UnwrapRef<typeof import('@vueuse/core')['usePageLeave']>
|
||||
readonly useParallax: UnwrapRef<typeof import('@vueuse/core')['useParallax']>
|
||||
readonly usePermission: UnwrapRef<typeof import('@vueuse/core')['usePermission']>
|
||||
readonly usePointer: UnwrapRef<typeof import('@vueuse/core')['usePointer']>
|
||||
readonly usePointerLock: UnwrapRef<typeof import('@vueuse/core')['usePointerLock']>
|
||||
readonly usePointerSwipe: UnwrapRef<typeof import('@vueuse/core')['usePointerSwipe']>
|
||||
readonly usePrecision: UnwrapRef<typeof import('@vueuse/math')['usePrecision']>
|
||||
readonly usePreferredColorScheme: UnwrapRef<typeof import('@vueuse/core')['usePreferredColorScheme']>
|
||||
readonly usePreferredContrast: UnwrapRef<typeof import('@vueuse/core')['usePreferredContrast']>
|
||||
readonly usePreferredDark: UnwrapRef<typeof import('@vueuse/core')['usePreferredDark']>
|
||||
readonly usePreferredLanguages: UnwrapRef<typeof import('@vueuse/core')['usePreferredLanguages']>
|
||||
readonly usePreferredReducedMotion: UnwrapRef<typeof import('@vueuse/core')['usePreferredReducedMotion']>
|
||||
readonly usePrevious: UnwrapRef<typeof import('@vueuse/core')['usePrevious']>
|
||||
readonly useProjection: UnwrapRef<typeof import('@vueuse/math')['useProjection']>
|
||||
readonly useRafFn: UnwrapRef<typeof import('@vueuse/core')['useRafFn']>
|
||||
readonly useRefHistory: UnwrapRef<typeof import('@vueuse/core')['useRefHistory']>
|
||||
readonly useResizeObserver: UnwrapRef<typeof import('@vueuse/core')['useResizeObserver']>
|
||||
readonly useRound: UnwrapRef<typeof import('@vueuse/math')['useRound']>
|
||||
readonly useRoute: UnwrapRef<typeof import('vue-router')['useRoute']>
|
||||
readonly useRouter: UnwrapRef<typeof import('vue-router')['useRouter']>
|
||||
readonly useScreenOrientation: UnwrapRef<typeof import('@vueuse/core')['useScreenOrientation']>
|
||||
readonly useScreenSafeArea: UnwrapRef<typeof import('@vueuse/core')['useScreenSafeArea']>
|
||||
readonly useScriptTag: UnwrapRef<typeof import('@vueuse/core')['useScriptTag']>
|
||||
readonly useScroll: UnwrapRef<typeof import('@vueuse/core')['useScroll']>
|
||||
readonly useScrollLock: UnwrapRef<typeof import('@vueuse/core')['useScrollLock']>
|
||||
readonly useSessionStorage: UnwrapRef<typeof import('@vueuse/core')['useSessionStorage']>
|
||||
readonly useShare: UnwrapRef<typeof import('@vueuse/core')['useShare']>
|
||||
readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
|
||||
readonly useSorted: UnwrapRef<typeof import('@vueuse/core')['useSorted']>
|
||||
readonly useSpeechRecognition: UnwrapRef<typeof import('@vueuse/core')['useSpeechRecognition']>
|
||||
readonly useSpeechSynthesis: UnwrapRef<typeof import('@vueuse/core')['useSpeechSynthesis']>
|
||||
readonly useStepper: UnwrapRef<typeof import('@vueuse/core')['useStepper']>
|
||||
readonly useStorage: UnwrapRef<typeof import('@vueuse/core')['useStorage']>
|
||||
readonly useStorageAsync: UnwrapRef<typeof import('@vueuse/core')['useStorageAsync']>
|
||||
readonly useStyleTag: UnwrapRef<typeof import('@vueuse/core')['useStyleTag']>
|
||||
readonly useSum: UnwrapRef<typeof import('@vueuse/math')['useSum']>
|
||||
readonly useSupported: UnwrapRef<typeof import('@vueuse/core')['useSupported']>
|
||||
readonly useSwipe: UnwrapRef<typeof import('@vueuse/core')['useSwipe']>
|
||||
readonly useTemplateRefsList: UnwrapRef<typeof import('@vueuse/core')['useTemplateRefsList']>
|
||||
readonly useTextDirection: UnwrapRef<typeof import('@vueuse/core')['useTextDirection']>
|
||||
readonly useTextSelection: UnwrapRef<typeof import('@vueuse/core')['useTextSelection']>
|
||||
readonly useTextareaAutosize: UnwrapRef<typeof import('@vueuse/core')['useTextareaAutosize']>
|
||||
readonly useThrottle: UnwrapRef<typeof import('@vueuse/core')['useThrottle']>
|
||||
readonly useThrottleFn: UnwrapRef<typeof import('@vueuse/core')['useThrottleFn']>
|
||||
readonly useThrottledRefHistory: UnwrapRef<typeof import('@vueuse/core')['useThrottledRefHistory']>
|
||||
readonly useTimeAgo: UnwrapRef<typeof import('@vueuse/core')['useTimeAgo']>
|
||||
readonly useTimeout: UnwrapRef<typeof import('@vueuse/core')['useTimeout']>
|
||||
readonly useTimeoutFn: UnwrapRef<typeof import('@vueuse/core')['useTimeoutFn']>
|
||||
readonly useTimeoutPoll: UnwrapRef<typeof import('@vueuse/core')['useTimeoutPoll']>
|
||||
readonly useTimestamp: UnwrapRef<typeof import('@vueuse/core')['useTimestamp']>
|
||||
readonly useTitle: UnwrapRef<typeof import('@vueuse/core')['useTitle']>
|
||||
readonly useToFixed: UnwrapRef<typeof import('@vueuse/math')['useToFixed']>
|
||||
readonly useToNumber: UnwrapRef<typeof import('@vueuse/core')['useToNumber']>
|
||||
readonly useToString: UnwrapRef<typeof import('@vueuse/core')['useToString']>
|
||||
readonly useToggle: UnwrapRef<typeof import('@vueuse/core')['useToggle']>
|
||||
readonly useTransition: UnwrapRef<typeof import('@vueuse/core')['useTransition']>
|
||||
readonly useTrunc: UnwrapRef<typeof import('@vueuse/math')['useTrunc']>
|
||||
readonly useUrlSearchParams: UnwrapRef<typeof import('@vueuse/core')['useUrlSearchParams']>
|
||||
readonly useUserMedia: UnwrapRef<typeof import('@vueuse/core')['useUserMedia']>
|
||||
readonly useVModel: UnwrapRef<typeof import('@vueuse/core')['useVModel']>
|
||||
readonly useVModels: UnwrapRef<typeof import('@vueuse/core')['useVModels']>
|
||||
readonly useVibrate: UnwrapRef<typeof import('@vueuse/core')['useVibrate']>
|
||||
readonly useVirtualList: UnwrapRef<typeof import('@vueuse/core')['useVirtualList']>
|
||||
readonly useWakeLock: UnwrapRef<typeof import('@vueuse/core')['useWakeLock']>
|
||||
readonly useWebNotification: UnwrapRef<typeof import('@vueuse/core')['useWebNotification']>
|
||||
readonly useWebSocket: UnwrapRef<typeof import('@vueuse/core')['useWebSocket']>
|
||||
readonly useWebWorker: UnwrapRef<typeof import('@vueuse/core')['useWebWorker']>
|
||||
readonly useWebWorkerFn: UnwrapRef<typeof import('@vueuse/core')['useWebWorkerFn']>
|
||||
readonly useWindowFocus: UnwrapRef<typeof import('@vueuse/core')['useWindowFocus']>
|
||||
readonly useWindowScroll: UnwrapRef<typeof import('@vueuse/core')['useWindowScroll']>
|
||||
readonly useWindowSize: UnwrapRef<typeof import('@vueuse/core')['useWindowSize']>
|
||||
readonly watch: UnwrapRef<typeof import('vue')['watch']>
|
||||
readonly watchArray: UnwrapRef<typeof import('@vueuse/core')['watchArray']>
|
||||
readonly watchAtMost: UnwrapRef<typeof import('@vueuse/core')['watchAtMost']>
|
||||
readonly watchDebounced: UnwrapRef<typeof import('@vueuse/core')['watchDebounced']>
|
||||
readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']>
|
||||
readonly watchIgnorable: UnwrapRef<typeof import('@vueuse/core')['watchIgnorable']>
|
||||
readonly watchOnce: UnwrapRef<typeof import('@vueuse/core')['watchOnce']>
|
||||
readonly watchPausable: UnwrapRef<typeof import('@vueuse/core')['watchPausable']>
|
||||
readonly watchPostEffect: UnwrapRef<typeof import('vue')['watchPostEffect']>
|
||||
readonly watchSyncEffect: UnwrapRef<typeof import('vue')['watchSyncEffect']>
|
||||
readonly watchThrottled: UnwrapRef<typeof import('@vueuse/core')['watchThrottled']>
|
||||
readonly watchTriggerable: UnwrapRef<typeof import('@vueuse/core')['watchTriggerable']>
|
||||
readonly watchWithFilter: UnwrapRef<typeof import('@vueuse/core')['watchWithFilter']>
|
||||
readonly whenever: UnwrapRef<typeof import('@vueuse/core')['whenever']>
|
||||
}
|
||||
}
|
5
babel.config.js
Normal file
@ -0,0 +1,5 @@
|
||||
module.exports = {
|
||||
presets: [
|
||||
'@vue/cli-plugin-babel/preset'
|
||||
]
|
||||
}
|
108
chains/README.md
@ -1,108 +0,0 @@
|
||||
# Directory Layout
|
||||
|
||||
Note: the host name used in the user's browser (displayed in the address bar) to load the explorer app determines which of the chain configuration directories is used.
|
||||
If the host name contains the substring "testnet" (for example: "https://mytestnetwork.example.com") then chain configuration files in the `testnet` directory (only) are loaded. Conversely if the host name does not contain that substring then chain configuration files in the `mainnet` directory (only) are loaded.
|
||||
Remember to bear this behavior in mind when selecting a DNS host name for self hosting the explorer.
|
||||
|
||||
** if you want to list your blockchain on ping.pub, please submit your configuration on https://github.com/ping-pub/ping.pub.git **
|
||||
|
||||
- Submit configs for mainnet, go to https://github.com/ping-pub/explorer/tree/master/chains/mainnet
|
||||
|
||||
- Submit configs for testnet, go to https://github.com/ping-pub/explorer/tree/master/chains/testnet, these configs will be enabled when you visit the domain that starts with `testnet.*`, for example `https://testnet.ping.pub`
|
||||
|
||||
# Sample of Config
|
||||
|
||||
```json
|
||||
{
|
||||
"chain_name": "cosmos",
|
||||
"api": [
|
||||
{
|
||||
"address": "https://cosmos.api.ping.pub",
|
||||
"provider": "Ping"
|
||||
}
|
||||
],
|
||||
"rpc": [
|
||||
{
|
||||
"address": "https://cosmos.api.ping.pub",
|
||||
"provider": "Ping"
|
||||
}
|
||||
],
|
||||
"sdk_version": "0.42.6",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "800",
|
||||
"assets": [{
|
||||
"base": "uatom",
|
||||
"symbol": "ATOM",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "cosmos",
|
||||
"logo": "https://dl.airtable.com/.attachments/e54f814bba8c0f9af8a3056020210de0/2d1155fb/cosmos-hub.svg"
|
||||
}],
|
||||
"addr_prefix": "cosmos",
|
||||
"theme_color": "#ce4747",
|
||||
"logo": "https://dl.airtable.com/.attachments/e54f814bba8c0f9af8a3056020210de0/2d1155fb/cosmos-hub.svg"
|
||||
}
|
||||
```
|
||||
- **chain_name** the name to identify the chain on ping.pub, would be better to use the same one as registry
|
||||
- **api** the rest api endpoint.(make sure that CORS is enabled: `Allow-Control-Allow-Origin: *`)
|
||||
- **rpc** the rpc endpoint, make sure that the port is added. rpc endpoint is only used for state sync. it's optional.
|
||||
- **assets** Native Assets on blockchain.
|
||||
|
||||
Endpoint providers will be listed in the "Popular" tab of the staking.
|
||||
|
||||
# Token Unit conversion
|
||||
|
||||
We have two methods to load token metadata for token unit conversion:
|
||||
|
||||
## Loading from a REST endpoint (recommended).
|
||||
|
||||
you can define the metadata in the `bank` -> `metadata` section of the blockchain's genesis file. if you don't define, the `[]` will return.
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "atom",
|
||||
"description": "The native staking token of the Cosmos Hub.",
|
||||
"denom_units": [
|
||||
{
|
||||
"denom": "uatom",
|
||||
"exponent": 0,
|
||||
"aliases": [
|
||||
"microatom"
|
||||
],
|
||||
},
|
||||
{
|
||||
"denom": "matom",
|
||||
"exponent": 3,
|
||||
"aliases": [
|
||||
"milliatom"
|
||||
]
|
||||
},
|
||||
{
|
||||
"denom": "atom",
|
||||
"exponent": 6,
|
||||
}
|
||||
],
|
||||
"base": "uatom",
|
||||
"display": "atom",
|
||||
}
|
||||
```
|
||||
you can see more details here:
|
||||
https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-024-coin-metadata.md
|
||||
|
||||
## Loading from Cosmos Registry:
|
||||
|
||||
https://github.com/cosmos/chain-registry
|
||||
|
||||
# Test
|
||||
|
||||
please add these check points in comments with your PR, and adding your test result by clicking the checkbox of each line
|
||||
```
|
||||
Test Result:
|
||||
- [ ] Connect wallet, check if address is correct?
|
||||
- [ ] Transfer
|
||||
- [ ] Delegate
|
||||
- [ ] Redelegate
|
||||
- [ ] Unbond
|
||||
- [ ] withdraw Validator's Commission
|
||||
- [ ] withdraw Rewards
|
||||
```
|
||||
Test is very important for us and our users.
|
@ -1,74 +0,0 @@
|
||||
{
|
||||
"chain_name": "axelar",
|
||||
"api": [
|
||||
"https://rest.axelar.lava.build/lava-referer-97409c72-1a82-4861-8651-119c15151cbe"
|
||||
],
|
||||
"rpc": [
|
||||
"https://tm.axelar.lava.build/lava-referer-97409c72-1a82-4861-8651-119c15151cbe"
|
||||
],
|
||||
"snapshot_provider": "",
|
||||
"sdk_version": "0.45.6",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "800",
|
||||
"addr_prefix": "axelar",
|
||||
"logo": "/logos/axelar.svg",
|
||||
"theme_color": "#161723",
|
||||
"assets": [
|
||||
{
|
||||
"base": "uaxl",
|
||||
"symbol": "AXL",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "axelar",
|
||||
"logo": "/logos/axelar.svg"
|
||||
},
|
||||
{
|
||||
"base": "uusdc",
|
||||
"symbol": "axlUSDC",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "usd-coin",
|
||||
"logo": "/logos/usdc.svg"
|
||||
},
|
||||
{
|
||||
"base": "uusdt",
|
||||
"symbol": "axlUSDT",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "tether",
|
||||
"logo": "/logos/usdt.svg"
|
||||
},
|
||||
{
|
||||
"base": "dai-wei",
|
||||
"symbol": "axlDAI",
|
||||
"exponent": "18",
|
||||
"coingecko_id": "dai",
|
||||
"logo": "/logos/dai.svg"
|
||||
},
|
||||
{
|
||||
"base": "weth-wei",
|
||||
"symbol": "axlWETH",
|
||||
"exponent": "18",
|
||||
"coingecko_id": "ethereum",
|
||||
"logo": "/logos/weth.svg"
|
||||
},
|
||||
{
|
||||
"base": "wmatic-wei",
|
||||
"symbol": "axlWMATIC",
|
||||
"exponent": "18",
|
||||
"coingecko_id": "matic-network",
|
||||
"logo": "/logos/wmatic.svg"
|
||||
},
|
||||
{
|
||||
"base": "wavax-wei",
|
||||
"symbol": "axlWAVAX",
|
||||
"exponent": "18",
|
||||
"coingecko_id": "avalanche-2",
|
||||
"logo": "/logos/wavax.svg"
|
||||
},
|
||||
{
|
||||
"base": "dot-planck",
|
||||
"symbol": "axlDOT",
|
||||
"exponent": "10",
|
||||
"coingecko_id": "polkadot",
|
||||
"logo": "/logos/dot.svg"
|
||||
}
|
||||
]
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
{
|
||||
"chain_name": "cosmos",
|
||||
"registry_name": "cosmoshub",
|
||||
"api": [
|
||||
{"provider": "notional", "address": "https://api-cosmoshub-ia.cosmosia.notional.ventures"},
|
||||
{"provider": "blockapsis", "address": "https://lcd-cosmoshub.blockapsis.com:443"},
|
||||
{"provider": "WhisperNode🤐", "address": "https://lcd-cosmoshub.whispernode.com:443"},
|
||||
{"provider": "pupmos", "address": "https://api-cosmoshub.pupmos.network"},
|
||||
{"provider": "publicnode", "address": "https://cosmos-rest.publicnode.com"},
|
||||
{"provider": "staketab", "address": "https://cosmos-rest.staketab.org"},
|
||||
{"provider": "nodestake", "address": "https://api.cosmos.nodestake.top"},
|
||||
{"provider": "Golden Ratio Staking", "address": "https://rest-cosmoshub.goldenratiostaking.net"}
|
||||
],
|
||||
"rpc": [
|
||||
{"provider": "icycro", "address": "https://cosmos-rpc.icycro.org"},
|
||||
{"provider": "dragonstake", "address": "https://rpc.cosmos.dragonstake.io"},
|
||||
{"provider": "Golden Ratio Staking", "address": "https://rpc-cosmoshub.goldenratiostaking.net"}
|
||||
],
|
||||
"sdk_version": "0.45.1",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "800",
|
||||
"addr_prefix": "cosmos",
|
||||
"logo": "/logos/cosmos.svg",
|
||||
"assets": [{
|
||||
"base": "uatom",
|
||||
"symbol": "ATOM",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "cosmos",
|
||||
"logo": "/logos/cosmos.svg"
|
||||
}]
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
{
|
||||
"chain_name": "neutron",
|
||||
"api": [
|
||||
{"provider": "Polkachu", "address": "https://neutron-api.polkachu.com"},
|
||||
{"provider": "NodeStake", "address": "https://api.neutron.nodestake.top"},
|
||||
{"provider": "Allnodes", "address": "https://neutron-rest.publicnode.com"}
|
||||
],
|
||||
"rpc": [
|
||||
{"provider": "Polkachu", "address": "https://neutron-rpc.polkachu.com"},
|
||||
{"provider": "NodeStake", "address": "https://rpc.neutron.nodestake.top"},
|
||||
{"provider": "Allnodes", "address": "https://neutron-rpc.publicnode.com:443"}
|
||||
],
|
||||
"provider_chain": {
|
||||
"api": ["https://api-cosmoshub-ia.cosmosia.notional.ventures"]
|
||||
},
|
||||
"features": ["dashboard", "blocks", "ibc", "cosmwasm", "uptime", "parameters", "state-sync", "consensus", "supply", "widget"],
|
||||
"sdk_version": "0.45.1",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "8000",
|
||||
"assets": [{
|
||||
"base": "untrn",
|
||||
"symbol": "NTRN",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "neutron",
|
||||
"logo": "/logos/neutron.svg"
|
||||
}],
|
||||
"addr_prefix": "neutron",
|
||||
"theme_color": "#161723",
|
||||
"logo": "/logos/neutron.svg"
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
{
|
||||
"chain_name": "nolus",
|
||||
"coingecko": "nolus",
|
||||
"api": [
|
||||
{"provider": "Nolus", "address": "https://pirin-cl.nolus.network:1317"},
|
||||
{"provider": "LavenderFive", "address": "https://nolus-api.lavenderfive.com:443"},
|
||||
{"provider": "Allnodes", "address": "https://nolus-rest.publicnode.com"}
|
||||
],
|
||||
"rpc": [
|
||||
{"provider": "Nolus", "address": "https://pirin-cl.nolus.network:26657"},
|
||||
{"provider": "LavenderFive", "address": "https://nolus-rpc.lavenderfive.com:443"},
|
||||
{"provider": "Allnodes", "address": "https://nolus-rpc.publicnode.com:443"}
|
||||
],
|
||||
"snapshot_provider": "",
|
||||
"sdk_version": "v0.47.6",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "0",
|
||||
"addr_prefix": "nolus",
|
||||
"logo": "/logos/nolus.svg",
|
||||
"assets": [{
|
||||
"base": "unls",
|
||||
"symbol": "NLS",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "nolus",
|
||||
"logo": "/logos/nolus.svg"
|
||||
}]
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
{
|
||||
"chain_name": "osmosis",
|
||||
"coingecko": "osmosis",
|
||||
"api": ["https://lcd.osmosis.zone","https://api-osmosis-ia.cosmosia.notional.ventures", "https://osmosis-api.polkachu.com", "https://lcd-osmosis.blockapsis.com"],
|
||||
"rpc": ["https://rpc.osmosis.zone", "https://rpc-osmosis-ia.cosmosia.notional.ventures:443", "https://osmosis-rpc.polkachu.com:443", "https://osmosis.validator.network:443", "https://rpc-osmosis.blockapsis.com:443"],
|
||||
"snapshot_provider": "",
|
||||
"sdk_version": "0.46.1",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "800",
|
||||
"addr_prefix": "osmo",
|
||||
"logo": "/logos/osmosis.jpg",
|
||||
"theme_color": "#812cd6",
|
||||
"assets": [{
|
||||
"base": "uosmo",
|
||||
"symbol": "OSMO",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "osmosis",
|
||||
"logo": "/logos/osmosis.jpg"
|
||||
},{
|
||||
"base": "uion",
|
||||
"symbol": "ION",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "ion",
|
||||
"logo": "/logos/osmosis.jpg"
|
||||
},{
|
||||
"base": "usomm",
|
||||
"symbol": "SOMM",
|
||||
"exponent": "6",
|
||||
"coingecko_id": "somm",
|
||||
"logo": ""
|
||||
}]
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
{
|
||||
"chain_name": "crossfi-testnet-1",
|
||||
"api": ["https://crossfi-testnet-api.forpeaky.xyz"],
|
||||
"rpc": ["https://crossfi-testnet-rpc.forpeaky.xyz"],
|
||||
"coingecko": "",
|
||||
"snapshot_provider": "",
|
||||
"sdk_version": "0.47.1",
|
||||
"coin_type": "118",
|
||||
"min_tx_fee": "500",
|
||||
"addr_prefix": "crossfi"
|
||||
}
|
13
components.d.ts
vendored
@ -1,13 +0,0 @@
|
||||
// generated by unplugin-vue-components
|
||||
// We suggest you to commit this file into source control
|
||||
// Read more: https://github.com/vuejs/core/pull/3399
|
||||
import '@vue/runtime-core';
|
||||
|
||||
export {};
|
||||
|
||||
declare module '@vue/runtime-core' {
|
||||
export interface GlobalComponents {
|
||||
RouterLink: typeof import('vue-router')['RouterLink'];
|
||||
RouterView: typeof import('vue-router')['RouterView'];
|
||||
}
|
||||
}
|
3
env.d.ts
vendored
@ -1,3 +0,0 @@
|
||||
/// <reference types="vite/client" />
|
||||
|
||||
declare module '@personaxyz/ad-sdk';
|
44
index.html
@ -1,44 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="icon" href="/favicon.ico">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Laconic Blockchain Explorer And Web Wallet</title>
|
||||
<meta name="description" content="Laconic Explorer is a block explorer/web wallet for blockchains built on Cosmos SDK, Cosmoshub, Osmosis, Juno, Evmos, Injective, Canto and 70+ blockchains listed on ping.pub" />
|
||||
<link rel="stylesheet" type="text/css" href="/loader.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
<div id="loading-bg">
|
||||
<div class="loading-logo">
|
||||
<img src="/logo.svg" alt="Logo" />
|
||||
</div>
|
||||
<div class="pre-loading">
|
||||
<div class="effect-1 effects"></div>
|
||||
<div class="effect-2 effects"></div>
|
||||
<div class="effect-3 effects"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-SSBKVF3GMX"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
// Set default consent to 'denied' as a placeholder
|
||||
// Determine actual values based on your own requirements
|
||||
gtag('consent', 'default', {
|
||||
'ad_storage': 'denied',
|
||||
'ad_user_data': 'denied',
|
||||
'ad_personalization': 'denied',
|
||||
'analytics_storage': 'denied'
|
||||
});
|
||||
gtag('config', 'G-SSBKVF3GMX');
|
||||
</script>
|
||||
<script type="module" src="https://cdn.jsdelivr.net/npm/ping-widget@v0.3.8/dist/ping-widget.min.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -1,82 +0,0 @@
|
||||
# Prerequisites
|
||||
|
||||
1. Node and Yarn - Acquired using Node Version Manager (https://github.com/nvm-sh/nvm)
|
||||
|
||||
# Quick Install for Prerequisites
|
||||
|
||||
1. Install Node Version Manager
|
||||
```sh
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash
|
||||
```
|
||||
2. Install the latest version of NodeJS
|
||||
```sh
|
||||
nvm install node # "node" is an alias for the latest version
|
||||
```
|
||||
3. Install the latest version of NPM for Node
|
||||
```sh
|
||||
nvm install-latest-npm # get the latest supported npm version on the current node version
|
||||
```
|
||||
4. Install Yarn
|
||||
```sh
|
||||
npm install --global yarn
|
||||
```
|
||||
|
||||
# Installation:
|
||||
|
||||
1. Running with yarn
|
||||
```sh
|
||||
yarn --ignore-engines && yarn serve
|
||||
```
|
||||
|
||||
2. Building for web servers, like nginx, apache
|
||||
```sh
|
||||
yarn --ignore-engines && yarn build
|
||||
cp -r ./dist/* <ROOT_OF_WEB_SERVER>
|
||||
```
|
||||
|
||||
3. Running with docker
|
||||
```sh
|
||||
./docker.sh
|
||||
docker run -d -p 8088:80 ping.pub/dashboard
|
||||
```
|
||||
|
||||
# Enable LCD for Ping.pub (do this on the config for your chain)
|
||||
|
||||
1. Set `enable = true` in `./config/app.toml`
|
||||
```
|
||||
###############################################################################
|
||||
### API Configuration ###
|
||||
###############################################################################
|
||||
|
||||
[api]
|
||||
|
||||
# Enable defines if the API server should be enabled.
|
||||
enable = true
|
||||
|
||||
# Swagger defines if swagger documentation should automatically be registered.
|
||||
swagger = false
|
||||
|
||||
# Address defines the API server to listen on.
|
||||
address = "tcp://0.0.0.0:1317"
|
||||
|
||||
# MaxOpenConnections defines the number of maximum open connections.
|
||||
max-open-connections = 1000
|
||||
```
|
||||
|
||||
2. add proxy server and enable CORS. NOTE: You must enable https as well.
|
||||
|
||||
```
|
||||
server {
|
||||
server_name juno.api.ping.pub;
|
||||
listen 443;
|
||||
location / {
|
||||
add_header Access-Control-Allow-Origin *;
|
||||
add_header Access-Control-Max-Age 3600;
|
||||
add_header Access-Control-Expose-Headers Content-Length;
|
||||
|
||||
proxy_pass http://<HOST>:1317;
|
||||
|
||||
}
|
||||
}
|
||||
```
|
||||
3. config your blockchain in [./src/chains]()
|
106
package.json
@ -1,79 +1,43 @@
|
||||
{
|
||||
"name": "ping.pub",
|
||||
"version": "3.0.0",
|
||||
"name": "look",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"target": "",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"serve": "vite",
|
||||
"build": "run-p type-check build-only",
|
||||
"preview": "vite preview",
|
||||
"build-only": "vite build",
|
||||
"type-check": "vue-tsc --noEmit"
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"start": "pm2 delete all && git pull origin dev && cd server && npm run start"
|
||||
},
|
||||
"dependencies": {
|
||||
"@chenfengyuan/vue-countdown": "2",
|
||||
"@cosmjs/crypto": "^0.32.3",
|
||||
"@cosmjs/amino": "^0.32.3",
|
||||
"@cosmjs/encoding": "^0.32.3",
|
||||
"@cosmjs/stargate": "^0.32.3",
|
||||
"@iconify/vue": "^4.1.0",
|
||||
"@intlify/unplugin-vue-i18n": "^0.8.2",
|
||||
"@leapwallet/cosmos-snap-provider": "^0.1.20",
|
||||
"@leapwallet/name-matcha": "^1.1.0",
|
||||
"@osmonauts/lcd": "^0.8.0",
|
||||
"@personaxyz/ad-sdk": "0.0.25",
|
||||
"@ping-pub/chain-registry-client": "^0.0.25",
|
||||
"@vitejs/plugin-vue-jsx": "^3.0.0",
|
||||
"@vueuse/core": "^9.12.0",
|
||||
"@vueuse/integrations": "^10.1.2",
|
||||
"@vueuse/math": "^9.12.0",
|
||||
"apexcharts": "^3.37.1",
|
||||
"autoprefixer": "^10.4.14",
|
||||
"axios": "^1.3.2",
|
||||
"buffer": "^6.0.3",
|
||||
"build": "^0.1.4",
|
||||
"cross-fetch": "^3.1.5",
|
||||
"daisyui": "^3.1.0",
|
||||
"dayjs": "^1.11.7",
|
||||
"lazy-load-vue3": "^1.3.0",
|
||||
"long": "^5.2.1",
|
||||
"md-editor-v3": "^2.8.1",
|
||||
"numeral": "^2.0.6",
|
||||
"osmojs": "^14.0.0-rc.0",
|
||||
"pinia": "^2.0.28",
|
||||
"postcss": "^8.4.23",
|
||||
"qrcode": "^1.5.3",
|
||||
"tailwindcss": "^3.3.1",
|
||||
"theme-change": "^2.5.0",
|
||||
"vite-plugin-vue-layouts": "^0.7.0",
|
||||
"vue": "^3.2.45",
|
||||
"vue-i18n": "^9.2.2",
|
||||
"vue-prism-component": "^2.0.0",
|
||||
"vue-router": "^4.1.6",
|
||||
"vue3-apexcharts": "^1.4.1",
|
||||
"vue3-json-viewer": "^2.2.2",
|
||||
"vue3-perfect-scrollbar": "^1.6.1"
|
||||
"@cosmostation/cosmosjs": "^0.5.2",
|
||||
"@lunie/cosmos-api": "^0.2.5",
|
||||
"@lunie/cosmos-ledger": "^0.1.7",
|
||||
"bignumber.js": "^9.0.0",
|
||||
"core-js": "^3.6.4",
|
||||
"cosmos-lib": "^1.1.0",
|
||||
"dayjs": "^1.8.21",
|
||||
"element-ui": "^2.13.0",
|
||||
"fingerprintjs2": "^2.1.0",
|
||||
"hash.js": "^1.1.7",
|
||||
"js-base64": "^3.6.0",
|
||||
"localforage": "^1.7.3",
|
||||
"vant": "^2.6.1",
|
||||
"vue": "^2.6.11",
|
||||
"vue-i18n": "^8.15.1",
|
||||
"vue-router": "^3.1.5",
|
||||
"vue-worker": "^1.2.1",
|
||||
"vuex": "^3.1.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@osmonauts/telescope": "^0.88.2",
|
||||
"@types/marked": "^4.0.8",
|
||||
"@types/node": "^18.11.12",
|
||||
"@types/numeral": "^2.0.2",
|
||||
"@types/semver": "7.5.0",
|
||||
"@vitejs/plugin-vue": "^4.0.0",
|
||||
"@vue/tsconfig": "^0.1.3",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"prettier": "^2.7.1",
|
||||
"sass": "^1.58.0",
|
||||
"shiki": "^1.0.0-beta.0",
|
||||
"typescript": "~4.9.5",
|
||||
"unplugin-auto-import": "^0.13.0",
|
||||
"unplugin-vue-components": "^0.23.0",
|
||||
"unplugin-vue-define-options": "1.1.4",
|
||||
"vite": "^4.4.9",
|
||||
"vite-plugin-pages": "^0.28.0",
|
||||
"vue-json-viewer": "3",
|
||||
"vue-tsc": "^1.0.12"
|
||||
}
|
||||
"@vue/cli-plugin-babel": "~4.2.0",
|
||||
"@vue/cli-plugin-router": "~4.2.0",
|
||||
"@vue/cli-plugin-vuex": "~4.2.0",
|
||||
"@vue/cli-service": "~4.2.0",
|
||||
"sass": "^1.25.0",
|
||||
"sass-loader": "^8.0.2",
|
||||
"vue-template-compiler": "^2.6.11"
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1%",
|
||||
"last 2 versions"
|
||||
]
|
||||
}
|
||||
|
@ -1,6 +0,0 @@
|
||||
module.exports = {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
},
|
||||
}
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 4.2 KiB |
38
public/index.html
Normal file
@ -0,0 +1,38 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
||||
<title>
|
||||
LOOK Explorer - A light explorer for Cosmos based blockchains, Powered by
|
||||
ping.pub.
|
||||
</title>
|
||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico" />
|
||||
<link rel="stylesheet" href="/static/css/font_1354695_lrb2z8iklqe.css" />
|
||||
<script src="/static/cdn/vue@2.6.11.min.js"></script>
|
||||
<script src="/static/cdn/element-ui@2.13.0.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<noscript>
|
||||
<strong
|
||||
>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work
|
||||
properly without JavaScript enabled. Please enable it to
|
||||
continue.</strong
|
||||
>
|
||||
</noscript>
|
||||
<div id="app"></div>
|
||||
<!-- built files will be auto injected -->
|
||||
|
||||
<script>
|
||||
var _hmt = _hmt || [];
|
||||
(function() {
|
||||
var hm = document.createElement("script");
|
||||
hm.src = "https://hm.baidu.com/hm.js?612cb1567ca1cb640c7e9ee55b748c8c";
|
||||
var s = document.getElementsByTagName("script")[0];
|
||||
s.parentNode.insertBefore(hm, s);
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -1,70 +0,0 @@
|
||||
#loading-bg {
|
||||
background: var(--initial-loader-bg, #fff);
|
||||
}
|
||||
|
||||
.loading-logo {
|
||||
position: absolute;
|
||||
inset-block-start: 40%;
|
||||
inset-inline-start: calc(50% - 75px);
|
||||
}
|
||||
|
||||
.pre-loading {
|
||||
position: absolute;
|
||||
box-sizing: border-box;
|
||||
border: 3px solid transparent;
|
||||
block-size: 55px;
|
||||
border-radius: 50%;
|
||||
inline-size: 55px;
|
||||
inset-block-start: calc(40% + 35px);
|
||||
inset-inline-start: calc(50% - 27.5px);
|
||||
}
|
||||
|
||||
.pre-loading .effect-1,
|
||||
.pre-loading .effect-2,
|
||||
.pre-loading .effect-3 {
|
||||
position: absolute;
|
||||
box-sizing: border-box;
|
||||
border: 3px solid transparent;
|
||||
block-size: 100%;
|
||||
border-inline-start: 3px solid var(--initial-loader-color, #eee);
|
||||
border-radius: 50%;
|
||||
inline-size: 100%;
|
||||
}
|
||||
|
||||
.pre-loading .effect-1 {
|
||||
animation: rotate 1s ease infinite;
|
||||
}
|
||||
|
||||
.pre-loading .effect-2 {
|
||||
animation: rotate-opacity 1s ease infinite 0.1s;
|
||||
}
|
||||
|
||||
.pre-loading .effect-3 {
|
||||
animation: rotate-opacity 1s ease infinite 0.2s;
|
||||
}
|
||||
|
||||
.pre-loading .effects {
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(1turn);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes rotate-opacity {
|
||||
0% {
|
||||
opacity: 0.1;
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 1;
|
||||
transform: rotate(1turn);
|
||||
}
|
||||
}
|
@ -1,82 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="150px" height="132px" viewBox="0 0 150 132" enable-background="new 0 0 150 132" xml:space="preserve"> <image id="image0" width="150" height="132" x="0" y="0"
|
||||
href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACECAMAAABFwSJAAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
|
||||
AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACuFBMVEVmbP////9mbP9mbP9m
|
||||
bP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9m
|
||||
bP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9m
|
||||
bP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9m
|
||||
bP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9m
|
||||
bP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9m
|
||||
bP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9m
|
||||
bP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9m
|
||||
bP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP9mbP+Znf+Xm/+Wmv+UmP+T
|
||||
l/+Rlv+QlP+Ok/+Mkf+LkP+Jjv+Ijf/a2//////S1P+ztv+mqf+coP/l5v/d3v+7vv+ytf+hpP/2
|
||||
9v/v8P+qrf+prP+nqv+kp/+bn//g4f/u7//Hyf+2uf/9/f++wf+Gi//y8//c3f+sr/+eov/R0/+w
|
||||
s//U1f/Jy//p6v/6+v/BxP/P0f/Ex/+fo//8/P+5vP/3+P/s7f/m5//09f/o6f+Fiv/f4P/j5P/X
|
||||
2P+1uP/Dxf/5+f+vsv/i4//Mzv/GyP+tsP+8v//KzP/O0P+ipv/x8v+/wv/r7P+4u//Z2v/V1/+N
|
||||
hj37AAAAl3RSTlMAAIXd6u7y4Qgo+nu08xhGnQTU/TFrvxDrUY7bByZzsu8VRZUD0/sraLhJjNYl
|
||||
+Wyw7EPRZg5Ci9Ak+GSu50GGz/cgquj+PInLASFerOQKP4ACzvUcY6I1xFbfPXnM8WGbDOb8L4S9
|
||||
H0+p2gVxE1+TKYK2HvZHpzpqyV2BQKQ4Ysdb4n8bOcioDa+N1Ui3KpRgiCOKRLGzfY2kuQAAAAFi
|
||||
S0dEAf8CLd4AAAAHdElNRQfnAgkKBBi6ykX0AAACs3pUWHRSYXcgcHJvZmlsZSB0eXBlIHhtcAAA
|
||||
OI2VVVGy2yAM/OcUPQKWhATHcYL560w/e/zuQpKXxHnt1MzYIIS0khY5/f75K/3gU0OTXnVEjeyb
|
||||
q1+8hEl28eLhzQ/tIse4XC5DBPLmRkkJLdY1W49sCt3qLVmNPXCwaOx2FHN8YVAVh0R06CFZr1F1
|
||||
j+o46J3OfJPMtV/9COVeogegMR/EofvaeKhPJF9mILvwhD1OSC7VeslJCG7EFGmRQ1068GyqWiEJ
|
||||
bZBtWrRpVVGTK6SiGTKXgW/De1NL0qdwp2i+AfptyC08AQrXvYiZ+VtokuYmw6thGFl3hDNiPnIE
|
||||
tOSYiGN6bhwTieAtePflAIhCA/VhRqIiLHjg/isKQECpUAjxNjPVkCFo3Pd9S0jYCCSWqFZin2vB
|
||||
BFtHqU+Yp8Pjq0wJCyTbO8KpwJQZANKLLwz2e9WejGtYIc/eEpI+Wf/eOJkYCA46g+ZCZzzimkDF
|
||||
aZ95+RTYv4NabtMnv3eTt/zsxqq1dWlg4Go0oVFIW5bJmtlk9joEyzZv047ysMwZw3UD2g4yNvBe
|
||||
UdWNtMT16QiiTN5xNycoGpZQxKECNYwTog8I3gGkiYD0B81VrJginxvWBWsYhcQMcsyrrasi2iDF
|
||||
wJcaTsfpxTOJqaSmM4Hl5LndQn91bHSc/tfzrZa7keVIBdyiFMUSoh9+PbWGjGY1ppLOWWaXAIQs
|
||||
tazqcQ9XUdq6TolN6yWtZd4nhzcsMCcx8xOfd/+YgHTOgDv7EWY8tqG5dXyN3YjFR9GxM2mALkpC
|
||||
KBsimA1KQxTITZAzaF3yhuCb4r/01ZkjXUjilJeJbtPsBEmu+WyD1A7MDIjQ4zFruiW8KCQViYj4
|
||||
nGGxkkg729fsTDL+3pvSu9pqpA/p6e+xds6/sMS4198qZP1+0h/aE5hgx863IwAACeZJREFUeNq9
|
||||
nPlDHEUWxyuR1RjXKF5oPDYqiUeMN1mNiYqKSjQoicb7QI237rq48Vo16nrt4a3FMMydRiAkEA5J
|
||||
YJJIEiKQAzKBBBPMCeu/sV2vhqFher5dPdOd7w/AzNSr+kxN1atXr2pgTEUTj0mhrD8o6Fhu0HGT
|
||||
cFMTSEpUx0/mzukEx7D+6CAVP3GKQ1gnOUnF+cnOYGWf4izWqac5gnW6s1Scn+EEVs6ZTmPxsxzA
|
||||
muo4FT/7nIyxznXSOYzovIyx/uQCFZ92foZYF7hBxfmFmWHlTncHa8ZFGWFd7A4V55dkgpWT5RYW
|
||||
vzQDrJmuUfHLstPGmnW5e1j8irSxrnSRil+VkybW1W5ScT41Pazca9zFmjwrLaxr3aXi/Mp0sPLc
|
||||
cw4jmp0G1p9dp+LX5drGun6O+1j8BttYc48CFZ+XZxPrxqNBxflN9rBybz46WPm32MK6AdVVVubx
|
||||
eMp1eXVV6PL5fH6hgK6grpBQmBSJRCDXrXaw8m5DVMs1O6qEXAW328C6A9X0oy0qTauC3XVnoTLW
|
||||
fOQcqmtsYq0IQ667lLHuRtXU2qTStJUQa0GRItY9qJZVdXpD9StXkxoaGhqlqqoaR//U1dRU1fxT
|
||||
HKvFB7nuVcMqXgjq8KwRDa3lCqpuHemutigqt+g+Jaz7UR2NNFrKFKiCcgyuEz9w+cUqWHnzUGet
|
||||
F61sUOmstUS1/Gfxsx07iQcUsG5CNWwUjWwqV6DythBWdXSz+LUKln2w0BJrfj7qrA69iS24jbh+
|
||||
IarOKC8Xc6QGji7+kCXWrci8TTTVpULVvVUU3Srm4DZrJ/HwJAusR5B19Xa9gR0qH2G4kjprm/g7
|
||||
1KP/1RuC5R/FWMWPAdvyTdbvO64Gotop/TvN3s0xVP7xKRDrCcu2dnkVqAJ9xtUw1i8eNEOLJxFW
|
||||
yVPAsmyXqL1JpbNWElX/yGJYJh6th6P+6WcA1hJkuZs+iwoFqoo66RxGHsf2iIeroc2zqbGeQ86h
|
||||
WjiHgWpurUgXUXWNdk+wV3/cE4RWz6fEegGZkSOqVaCSn5lWZxyEvybmZUq9+FIKrNsLgFWTcA49
|
||||
KothpF9LggjvFU4CW79sjlV4J7Ap3yea+lWls6qkcxjrqFaJ5wahk5j2iinWq8imQXkxjOwgrN/G
|
||||
PbvPemn8ixlWyQJgUSZCuq1KzkFGr/3j3YFni4gnoK+f8VcTrNeQhXQOKlS+AVG0NXnG7rd2En9L
|
||||
xip9HZRvFsFc/c8KVNED1FmDJrzCwdT7ofXfk7CWgtLeLuv5HRdFfdr2gMlL5CT2Q+tTssdhvYGc
|
||||
Q7eosE8pcpDO4Uez10Ji29uKa3lzLFbhW6iz+pUj5Q1E1WMeI5OTaIdLY1bOGKy3Ldvqx7sqKb/c
|
||||
VqTwA7GD4sVDsIaZRqwi5By8NeZTy0Q0YVPHCl4xS/tgd8253oD1DipJM3uPChU1iyKrbdabzLmj
|
||||
WKWLQLnmw2JiqwR/Udraau2pl5iwcBLrsJP4RwLrXVTsgHKk3Cz30GiuNVq75YXFcaz3kHOoEluY
|
||||
FSrBX1TmvY6g9TgqJnUr9svvS6zCZaCM3FbgFJWxJ7TeACxUTUs+XBrnlRDWB6gMbaMH8WiQCreY
|
||||
RQ5J3XXE2gcuEVhFH4ISHuEcevGmJd4eTVjtp6hFuQoRP9dAJ5hfqmN9hErQjNY6hhLqMNXOnTt7
|
||||
NAvnMCLKcQ7DIksnsH8i59Ddq5TuG1UXjD9JfhE/18H4ueBjthh1+CabVAN4vEtRUF0JE6rL2Cfg
|
||||
VZ9NKqswTyqwQpSEWIthROPbZxerA2eVSU2i4P9QQZG2/BS8XkbbhT3DtdukhuNaO6rdca3cS1zW
|
||||
sWJAJBS3wJX/owkWW2lKJgyrjBjuJaztlosnBaltqMSHRcKdTkRtUa60WwUrJvN/my0cV0W9XmgI
|
||||
LmYfkJf/DOVwaUXpxNmDuILbiQsHZmHyunDlX1Yol2qU8fbTqG9UweK/EVY/HPWUn1iORkXBe/EI
|
||||
ohgdHlJiskZpdEVksg29B5m8hCv/u4l4Cx610pDZrdRdhwhrCHzk5BwqUQCxqHQ0aP4clPN3iMVC
|
||||
JeDi0YMWTiIs+nPAg+p4xxDLwzs+FNusUfCTenxKae/WlHEQbUGOoBoWFBk3ZP8CJWnbqSntfDhF
|
||||
U9qBFAu2T+QMhmAM+PaYfSK8XEqb6vVK3eXbAZxEmM5ZYAj4VuHYzT66ihuyri4h+sS1vaY+lfIT
|
||||
61FnFbwxLgeR/W9QmjLHPSqRMw/Ls02z0Dn4u3gFbi+WJmVs/oOKU0SplM6ViQatxaRPVtPahDrr
|
||||
9dLktNt/QfkgHduo5HN5TIaOyWtxhQgxBmAdr5lkA7+YAQzIUR5QGvVeOgtOTuAPi6fhRn9BiVlK
|
||||
90tgEWpXjiTiTqJz3Kj3COfQA8OeV00zza9MAybNIiPbrxRJhOuJq2Hs+xpMfm6c5EWN5OOCl5FR
|
||||
rbqTkLm3XWMGNzmHSvS24tdakrFeehFYeYf0encoOYmIdBLGs4WAWCm2wrT8CynPfJ5HZhTs1lpt
|
||||
mkm0LGiHDcs7deAgssl/LiUWexbYBSl+VslzjWTB2xIzNyDWpHoYOSxhqbGeeRoYkqM8aL1t1uWh
|
||||
SEJLcOy3dA5PlQAs9iTqg05RudJtg3juojPeXXSwghevrxjCmvI4MK0QtfcpdVeFjCRkVjnUaekc
|
||||
HiuGWOxRZEyOcqNSd8lIooa6i5IO2Oc9wjDWpIeBcVTEz+uUthsydqTxFKSjd7gYGm4Iprg18hAy
|
||||
p1NFpVsjcjOh9frjkfIvqLPy51tiFT4I7GN0bKMUP4fldmMN94q16DAc78bbp6luJD2A8s60+/wd
|
||||
39kcKSoPFstrLQfkvM8UsGAiLma94ibUJke9iBx2wc66n6lg3YfSln6RtuxTiiT8LYm0FzxNXlis
|
||||
hMXuRZVstLvJ1rUPTt57mBoWPC8LiY1x3YbuVaRDo2oyip6heyYiUoXbiruZIha7C1VTpZStNAoe
|
||||
BM+Zr4wFL2pE221SDcFz4K+ZMha+1lI9YA8L5thuy7OBhW8I7rFFhZ1D0tceIBa8TxkjRUcViUte
|
||||
kQ/TdflQkBQIwFl4c64tLPY1Pyq6kdnDgnd1HdNcZhMLf+3BIc35xjZW7nXuY33LbGOx2a5TZeWl
|
||||
geXutxOFrmXpYM1y44veBl2TmxaWG1+LN2o2Sw8r5yo3qT5naWKxK1ykunxW2ljZl7mHNZOljcUu
|
||||
dY0qKycDLHaJW1gXs0ywLpqROYGZpudmhMUudAfrO5YZ1vnTMmdI1vcsQyx2ngtUk8/NGOucs53H
|
||||
msoyxmJnOU51Zo4DWOwMp7HeZE5gnXaqs1TTsx3BYic7i3UScwZryolOUv3AHMJiJzhINfl4x7Am
|
||||
HWes+FiVf5yWlerfrk1kKlj/B8aoqde073OmAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTAyLTA5
|
||||
VDEwOjA0OjIzKzAwOjAwewKfcQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wMi0wOVQxMDowNDoy
|
||||
MyswMDowMApfJ80AAAAodEVYdGRhdGU6dGltZXN0YW1wADIwMjMtMDItMDlUMTA6MDQ6MjQrMDA6
|
||||
MDCY7TicAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==" />
|
||||
</svg>
|
Before Width: | Height: | Size: 6.3 KiB |
3
public/static/cdn/axios@0.19.2.min.js
vendored
Normal file
10
public/static/cdn/core@2.6.11.min.js
vendored
Normal file
1
public/static/cdn/element-ui@2.13.0.js
Normal file
6
public/static/cdn/vue-router@3.1.6.min.js
vendored
Normal file
6
public/static/cdn/vue@2.6.11.min.js
vendored
Normal file
6
public/static/cdn/vuex@3.1.3.min.js
vendored
Normal file
BIN
public/static/cdp/risk.png
Normal file
After Width: | Height: | Size: 73 KiB |
109
public/static/chains/cosmoshub.svg
Normal file
After Width: | Height: | Size: 161 KiB |
BIN
public/static/chains/default.png
Normal file
After Width: | Height: | Size: 8.5 KiB |
29
public/static/chains/irishub.svg
Normal file
@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 319.97 320">
|
||||
<defs>
|
||||
<style>.cls-1{fill:url(#linear-gradient);}.cls-2{fill:url(#linear-gradient-2);}.cls-3{fill:url(#linear-gradient-3);}.cls-4{fill:url(#linear-gradient-4);}.cls-5{fill:url(#linear-gradient-5);}.cls-6{fill:url(#linear-gradient-6);}.cls-7{fill:url(#linear-gradient-7);}</style>
|
||||
<linearGradient id="linear-gradient" x1="36.16" y1="24.77" x2="285.75" y2="274.37" gradientTransform="matrix(1, 0, 0, -1, -5.41, 313.57)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#189dd8"/>
|
||||
<stop offset="0.5" stop-color="#694ea0"/>
|
||||
<stop offset="1" stop-color="#ed3855"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear-gradient-2" x1="63.4" y1="-2.47" x2="312.99" y2="247.13" xlink:href="#linear-gradient"/>
|
||||
<linearGradient id="linear-gradient-3" x1="134.61" y1="-73.68" x2="384.2" y2="175.91" xlink:href="#linear-gradient"/>
|
||||
<linearGradient id="linear-gradient-4" x1="109.22" y1="-48.29" x2="358.82" y2="201.3" xlink:href="#linear-gradient"/>
|
||||
<linearGradient id="linear-gradient-5" x1="-36.5" y1="97.43" x2="213.1" y2="347.02" xlink:href="#linear-gradient"/>
|
||||
<linearGradient id="linear-gradient-6" x1="-61.81" y1="122.74" x2="187.78" y2="372.33" xlink:href="#linear-gradient"/>
|
||||
<linearGradient id="linear-gradient-7" x1="9.4" y1="51.53" x2="258.99" y2="301.12" xlink:href="#linear-gradient"/>
|
||||
</defs>
|
||||
<title>Asset 1</title>
|
||||
<g id="Layer_2">
|
||||
<g id="Layer_1-2">
|
||||
<path class="cls-1" d="M97.11,231.9l-73.39,8.26,43.09-99.45L22.68,80.5,130,68.3l29.16-67L223,88.1l73.41-8.26-42.9,99,43.81,59.74L190.59,250.72l-29.6,68Zm30.48-6.6a51.53,51.53,0,0,1-8.91,3.38l-2.8.78,41.39,56.26L172,251.94l-2.65-.34a52.91,52.91,0,0,1-36.1-21.36l-4.12-5.68Zm-14.39-51,33.39,46.2a36.31,36.31,0,0,0,29.33,15,35.61,35.61,0,0,0,4-.22L267,225.36l-34.69-47.31a35.77,35.77,0,0,0-5.91-6.32l-2-1.7-24.82,56-43.19-57.2Zm1.46-56.25A36.28,36.28,0,0,0,85.29,139.7l-35,80.74,58.12-6.53a35.22,35.22,0,0,0,8.4-2l2.48-.92L83.37,161.34l70.92-9,16.85-40.28Zm54.86,40.74,26.29,34.81,16-36.2,7.09-15.9a36.52,36.52,0,0,0-4-36.37L162.83,34.28,139.41,88.11a36,36,0,0,0-2.49,8.31L136.47,99l60.76-6.43Zm63.84-55.14,1,2.47a53.49,53.49,0,0,1-.39,42.1l-2.83,6.42,1.39.94a51,51,0,0,1,7.37,6.07l2.08,2,27.8-64.15ZM53,93.8,75.11,124l1.62-2.1a53,53,0,0,1,36.2-20.39l7-.73.12-1.69a52,52,0,0,1,1.75-10.37l.79-2.87Z"/>
|
||||
<path class="cls-2" d="M144.51,320A158.79,158.79,0,0,1,29.93,253.61l18.54-2.11c3.08,3.77,6.34,7.39,9.71,10.77a142.87,142.87,0,0,0,72.93,39.48Z"/>
|
||||
<path class="cls-3" d="M183.17,302.82a142.36,142.36,0,0,0,78.65-40.52c1.93-1.94,3.89-4,5.82-6.2l22.51-2.6A158.89,158.89,0,0,1,175.7,320Z"/>
|
||||
<path class="cls-4" d="M294.72,211.3a146.54,146.54,0,0,0,2-96.94l9-20.8a161.83,161.83,0,0,1,0,132.8Z"/>
|
||||
<path class="cls-5" d="M14.33,226.58a161.85,161.85,0,0,1,.16-133.51l11,15a146.46,146.46,0,0,0-2.17,97.7Z"/>
|
||||
<path class="cls-6" d="M30.59,65.5A159,159,0,0,1,144.42,0L137,17.16A142.34,142.34,0,0,0,58.18,57.7c-1.63,1.63-3.28,3.38-4.92,5.19Z"/>
|
||||
<path class="cls-7" d="M271.59,68.5c-3.08-3.78-6.34-7.4-9.72-10.79a142.81,142.81,0,0,0-72.8-39.45L175.59,0A158.89,158.89,0,0,1,290.08,66.4Z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.1 KiB |
16
public/static/chains/kava.svg
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 193.63 213">
|
||||
<defs>
|
||||
<style>.cls-1{opacity:0.2;}.cls-2{fill:#ff564f;}</style>
|
||||
</defs>
|
||||
<title>Kava Logo</title>
|
||||
<g id="Layer_2">
|
||||
<g id="Layer_1-2">
|
||||
<g class="cls-1">
|
||||
<polygon class="cls-2" points="30 213 111.63 106.85 30 0 20.25 38.34 72.81 106.85 22.66 171.3 30 213"/>
|
||||
</g>
|
||||
<polygon class="cls-2" points="154.34 213 72.21 106.85 154.13 0 193 0 111.03 106.85 193.63 213 154.34 213"/>
|
||||
<rect class="cls-2" width="30" height="213"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 537 B |
84
public/static/css/font_1354695_lrb2z8iklqe.css
Normal file
BIN
public/static/icon/chromefeature.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
public/static/icon/empty.png
Normal file
After Width: | Height: | Size: 9.5 KiB |
BIN
public/static/icon/empty2.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
public/static/icon/empty3.png
Normal file
After Width: | Height: | Size: 9.8 KiB |
BIN
public/static/ping.jpg
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
public/static/ping.png
Normal file
After Width: | Height: | Size: 44 KiB |
325
public/static/ping.svg
Normal file
@ -0,0 +1,325 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="500px" height="500px" viewBox="0 0 500 500" enable-background="new 0 0 500 500" xml:space="preserve"> <image id="image0" width="500" height="500" x="0" y="0"
|
||||
href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAQAAABh3xcBAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
|
||||
AAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAAmJLR0QA/4ePzL8AAAAJcEhZ
|
||||
cwAAFxIAABcSAWef0lIAAAAHdElNRQflBwEGCCh5IMWkAABE50lEQVR42u2deZxcVZm/n7vW0ks6
|
||||
HRICCLQxhIiArLK7jY6CCo4yuKIy4oyMKCKo4zCjMq4jbrgMOvobFRUccBkVEBdQQBAUBQQxQIAm
|
||||
hBCy9lrbXc7vj3uqunpJqjq1ds771EdMUt3nnrt87znnPe9iKQRB2N2xO90BQRBajwhdEAxAhC4I
|
||||
BiBCFwQDEKELggGI0AXBAETogmAAInRBMAARuiAYgAhdEAxAhC4IBiBCFwQDEKELggGI0AXBAETo
|
||||
gmAAInRBMAARuiAYgAhdEAxAhC4IBiBCFwQDEKELggGI0AXBAETogmAAInRBMAARuiAYgAhdEAxA
|
||||
hC4IBiBCFwQDEKELggGI0AXBAETogmAAInRBMAARuiAYgAhdEAxAhC4IBiBCFwQDEKELggGI0AXB
|
||||
AETogmAAInRBMAARuiAYgAhdEAxAhC4IBiBCFwQDEKELggGI0AXBAETogmAAInRBMAARuiAYgAhd
|
||||
EAxAhC4IBiBCFwQDEKELggGI0AXBAETogmAAInRBMAARuiAYgAhdEAxAhC4IBiBCFwQDEKELggGI
|
||||
0AXBAETogmAAInRBMAARuiAYgAhdEAxAhC4IBiBCFwQDEKELggGI0AXBAETogmAAInRBMAARuiAY
|
||||
gAhdEAxAhC4IBiBCFwQDEKELggGI0AXBAETogmAAInRBMAARuiAYgAhdEAxAhC4IBiBCFwQDEKEL
|
||||
ggGI0AXBAETogmAAInRBMAARuiAYgAhdEAxAhC4IBiBCFwQDEKELggGI0AXBAETogmAAInRBMAAR
|
||||
uiAYgAhdEAxAhC4IBiBCFwQDEKELggGI0AXBAETogmAAInRBMAARuiAYgAhdEAxAhC4IBiBCFwQD
|
||||
EKELggGI0AXBAETogmAAInRBMAARuiAYgAhdEAxAhC4IBiBCFwQDEKELggGI0AXBAETogmAAInRB
|
||||
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
|
||||
ROiCYAAidEEwABG6IBiACF0QDECELggGIEIXBAMQoQuCAYjQBcEAROiCYAAidEEwABG6IBiACF0Q
|
||||
DECELggGIEIXBAMQoQuCAYjQBcEAROiCYAAidEEwABG6IBiACF0QDECELggGIEIXBAMQoQuCAYjQ
|
||||
BcEAROiCYAAidEEwABG6IBiACF0QDECELggGIEIXBAMQoQuCAYjQBcEAROiCYAAidEEwABG6IBiA
|
||||
CF0QDECELggGIEIXBAMQoQuCAYjQBcEAROiCYAAidEEwABG6IBiACF0QDECELggGIEIXBAMQoQuC
|
||||
AYjQBcEAROiCYAAidEEwABG6IBiACF0QDECELggGIEIXBAMQoQuCAYjQBcEAROiCYAAidEEwABG6
|
||||
IBiACF0QDECELggGIEIXBAMQoQuCAYjQBcEAROiCYAAidEEwABG6IBiACF0QDECELggGIEIXBAMQ
|
||||
oQuCAYjQBcEAROiCYAAidEEwABG6IBiACF0QDECELggGIEIXBAMQoQuCAYjQBcEAROiCYAAidEEw
|
||||
ABG6IBiACF0QDECELggGIEIXBAMQoQuCAYjQBcEAROiCYAAidEEwABG6IBiACF0QDECELggGIEIX
|
||||
BAMQoQuCAYjQBcEAROiCYAAidEEwABG6IBiACF0QDECELggGIEIXBAMQoQuCAYjQBcEAROiCYAAi
|
||||
dEEwABG6IBiACF0QDECELggGIEIXBAMQoQuCAYjQBcEAROiCYAAidEEwABG6IBiACF0QDECELggG
|
||||
IEIXBAMQoQuCAYjQBcEAROiCYAAidEEwABG6IBiACF0QDECELggGIEIXBAMQoQuCAYjQBcEAROiC
|
||||
YAAidEEwABG6IBiACF0QDECELggGIEIXBAMQoQuCAYjQBcEAROiCYAAidEEwABG6IBiACF0QDECE
|
||||
LggG8P8BBAfkKeePPJoAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDYtMzBUMjI6MDg6NDArMDg6
|
||||
MDAG6UWiAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA2LTMwVDIyOjA4OjQwKzA4OjAwd7T9HgAA
|
||||
ACB0RVh0c29mdHdhcmUAaHR0cHM6Ly9pbWFnZW1hZ2ljay5vcme8zx2dAAAAGHRFWHRUaHVtYjo6
|
||||
RG9jdW1lbnQ6OlBhZ2VzADGn/7svAAAAGHRFWHRUaHVtYjo6SW1hZ2U6OkhlaWdodAA1MDB4mAPs
|
||||
AAAAF3RFWHRUaHVtYjo6SW1hZ2U6OldpZHRoADUwMOtpU7EAAAAZdEVYdFRodW1iOjpNaW1ldHlw
|
||||
ZQBpbWFnZS9wbmc/slZOAAAAF3RFWHRUaHVtYjo6TVRpbWUAMTYyNTA2MjEyMASvYicAAAATdEVY
|
||||
dFRodW1iOjpTaXplADQ1NTc2QkJGVhGEAAAARnRFWHRUaHVtYjo6VVJJAGZpbGU6Ly8vYXBwL3Rt
|
||||
cC9pbWFnZWxjL2ltZ3ZpZXcyXzlfMTYyMzkxMjA5NjY2MzgyODRfMjNfWzBdC9JDCQAAAABJRU5E
|
||||
rkJggg==" ></image>
|
||||
</svg>
|
After Width: | Height: | Size: 25 KiB |
BIN
public/static/wallet/asset1.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
public/static/wallet/asset2.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
public/static/wallet/asset3.png
Normal file
After Width: | Height: | Size: 8.5 KiB |
BIN
public/static/wallet/bg.png
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
public/static/wallet/bg2.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
public/static/wallet/link.png
Normal file
After Width: | Height: | Size: 5.9 KiB |
BIN
public/static/wallet/usb.png
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
public/static/wallet/wafe.gif
Normal file
After Width: | Height: | Size: 956 KiB |
@ -1,17 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Widget Test</title>
|
||||
<script src="https://unpkg.com/ping-widget@latest/dist/ping-widget.js" type="module" ></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="p-5">
|
||||
<div>
|
||||
<ping-connect-wallet chain-id="kava_2222-10" hd-path="m/44'/118/0'/0/0"/>
|
||||
</div>
|
||||
<div>
|
||||
<label for="PingTokenConvert" class="btn">Buy Kava</label>
|
||||
<ping-token-convert chain-name="kava" endpoint="https://api.data.kava.io" hd-path="m/44'/118/0'/0/0"/>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
13
server/.env
Normal file
@ -0,0 +1,13 @@
|
||||
PORT=8888
|
||||
|
||||
# local
|
||||
# Mongodb_url=127.0.0.1:27017/look
|
||||
# Mongodb_user=
|
||||
# Mongodb_pwd=
|
||||
|
||||
# look
|
||||
Mongodb_url=127.0.0.1:37777/look
|
||||
Mongodb_user=look_20200415
|
||||
Mongodb_pwd=@@look@@dingyi
|
||||
|
||||
# MONGODB_URL=mongodb://127.0.0.1:27017/look
|
BIN
server/dist/favicon.ico
vendored
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
server/dist/fonts/element-icons.535877f5.woff
vendored
Normal file
BIN
server/dist/fonts/element-icons.732389de.ttf
vendored
Normal file
7
server/dist/index.html
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>LOOK Explorer - A light explorer for Cosmos based blockchains, Powered by ping.pub.</title><link rel=icon href=/favicon.ico><link rel=stylesheet href=/static/css/font_1354695_lrb2z8iklqe.css><script src=/static/cdn/vue@2.6.11.min.js></script><script src=/static/cdn/element-ui@2.13.0.js></script><link href=/js/chunk-f717d484.926f7da8.js rel=prefetch><link href=/js/pc.cfb7cec1.js rel=prefetch><link href=/js/index.eccef632.js rel=preload as=script></head><body><noscript><strong>We're sorry but look doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script>var _hmt = _hmt || [];
|
||||
(function() {
|
||||
var hm = document.createElement("script");
|
||||
hm.src = "https://hm.baidu.com/hm.js?612cb1567ca1cb640c7e9ee55b748c8c";
|
||||
var s = document.getElementsByTagName("script")[0];
|
||||
s.parentNode.insertBefore(hm, s);
|
||||
})();</script><script src=/js/index.eccef632.js></script></body></html>
|
3
server/dist/js/chunk-f717d484.926f7da8.js
vendored
Normal file
1
server/dist/js/h5.d98324a2.js
vendored
Normal file
21
server/dist/js/index.eccef632.js
vendored
Normal file
21
server/dist/js/m.3d7ab8ab.js
vendored
Normal file
8
server/dist/js/pc.cfb7cec1.js
vendored
Normal file
7
server/dist/m.html
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=apple-mobile-web-app-status-bar-style content=black><meta name=format-detection content="telephone=no"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel=icon href=/favicon.ico><link rel=stylesheet href=/static/css/font_1354695_lrb2z8iklqe.css><script src=https://unpkg.com/vue@2.6.11/dist/vue.min.js></script><script src=https://unpkg.com/element-ui@2.13.0/lib/index.js></script><title>LOOK Explorer - A light explorer for Cosmos based blockchains, Powered by ping.pub.</title><link href=/js/h5.d98324a2.js rel=prefetch><link href=/js/m.3d7ab8ab.js rel=preload as=script></head><body><noscript><strong>We're sorry but look doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script>var _hmt = _hmt || [];
|
||||
(function() {
|
||||
var hm = document.createElement("script");
|
||||
hm.src = "https://hm.baidu.com/hm.js?612cb1567ca1cb640c7e9ee55b748c8c";
|
||||
var s = document.getElementsByTagName("script")[0];
|
||||
s.parentNode.insertBefore(hm, s);
|
||||
})();</script><script src=/js/m.3d7ab8ab.js></script></body></html>
|
3
server/dist/static/cdn/axios@0.19.2.min.js
vendored
Normal file
10
server/dist/static/cdn/core@2.6.11.min.js
vendored
Normal file
1
server/dist/static/cdn/element-ui@2.13.0.js
vendored
Normal file
6
server/dist/static/cdn/vue-router@3.1.6.min.js
vendored
Normal file
6
server/dist/static/cdn/vue@2.6.11.min.js
vendored
Normal file
6
server/dist/static/cdn/vuex@3.1.3.min.js
vendored
Normal file
BIN
server/dist/static/cdp/risk.png
vendored
Normal file
After Width: | Height: | Size: 73 KiB |
109
server/dist/static/chains/cosmoshub.svg
vendored
Normal file
After Width: | Height: | Size: 161 KiB |
BIN
server/dist/static/chains/default.png
vendored
Normal file
After Width: | Height: | Size: 8.5 KiB |
29
server/dist/static/chains/irishub.svg
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 319.97 320">
|
||||
<defs>
|
||||
<style>.cls-1{fill:url(#linear-gradient);}.cls-2{fill:url(#linear-gradient-2);}.cls-3{fill:url(#linear-gradient-3);}.cls-4{fill:url(#linear-gradient-4);}.cls-5{fill:url(#linear-gradient-5);}.cls-6{fill:url(#linear-gradient-6);}.cls-7{fill:url(#linear-gradient-7);}</style>
|
||||
<linearGradient id="linear-gradient" x1="36.16" y1="24.77" x2="285.75" y2="274.37" gradientTransform="matrix(1, 0, 0, -1, -5.41, 313.57)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#189dd8"/>
|
||||
<stop offset="0.5" stop-color="#694ea0"/>
|
||||
<stop offset="1" stop-color="#ed3855"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear-gradient-2" x1="63.4" y1="-2.47" x2="312.99" y2="247.13" xlink:href="#linear-gradient"/>
|
||||
<linearGradient id="linear-gradient-3" x1="134.61" y1="-73.68" x2="384.2" y2="175.91" xlink:href="#linear-gradient"/>
|
||||
<linearGradient id="linear-gradient-4" x1="109.22" y1="-48.29" x2="358.82" y2="201.3" xlink:href="#linear-gradient"/>
|
||||
<linearGradient id="linear-gradient-5" x1="-36.5" y1="97.43" x2="213.1" y2="347.02" xlink:href="#linear-gradient"/>
|
||||
<linearGradient id="linear-gradient-6" x1="-61.81" y1="122.74" x2="187.78" y2="372.33" xlink:href="#linear-gradient"/>
|
||||
<linearGradient id="linear-gradient-7" x1="9.4" y1="51.53" x2="258.99" y2="301.12" xlink:href="#linear-gradient"/>
|
||||
</defs>
|
||||
<title>Asset 1</title>
|
||||
<g id="Layer_2">
|
||||
<g id="Layer_1-2">
|
||||
<path class="cls-1" d="M97.11,231.9l-73.39,8.26,43.09-99.45L22.68,80.5,130,68.3l29.16-67L223,88.1l73.41-8.26-42.9,99,43.81,59.74L190.59,250.72l-29.6,68Zm30.48-6.6a51.53,51.53,0,0,1-8.91,3.38l-2.8.78,41.39,56.26L172,251.94l-2.65-.34a52.91,52.91,0,0,1-36.1-21.36l-4.12-5.68Zm-14.39-51,33.39,46.2a36.31,36.31,0,0,0,29.33,15,35.61,35.61,0,0,0,4-.22L267,225.36l-34.69-47.31a35.77,35.77,0,0,0-5.91-6.32l-2-1.7-24.82,56-43.19-57.2Zm1.46-56.25A36.28,36.28,0,0,0,85.29,139.7l-35,80.74,58.12-6.53a35.22,35.22,0,0,0,8.4-2l2.48-.92L83.37,161.34l70.92-9,16.85-40.28Zm54.86,40.74,26.29,34.81,16-36.2,7.09-15.9a36.52,36.52,0,0,0-4-36.37L162.83,34.28,139.41,88.11a36,36,0,0,0-2.49,8.31L136.47,99l60.76-6.43Zm63.84-55.14,1,2.47a53.49,53.49,0,0,1-.39,42.1l-2.83,6.42,1.39.94a51,51,0,0,1,7.37,6.07l2.08,2,27.8-64.15ZM53,93.8,75.11,124l1.62-2.1a53,53,0,0,1,36.2-20.39l7-.73.12-1.69a52,52,0,0,1,1.75-10.37l.79-2.87Z"/>
|
||||
<path class="cls-2" d="M144.51,320A158.79,158.79,0,0,1,29.93,253.61l18.54-2.11c3.08,3.77,6.34,7.39,9.71,10.77a142.87,142.87,0,0,0,72.93,39.48Z"/>
|
||||
<path class="cls-3" d="M183.17,302.82a142.36,142.36,0,0,0,78.65-40.52c1.93-1.94,3.89-4,5.82-6.2l22.51-2.6A158.89,158.89,0,0,1,175.7,320Z"/>
|
||||
<path class="cls-4" d="M294.72,211.3a146.54,146.54,0,0,0,2-96.94l9-20.8a161.83,161.83,0,0,1,0,132.8Z"/>
|
||||
<path class="cls-5" d="M14.33,226.58a161.85,161.85,0,0,1,.16-133.51l11,15a146.46,146.46,0,0,0-2.17,97.7Z"/>
|
||||
<path class="cls-6" d="M30.59,65.5A159,159,0,0,1,144.42,0L137,17.16A142.34,142.34,0,0,0,58.18,57.7c-1.63,1.63-3.28,3.38-4.92,5.19Z"/>
|
||||
<path class="cls-7" d="M271.59,68.5c-3.08-3.78-6.34-7.4-9.72-10.79a142.81,142.81,0,0,0-72.8-39.45L175.59,0A158.89,158.89,0,0,1,290.08,66.4Z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.1 KiB |
16
server/dist/static/chains/kava.svg
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 193.63 213">
|
||||
<defs>
|
||||
<style>.cls-1{opacity:0.2;}.cls-2{fill:#ff564f;}</style>
|
||||
</defs>
|
||||
<title>Kava Logo</title>
|
||||
<g id="Layer_2">
|
||||
<g id="Layer_1-2">
|
||||
<g class="cls-1">
|
||||
<polygon class="cls-2" points="30 213 111.63 106.85 30 0 20.25 38.34 72.81 106.85 22.66 171.3 30 213"/>
|
||||
</g>
|
||||
<polygon class="cls-2" points="154.34 213 72.21 106.85 154.13 0 193 0 111.03 106.85 193.63 213 154.34 213"/>
|
||||
<rect class="cls-2" width="30" height="213"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 537 B |
84
server/dist/static/css/font_1354695_lrb2z8iklqe.css
vendored
Normal file
BIN
server/dist/static/icon/chromefeature.png
vendored
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
server/dist/static/icon/empty.png
vendored
Normal file
After Width: | Height: | Size: 9.5 KiB |
BIN
server/dist/static/icon/empty2.png
vendored
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
server/dist/static/icon/empty3.png
vendored
Normal file
After Width: | Height: | Size: 9.8 KiB |
BIN
server/dist/static/wallet/asset1.png
vendored
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
server/dist/static/wallet/asset2.png
vendored
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
server/dist/static/wallet/asset3.png
vendored
Normal file
After Width: | Height: | Size: 8.5 KiB |
BIN
server/dist/static/wallet/bg.png
vendored
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
server/dist/static/wallet/bg2.png
vendored
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
server/dist/static/wallet/link.png
vendored
Normal file
After Width: | Height: | Size: 5.9 KiB |
BIN
server/dist/static/wallet/usb.png
vendored
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
server/dist/static/wallet/wafe.gif
vendored
Normal file
After Width: | Height: | Size: 956 KiB |
28
server/package.json
Normal file
@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "look",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"start": "pm2 start pm2.json",
|
||||
"dev": "nodemon src/main.js",
|
||||
"test": "node app.js"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "dingyiming",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"compression": "^1.7.4",
|
||||
"dayjs": "^1.8.23",
|
||||
"dotenv": "^8.2.0",
|
||||
"express": "^4.16.3",
|
||||
"express-useragent": "^1.0.13",
|
||||
"express-validator": "^6.4.0",
|
||||
"http-proxy-middleware": "^0.19.0",
|
||||
"mongoose": "^5.9.7",
|
||||
"nunjucks": "^3.1.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"nodemon": "^2.0.3"
|
||||
}
|
||||
}
|
10
server/pm2.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"apps": [{
|
||||
"name": "look",
|
||||
"script": "./src/main.js",
|
||||
"out_fil": "~/look.log",
|
||||
"watch": true,
|
||||
"instances" : "1",
|
||||
"exec_mode" : "cluster"
|
||||
}]
|
||||
}
|
12
server/src/base/mongodb.js
Normal file
@ -0,0 +1,12 @@
|
||||
const mongoose = require("mongoose");
|
||||
mongoose.set("useCreateIndex", true);
|
||||
mongoose.connect(`mongodb://${process.env.Mongodb_url}?authSource=admin`, {
|
||||
useNewUrlParser: true,
|
||||
useUnifiedTopology: true,
|
||||
user: process.env.Mongodb_user,
|
||||
pass: process.env.Mongodb_pwd,
|
||||
});
|
||||
const db = mongoose.connection;
|
||||
db.once("open", () => {
|
||||
console.log("[dingyi]小芒果连上了~~");
|
||||
});
|
15
server/src/base/router.js
Normal file
@ -0,0 +1,15 @@
|
||||
/*
|
||||
* @Description:
|
||||
* @Autor: dingyi
|
||||
* @Date: 2020-04-10 12:40:50
|
||||
* @LastEditors: dingyi
|
||||
* @LastEditTime: 2020-04-13 11:39:02
|
||||
* @FilePath: /look-web/server/src/base/router.js
|
||||
*/
|
||||
|
||||
const api = require('../routes/index.js')
|
||||
|
||||
module.exports = (app) => {
|
||||
app.use('/look', api)
|
||||
app.use('/look', (req, res) => { res.send('look.ping.pub') })
|
||||
}
|
57
server/src/base/utils.js
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* @Description:
|
||||
* @Autor: dingyi
|
||||
* @Date: 2020-04-13 11:21:32
|
||||
* @LastEditors: dingyi
|
||||
* @LastEditTime: 2020-04-13 14:50:25
|
||||
* @FilePath: /look-web/server/src/base/utils.js
|
||||
*/
|
||||
const { validationResult } = require("express-validator");
|
||||
|
||||
exports.ok = ok
|
||||
function ok(res, data, other) {
|
||||
let obj = {
|
||||
code: 1,
|
||||
msg: "ok",
|
||||
data,
|
||||
};
|
||||
if (other) {
|
||||
obj = {
|
||||
...obj,
|
||||
...other,
|
||||
};
|
||||
}
|
||||
res.json(obj);
|
||||
}
|
||||
|
||||
function routerGet(router, uri, valid, logic) {
|
||||
router.get(uri, valid(), (req, res) => {
|
||||
const errors = validationResult(req);
|
||||
if (!errors.isEmpty())
|
||||
return ok(res, null, {
|
||||
code: 2,
|
||||
msg: errors.array()[0].msg,
|
||||
data: errors.array(),
|
||||
});
|
||||
logic(req, res);
|
||||
});
|
||||
}
|
||||
|
||||
function routerPost(router, uri, valid, logic) {
|
||||
router.post(uri, valid(), (req, res) => {
|
||||
const errors = validationResult(req);
|
||||
if (!errors.isEmpty())
|
||||
return ok(res, null, {
|
||||
code: 2,
|
||||
msg: errors.array()[0].msg,
|
||||
data: errors.array(),
|
||||
});
|
||||
logic(req, res);
|
||||
});
|
||||
}
|
||||
|
||||
exports.routerRun = {
|
||||
get: routerGet,
|
||||
post: routerPost
|
||||
}
|
||||
|
123
server/src/initChains.js
Normal file
@ -0,0 +1,123 @@
|
||||
/*
|
||||
* @Description:
|
||||
* @Autor: dingyi
|
||||
* @Date: 2020-04-13 23:03:22
|
||||
* @LastEditors: dingyi
|
||||
* @LastEditTime: 2020-04-13 23:53:51
|
||||
* @FilePath: \look-web\server\src\initChains.js
|
||||
*/
|
||||
module.exports = {
|
||||
Mainnet: [
|
||||
{
|
||||
"chainId": "cosmoshub-3",
|
||||
"lcd": "https://lcd.nylira.net",
|
||||
"logo": "/static/chains/cosmoshub.svg",
|
||||
"name": "Cosmos Hub",
|
||||
"rpc": "https://rpc.nylira.net",
|
||||
"version": "0.32.7",
|
||||
"api": 'V1',
|
||||
"unit": 'ATOM',
|
||||
"prefix": 'cosmos',
|
||||
"host": 'cosmos.ping.pub',
|
||||
},
|
||||
{
|
||||
"chainId": "kava-2",
|
||||
"lcd": "https://kava-relay.01node.com",
|
||||
"logo": "/static/chains/kava.svg",
|
||||
"name": "Kava",
|
||||
"rpc": "http://13.125.71.131:26657",
|
||||
"version": "0.32.7",
|
||||
"api": 'V1',
|
||||
"unit": 'KAVA',
|
||||
"prefix": 'kava',
|
||||
"host": 'kava.ping.pub'
|
||||
},
|
||||
{
|
||||
"chainId": "irishub",
|
||||
"lcd": "https://rpc.irisnet.org",
|
||||
"logo": "/static/chains/irishub.svg",
|
||||
"name": "IRISnet",
|
||||
"rpc": "http://seed-1.mainnet.irisnet.org:26657",
|
||||
"version": "0.32.1",
|
||||
"api": 'V2',
|
||||
"unit": 'IRIS',
|
||||
"prefix": 'iaa',
|
||||
"host": 'iris.ping.pub'
|
||||
},
|
||||
{
|
||||
"chainId": "e-money",
|
||||
"lcd": "http://emoney.validator.network/light",
|
||||
"logo": "/static/chains/cosmoshub.svg",
|
||||
"name": "e-money",
|
||||
"rpc": "https://emoney.validator.network",
|
||||
"version": "0.32.7",
|
||||
"api": 'V1',
|
||||
"unit": '',
|
||||
"prefix": '', // 地址前缀
|
||||
"host": 'e-money.ping.pub'
|
||||
}
|
||||
],
|
||||
Testnet: [
|
||||
{
|
||||
"chainId": "sentinelhub-test",
|
||||
"lcd": "https://lcd.turing.sentinel.co",
|
||||
"logo": "/static/chains/cosmoshub.svg",
|
||||
"name": "Sentinel Network",
|
||||
"rpc": "https://rpc.turing.sentinel.co",
|
||||
"version": "0.32.7",
|
||||
"api": 'V1',
|
||||
"prefix": '',
|
||||
"unit": '',
|
||||
"host": 'sentinel-test.ping.pub'
|
||||
},
|
||||
{
|
||||
"chainId": "cell-test-01",
|
||||
"lcd": "http://sz1.icell.one:1317",
|
||||
"logo": "/static/chains/cosmoshub.svg",
|
||||
"name": "Cell Network",
|
||||
"rpc": "http://sz1.icell.one:26657",
|
||||
"version": "0.32.7",
|
||||
"prefix": 'cosmos',
|
||||
"api": 'V1',
|
||||
"unit": '',
|
||||
"host": 'cell-test.ping.pub'
|
||||
},
|
||||
{
|
||||
"chainId": "cyber-test",
|
||||
"lcd": "https://titan.cybernode.ai/lcd",
|
||||
"logo": "/static/chains/cosmoshub.svg",
|
||||
"name": "cyber",
|
||||
"rpc": "https://titan.cybernode.ai/api",
|
||||
"version": "0.32.7",
|
||||
"api": 'V1',
|
||||
"prefix": '',
|
||||
"unit": '',
|
||||
"host": 'cyber-test.ping.pub'
|
||||
},
|
||||
{
|
||||
"chainId": "e-money-test",
|
||||
"lcd": "https://lilmermaid.validator.network/light",
|
||||
"logo": "/static/chains/cosmoshub.svg",
|
||||
"name": "e-money",
|
||||
"rpc": "https://lilmermaid.validator.network",
|
||||
"version": "0.32.7",
|
||||
"api": 'V1',
|
||||
"unit": '',
|
||||
"prefix": '', // 地址前缀
|
||||
"host": 'e-money-test.ping.pub'
|
||||
},
|
||||
// {
|
||||
// "chainId": "new-test",
|
||||
// "lcd": "https://lcd.nylira.net",
|
||||
// "logo": "/static/chains/cosmoshub.svg",
|
||||
// "name": "Genesis Test",
|
||||
// "rpc": "https://rpc.nylira.net",
|
||||
// "version": "0.32.7",
|
||||
// "api": 'V1',
|
||||
// "unit": 'ATOM',
|
||||
// "prefix": 'cosmos',
|
||||
// "host": '',
|
||||
// "genesis_time": '2020-05-01'
|
||||
// },
|
||||
]
|
||||
}
|
92
server/src/main.js
Normal file
@ -0,0 +1,92 @@
|
||||
/*
|
||||
* @Description:
|
||||
* @Autor: dingyi
|
||||
* @Date: 2020-03-27 11:41:45
|
||||
* @LastEditors: Please set LastEditors
|
||||
* @LastEditTime: 2020-04-16 00:20:19
|
||||
* @FilePath: \look-web\server\src\main.js
|
||||
*/
|
||||
// 环境配置
|
||||
require('dotenv').config()
|
||||
// 数据库
|
||||
require('./base/mongodb.js')
|
||||
|
||||
var express = require('express');
|
||||
var app = express();
|
||||
app.use(express.json());
|
||||
|
||||
var router = express.Router();
|
||||
|
||||
// gzip
|
||||
const compression = require('compression')
|
||||
app.use(compression())
|
||||
|
||||
// ua
|
||||
var useragent = require('express-useragent');
|
||||
app.use(useragent.express());
|
||||
|
||||
// proxy
|
||||
var proxy = require('http-proxy-middleware');
|
||||
// 根据请求转发
|
||||
app.use('/api*', proxy({
|
||||
target: 'https://lcd.nylira.net',
|
||||
changeOrigin: true,
|
||||
pathRewrite: {
|
||||
['^/api']: ''
|
||||
},
|
||||
router: function (req) {
|
||||
return req.headers.server || 'https://lcd.nylira.net';
|
||||
}
|
||||
}))
|
||||
|
||||
|
||||
router.get('/', function (req, res, next) {
|
||||
var isMobile = req.useragent.isMobile
|
||||
console.log('移动端', isMobile)
|
||||
let render = isMobile ? 'm.html' : 'index.html'
|
||||
res.render(render);
|
||||
});
|
||||
|
||||
router.get('/validator', function (req, res, next) {
|
||||
res.redirect('/#/validator');
|
||||
});
|
||||
router.get('/uptime', function (req, res, next) {
|
||||
res.redirect('/#/uptime');
|
||||
});
|
||||
router.get('/block', function (req, res, next) {
|
||||
res.redirect('/#/block');
|
||||
});
|
||||
router.get('/proposal', function (req, res, next) {
|
||||
res.redirect('/#/governance');
|
||||
});
|
||||
|
||||
router.get('/parameter', function (req, res, next) {
|
||||
res.redirect('/#/parameter');
|
||||
});
|
||||
|
||||
app.use('/', router);
|
||||
|
||||
// 路由
|
||||
require('./base/router.js')(app)
|
||||
|
||||
var nunjucks = require('nunjucks')
|
||||
nunjucks.configure('dist', {
|
||||
autoescape: true,
|
||||
express: app
|
||||
});
|
||||
|
||||
// static cache
|
||||
var path = require('path');
|
||||
app.use(express.static(path.join(__dirname, '../dist'), {
|
||||
maxAge: '1y',
|
||||
expires: '1y',
|
||||
Etag: false,
|
||||
lastModified: false
|
||||
}));
|
||||
|
||||
var server = app.listen(process.env.PORT, function () {
|
||||
var host = server.address().address;
|
||||
var port = server.address().port;
|
||||
|
||||
console.log('app listening at http://%s:%s', host, port);
|
||||
});
|
60
server/src/models/chain.js
Normal file
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* @Description:
|
||||
{
|
||||
"chainId": "cosmoshub-3",
|
||||
"lcd": "https://lcd.nylira.net",
|
||||
"logo": "/static/chains/cosmoshub.svg",
|
||||
"name": "Cosmos Hub",
|
||||
"rpc": "https://rpc.nylira.net",
|
||||
"version": "0.32.7",
|
||||
"api": 'V1',
|
||||
"unit": 'ATOM',
|
||||
"prefix": 'cosmos',
|
||||
"host": isDev ? '' : 'cosmos.ping.pub'
|
||||
},
|
||||
* @Autor: dingyi
|
||||
* @Date: 2020-04-13 11:13:34
|
||||
* @LastEditors: dingyi
|
||||
* @LastEditTime: 2020-04-13 23:16:37
|
||||
* @FilePath: \look-web\server\src\models\chain.js
|
||||
*/
|
||||
var mongoose = require('mongoose');
|
||||
const dayjs = require('dayjs')
|
||||
var Schema = mongoose.Schema;
|
||||
|
||||
const tableSchema = new Schema({
|
||||
// 分类 Mainnet Testnet GOZ
|
||||
type: {
|
||||
type: String, index: true
|
||||
},
|
||||
// 显示名称
|
||||
name: String,
|
||||
logo: String,
|
||||
chainId: String,
|
||||
desc: String,
|
||||
lcd: String,
|
||||
rpc: String,
|
||||
version: String,
|
||||
// 接口版本 V1 类 cosmoshub V2 类 irishub
|
||||
api: String,
|
||||
unit: String,
|
||||
prefix: String,
|
||||
host: String,
|
||||
genesis_time: Date,
|
||||
// 创建时间
|
||||
created: { type: Date, default: Date.now },
|
||||
// 更新时间
|
||||
updated: { type: Date, default: Date.now }
|
||||
})
|
||||
|
||||
tableSchema.methods.toJSONObject = function () {
|
||||
return {
|
||||
name: this.name,
|
||||
logo: this.logo,
|
||||
code: this.code,
|
||||
created: dayjs(this.created).format('YYY MM DD HH:MM:ss'),
|
||||
updated: dayjs(this.updated).format('YYY MM DD HH:MM:ss')
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = mongoose.model("look_chain", tableSchema);
|