Compare commits

..

3 Commits

Author SHA1 Message Date
zramsay
3c7ff9a991 s/Laconic/Zenith/g 2025-10-31 09:08:39 -04:00
f6c28acfb3 Update UI for zenithd (#2)
All checks were successful
Publish cosmos-explorer docker image on release / Run docker build and publish (release) Successful in 4m28s
Part of https://plan.wireit.in/deepstack/browse/VUL-61/

Co-authored-by: Pranav <jadhavpranav89@gmail.com>
Reviewed-on: LaconicNetwork/cosmos-explorer#2
2025-10-16 06:19:11 +00:00
b7e3fac211 Add CI to publish docker image (#1)
All checks were successful
Publish cosmos-explorer docker image on release / Run docker build and publish (release) Successful in 5m17s
Part of https://plan.wireit.in/deepstack/browse/VUL-61/

Co-authored-by: Pranav <jadhavpranav89@gmail.com>
Reviewed-on: LaconicNetwork/cosmos-explorer#1
2025-10-10 11:56:23 +00:00
16 changed files with 262 additions and 190 deletions

29
.github/workflows/docker-image.yml vendored Normal file
View File

@ -0,0 +1,29 @@
name: Publish cosmos-explorer docker image on release
on:
release:
types: [published]
jobs:
build:
name: Run docker build and publish
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run docker build
run: docker build -t cerc/cosmos-explorer -f Dockerfile .
- name: Get the version
id: vars
run: |
echo "sha=$(echo ${GITHUB_SHA:0:7})" >> $GITHUB_OUTPUT
echo "tag=$(echo ${GITHUB_REF#refs/tags/})" >> $GITHUB_OUTPUT
- name: Tag docker image with SHA
run: docker tag cerc/cosmos-explorer git.vdb.to/laconicnetwork/cerc/cosmos-explorer:${{steps.vars.outputs.sha}}
- name: Tag docker image with release tag
run: docker tag git.vdb.to/laconicnetwork/cerc/cosmos-explorer:${{steps.vars.outputs.sha}} git.vdb.to/laconicnetwork/cerc/cosmos-explorer:${{steps.vars.outputs.tag}}
- name: Docker Login
run: echo ${{ secrets.CICD_PUBLISH_TOKEN }} | docker login https://git.vdb.to -u laconiccicd --password-stdin
- name: Docker Push SHA
run: docker push git.vdb.to/laconicnetwork/cerc/cosmos-explorer:${{steps.vars.outputs.sha}}
- name: Docker Push TAGGED
run: docker push git.vdb.to/laconicnetwork/cerc/cosmos-explorer:${{steps.vars.outputs.tag}}

14
Dockerfile Normal file
View File

@ -0,0 +1,14 @@
# Originally from: https://github.com/devcontainers/images/blob/main/src/javascript-node/.devcontainer/Dockerfile
# [Choice] Node.js version (use -bullseye variants on local arm64/Apple Silicon): 18, 16, 14, 18-bullseye, 16-bullseye, 14-bullseye, 18-buster, 16-buster, 14-buster
ARG VARIANT=20-bullseye
FROM node:${VARIANT}
WORKDIR /app
COPY . .
RUN yarn install
# Expose port for http
EXPOSE 4173

View File

@ -0,0 +1,74 @@
{
"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"
}
]
}

View File

@ -0,0 +1,31 @@
{
"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"
}]
}

View File

@ -1,23 +0,0 @@
{
"chain_name": "laconic-mainnet",
"registry_name": "laconic-mainnet",
"api": [
{"provider": "lcn-api", "address": "https://rest-api.laconicd-mainnet-1.laconic.com"}
],
"rpc": [
{"provider": "lcn-rpc", "address": "https://laconicd-mainnet-1.laconic.com"}
],
"sdk_version": "0.50.10",
"coin_type": "118",
"min_tx_fee": "800",
"addr_prefix": "laconic",
"logo": "/logos/cosmos.svg",
"assets": [{
"base": "alnt",
"symbol": "LNT",
"exponent": "18",
"coingecko_id": "cosmos",
"logo": "/logos/cosmos.svg"
}]
}

View File

@ -0,0 +1,30 @@
{
"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"
}

27
chains/mainnet/nolus.json Normal file
View File

@ -0,0 +1,27 @@
{
"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"
}]
}

View File

@ -0,0 +1,32 @@
{
"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": ""
}]
}

View File

@ -1,142 +0,0 @@
#!/bin/bash
source .env
echo "Using REGISTRY_BOND_ID: $REGISTRY_BOND_ID"
echo "Using DEPLOYER_LRN: $DEPLOYER_LRN"
echo "Using AUTHORITY: $AUTHORITY"
# Repository URL
REPO_URL="https://git.vdb.to/cerc-io/cosmos-explorer"
# Get the latest commit hash from the repository
LATEST_HASH=$(git ls-remote $REPO_URL HEAD | awk '{print $1}')
PACKAGE_VERSION=0.0.2
# Current date and time for note
CURRENT_DATE_TIME=$(date -u)
CONFIG_FILE=config.yml
# Reference: https://git.vdb.to/cerc-io/test-progressive-web-app/src/branch/main/scripts
# Get latest version from registry and increment application-record version
NEW_APPLICATION_VERSION=$(laconic -c $CONFIG_FILE registry record list --type ApplicationRecord --all --name "deploy-frontend" 2>/dev/null | jq -r -s ".[] | sort_by(.createTime) | reverse | [ .[] | select(.bondId == \"$REGISTRY_BOND_ID\") ] | .[0].attributes.version" | awk -F. -v OFS=. '{$NF += 1 ; print}')
if [ -z "$NEW_APPLICATION_VERSION" ] || [ "1" == "$NEW_APPLICATION_VERSION" ]; then
# Set application-record version if no previous records were found
NEW_APPLICATION_VERSION=0.0.1
fi
# Generate application-record.yml with incremented version
cat >./records/application-record.yml <<EOF
record:
type: ApplicationRecord
version: $NEW_APPLICATION_VERSION
repository_ref: $LATEST_HASH
repository: ["$REPO_URL"]
app_type: webapp
name: deploy-frontend
app_version: $PACKAGE_VERSION
EOF
echo "Files generated successfully"
RECORD_FILE=records/application-record.yml
# Publish ApplicationRecord
publish_response=$(laconic -c $CONFIG_FILE registry record publish --filename $RECORD_FILE)
rc=$?
if [ $rc -ne 0 ]; then
echo "FATAL: Failed to publish record"
exit $rc
fi
RECORD_ID=$(echo $publish_response | jq -r '.id')
echo "ApplicationRecord published"
echo $RECORD_ID
# Set name to record
REGISTRY_APP_LRN="lrn://$AUTHORITY/applications/laconic-explorer"
sleep 2
laconic -c $CONFIG_FILE registry name set "$REGISTRY_APP_LRN@${PACKAGE_VERSION}" "$RECORD_ID"
rc=$?
if [ $rc -ne 0 ]; then
echo "FATAL: Failed to set name: $REGISTRY_APP_LRN@${PACKAGE_VERSION}"
exit $rc
fi
sleep 2
laconic -c $CONFIG_FILE registry name set "$REGISTRY_APP_LRN@${LATEST_HASH}" "$RECORD_ID"
rc=$?
if [ $rc -ne 0 ]; then
echo "FATAL: Failed to set hash"
exit $rc
fi
sleep 2
# Set name if latest release
laconic -c $CONFIG_FILE registry name set "$REGISTRY_APP_LRN" "$RECORD_ID"
rc=$?
if [ $rc -ne 0 ]; then
echo "FATAL: Failed to set release"
exit $rc
fi
echo "$REGISTRY_APP_LRN set for ApplicationRecord"
# Check if record found for REGISTRY_APP_LRN
query_response=$(laconic -c $CONFIG_FILE registry name resolve "$REGISTRY_APP_LRN")
rc=$?
if [ $rc -ne 0 ]; then
echo "FATAL: Failed to query name"
exit $rc
fi
APP_RECORD=$(echo $query_response | jq '.[0]')
if [ -z "$APP_RECORD" ] || [ "null" == "$APP_RECORD" ]; then
echo "No record found for $REGISTRY_APP_LRN."
exit 1
fi
# Get payment address for deployer
paymentAddress=$(laconic -c config.yml registry name resolve "$DEPLOYER_LRN" | jq -r '.[0].attributes.paymentAddress')
paymentAmount=$(laconic -c config.yml registry name resolve "$DEPLOYER_LRN" | jq -r '.[0].attributes.minimumPayment' | sed 's/alnt//g')
# Pay deployer if paymentAmount is not null
if [[ -n "$paymentAmount" && "$paymentAmount" != "null" ]]; then
payment=$(laconic -c config.yml registry tokens send --address "$paymentAddress" --type alnt --quantity "$paymentAmount")
# Extract the transaction hash
txHash=$(echo "$payment" | jq -r '.tx.hash')
echo "Paid deployer with txHash as $txHash"
else
echo "Payment amount is null; skipping payment."
fi
# Generate application-deployment-request.yml
cat >./records/application-deployment-request.yml <<EOF
record:
type: ApplicationDeploymentRequest
version: '1.0.0'
name: laconic-explorer@$PACKAGE_VERSION
application: lrn://$AUTHORITY/applications/laconic-explorer@$PACKAGE_VERSION
deployer: $DEPLOYER_LRN
dns: explorer.laconic.com
config:
env:
CERC_SINGLE_PAGE_APP: true
meta:
note: Added by script @ $CURRENT_DATE_TIME
repository: "$REPO_URL"
repository_ref: $LATEST_HASH
payment: $txHash
EOF
RECORD_FILE=records/application-deployment-request.yml
sleep 2
deployment_response=$(laconic -c $CONFIG_FILE registry record publish --filename $RECORD_FILE)
if [ $rc -ne 0 ]; then
echo "FATAL: Failed to query deployment request"
exit $rc
fi
DEPLOYMENT_REQUEST_ID=$(echo $deployment_response | jq -r '.id')
echo "ApplicationDeploymentRequest published"
echo $DEPLOYMENT_REQUEST_ID

View File

@ -4,8 +4,8 @@
<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" />
<title>Zenith Blockchain Explorer And Web Wallet</title>
<meta name="description" content="Zenith Explorer is a block explorer/web wallet for zenithd blockchain" />
<link rel="stylesheet" type="text/css" href="/loader.css" />
</head>
<body>

View File

@ -1,6 +1,6 @@
{
"name": "ping.pub",
"version": "3.0.0",
"version": "3.0.0-zenith-0.1.1",
"private": true,
"target": "",
"scripts": {

View File

@ -83,7 +83,7 @@ dayjs()
<RouterLink to="/" class="flex items-center">
<img class="w-10 h-10" src="../../assets/logo.svg" />
<h1 class="flex-1 ml-3 text-2xl font-semibold dark:text-white">
Laconic Explorer
Zenith Explorer
</h1>
</RouterLink>
<div
@ -246,24 +246,24 @@ dayjs()
</div>
</div>
<div class="px-2">
<div class="px-4 text-sm pt-2 text-gray-400 pb-2 uppercase">
Tools
</div>
<RouterLink to="/wallet/suggest"
class="py-2 px-4 flex items-center cursor-pointer rounded-lg hover:bg-gray-100 dark:hover:bg-[#373f59]"
<div class="px-4 text-sm pt-2 text-gray-400 pb-2 uppercase">
Tools
</div>
<RouterLink to="/wallet/suggest"
class="py-2 px-4 flex items-center cursor-pointer rounded-lg hover:bg-gray-100 dark:hover:bg-[#373f59]"
>
<Icon icon="mdi:frequently-asked-questions" class="text-xl mr-2" />
<div
class="text-base capitalize flex-1 text-gray-600 dark:text-gray-200"
>
<Icon icon="mdi:frequently-asked-questions" class="text-xl mr-2" />
<div
class="text-base capitalize flex-1 text-gray-600 dark:text-gray-200"
>
Wallet Helper
</div>
</RouterLink>
<div class="px-4 text-sm pt-2 text-gray-400 pb-2 uppercase">
Wallet Helper
</div>
</RouterLink>
<!-- <div class="px-4 text-sm pt-2 text-gray-400 pb-2 uppercase">
{{ $t('module.sponsors') }}
</div>
<Sponsors />
<div class="px-4 text-sm pt-2 text-gray-400 pb-2 uppercase">{{ $t('module.links') }}</div>
<Sponsors /> -->
<!-- <div class="px-4 text-sm pt-2 text-gray-400 pb-2 uppercase">{{ $t('module.links') }}</div>
<a
href="https://x.com/laconicnetwork"
target="_blank"
@ -288,7 +288,7 @@ dayjs()
>
Discord
</div>
</a>
</a> -->
</div>
</div>
<div class="xl:!ml-64 px-3 pt-4">

View File

@ -6,8 +6,8 @@
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.05 12.623A15.378 15.378 0 0 0 8.57 1.714C8.573 1.136 8.54.564 8.477 0H0v16.287c0 1.974.752 3.949 2.258 5.454A7.69 7.69 0 0 0 7.714 24L24 24v-8.477a15.636 15.636 0 0 0-1.715-.095c-4.258 0-8.115 1.73-10.908 4.523-2.032 1.981-5.291 1.982-7.299-.026-2.006-2.006-2.007-5.266-.029-7.302Zm18.192-10.86a6.004 6.004 0 0 0-8.485 0 6.003 6.003 0 0 0 0 8.484 6.003 6.003 0 0 0 8.485 0 6.002 6.002 0 0 0 0-8.485Z" fill="var(--color-white)"></path>
</svg>
<div class="text-sm capitalize flex-1 text-gray-600 dark:text-gray-200">
Laconic Network
Zenith Network
</div>
</a>
</div>
</template>
</template>

View File

@ -22,7 +22,7 @@
"links": "链接"
},
"pages": {
"title": "Laconic Explorer",
"title": "Zenith Explorer",
"slogan": "Ping Dashboard 是一个区块链浏览器,也是一个网页钱包,还有更多 ... 🛠",
"description": "Cosmos Ecosystem Blockchains 🚀",
"search_placeholder": "搜索区块链",

View File

@ -23,7 +23,7 @@
"links": "Links"
},
"pages": {
"title": "Laconic Explorer",
"title": "Zenith Explorer",
"title_all": "404",
"tag": "Beta",
"tag_all": "Page Not Found",

View File

@ -21,7 +21,7 @@
"links": "Tautan"
},
"pages": {
"title": "Laconic Explorer",
"title": "Zenith Explorer",
"title_all": "404",
"tag": "Beta",
"tag_all": "Halaman Tidak Ditemukan",