오늘은 Archway 네트워크에 참여해보는 포스팅을 작성하려고 합니다
해당 게시글은 Archway Network를 기반으로 작성되었지만 같은 방식으로 다른 Cosmos에 다른 네트워크에도 참여 가능합니다!
참여 후 Cosmos Network에 최적화 되어 있는 Ping-Pub explorer에 자신의 노드로 받는 테스트 네트워크 정보를 연동하는 것 까지 포스팅하겠습니다
포스팅 시작하겠습니다 😀😀
먼저, Archway Github주소로 들어가서 레포지토리 Clone을 진행합니다. 이후 현재 버전에 맞는 Branch로 변경합니다
git clone https://github.com/archway-network/archway.git
cd archway
git checkout v.4.0.2
✏️ Clone후 테스트넷 버전의 Tag로 변경해줘야합니다.
작성 시점의version
은v4.0.2
이며 테스트넷 버전은 Polkachu의 archway testnet에서rpc endpoint
로 들어간 후abci info
를 통해 확인 가능합니다.
변경 후 다음 명령어를 실행합니다
make install
install 이후 변경한 Tag와 같은 Version인지 확인해 줍니다
archwayd version
✅유효성 검사 없이 노드를 실행하려는 경우에는 이 단계가 필요하지 않다고 합니다
먼저 네트워크의 Node moniker
를 설정해 줍니다
✏️Moniker는 사람이 읽기 쉬운 검증노드 닉네임입니다.
다음은 moniker
를 설정하는 명령어입니다
# 기본 명령어
archwayd init <moniker> --chain-id <chain>
# Main Network
archwayd init my-node --chain-id archway-1
# Test Network
archwayd init my-node --chain-id constantine-3
🚨 현재 이 글을 작성하는 기준으로는 Test Network가
constantine-3
이며, 이는 후에 달라 질 수 있습니다
⤷ 테스트넷 버전은 Polkachu의 archway testnet에서rpc endpoint
로 들어간 후status
를 통해 확인 가능합니다.
✅ 트랜잭션을 검증하거나 제출하지 않고 블록체인 상태를 쿼리하기 위해 노드를 실행하려는 경우에는 이 단계가 필요하지 않습니다.
노드에서 트랜잭션을 실행하는 데 사용할 계정을 보유하려면 개인 키를 하나 이상 생성해야 합니다.
다음은 개인 키를 실행하는 명령어이며, 실행 후 keyring의 비밀번호를 입력하시면 됩니다.
rchwayd keys add <account-name>
# 실제 명령어 예시
archwayd keys add my-node
🚨 비밀번호를 입력 후에는
mnemonic
이 나오며 해당mnemonic
은 최초에 개인키를 생성할 때만 나오고, 계정 복구에 필요함으로 필요하시면 백업을 권장드립니다
생성 후 아래 명령어를 이용하여 확인합니다.
archwayd keys list
Root Directory에 .archway/config
폴더로 이동합니다
cd ~/.archway/config
해당 폴더로 들어가면 여러가지 폴더와 함께 genesis.json
파일이 있는데, Sync를 맞추기 위해 해당 genesis.json
파일을 현재 TestNet의 genesis data와 맞춰줍니다
curl -s https://rpc.constantine.archway.tech/genesis |jq -r .result.genesis > ${HOME}/.archway/config/genesis.json
# or
wget https://github.com/archway-network/networks/blob/main/constantine-3/genesis.json
wget -O genesis.json https://snapshots.polkachu.com/testnet-genesis/archway/genesis.json --inet4-only
mv genesis.json ~/.archway/config
Sync from genesis
노드가 생성 블록 이후 모든 블록을 통과하므로 이는 노드를 동기화하는 가장 느리고 가장 안전한 방법입니다.
✅ 최초의 Genesis 정보를 받아오므로 Sync가 되는데 시간이 상대적으로 많이 소요될 수 있습니다.
Sync with state-sync
상태 동기화는 특정 블록 높이에서 애플리케이션 상태의 스냅샷을 가져와 노드가 상태를 빠르게 동기화할 수 있도록 하는 기능입니다. 이는 제네시스 블록의 모든 블록을 재생하는 기본 방법에 비해 노드가 네트워크와 동기화하는 데 필요한 시간을 크게 줄입니다. 동기화는 스냅샷 지원 RPC와 신뢰할 수 있는 블록 높이를 통해 발생합니다.
상태 동기화의 장점은 완전히 동기화된 노드에 비해 데이터베이스가 매우 작다는 것입니다. 따라서 상태 동기화를 사용하여 노드를 네트워크에 다시 동기화하면 스토리지 사용량을 최소화하여 운영 비용을 낮추는 데 도움이 됩니다.
✅ state-sync를 사용하여 노드를 동기화하면 네트워크의 전체 트랜잭션 기록이 아니라 상태 동기화 RPC가 저장한 가장 최근 상태만 확인할 수 있습니다.
Sync from snapshot
스냅샷은 특정 블록 높이의 블록체인 노드 상태에 대한 압축된 아카이브입니다. 노드를 스냅샷과 동기화하면 노드가 최초 블록이 아닌 스냅샷의 블록 높이에서 시작되므로 네트워크를 따라잡는 프로세스의 속도가 빨라집니다.
해당 글에서는 state-sync
를 이용하여 진행하겠습니다
먼저 Cosmos Network에서 Validation Service를 운영하고 있는 Polkachu에 접속합니다
테스트넷을 진행할 예정이니 TestLab 탭에서 Archway로 들어갑니다
들어가보면 State-Sync
항목이 있는데, Instruction
의 스크립트를 복사해 입력 해줍니다
이후 이전페이지의 Live Peers
항목에 들어가 하단의 Polkachu State-Sync Peer for Archway Testnet
항목을 복사해 준 뒤 ~/.archwayd/config/config.toml
파일을 열어 persistent_peers
항목에 입력해 줍니다
# example
# config.toml
# Comma separated list of nodes to keep persistent connections to
persistent_peers = "e5e71ccd387eba74fec51b211e9236fca965af40@46.4.5.45:11556"
🚨 !ERR failed to restore snapshot err="multistore restore: import failed: tree must be empty"
다음 오류는 이전에 Node실행 했던 적이 있어 Block Height가 많이 뒤쳐진 상태로 Sync를 맞추려할 때 발생하며, 해당 오류가 발생하지 않더라도 Node를 꺼놓았다가 다시 실행하려고 할 때 다음 명령어를 통해 DB를 초기화한 후 다시 실행하여 Sync를 맞추는 방법을 사용할 수 있다.archwayd tendermint unsafe-reset-all
다음 명령어를 통해 Node를 실행하며 초기에 Sync를 맞추는 작업을 합니다
archwayd start
이후 다음 명령어를 통해 latest_block_height
를 확인하며 싱크가 정상적으로 맞춰졌는지 확인합니다
archwayd status
# or
archwayd status | jq
🚨 jq
Jq는 Json포맷의 데이터를 보기 쉽게 도와주는 커맨드라인 유틸리티입니다 자세한 정보는 jq 공식문서에서 확인 가능합니다
Ping Pub은 Tx, block, Validator의 상태를 실시간으로 Customer해서 볼 수 있다는 장점이 있습니다.
다음 PingPub 공식 사이트에서 메인넷에 대한 정보를 실시간으로 확인 가능하며
PingPub 테스트넷에서 테스트 네트워크 정보도 확인 가능하지만
PingPub Explorer Github를 이용해서 자신의 참여중인 네트워크들로 커스텀해서 사용가능합니다!
Clone후 커스텀하는 방법을 알아보겠습니다!
먼저 PingPub Explorer Github에 들어가서 clone을 진행합니다
git clone https://github.com/ping-pub/explorer.git
clone받은 후 해당 레포지토리 내부에 chains/mainnet/
으로 들어갑니다
cd ./chains/mainnet/
해당 폴더 내부에 archway-test.json
을 생성 후 README.md
를 읽어보시면 Sample of Config가 있는데 복사 해서 입력 후 수정합니다
다음은 제가 수정한 archway-test.json
입니다.
{
"chain_name": "ArchwayTestnet", // Sample에서 수정
"api": [
{
"address": "http://localhost:1317", // api address
"provider": "your_provider_name"
}
],
"rpc": [
{
"address": "http://localhost:26657", // rpc address
"provider": "your_provider_name"
}
],
"sdk_version": "0.42.6",
"coin_type": "118",
"min_tx_fee": "800",
"assets": [
{
"base": "aconst", // archway token 단위
"symbol": "CONST", // archway symbol
"exponent": "18", // 사용하는 지수 단위
"coingecko_id": "archway", // coingecko API에서 사용하는 ID
"logo": "https://testnet.archway.explorers.guru/chains/archway_token.png" // Archway 이미지
}
],
"addr_prefix": "archway",
"theme_color": "#ce4747", // 임의의 색상
"logo": "https://testnet.archway.explorers.guru/chains/archway_token.png"
}
✏️ 중요한건 API, RPC의 Address이며 나머지 부분은 필수는 아니지만 정확한 데이터가 필요할 시 Sample 기준으로 수정하면 됩니다.
자세한 정보는 CoinGeckoAPI에서 확인 가능합니다!
Json파일을 만든 후 archway의 config file을 수정을 위해 archway config폴더로 이동합니다
cd ~/.archwayd/config
이후 config.toml
과 app.toml
을 수정합니다
# config.toml
...
# A list of origins a cross-domain request can be executed from
# Default value '[]' disables cors support
# Use '["*"]' to allow any origin
cors_allowed_origins = ["*"]
...
# app.toml
...
# API Configration 하단
# Enable defines if the API server should be enabled.
enable = true
# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk).
enabled-unsafe-cors = true
...
# gRPC web Configration 하단
# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk).
enable-unsafe-cors = true
...
다시 PingPub을 clone 받은 레포지토리로 돌아와서 module 설치 후 실행합니다
yarn install
yarn serve
이후 다음 LocalUrl로 이동 후 확인합니다
✅ 확인 화면
여기까지 테스트넷에 참여 후 Ping Pub에 참여하여 노드를 실행 후 데이터를 실시간으로 받아와 확인하는 작업까지 해보았습니다
같은 방법으로 다른 네트워크에도 참여 가능하며, 각 네트워크별로 Sync에 걸리는 소요 시간이 달라서 어떤 네트워크는 오래 걸리기도 합니다
굳이 Archway 네트워크로 게시글을 작성한 이유는 기회가 되어 Archway Test Network토큰을 구해 validator까지 해보며 작성하게 되었고,
관심 있으신 분들은 Discord
같은 커뮤니티를 통해 Test Network 토큰을 받아 validator까지 진행해 보시는것도 방법이라고 생각합니다 ! 👍🏻
Refer