Become a Validator
Story Network에서 검증자 노드를 운영하는 가이드
빠른 링크
개요
이 섹션에서는 자신의 validator를 실행하는 방법을 안내합니다. Validator 작업은story
합의 클라이언트를 통해 수행할 수 있습니다.
아래 작업은 노드를 실행할 필요가 없습니다! 그러나 스테이킹 보상에 참여하려면 validator 노드를 실행해야 합니다.
진행하기 전에 delegator와 validator의 차이점을 숙지하는 것이 중요합니다:
- A validator는 합의에 참여하는 전체 노드로, 서명된 키가
priv_validator_key.json
파일에 있습니다.story
데이터 디렉토리 아래에 있습니다. validator 키 세부 정보를 출력하려면validator 키 내보내기 섹션 - A delegator는 IP를 보유하고
IP
합의 보상에 참여하고자 하지만 직접 validator를 실행할 필요가 없는 계정 운영자를 말합니다.
Story 바이너리가 있는 폴더에story
파일을 추가하고.env
계정에PRIVATE_KEY
IP가 충전된IP
계정을 추가하세요.아래의 모든 작업에 delegator 계정을 사용하는 것을 권장합니다.
validator 자체로 트랜잭션을 발행할 수도 있습니다. validator에 해당하는 EVM 개인 키를 얻으려면Validator 키 내보내기 섹션을 참조하세요.
password.txt.env
파일은 다음과 같아야 합니다(0x 접두사를 추가하지 않도록 주의하세요):
이제 다양한 validator 작업을 수행할 준비가 되었습니다! 아래에서 CLI를 통해 지원되는 모든 작업을 안내해 드리겠습니다:
Validator 키 내보내기
기본적으로 Story를 실행하면./story init
validator 키가 생성됩니다. validator 키를 보려면 다음 명령을 실행하세요:
이 명령은 압축 및 비압축 형식으로 validator 공개 키 파일을 출력합니다. 기본적으로 공개 식별을 위해 16진수로 인코딩된 압축 키를 사용합니다.
사용 가능한 플래그:
--export-evm-key
: (문자열) validator의 파생된 EVM 개인 키를 기본 데이터 구성 디렉토리로 내보냅니다--export-evm-key-path
: (문자열) validator의 파생된 EVM 개인 키에 대해 다른 다운로드 위치를 지정합니다--keyfile
: (문자열) Tendermint 키 파일 경로 (기본값 “/home/ubuntu/.story/story/config/priv_validator_key.json”)
delegator가 아닌 validator로 트랜잭션을 발행하려면
키를 password.txt.env
파일로 내보내고 IP가
전송되었는지 확인하세요. 예를 들어./story validator export --export-evm-key --evm-key-path .env
Validator 생성
새 validator를 생성하려면 다음 명령을 실행하세요:
이 명령은 priv_validator_key.json에 저장된 validator 키에 해당하는 validator를 생성하고,priv_validator_key.json
validator에게 자체 스테이킹을 위한{$AMOUNT_TO_STAKE_IN_WEI}
IP를 제공합니다.
합의에 참여하려면 최소 1024 IP가 스테이킹되어야 합니다 (이는1024000000000000000000 wei
에 해당합니다)!
아래는 validator 설정을 추가로 사용자 정의할 수 있는 선택적 플래그 목록입니다:
사용 가능한 플래그:
--stake
: validator가 자체 위임할 금액을 wei 단위로 설정합니다 (기본값은1024000000000000000000
wei입니다).--moniker
: 네트워크의 사용자에게 표시되는 validator의 사용자 정의 이름을 정의합니다.--chain-id
: 트랜잭션의 Chain ID를 지정합니다. 기본값은1516
입니다.--commission-rate
: validator의 수수료율을 bips 단위로 설정합니다 (1% = 100 bips). 예를 들어,1000
는 10% 수수료를 나타냅니다 (기본값은1000
입니다).--explorer
: 블록체인 탐색기의 URL을 지정합니다 (기본값:https://www.storyscan.io).--keyfile
: Tendermint 키 파일의 경로를 지정합니다 (기본값:$HOME/.story/story/config/priv_validator_key.json
).--max-commission-change-rate
: validator의 수수료가 변경될 수 있는 최대 비율을 bips 단위로 설정합니다. 예를 들어,100
는 최대 1% 변경을 나타냅니다 (기본값은1000
입니다).--max-commission-rate
: validator가 부과할 수 있는 최대 수수료율을 bips 단위로 정의합니다. 예를 들어,5000
는 50% 최대 비율을 허용합니다 (기본값은5000
입니다).--private-key
: 트랜잭션 서명에 지정된 개인 키를 사용합니다. 설정하지 않으면priv_validator_key.json
의 키가 사용됩니다.--rpc
: 네트워크에 연결할 RPC URL을 설정합니다 (기본값:https://mainnet.storyrpc.io).--unlocked
: 잠금 해제된 토큰 스테이킹이 지원되는지 결정합니다 (true
는 잠금 해제된 스테이킹,false
는 잠긴 스테이킹). 기본값은true
입니다.--story-api
: 잠재적인 자금 손실을 방지합니다. 기본적으로http://localhost:1317
값을 설정해야 합니다
생성 명령 사용 예시
validator 확인하기
생성되면 다음을 사용하여Explorer URL
트랜잭션을 확인하세요. 성공하면 귀하의 validator 공개 키(에서 찾을 수 있음priv_validator_key.json
파일)가 다음 엔드포인트의 일부로 나열되어 있는 것을 볼 수 있습니다:
축하합니다, 이제 당신은 Story의 최초 IP validator 중 한 명입니다!
Validator 스테이킹
기존 validator에 스테이킹하려면 다음 명령을 실행하세요:
- 귀하의 고유한
${VALIDATOR_PUB_KEY_IN_HEX}
는 다음 명령을 실행하여 찾을 수 있습니다./story validator export
명령을Compressed Public Key (hex)
로. - 트랜잭션이 유효하려면 최소 1024 IP 가치(
*1024000000000000000000 wei
)를 스테이킹해야 합니다
스테이킹이 완료되면Explorer URL
를 사용하여 트랜잭션을 확인할 수 있습니다. 앞서 언급했듯이, 우리의validator 엔드포인트를 사용하여 validator의 새로운 투표 권한을 확인할 수 있습니다.
사용 가능한 플래그:
--validator-pubkey
: (문자열) 스테이킹할 validator의 공개 키--stake
: (문자열) wei 단위로 스테이킹할 IP 양--chain-id
: (정수) 트랜잭션에 사용할 체인 ID (기본값: 1514)--explorer
: (문자열) 블록체인 탐색기의 URL--help
,-h
: stake 명령에 대한 도움말 정보 표시--private-key
: (문자열) 트랜잭션에 사용되는 개인 키--rpc
: (문자열) 네트워크에 연결할 RPC URL--staking-period
: (stakingPeriod) 스테이킹 기간 (옵션: “flexible”, “short”, “medium”, “long”) (기본값: flexible)--story-api
: 잠재적인 자금 손실 방지. 기본적으로http://localhost:1317
를 값으로 설정해야 합니다
스테이킹 명령 사용 예시
Validator 언스테이킹
validator에서 언스테이킹하려면 다음 명령을 실행하세요:
이것은 선택한 validator에서${AMOUNT_TO_UNSTAKE_IN_WEI}
IP를 언스테이킹합니다. 트랜잭션이 유효하려면 최소 1024 IP 가치(*1024000000000000000000 wei
)를 언스테이킹해야 합니다.
스테이킹 작업과 마찬가지로Explorer URL
를 사용하여 트랜잭션을 확인하고 우리의validator 엔드포인트를 사용하여 validator의 새로 감소된 투표 권한을 다시 확인하세요.
사용 가능한 플래그:
--chain-id
: (정수) 트랜잭션에 사용할 체인 ID (기본값: 1514)--delegation-id
: (uint32) 위임 ID (유연한 스테이킹의 경우 0)--explorer
: (문자열) 블록체인 탐색기의 URL (기본값: “https://www.storyscan.io”)--help
,-h
: unstake 명령에 대한 도움말--private-key
: (문자열) 트랜잭션에 사용되는 개인 키--rpc
: (문자열) 네트워크에 연결할 RPC URL (기본값: “https://mainnet.storyrpc.io”)--unstake
: (문자열) wei 단위로 언스테이킹할 양--validator-pubkey
: (문자열) Validator의 16진수로 인코딩된 압축된 33바이트 secp256k1 공개 키--story-api
: 잠재적인 자금 손실 방지. 기본적으로http://localhost:1317
를 값으로 설정해야 합니다
언스테이킹 명령 사용 예시
Validator 대리 스테이킹
다른 위임자를 대신하여 스테이킹하려면 다음 명령을 실행하세요:
이것은 제공된 위임자를 대신하여${AMOUNT_TO_STAKE_IN_WEI}
IP를 validator에게 스테이킹합니다. 트랜잭션이 유효하려면 최소 1024 IP 가치(*1024000000000000000000 wei
)를 스테이킹해야 합니다.
다른 스테이킹 작업과 마찬가지로Explorer URL
를 사용하여 트랜잭션을 확인하고 우리의validator 엔드포인트를 사용하여 validator의 증가된 투표 권한을 다시 확인하세요.
사용 가능한 플래그:
--chain-id
: (정수) 트랜잭션에 사용할 체인 ID (기본값: 1514)--delegator-address
: (문자열) 위임자의 EVM 주소--explorer
: (문자열) 블록체인 탐색기의 URL (기본값: “https://www.storyscan.io”)--help
,-h
: stake-on-behalf 명령에 대한 도움말--private-key
: (문자열) 트랜잭션에 사용되는 개인 키--rpc
: (문자열) 네트워크에 연결할 RPC URL (기본값: “https://mainnet.storyrpc.io”)--stake
: (문자열) validator가 자체 위임할 wei 단위의 양--staking-period
: (stakingPeriod) 스테이킹 기간 (옵션: “flexible”, “short”, “medium”, “long”) (기본값: flexible)--validator-pubkey
: (문자열) Validator의 16진수로 인코딩된 압축된 33바이트 secp256k1 공개 키--story-api
: 잠재적인 자금 손실 방지. 기본적으로http://localhost:1317
를 값으로 설정해야 합니다
대리 스테이킹 명령 사용 예시
Validator 대리 언스테이킹
위임자를 대신하여 언스테이킹할 수도 있습니다. 그러나 이를 위해서는 해당 위임자의 승인된 운영자로 등록되어 있어야 합니다. 운영자로서 다른 위임자를 대신하여 언스테이킹하려면 다음 명령을 실행하세요:
이것은 위임자를 대신하여${AMOUNT_TO_STAKE_IN_WEI}
IP를 validator에서 언스테이킹합니다. 단, 해당 위임자의 등록된 운영자여야 합니다. 트랜잭션이 유효하려면 최소 1024 IP 가치(*1024000000000000000000 wei
)를 언스테이킹해야 합니다.
다른 스테이킹 작업과 마찬가지로, Explorer URL
를 사용하여 트랜잭션을 확인하고 우리의 validator endpoint를 사용하여 검증인의 감소된 투표력을 다시 확인하세요.
사용 가능한 플래그:
--chain-id
: (int) 트랜잭션에 사용할 체인 ID (기본값: 1514)--delegator-address
: (string) 위임자의 EVM 주소--explorer
: (string) 블록체인 탐색기의 URL (기본값: “https://www.storyscan.io”)--help
,-h
: unstake-on-behalf 명령에 대한 도움말--private-key
: (string) 트랜잭션에 사용되는 개인 키--rpc
: (string) 네트워크에 연결할 RPC URL (기본값: “https://mainnet.storyrpc.io”)--unstake
: (string) 언스테이크할 금액 (wei 단위)--validator-pubkey
: (string) 검증인의 16진수로 인코딩된 압축된 33바이트 secp256k1 공개 키--story-api
: 잠재적인 자금 손실을 방지합니다. 기본적으로http://localhost:1317
를 값으로 설정해야 합니다
Unstake-on-behalf 명령 사용 예시
검증인 언제일
검증인이 감금된 경우, 예를 들어 상당한 다운타임을 경험한 경우, 다음 명령을 사용하여 대상 검증인을 언제일할 수 있습니다:
트랜잭션이 유효하려면 트랜잭션을 제출하는 지갑에 최소 1 IP가 필요합니다.
사용 가능한 플래그:
--chain-id
: (int) 트랜잭션에 사용할 체인 ID--explorer
: (string) 블록체인 탐색기의 URL--private-key
: (string) 트랜잭션에 사용되는 개인 키--rpc
: (string) 네트워크에 연결할 RPC URL--story-api
: 잠재적인 자금 손실을 방지합니다. 기본적으로http://localhost:1317
를 값으로 설정해야 합니다
언제일 명령 사용 예시
검증인 대리 언제일
권한이 있는 운영자인 경우, 다음 명령을 사용하여 검증인을 대신하여 언제일할 수 있습니다:
사용 가능한 플래그:
--chain-id
: (int) 트랜잭션에 사용할 체인 ID--explorer
: (string) 블록체인 탐색기의 URL--private-key
: (string) 트랜잭션에 사용되는 개인 키--rpc
: (string) 네트워크에 연결할 RPC URL--validator-pubkey
: (string) 검증인의 16진수로 인코딩된 압축된 33바이트 secp256k1 공개 키--story-api
: 잠재적인 자금 손실을 방지합니다. 기본적으로http://localhost:1317
를 값으로 설정해야 합니다
대리 언제일 명령 사용 예시
검증인 재위임
한 검증인에서 다른 검증인으로 재위임하려면 다음 명령을 실행하세요:
사용 가능한 플래그:
--chain-id
: (int) 트랜잭션에 사용할 체인 ID (기본값 1514)--delegation-id
: (uint32) 위임 ID (유연한 스테이킹의 경우 0)--explorer
: (string) 블록체인 탐색기의 URL (기본값 “https://www.storyscan.io”)--help
,-h
: 재위임 명령에 대한 도움말--private-key
: (string) 트랜잭션에 사용되는 개인 키--redelegate
: (string) 재위임할 금액 (wei 단위)--rpc
: (string) 네트워크에 연결할 RPC URL (기본값 “https://mainnet.storyrpc.io”)--validator-dst-pubkey
: (string) 목적지 검증인의 16진수로 인코딩된 압축된 33바이트 secp256k1 공개 키--validator-src-pubkey
: (string) 출발지 검증인의 16진수로 인코딩된 압축된 33바이트 secp256k1 공개 키--story-api
: 잠재적인 자금 손실을 방지합니다. 기본적으로http://localhost:1317
를 값으로 설정해야 합니다
재위임 명령 사용 예시
검증인 대리 재위임
권한이 있는 운영자인 경우, 다음 명령을 사용하여 위임자를 대신하여 한 검증인에서 다른 검증인으로 재위임할 수 있습니다:
사용 가능한 플래그:
--chain-id
: (int) 트랜잭션에 사용할 체인 ID (기본값 1514)--delegation-id
: (uint32) 위임 ID (유연한 스테이킹의 경우 0)--delegator-address
: (string) 위임자의 EVM 주소--explorer
: (string) 블록체인 탐색기의 URL (기본값 “https://www.storyscan.io”)--help
,-h
: redelegate-on-behalf 명령에 대한 도움말--private-key
: (string) 트랜잭션에 사용되는 개인 키--redelegate
: (string) 재위임할 금액 (wei 단위)--rpc
: (string) 네트워크에 연결할 RPC URL (기본값 “https://mainnet.storyrpc.io”)--validator-dst-pubkey
: (string) 목적지 검증인의 16진수로 인코딩된 압축된 33바이트 secp256k1 공개 키--validator-src-pubkey
: (string) 출발지 검증인의 16진수로 인코딩된 압축된 33바이트 secp256k1 공개 키--story-api
: 잠재적인 자금 손실을 방지합니다. 기본적으로http://localhost:1317
를 값으로 설정해야 합니다
대리 재위임 명령 사용 예시
운영자 설정
위임자는 자신을 대신하여 언스테이크하거나 재위임할 운영자를 추가할 수 있습니다. 운영자를 추가하려면 다음 명령을 실행하세요:
--chain-id
int 트랜잭션에 사용할 체인 ID (기본값 1514)--explorer
string 블록체인 탐색기의 URL (기본값 “https://www.storyscan.io”)--operator
string 위임자에게 운영자를 설정합니다--private-key
string 트랜잭션에 사용되는 개인 키--rpc
string 네트워크에 연결할 RPC URL (기본값 “https://mainnet.storyrpc.io”)
트랜잭션이 유효하려면 트랜잭션을 제출하는 지갑에 최소 1 IP가 필요합니다.
운영자 추가 명령어 사용 예시
운영자 해제
운영자를 제거하려면 다음 명령어를 실행하세요:
운영자 제거 명령어 사용 예시
보상 주소 설정
위임자가 스테이킹 및 출금 보상을 받는 주소를 변경하려면 다음을 실행할 수 있습니다:
트랜잭션이 유효하려면 트랜잭션을 제출하는 지갑에 최소 1 IP가 필요합니다.
출금 주소 설정 명령어 사용 예시
출금 주소 설정
위임자가 스테이킹 및 출금 보상을 받는 주소를 변경하려면 다음을 실행할 수 있습니다:
트랜잭션이 유효하려면 트랜잭션을 제출하는 지갑에 최소 1 IP가 필요합니다.
출금 주소 설정 명령어 사용 예시
검증자 수수료 업데이트
검증자의 수수료율을 변경하려면 다음을 실행할 수 있습니다:
검증자 수수료 업데이트 예시
Story API 활성화
Prerequisites:
- 전체 노드가 동기화되고 최신 블록과 일치하는지 확인하세요
활성화 단계:
- 다음으로 이동
${STORY_DATA_ROOT}/config/story.toml
- 설정
enable = true
섹션 아래의[api]
섹션 - 노드 재시작
그런 다음 http://localhost:1317
를 -story-api
값으로 사용할 수 있습니다
검증자를 다른 기계로 마이그레이션
검증자 노드를 새 기계로 마이그레이션하기 전에 현재 노드가 완전히 종료되었는지 확인하세요. 활성 검증자를 복원하려고 하면 “이중 서명”이라는 중대한 오류가 발생할 수 있으며, 이는 위임된 지분이 삭감될 수 있습니다.
- 검증자를 위한 새로운 환경을 구성하는 것부터 시작하세요. 새로운 전체 노드가 네트워크의 최신 블록과 완전히 동기화되었는지 확인하세요.
- 우발적인 이중 서명을 방지하기 위해, 새 인스턴스를 활성화하기 전에 원래 검증자 노드를 완전히 종료하는 것이 필수적입니다. 시스템 재부팅 후 자동으로 재시작되는 것을 방지하기 위해 Story 서비스 파일을 삭제하는 것을 권장합니다. 또한
priv_validator_key.json
와priv_validator_state.json
를 백업하고 활성 검증자를 실행 중인 현재 서버에서 제거하세요. 이러한 단계를 건너뛰면 블록 누락이나 기타 페널티가 발생할 수 있습니다.
- 새 기계의
priv_validator_key.json
와priv_validator_state.json
를~/.story/story/config/
디렉토리에서 찾으세요. 이 파일을 이전 검증자의 백업 복사본으로 교체하세요.
진행하기 전에 원래 서버에서 이전 검증자를 종료하고 다시 시작하지 마세요!
- 개인 키 파일을 전송한 후, 새 설정에서 검증자 노드를 재시작하세요. 이렇게 하면 검증자가 네트워크에 다시 통합되어 검증 역할을 재개할 수 있습니다.