안녕하세요. 이번 포스팅에서는 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에서는 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를 받아 엔드포인트를 확인하겠습니다.
우측 상단의 "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로 나오는지, 설정한 포트가 잘 개방되었는지 반드시 확인합니다.
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
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시간 정도 걸렸습니다.
Generating Keys 단계에서 생성한 Validator ID를 입력합니다. your Public Key(SS58) 필드의 값과 동일합니다. 원하는 수량 만큼 "Stake" 를 눌러 스테이킹합니다. (현재 스테이킹에 필요한 최소 $FLIP은 1,000 이상입니다.)
"Stake" 를 누르면 $FLIP에 대한 approve 트랜잭션과 stake 트랜잭션이 실행됩니다. (각 단계에서 서명이 필요합니다.)
"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 형퍼럴로 가입 부탁드립니다. 컨텐츠 제작에 큰 힘이 됩니다.