이번 글은 온체인 투표 계정 설정 방법으르 설명하는 페이지를 기반으로 작성했다.
- 솔라나에서 검증자 노드를 돌리려면 투표 계정을 생성해야 한다.
투표 계정 생성
create-vote-account 명령으로 투표 계정을 생성할 수 있다. 투표 계정은 처음 생성할 때, 또는 검증인이 실행된 후에 구성할 수 있다.
계정의 수명 동안 고정된 투표 계정 주소를 제외하고, 투표 계정의 모든 측면을 변경할 수 있다.
기존 투표 계정 구성
- validator identity (검증인 ID)를 바꾸려면 : vote-update-validator 사용
- vote authority (투표 권한)를 바꾸려면 : vote-authorize-voter 사용
- authorized withdrawer (허가받은 인출자)를 바꾸려면 : vote-authorize-withdrawer 사용
- commision (수수료)을 바꾸려면 : vote-update-commision 사용
투표 계정 구조
투표 계정 주소
투표 계정은 키페어 파일의 공개키인 주소 or 키페어 파일의 공개키와 시드 문자열을 기반으로 하는 파생 주소에 생성된다.
투표 계정의 주소는 거래에 서명하는 데 절대 필요하지 않으며, 계정 정보를 조회하는 데만 사용된다.
누가 스테이크 계정에서 토큰을 위임하려는 경우, 위임 명령은 토큰 소유자가 위임하려는 검증인의 투표 계정 주소를 가리킨다.
검증인 ID(Validator Identity)
검증인 ID는 투표 계정에 제출된 모든 투표의 거래 비용을 지불하는데 사용되는 시스템 계정이다.
검증인은 수신하는 대부분의 유효한 블록에 투표할 것이므로 검증인 ID 계정은 자주(잠재적으로 초당 여러번) 거래에 서명하고 수수료를 지불한다. 이러한 이유로 검증인 ID 키페어는 검증인 프로세스가 실행 중인 동일한 시스템의 키페어 파일에 "hot wallet"으로 저장되어야 한다.
hot 월렛은 일반적으로 오프라인이나 "cold" 월렛보다 덜 안전하기 때문에, 검증인 운영자는 몇 주나 몇 달 같은 제한된 기간 동안 투표 수수료를 충당할 수 있는 만큼의 SOL만 id 계정에 저장하도록 선택할 수 있다. 더 안전한 지갑에서는 검증인 id 계정이 주기적으로 가득 채워질 수 있을 것이다.
이 방법은 검증인 노드의 디스크나 파일 시스템이 위태롭거나 손상되었을 때 자금 손실 위험을 줄일 수 있다.
투표 계정이 생성될 때 검증인 id를 제공해야 한다.
검증인 id는 계정이 생성된 뒤에도 vote-update-validator 커맨드를 사용해서 변경할 수 있다.
투표 기관(Vote Authority)
투표 기관 키페어는 클러스터에 제출하려는 각각의 투표 거래에 서명하는 데 사용된다.
문서 뒷부분에서도 나오겠지
정할 수 있다. 설정하지 않으면 기본값으로 검증인 id와 동일하게 할당된다.
투표 기관은 나중에 vote-authorize-voter 커맨드로 변경할 수 있다.
투표 기관은 Epoch당 최대 한번 변경할 수 있다. 만약 권한이 vote-authorize-voter로 변경되면 다음 에포크가 시작될 때까지 적용되지 않을 것이다.
투표 서명의 원활한 전환을 지원하기 위해, solana-validator는 --authorized-voter 인수를 여러번 지정할 수 있다.
이를 통해 네트워크가 검증인의 투표 기관 계정이 바뀌는 에포크 경계에 도달할 때 검증인 프로세스가 성공적으로 투표를 계속할 수 있다.
승인된 인출자(Authorized Withdrawer)
승인된 인출자 키페어는 withdraw-from-vote-account 커맨드를 사용해 투표 계정에서 자금을 인출하는 데 사용된다.
검증인이 얻는 모든 네트워크 보상은 투표 계정에 예치되며 승인된 인출자 키페어로 서명해야만 회수할 수 있다.
승인된 인출자는 투표 계정의 수수료를 변경하고 투표 계정의 검증인 id를 변경하기 위한 거래에도 서명해야 한다.
승인된 인출자 키페어를 훔치면 공격자에게 검증인의 작동 제어권을 완전히 뺏길 수 있으므로 인출 권한 키페어는 오프라인/콜드 지갑에 보관하도록 권장한다.
인출 권한 키페어는 검증인 작동 중에는 필요하지 않고, 검증인 자체에 저장하지 않아야 한다.
승인된 인출자는 투표 계정이 생성될 때 설정돼야 한다. 검증인 id 키페어나 투표 기관 키페어와 동일한 키페어로 설정하면 안된다.
승인된 인출자는 나중에 vote-authorize-withdrawer 커맨드로 변경할 수 있다.
정리 :
검증인 id 키페어 == 투표 기관 키페어 (권장)
(승인된 인출자 키페어 != 검증인 id 키페어) && (승인된 인출자 키페어 != 투표 기관 키페어)
수수료(Commission)
수수료는 검증인이 획득한 네트워크 보상의 백분율로, 검증인의 투표 계정에 입금된다.
보상의 나머지는 각 스테이크 계정의 active 스테이크 가중치에 비례해 해당 투표 계정에 위임된 모든 스테이크 계정에 분배된다.
예시로 투표 계정에 10%의 수수료가 있으면, 특정 에포크에서 해당 검증인이 얻은 모든 보상의 10%가 다음 에포크의 첫번째 블록에서 투표 계정에 입금된다. 남은 90%는 위임된 스테이크 계정들에 즉시 active 스테이크로 입금된다.
검증인은 수수료를 낮출수록 위임자들에게도 더 많은 보상을 전달할 수 있기 때문에, 더 많은 스테이크 위임을 유치하기 위해 수수료를 낮게 설정할 수 있다. 검증인 노드를 설정하고 작동시키는 비용이 있으므로, 검증인은 최소한 그 비용을 충당할 수 있을만큼은 수수료를 충분히 높게 설정하는 것이 이상적이다.
수수료는 --commission 옵션으로 투표 계정을 생성할 때 설정할 수 있다.
따로 설정하지 않으면 기본값으로 100%가 설정되어 모든 보상이 투표 계정에 예치되고 위임된 스테이크 계정에는 아무것도 전달되지 않는다.
수수료는 나중에 vote-update-commission 커맨드를 이용해 변경할 수도 있다.
수수료를 설정할 때는 [0-100]까지의 정수값만 허용된다. 정수는 수수료에 대한 백분율을 나타내므로, --commission 10 으로 계정을 만들면 10%의 수수료가 설정된다.
키 회전(Key Rotation)
투표 계정 권한 키를 회전시키려면 라이브 검증인을 다룰 때 특별한 처리가 필요하다.
투표 계정 검증인 id
검증인 id를 변경하려면 투표 계정의 승인된 인출자 키페어에 접근해야 한다.
아래의 단계들에서는 ~/authorized_withdrawer.json 이 그 키페어라고 가정한다.
- solana-keygen new -o ~/new-validator-keypair.json 으로 새 검증인 id 키페어를 만든다.
- solana transfer ~/new-validator-keypair.json 500 을 하고 새 id 계정에 자금이 지원됐는지 확인하자.
- 투표 계정에서 검증인 id 를 수정하기 위해 solana vote-update-validator ~/vote-account-keypair.json ~/new-validator-keypair.json ~/authorized_withdrawer.json 를 실행하자.
- --identity 인수에 새 id 키페어를 넣어서 검증인을 재시작하자.
검증인이 스테이크를 가지고 있는 경우 추가 단계가 필요하다.
리더 스케줄은 두 에포크 전에 미리 계산된다. 그러므로 이전 검증인 id가 리더 스케줄에 있었으면 검증인 id가 바뀐 후 두 에포크 동안 리더 스케줄에 유지된다. 추가 단계를 수행하지 않으면 새 검증인 id가 리더 스케줄에 추가될 때까지 검증인이 블록을 생성하지 않는다.
위의 4단계를 따라 새 id 키페어로 검증인을 다시 시작한 후,--vote-account 인수를 넣지 않아 투표를 하지 않는 두번째 검증인을 다른 시스템에서 시작하자.
이 임시 검증인은 2개의 전체 에포크 동안 실행돼야 한다. 이 기간 동안 :
- 이전 검증인 id에 할당된 나머지 슬롯에 대한 블록 생성
- 이전 검증인 id에 대한 거래 수수료 및 임대료 보상 받기
이전 검증인 id가 더이상 solana leader-schedule 출력에 나열되지 않으면 이 임시 검증인을 중지해도 안전하다.
투표 계정 승인된 투표인
투표 권한 키페어는 에포크의 경계에서만 변경할 수 있으며 원활한 마이그레이션을 위해 solana-validator 에 대한 몇가지 추가 인수가 필요하다.
- solana epoch-info 를 실행하자. 현재 에포크에 남은 시간이 많지 않으면, 검증인이 다시 시작하고 따라잡을 수 있을만큼 충분한 시간을 허용하기 위해 다음 에포크를 기다리는 것을 고려해보자.
- solana-keygen new -o ~/new-vote-authority.json 로 새 투표 기관 키페어를 만든다.
- solana vote-account ~/vote-account-keypair.json 를 실행해 현재 투표 기관 키페어를 확인하자. 검증인의 id 계정(기본값)이거나 다른 키페어일 수 있다. 다음 단계들에서는 ~/validator-keypair.json 이 투표기관 키페어라고 가정한다.
- solana vote-authorize-voter ~/vote-account-keypair.json ~/validator-keypair.json ~/new-vote-authority.json 를 실행하자. 새 투표 기관은 다음 에포크에서 active 될 예정이다.
- solana-validator 는 이제 다음 에포크에서 원활하게 전환될 수 있도록 이전과 새 투표 기관 키페어로 재시작해야 한다. 재시작할 때 두 인수들로 --authorized-voter ~/validator-keypair.json --authorized-voter ~/new-vote-authority.json 을 추가하자.
- 클러스터가 다음 에포크에 도착한 후에는 더이상 이전 투표 기관 키페어가 필요하지 않으므로 --authorized-voter ~/validator-keypair.json 인수를 제거하고 solana-validator를 재시작하자.
투표 계정 승인된 인출자
특별한 처리가 필요하지 않다. 필요에 따라 solana vote-authorize-withdrawer 커맨드를 사용하자.
'Solana > Validator - 공부' 카테고리의 다른 글
[Solana] Validating - 5. 검증인 정보 게시 (0) | 2021.11.08 |
---|---|
[Solana] Validating - 4. 벨리데이터 모니터링 (0) | 2021.11.05 |
[Solana] Validating - 3. 스테이킹 (0) | 2021.11.05 |
[Solana] 솔라나 검증인(Validator) 실행 팁 (미디움) (0) | 2021.10.22 |
[Solana] Validating - 1. Validator 시작하기 (0) | 2021.10.21 |