Blockchain/Testnet

Chainflip Persitent 테스트넷 validator 노드 설치 가이드

lowsec 2022. 11. 19. 11:57

Intro

안녕하세요. 이번 포스팅에서는 Chainflip 프로젝트의 Persistent 테스트넷 validator 노드 설치 가이드를 준비했습니다. (운영 중인 텔레그램 “형이랑 돈버는 채널” 에서 활동 중이신 @hh7sun 님께서 좋은 정보를 제공해주셨습니다. 감사합니다.)

 

사진. Chainflip 메인

 

Chainflip은 크로스 체인 프로젝트이며 올해 11월 17일 (포스팅 이틀 전이네요!)Persistent Testnet 오픈 공지를 발표했습니다. 작년 12월부터 올해 5월까지 incentived testnet: soundcheck을 운영했는데 이번에 다시 테스트넷을 오픈한다고 하네요. 올해 말에 $FILP의 TGE가 예정되어 있다고 하니 토큰 에어드랍을 위한 마지막 이벤트가 되지 않을까 합니다. 현재 coingecko에 등록은 되어 있는 상태네요.

 

Persistent Testnet 참여자에 대해 향후 특전은 약속하고 있으나 토큰 에어드랍에 대해서는 재단에서 공식적인 언급을 하지 않았습니다. 참여하실 때 이 점은 꼭 참고 부탁드려요.

 

사진. airdrop?

 

Chainflip은 작년 8월에 600만 달러, 올해 5월에 1000만 달러 투자를 유치했으며 현재 활발하게 개발을 진행하고 있습니다. 아래에 ICO Analytics 공지글을 첨부해두었습니다. 어떤 투자사가 들어와있는지 확인해보세요!

 

Chainflip 프로젝트에 대해 더 궁금하시다면 아래 정보를 확인해주세요.

 

본 포스팅은 https://docs.chainflip.io/perseverance-validator-documentation/ 을 레퍼런스로 제작되었습니다. 

 

Prerequisites

 

1. Hardware Requirement

 

chainflip에서는 OS로 Ubuntu 20.04를 사용하길 권장합니다. (사실 권장이 아니라 필수입니다.) 아래를 보시면 그 외 하드웨어 요구사항은 그렇게 높지 않습니다.

 

OS: Ubuntu 20.04 - PLEASE ONLY USE THIS OS. 
                   Our binaries are not compiled on any other OS 
                   and you're likely to have problems.
CPU: 4 GHz | 4+ Cores, Dedicated is better
RAM: 8 GB
SSD: 50 GB (this may increase over time)
Bandwidth: Recommended 1GBps connection, 100 GB bandwidth combined up/down per month

 

2. RPC/WSS 노드 엔드포인트 확인

 

validator 노드 설치 후 설정 부분에서 goerli ETH testnet 노드와 통신하기 위한 엔드포인트를 추가하는 내용이 있습니다. geth 노드를 직접 운영 중이신 분은 rpc, wss endpoint를 미리 저장해두시고 해당 사항이 없는 분은 infura로 API key를 받아 엔드포인트를 확인하겠습니다.

 

https://www.infura.io/ 에 접속하여 회원 가입을 합니다. 무료 가입 시 아래 dashboard 화면이 보이실 겁니다.

 

사진. infura dashboard

 

우측 상단의 "CREATE NEW KEY"를 누르고 NETWORK와 NAME을 설정합니다. NETWORK는 Web3 API를 선택합니다.

 

사진. CREATE NEW KEY

 

CREATE를 누르시면 ENDPOINT 탭으로 이동합니다. 화면 중간의 Ethereum 네트워크를 mainnet -> goerli로 변경하고 우측에 복사 버튼을 눌러 HTTPS ENDPOINT를 따로 저장해둡니다. 같은 방식으로 WEBSOCKETS을 선택하여 WSS ENDPOINT도 따로 저장해둡니다.

 

사진. network endpoint 확인

 

3. metamask 계정 생성

 

다들 metamask 계정은 하나씩 가지고 계시겠지만 validator에 사용할 계정을 따로 만드는 것을 추천드립니다. 

 

 

4. Georli faucet 및 $FLIP faucet 수령

 

기존에 사용하시던 계정에 gETH가 있다면 새로 생성한 계정에 옮겨주시고 그게 아니라면 faucet을 이용하여 새로 생성한 계정에 트랜잭션 수수료를 위한 gETH를 소량 받아놓습니다. (https://faucetlink.to/goerli)

 

gETH를 받으셨다면 Chainflip 디스코드에 가입하여 verify를 하고 #faucet 채널에 들어갑니다.

 

사진. FLIP faucet 요청

 

채널 채팅창에 아래와 같이 입력해주시면 됩니다. YOUR_ETH_ADDRESS에는 validator로 사용할 metamask 주소를 넣습니다. 잠시 기다리시면 봇이 1000 FLIP을 보내줍니다.

 

!drip YOUR_ETH_ADDRESS

 

 

5. 네트워크 포트 개방

 

외부 네트워크와 통신하기 위해 포트를 개방합니다. Chainflip에서는 30333 (TCP)와 8078 (TCP)을 사용합니다. 설정 후에는 ufw status가 active로 나오는지, 설정한 포트가 잘 개방되었는지 반드시 확인합니다.

 

sudo ufw status

sudo ufw enable 
sudo ufw allow 30333/tcp
sudo ufw allow 8078/tcp

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22                         ALLOW       Anywhere
30333/tcp                  ALLOW       Anywhere
8078/tcp                   ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
22 (v6)                    ALLOW       Anywhere (v6)
30333/tcp (v6)             ALLOW       Anywhere (v6)
8078/tcp (v6)              ALLOW       Anywhere (v6)

 

 

Getting the Validator Software

 

Chainflip 노드를 설치하기 전 패키지 Update & Upgrade 부터 실행해줍니다.

 

update & updrage software and packages:

sudo apt-get update
sudo apt-get upgrade

 

Chainflip 노드 설치를 위해 APT Repo를 등록합니다. APT Repo는 Chainflip 패키지를 인터넷에서 다운로드 받기 위한 경로라고 생각하시면 됩니다.

 

Adding Chainflip APT Repo:

sudo mkdir -p /etc/apt/keyrings
curl -fsSL repo.chainflip.io/keys/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/chainflip.gpg

# verify
gpg --show-keys /etc/apt/keyrings/chainflip.gpg

 

After that, add Chainflip's Repo to aptsources list:

echo "deb [signed-by=/etc/apt/keyrings/chainflip.gpg] <https://repo.chainflip.io/perseverance/> focal main" | sudo tee /etc/apt/sources.list.d/chainflip.list

 

Chainflip 패키지를 설치합니다.

 

Installing The Packages:

sudo apt-get update
sudo apt-get install -y chainflip-cli chainflip-node chainflip-engine

 

Generating Keys

 

validator의 key를 생성하는 부분입니다. 생성한 key를 저장할 디렉토리부터 생성합니다.

 

sudo mkdir /etc/chainflip/keys

 

생성한 metamask 계정에서 private key를 export하여 /etc/chainflip/keys/ethereum_key_file에 넣어줍니다. 아래 명령어에서 YOUR_VALIDATOR_WALLET_PRIVATE_KEY 부분에 export한 private key를 넣어주시면 됩니다.

 

echo -n "YOUR_VALIDATOR_WALLET_PRIVATE_KEY" |  sudo tee /etc/chainflip/keys/ethereum_key_file

 

서명 키를 생성합니다. 서명 키를 생성하면 secret phrase, secret seed, public eky, address 정보가 출력됩니다. 잘 보관해둡시다.

 

generate signing key:

chainflip-node key generate

 

/etc/chainflip/keys/signing_key_file에 생성한 서명 키 정보 중 secret seed를 넣어줍니다. YOUR_CHAINFLIP_SECRET_SEED에 "0x"을 포함하는 시작하는 secret seed 문자열을 그대로 넣어줍니다.

 

export SECRET_SEED=YOUR_CHAINFLIP_SECRET_SEED

# SECRET_SEED 환경 변수 확인
export | grep SECRET_SEED

# SECRET_SEED에서 앞 두 문자열을 (0x)빼고 /etc/chainflip/keys/signing_key_file에 삽입
echo -n "${SECRET_SEED:2}" | sudo tee /etc/chainflip/keys/signing_key_file

 

노드 키를 생성합니다.

 

generate node key:

sudo chainflip-node key generate-node-key --file /etc/chainflip/keys/node_key_file

# check
cat /etc/chainflip/keys/node_key_file

 

key는 root 계정을 가진 사용자 이외에는 접근하면 위험하기 때문에 생성한 key file에 대해 사용권한을 설정합니다. 아래처럼 설정하면 root만 read/write가 가능합니다. 

 

cd /etc/chainflip/keys

ls -al
total 20
drwxr-xr-x 2 root root 4096 11월 18 23:08 .
drwxr-xr-x 4 root root 4096 11월 18 22:54 ..
-rw-r--r-- 1 root root   64 11월 18 23:04 ethereum_key_file
-rw-r--r-- 1 root root   64 11월 18 23:08 node_key_file
-rw-r--r-- 1 root root   69 11월 18 23:06 signing_key_file

sudo chmod 600 /etc/chainflip/keys/ethereum_key_file
sudo chmod 600 /etc/chainflip/keys/signing_key_file
sudo chmod 600 /etc/chainflip/keys/node_key_file
history -c

 

Configuration File

 

validator 설정 파일을 넣을 디렉토리와 파일을 생성합니다.

 

sudo mkdir -p /etc/chainflip/config
sudo vi /etc/chainflip/config/Default.toml

 

config 파일인 Defaut.toml에 아래 내용을 붙여넣습니다.

 

  • IP_ADDRESS_OF_YOUR_NODE: public IP를 입력합니다.
  • WSS_ENDPOINT_FROM_ETHEREUM_CLIENT: Prerequisite에서 미리 확인한 WSS ENDPOINT를 입력합니다.
  • HTTPS_ENDPOINT_FROM_ETHEREUM_CLIENT: Prerequisite에서 미리 확인한 HTTPS ENDPOINT를 입력합니다. 

 

# Default configurations for the CFE
[node_p2p]
node_key_file = "/etc/chainflip/keys/node_key_file"
ip_address="IP_ADDRESS_OF_YOUR_NODE"
port = "8078"

[state_chain]
ws_endpoint = "ws://127.0.0.1:9944"
signing_key_file = "/etc/chainflip/keys/signing_key_file"

[eth]
# Ethereum RPC endpoints (websocket and http for redundancy).
ws_node_endpoint = "WSS_ENDPOINT_FROM_ETHEREUM_CLIENT"
http_node_endpoint = "HTTPS_ENDPOINT_FROM_ETHEREUM_CLIENT"

# Ethereum private key file path. This file should contain a hex-encoded private key.
private_key_file = "/etc/chainflip/keys/ethereum_key_file"

[signing]
db_file = "/etc/chainflip/data.db"

 

Start Up

 

chainflip-node를 시작합니다. status를 확인했을 때 "active" 인지 확인합니다.

 

# start
sudo systemctl start chainflip-node

# check status
sudo systemctl status chainflip-node

 

아래 명령어를 입력하면 chainflip-node에서 발생하는 로그를 확인할 수 있습니다. 로그를 통해 동기화가 잘되고 있는지 (bps가 0은 아닌지), target=# 뒤의 숫자가 블록 익스플로러의 최신 블록 번호와 일치하는 지 확인합니다. 최신 블록까지 동기화하는데 저는 약 1시간 정도 걸렸습니다.

 

tail -f /var/log/chainflip-node.log
2022-11-18 23:24:58 Vault rotation initiated.
2022-11-18 23:24:58 Vault rotation initiated.
2022-11-18 23:25:01 ⚙️  Syncing 152.2 bps, target=#146006 (31 peers), best: #7996 (0x3148…1c0a), finalized #7690 (0xeb32…90f5), ⬇ 10.8kiB/s ⬆ 3.3kiB/s
2022-11-18 23:25:06 ⚙️  Syncing 178.0 bps, target=#146006 (31 peers), best: #8887 (0xb949…5669), finalized #8704 (0x58cc…f97b), ⬇ 56.4kiB/s ⬆ 3.7kiB/s
2022-11-18 23:25:09 Starting rotation
2022-11-18 23:25:09 Auction resolved with 15 winners and 0 losers. Bond will be 1010FLIP.
2022-11-18 23:25:09 Vault rotation initiated.
2022-11-18 23:25:09 Vault rotation initiated.
2022-11-18 23:25:09 Vault rotation initiated.
2022-11-18 23:25:11 ⚙️  Syncing 170.3 bps, target=#146006 (31 peers), best: #9739 (0xfc37…24c7), finalized #9728 (0xdd56…65a8), ⬇ 633.8kiB/s ⬆ 3.6kiB/s
2022-11-18 23:25:16 ⚙️  Syncing 202.9 bps, target=#146006 (31 peers), best: #10754 (0xc2ab…a2ca), finalized #10752 (0x796b…a3bb), ⬇ 51.4kiB/s ⬆ 2.7kiB/s
2022-11-18 23:25:19 Starting rotation
2022-11-18 23:25:19 Auction resolved with 15 winners and 0 losers. Bond will be 1012FLIP.

 

동기화가 완료되었다면 다른 터미널에서 chainflip-engine을 시작합니다. 이 때에도 status를 확인하여 "active"인지 반드시 보고 넘어가야 합니다.

 

sudo systemctl start chainflip-engine

sudo systemctl status chainflip-engine

# config file이 변경되거나 종료된 경우
sudo systemctl restart chainflip-engine

# 로그 확인
tail -f /var/log/chainflip-engine.log

 

재부팅 후에도 자동 실행되도록 아래와 같이 명령어를 입력합니다.

 

sudo systemctl enable chainflip-node

sudo systemctl enable chainflip-engine

 

logrotate 설치 (필수는 아닙니다.)

 

log 파일 관리를 위해 logrotate를 설치하여 사용할 수 있습니다.

  • 노드가 실행되면 로그도 계속 쌓임
  • 로그를 날짜 별로 분리하여 관리하기 위한 logrotate 사용

 

logrotate 설치:

 

sudo apt install logrotate

logrotate --version

 

logrotate 설정:

 

sudo vi /etc/logrotate.d/chainflip

/var/log/chainflip-*.log {
  rotate 7
  daily
  dateext
  dateformat -%Y-%m-%d
  missingok
  notifempty
  copytruncate
  nocompress
}

sudo chmod 644 /etc/logrotate.d/chainflip
sudo chown root.root /etc/logrotate.d/chainflip

 

Bidding & Staking

 

validator로 네트워크에서 활동하기 위해서는 $FLIP을 스테이킹하여 매 라운드의 Bidding에 참여해야 합니다.

 

Staking via the Validator Dashboard에 접속하여 아래와 매뉴얼에 따라 대시보드에 node를 등록하고 보유한 $FLIP을 스테이킹합니다.

 

  1. $FLIP의 컨트랙트 주소를 확인하고 metamask에 추가합니다. (0x8e71CEe1679bceFE1D426C7f23EAdE9d68e62650)
  2. Perseverance Staking App -> "My Nodes" 로 이동합니다.
  3. $FLIP을 보유하고 있는 metamask 지갑을 연결합니다.
  4. "+ Add Node" 을 누릅니다.
  5. Generating Keys 단계에서 생성한 Validator ID를 입력합니다. your Public Key(SS58) 필드의 값과 동일합니다. 원하는 수량 만큼 "Stake" 를 눌러 스테이킹합니다. (현재 스테이킹에 필요한 최소 $FLIP은 1,000 이상입니다.)
  6. "Stake" 를 누르면 $FLIP에 대한 approve 트랜잭션과 stake 트랜잭션이 실행됩니다. (각 단계에서 서명이 필요합니다.)
  7. "My Nodes" page에서 노드가 정상적으로 표시되는지 확인합니다.
 
 

사진. $FLIP 스테이킹

 

대시보드 등록 완료 후에 chainflip-engine을 재시작합니다.

sudo systemctl restart chainflip-engine

 

validator key를 네트워크에 등록합니다. 아래 명령어들은 실행 후 나오는 txid를 익스플로러에 입력하여 트랜잭션이 잘 실행되었는지 확인할 수 있습니다. 

 

Registering Validator Keys:

 

sudo chainflip-cli \\
>       --config-path /etc/chainflip/config/Default.toml \\
>       register-account-role Validator

Connecting to state chain node at: `ws://127.0.0.1:9944` and using private key located at: `/etc/chainflip/keys/signing_key_file`
Submtting `register-account-role` with role: AccountRole::Validator. This cannot be reversed for your account.
Do you wish to proceed? [y/n] > y
Submitting...
Account role set at tx 0x8074545013ef15dea658f8fdff12f31bb1e1e5fff333423028c524c5fe203666.

# check
https://blocks-perseverance.chainflip.io/extrinsic/0x8074545013ef15dea658f8fdff12f31bb1e1e5fff333423028c524c5fe203666

 

activate:

 

sudo chainflip-cli \\
>     --config-path /etc/chainflip/config/Default.toml \\
>     activate
Connecting to state chain node at: `ws://127.0.0.1:9944` and using private key located at: `/etc/chainflip/keys/signing_key_file`
Account activated at tx 0x14790887f303c61a8000140aa37a016f89f9e0acc83494ee3d3cc16b98b12717.

# check
https://blocks-perseverance.chainflip.io/extrinsic/0x14790887f303c61a8000140aa37a016f89f9e0acc83494ee3d3cc16b98b12717

 

rotate:

 

sudo chainflip-cli \\
>     --config-path /etc/chainflip/config/Default.toml rotate
Connecting to state chain node at: `ws://127.0.0.1:9944` and using private key located at: `/etc/chainflip/keys/signing_key_file`
Session key rotated at tx 0xea7eef3d638a38e6ef2ec6b83247d46292e6dfdd9b829698119e77c3d9a41f8b.

# check
https://blocks-perseverance.chainflip.io/extrinsic/0xea7eef3d638a38e6ef2ec6b83247d46292e6dfdd9b829698119e77c3d9a41f8b

 

vanity name을 설정하지 않으면 익스플로러에서 "Nonamed"로 표시되니 원하는 vanity name을 설정해주도록 합니다.

 

set the vanity name:

 

sudo chainflip-cli \\
>     --config-path /etc/chainflip/config/Default.toml \\
>     vanity-name YOUR_VANITY_NAME
Connecting to state chain node at: `ws://127.0.0.1:9944` and using private key located at: `/etc/chainflip/keys/signing_key_file`
Vanity name set at tx 0xaa7595d9d9a71639e8cd7db6ca93673d93cd3cc1bdbaef79692ea144b1b75c35.

# check
https://blocks-perseverance.chainflip.io/extrinsic/0xaa7595d9d9a71639e8cd7db6ca93673d93cd3cc1bdbaef79692ea144b1b75c35

 

vanity name이 변경되면 My node에서 잘 표시되는 지 확인합니다.

 

https://stake-perseverance.chainflip.io/auctions 에서 현재 진행하고 있는 auction progress를 확인할 수 있습니다. 해당 라운드가 끝나면 노드 상태가 "offline → Backup: ready" 로 변경됩니다. auction에 정상적으로 참여하고 있다면 노드 정보를 확인했을 때 "online" 표시가 떠야 하고, Last Active Keyset에 자신의 노드가 표시되어야 합니다. (보상의 기준이 됩니다.) 

 

사진. 노드 정보

 

지금까지 긴 내용의 포스팅에도 불구하고 잘 따라와주셔서 감사합니다. 노력하신 만큼 큰 보상이 따르길 기원하겠습니다.


본 포스팅을 재미있게 읽으셨다면 "❤️"도 눌러주시길 부탁드립니다. 그리고!! 트레이딩에 관심이 있으신 분 + 신규 거래소나 증정금 이벤트를 찾고 계시는 분이라면 bingx 형퍼럴로 가입 부탁드립니다. 컨텐츠 제작에 큰 힘이 됩니다.

 

bingx 거래소 무조건 100달러 받기 이벤트 진행중 (입금 0원, 가입링크)

 

- 회원가입/핸드폰 등록 50 USDT

- KYC 인증 50 USDT

- 500불 입금후 7일유지 / 50 USDT

> 입금없이 받은 증정금만으로도 거래량 이벤트를 달성할수 있습니다. 

- 거래량 10k / 10 USDT

- 거래량 50k / 40 USDT

- 거래량 150k / 100 USDT 

제 레퍼럴로 가입하신 분들은 블로그 댓글이나 텔레그램 채널을 통해 꼭 알려주세요. 아래와 같은 혜택을 드립니다. 추가적인 혜택도 드릴 수 있도록 열심히 노력하겠습니다.

1️⃣ 퀀트를 통한 개별 코인 트레이딩 시그널 (매일 최소 3회 이상 제공, Entry/TP/SL 포함)
2️⃣ 시장에 따른 실시간 매수/매도 전략
3️⃣ 리스크 관리를 위한 자금 운용 전략
4️⃣ 일일 크립토 시황/국제 경제 브리핑