솔라나 밸리데이터를 실행하고 나면 스테이킹을 해야한다.
밸리데이터의 스테이킹을 위한 세팅에 대해 공식문서에 나와있는 내용을 위주로 적어봤다.
처음 밸리데이터를 돌렸을 때는 밸리데이터가 보유한 지분(stake)이 없다. 이는 곧 블록을 생성하는 슬롯의 리더로 배정받을 자격이 없다는 뜻이다.
밸리데이터가 계정에 보유하고 있는 솔라나와 지분은 다르다. 누군가 보유한 솔라나를 밸리데이터에 위임한 것을 지분이라고 한다.
따라잡는 작업 모니터링
지분을 위임하려면 먼저 밸리데이터가 실행 중이고 클러스터를 따라 잡았는지 확인해야 한다. 밸리데이터가 부팅된 후 클러스터를 따라잡는 데 시간이 걸릴 수 있다. 이를 모니터링하려면 다음 catchup 커맨드를 사용하자 :
solana catchup ~/validator-keypair.json
검증인이 클러스터를 따라잡을 때까지는 성공적으로 투표할 수 없으며 지분을 위임할 수 없다.
또한 클러스터의 슬롯이 내 슬롯보다 빠르게 진행되고 있다면, 결코 클러스터를 따라잡을 수 없을 것이다. 이는 일반적으로 검증인과 나머지 클러스터 간의 일종의 네트워킹 문제를 의미한다.
+) 실제로 해보니 위 명령어로는 RPC 서비스가 내 밸리데이터를 못 찾는다.
solana catchup ~/validator-keypair.json --our-localhost
위 명령어를 사용했더니 슬롯을 따라잡는 작업을 모니터링해볼 수 있었다.
스테이크 계정 생성
스테이크 키페어 생성
밸리데이터의 스테이크 키페어를 만든 적이 없다면 만들자. 이 단계를 완료했으면 솔라나 런타임 디렉토리에 "validator-stake-keypair.json이 표시되어야 한다.
solana-keygen new -o ~/validator-stake-keypair.json
# bip39 비밀번호 설정 없이 하려면
solana-keygen new --no-passphrase -o ~/validator-stake-keypair.json
+) 위의 커맨드를 입력하면 bip39 passphrase를 입력하라고 하는데, 스테이크 계정은 인출과 스테이크 권한에 의해 완벽히 제어되기 때문에 비밀번호를 따로 설정해줄 필요가 없다고 한다. 그러므로 암호 입력은 생략하거나 --no-passphrase 옵션을 사용하면 된다.
* bip39는 생성기 사이트에서 생성할 수 있다.
지분 위임
* 이전에 다른 글에서 언급했듯이, 솔라나의 스테이킹은 토큰을 담은 지분 계정을 따로 생성한 뒤 해당 계정을 밸리데이터에 위임함으로써 이뤄진다.
* 아래는 셀프스테이킹에 대한 과정이기 때문에 파일명을 validator-stake-keypair.json 으로 했다. 사용자의 지분 위임 과정도 비슷하게 이루어진다고 보면 된다.
이제 1 SOL을 밸리데이터에 위임하자. 먼저 스테이크 계정을 생성한다 :
# 기본지갑이 밸리데이터 지갑일 때 예시
# 밸리데이터 지갑에서 방금 만든 키페어를 사용해 만든 스테이크 계정에 1 SOL 전송
solana create-stake-account ~/validator-stake-keypair.json 1
# 기본지갑이 밸리데이터 지갑이 아닐 때 예시
# 스테이크 계정을 만들 때의 비용을 지불하려는 지갑의 키페어 경로가 ~/staker-wallet-keypair.json 고
# 위에서 ~/validator-stake-keypair.json 경로를 ~/stake-account-keypair.json 로 설정
solana create-stake-account \
--fee-payer ~/staker-wallet-keypair.json \
--stake-authority ~/staker-wallet-keypair.json \
--withdraw-authority ~/staker-wallet-keypair.json \
--from ~/staker-wallet-keypair.json \
~/stake-account-keypair.json 0.5
그리고 해당 지분을 밸리데이터에게 위임하자 :
solana delegate-stake ~/validator-stake-keypair.json ~/vote-account-keypair.json
밸리데이터가 투표하기 위해 SOL 토큰을 사용해야하므로, 투표비용을 지불할 만큼의 SOL을 남겨놓고 소량만 위임했다.
다음처럼 위와 동일한 커맨드로 언제든지 지분을 다른 노드에 재위임할 수 있지만, 재위임은 에포크당 한번만 허용된다 :
solana delegate-stake ~/validator-stake-keypair.json ~/some-other-vote-account-keypair.json
이 때 밸리데이터가 delinquent, 즉 정상적으로 돌아가고 있지 않으면 위임이 되지 않는다.
노드가 투표 중이라고 가정하면, 이제 우리 밸리데이터는 실행중이며 보상을 생성하고 있다고 볼 수 있다.
보상은 에포크 경계에서 자동으로 지급된다.
획득한 보상 램포트는 투표 계정에 설정된 수수료율에 따라 스테이크 계정과 투표 계정에 분할된다.
보상은 밸리데이터가 실행중일 때만 얻을 수 있다. 또 일단 스테이킹이 되면 밸리데이터는 네트워크의 중요한 파트가 된다. 그러므로 밸리데이터를 네트워크에서 안전하게 제거하려면 먼저 스테이크를 비활성화시켜야 한다.
각 슬롯의 끝에서 밸리데이터는 투표 트랜잭션을 보낼 것으로 예상된다. 이러한 투표 트랜잭션의 비용은 밸리데이터의 id 계정에서 램포트로 지불된다.
이는 정상적인 거래이므로 표준 거래 수수료가 적용된다. 거래 수수료 범위는 제네시스 블록에 의해 정의된다.
실제 수수료는 거래 부하에 따라 변동된다. 트랜잭션을 제출하기 전에 RPC API "getRecentBlockhash" 를 통해 현재 수수료를 확인할 수 있다.
거래 수수료에 대해서는 아래 페이지에서 자세히 확인 가능하다.
밸리데이터 스테이크 워밍업
합의에 대한 다양한 공격에 대응하기 위해 새롭게 위임된 스테이크들은 워밍업 기간을 거쳐야 한다.
다음을 통해 워밍업 기간 동안 밸리데이터의 지분을 모니터링한다.
- 투표 계정 보기: solana vote-account ~/vote-account-keypair.json
밸리데이터가 네트워크에 제출한 모든 투표의 현재 상태를 표시한다. - 스테이크 계정, 위임 기본 설정 및 스테이크 세부 정보 보기 : solana stake-account ~/validator-stake-keypair.json
- solana validators 는 자신을 포함한 모든 밸리데이터의 현재 활성 지분을 표시한다.
- solana stake-history 는 최근 에포크에 대한 스테이크 워밍업 및 쿨다운 히스토리를 보여준다.
- 다음 리더 슬롯을 나타내는 밸리데이터의 로그 메시지를 찾아보자 :
[2019-09-27T20:16:00.319721164Z INFO solana_core::replay_stage] <VALIDATOR_IDENTITY_PUBKEY> voted and reset PoH at tick height ####. My next leader slot is #### - 스테이크가 워밍업이 끝나면 solana validators를 실행해서 밸리데이터에 대한 스테이크 잔고를 볼 수 있다.
스테이킹된 밸리데이터 모니터링
내 밸리데이터가 리더가 되는지 확인하자.
- 밸리데이터가 클러스터를 따라잡은 후, 밸리데이터가 리더로 선택되어 거래 수수료를 징수할 때 solana balance 커맨드를 사용해 수입을 모니터링하자.
- 솔라나 노드는 네트워크 및 밸리데이터 참여에 대한 정보를 반환하는 여러 유용한 JSON-RPC 메서드를 제공한다. curl(이나 선택한 다른 http 클라이언트)을 사용해 JSON-RPC 형식의 데이터에 원하는 방법을 지정한다.
- 예시 :
// Request curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getEpochInfo"}' http://localhost:8899 // Result {"jsonrpc":"2.0","result":{"epoch":3,"slotIndex":126,"slotsInEpoch":256},"id":1}
유용한 JSON-RPC 메소드 :
- getEpochInfo
한 에포크는 리더 스케줄이 유효한 시간(≒슬롯의 수)이다. 이 메소드는 현재 에포크가 몇번째고 클러스터가 얼마나 됐는지 알려준다. - getVoteAccounts
이 메소드는 자신의 검증인이 현재 얼마나 많은 active 스테이크를 가지고 있는지 알려줄 수 있다. 검증인 지분의 일부 퍼센트가 에포크 경계에서 활성화된다. 솔라나 스테이킹 방법에 대해서는 다음 페이지에서 자세히 알아볼 수 있다.
- getLeaderSchedule
어떤 순간에서도 네트워크는 단 한명의 검증인이 원장 항목을 생성할 것으로 기대한다. 현재 원장 항목을 생성하도록 선택된 검증인을 "리더"라고 한다. 이 메소드는 현재 활성화된 스테이크에 대한 전체 리더 일정(슬롯 단위)을 반환하며, id 공개키가 1회 이상 표시된다.
스테이크 비활성화
클러스터에서 검증인을 분리하 전에 다음을 실행해 이전에 위임된 스테이크를 비활성화해야한다.
solana deactivate-stake ~/validator-stake-keypair.json
스테이크는 즉시 비활성화되지 않고 스테이크 워밍업과 유사한 방식으로 쿨다운 된다. 스테이크가 쿨다운되는 동안 밸리데이터는 클러스터에 연결된 상태를 유지해야한다. 쿨다운되는 동안 스테이크는 계속 보상을 받는다.
스테이크 쿨다운이 완료된 후 밸리데이터를 끄거나 네트워크에서 인출하는 것이 안전하다. 쿨다운은 active 스테이크와 스테이크 규모에 따라 완료하는 데 몇 에포크가 걸릴 수도 있다.
스테이크 계정은 한번만 사용할 수 있으므로 비활성화 후 cli의 withdraw-stake 커맨드를 사용해 이전에 스테이크한 lamport를 복구하자.
'Solana > Validator - 공부' 카테고리의 다른 글
[Solana] Validating - 5. 검증인 정보 게시 (0) | 2021.11.08 |
---|---|
[Solana] Validating - 4. 벨리데이터 모니터링 (0) | 2021.11.05 |
[Solana] Validating - 2. 투표 계정 관리 (0) | 2021.11.02 |
[Solana] 솔라나 검증인(Validator) 실행 팁 (미디움) (0) | 2021.10.22 |
[Solana] Validating - 1. Validator 시작하기 (0) | 2021.10.21 |