X PrimeFlow

CardChain Testnet

CardChain Testnet
Chain ID: cardtestnet-14
Block Height:
Network Status: Connecting
Explorer
cardtestnet-14

Endpoints & Sync

CardChain Testnet endpoints and rollback-safe synchronization procedures.

Configured RPC, API, gRPC

A catalogue entry does not prove current uptime. Open RPC / API Monitoring for a fresh chain-ID-verified check and scanner timestamp before production use.

RPC / API Monitoring โ†—
Peers & SeedsPeer discovery and safe configuration

State Sync

State Sync joins the network from a trusted recent block through the network-specific BonyNode RPC.

1

1. Stop the service and reset node data

(
export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"

set -euo pipefail

NODE_HOME="$HOME/.cardchaind"
SERVICE="cardchaind"
CHAIN_ID="cardtestnet-14"
STATE_SYNC_RPC="https://cardchain-testnet-rpc.bonynode.online"
TRUST_OFFSET=1000

# Verify the BonyNode RPC before changing local data.
STATUS=$(curl -fsS --max-time 15 "$STATE_SYNC_RPC/status")
[ "$(jq -r '.result.node_info.network' <<<"$STATUS")" = "$CHAIN_ID" ]
LATEST_HEIGHT=$(jq -r '.result.sync_info.latest_block_height' <<<"$STATUS")
[[ "$LATEST_HEIGHT" =~ ^[0-9]+$ ]] && (( LATEST_HEIGHT > TRUST_OFFSET ))
TRUST_HEIGHT=$((LATEST_HEIGHT - TRUST_OFFSET))
TRUST_HASH=$(curl -fsS --max-time 15 "$STATE_SYNC_RPC/block?height=$TRUST_HEIGHT" | jq -r '.result.block_id.hash')
[[ "$TRUST_HASH" =~ ^[A-Fa-f0-9]{64}$ ]]

STAMP=$(date -u +%Y%m%dT%H%M%SZ)
DATA_BACKUP="$NODE_HOME/data.backup.$STAMP"

test -s "$NODE_HOME/data/priv_validator_state.json"
test ! -e "$DATA_BACKUP"
sudo systemctl stop "$SERVICE"
mv "$NODE_HOME/data" "$DATA_BACKUP"
mkdir -p "$NODE_HOME/data"
install -m 0600 "$DATA_BACKUP/priv_validator_state.json" "$NODE_HOME/data/priv_validator_state.json"

echo "Previous node data retained at: $DATA_BACKUP"
)
2

2. Configure State Sync

(
export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"

set -euo pipefail

NODE_HOME="$HOME/.cardchaind"
CHAIN_ID="cardtestnet-14"
STATE_SYNC_RPC="https://cardchain-testnet-rpc.bonynode.online"
TRUST_OFFSET=1000
CONFIG="$NODE_HOME/config/config.toml"

STATUS=$(curl -fsS --max-time 15 "$STATE_SYNC_RPC/status")
[ "$(jq -r '.result.node_info.network' <<<"$STATUS")" = "$CHAIN_ID" ]
LATEST_HEIGHT=$(jq -r '.result.sync_info.latest_block_height' <<<"$STATUS")
[[ "$LATEST_HEIGHT" =~ ^[0-9]+$ ]] && (( LATEST_HEIGHT > TRUST_OFFSET ))
SYNC_BLOCK_HEIGHT=$((LATEST_HEIGHT - TRUST_OFFSET))
SYNC_BLOCK_HASH=$(curl -fsS --max-time 15 \
  "$STATE_SYNC_RPC/block?height=$SYNC_BLOCK_HEIGHT" | jq -r '.result.block_id.hash')
[[ "$SYNC_BLOCK_HASH" =~ ^[A-Fa-f0-9]{64}$ ]]

test -f "$CONFIG"
cp -p "$CONFIG" "$CONFIG.bonynode-backup"

sed -i -E \
  -e '/^\[statesync\]/,/^\[/{s|^enable *=.*|enable = true|;}' \
  -e "/^\[statesync\]/,/^\[/{s|^rpc_servers *=.*|rpc_servers = \"$STATE_SYNC_RPC,$STATE_SYNC_RPC\"|;}" \
  -e "/^\[statesync\]/,/^\[/{s|^trust_height *=.*|trust_height = $SYNC_BLOCK_HEIGHT|;}" \
  -e "/^\[statesync\]/,/^\[/{s|^trust_hash *=.*|trust_hash = \"$SYNC_BLOCK_HASH\"|;}" \
  "$CONFIG"

sed -n '/^\[statesync\]/,/^\[/p' "$CONFIG" | \
  grep -E '^(enable|rpc_servers|trust_height|trust_hash) *='
)
3

3. Restart the service and check logs

(
export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"

set -euo pipefail

SERVICE="cardchaind"
sudo systemctl restart "$SERVICE"
sudo journalctl -u "$SERVICE" -n 100 -f
)