본문으로 건너뛰기

validator 노드 관리

Sui의 validator로서, 노드가 항상 최적화된 상태를 유지하도록 수행해야 하는 몇 가지 프로세스가 있다.

스토리지 관리​

모든 sui-node 관련 데이터는 기본적으로 /opt/sui/db/ 아래 저장된다. 이는 sui-node 구성 파일에 지정되어 있다.

$ cat /opt/sui/config/validator.yaml | grep db-path
  db-path: /opt/sui/db/authorities_db
db-path: /opt/sui/db/consensus_db

데이터베이스가 기록될 수 있도록 적절한 크기의 디스크가 마운트되어 있는지 확인해야 한다.

  • 로컬 sui-node 데이터베이스의 크기를 확인하려면:
$ du -sh /opt/sui/db/
$ du -sh /opt/sui/db/authorities_db
$ du -sh /opt/sui/db/consensus_db
  • 로컬 sui-node 데이터베이스를 삭제하려면:
$ sudo systemctl stop sui-node
$ sudo rm -rf /opt/sui/db/authorities_db /opt/sui/db/consensus_db

키 관리​

sui-node에서는 다음 키들이 사용된다:

키체계목적
protocol.keybls12381트랜잭션
account.keyed25519staking을 위한 자산 제어
network.keyed25519상태 동기화
worker.keyed25519합의 (마이그레이션 예정)

이들은 sui-node 구성 파일에서 설정된다.

메트릭​

sui-node는 로컬 HTTP 인터페이스를 통해 메트릭을 노출한다. 이들은 중앙 모니터링 시스템에서 사용하기 위해 수집될 수 있으며, 노드에서 직접 확인할 수도 있다.

  • 모든 메트릭 보기:
$ curl -s http://localhost:9184/metrics
  • 특정 메트릭 검색:
$ curl http://localhost:9184/metrics | grep <METRIC>

sui-node는 또한 중앙 Sui 메트릭 프록시로 메트릭을 푸시한다.

로그​

로그는 RUST_LOG 환경 변수를 사용하여 제어된다.

RUST_LOG_JSON=1 환경 변수를 선택적으로 설정하여 JSON 구조화 로깅 형식을 활성화할 수 있다.

배포 방법에 따라 이들은 다음 위치에서 구성된다:

sui-node 로그를 보고 팔로우하려면:

$ journalctl -u sui-node -f

특정 일치 항목을 검색하려면:

$ journalctl -u sui-node -g <SEARCH_TERM>

노드가 실행되는 동안 관리 인터페이스를 사용하여 로깅 구성을 변경할 수 있다.

현재 구성된 로깅 값을 보려면:

$ curl localhost:1337/logging

현재 구성된 로깅 값을 변경하려면:

$ curl localhost:1337/logging -d "info"

대시보드​

네트워크 전체의 가시성을 위한 퍼블릭 대시보드:

소프트웨어 업데이트​

sui-node 소프트웨어의 업데이트가 필요한 경우, 다음 프로세스를 사용할 수 있다. 배포 유형에 따라 관련 Systemd 또는 Docker Compose 런북을 따른다. 깨끗한 데이터베이스로 재시작하는 것을 원하는 경우는 매우 드물다.

상태 동기화​

Sui의 체크포인트는 네트워크의 영구적인 이력을 포함한다. 이들은 다른 블록체인의 블록과 유사하지만, 이끄는(leading)대신 래깅(lagging)한다는 큰 차이점이 있다. 모든 트랜잭션은 확정된 후 체크포인트에 포함되기 전에 실행된다.

이러한 체크포인트는 전용 피어 투 피어(peer-to-peer) 상태 동기화 인터페이스를 통해 validator와 풀 노드 간에 동기화된다.

validator 간의 상태 동기화는 항상 허용되지만, 풀 노드가 특정 validator로부터 동기화할 수 있는 항목을 제한하는 제어 기능이 있다.

기본값이며 권장되는 max-concurrent-connections: 0 설정은 validator 간의 상태 동기화에는 영향을 미치지는 않지만, 모든 풀 노드의 동기화를 제한한다. 알려진 풀 노드가 validator로부터 동기화할 수 있도록 sui-node 구성을 구성할 수 있다.

p2p-config:
anemo-config:
max-concurrent-connections: 0
seed-peers:
- address: <multiaddr> # The p2p address of the full node
peer-id: <peer-id> # hex encoded network public key of the node
- address: ... # another permitted peer
peer-id: ...

chain operation​

다음 체인 운영은 sui CLI를 사용하여 실행된다. 이 바이너리는 sui-node와 유사하게 릴리스로 빌드 및 제공되며, 예시는 다음과 같다:

$ wget https://releases.sui.io/$SUI_SHA/sui
$ chmod +x sui
$ curl https://releases.sui.io/$SUI_SHA/sui -o sui
$ chmod +x sui

sui 바이너리 릴리스/버전이 배포된 네트워크의 버전과 일치하는 것이 권장되며 종종 필수적이다.

온체인 메타데이터 업데이트​

validator tool을 활용하여 다음 작업의 대부분을 수행할 수 있다.

활성/대기 중인 validator는 트랜잭션을 제출하여 온체인 메타데이터를 업데이트할 수 있다. 일부 메타데이터 변경사항은 즉시 반영되며, 다음을 포함한다:

  • Name
  • Description
  • Image URL
  • Project URL

기타 메타데이터(키, 주소 등)는 다음 에포크에만 반영된다.

메타데이터를 업데이트하기 위해 validator는 시스템 객체와 상호작용하는 MoveCall 트랜잭션을 실행한다. 예를 들어:

  1. name을 new_validator_name으로 업데이트하려면, Sui Client CLI을 사용하여 sui_system::update_validator_name을 호출한다.
팁

Beginning with the Sui v1.24.1 release, the --gas-budget option is no longer required for CLI commands.

$ sui client call --package 0x3 --module sui_system --function update_validator_name --args 0x5 \"new_validator_name\" --gas-budget 10000
  1. 다음 에포크부터 시작되는 p2p 주소를/ip4/192.168.1.1로 업데이트하려면, Sui Client CLI를 사용하여 sui_system::update_validator_next_epoch_p2p_address를 호출한다:
$ sui client call --package 0x3 --module sui_system --function update_validator_next_epoch_p2p_address --args 0x5 "[4, 192, 168, 1, 1]" --gas-budget 10000

full list of metadata update functions을 확인한다.

Operation Cap​

계정 키를 너무 자주 터치하지 않고 오프라인에 저장할 수 있도록, validator는 운영 능력을 다른 주소에 위임할 수 있다. 이 주소는 validator를 대신하여 참조 가스 가격과 집계 규칙을 업데이트할 수 있다.

validator 생성 시, UnverifiedValidatorOperationCap생성되어 validator 주소로 전송된다. 이 Cap 객체("Capability"의 약자)의 보유자는 해당 validator에 대한 운영 조치를 수행할 수 있다. 다른 주소에 이러한 운영 권한을 부여하기 위해, validator는 해당 객체를 자신이 제어하는 다른 주소로 전송한다.

전송은 Sui Client CLI sui client transfer를 사용하여 수행할 수 있다.

수임자 주소를 교체하거나 권한을 취소하려면, 현재 Cap 보유자가 이를 다른 주소로 전송한다. 키가 노출되거나 분실된 경우, validator는 새로운 Cap 객체를 생성하여 기존의 것을 무효화할 수 있다.

이는 sui_system::rotate_operation_cap을 호출하여 수행된다:

$ sui client call --package 0x3 --module sui_system --function rotate_operation_cap --args 0x5 --gas-budget 10000

기본적으로 새로운 Cap 객체는 validator 주소로 전송되며, 이후 새로운 수임자 주소로 전송될 수 있다. 이 시점에서 이전 Cap은 무효화되며 더 이상 자격을 나타내지 않는다.

validator의 현재 유효한 Cap 객체 ID를 얻으려면, 보유자를 활성 주소로 설정한 후 sui client objects 명령을 사용한다.

가스 가격 survey quote update​

validator의 참조 가스 가격을 에포크 종료 시 계산하는 데 사용되는 가스 가격 조사 견적을 업데이트하려면, 발신자가 유효한 UnverifiedValidatorOperationCap을 보유해야 한다. 발신자는 validator 자신 또는 신뢰할 수 있는 수임자일 수 있다.

이를 위해서는 sui_system::request_set_gas_price를 호출한다:

$ sui client call --package 0x3 --module sui_system --function request_set_gas_price --args 0x5 {cap_object_id} {new_gas_price} --gas-budget 10000

validator report/un-report​

validator를 보고하거나 기존 보고를 취소하려면, 발신자가 유효한 UnverifiedValidatorOperationCap을 보유해야 한다. 발신자는 validator 자신 또는 신뢰할 수 있는 수임자일 수도 있다.

이를 위해 sui_system::report_validator/undo_report_validator를 호출한다:

$ sui client call --package 0x3 --module sui_system --function report_validator/undo_report_validator --args 0x5 {cap_object_id} {reportee_address} --gas-budget 10000

투표권 기준 2f + 1개의 다른 validator에 의해 validator가 보고되면, 해당 validator의 stake 보상이 삭감된다.

validator set join​

Sui 주소가 validator 세트에 참여하려면, 먼저 메타데이터 및 초기 구성과 함께 sui_system::request_add_validator_candidate를 호출하여 validator 후보로 등록해야 한다:

$ sui client call --package 0x3 --module sui_system --function request_add_validator_candidate --args 0x5 {protocol_pubkey_bytes} {network_pubkey_bytes} {worker_pubkey_bytes} {proof_of_possession} {name} {description} {image_url} {project_url} {net_address} {p2p_address} {primary_address} {worker_address} {gas_price} {commission_rate} --gas-budget 10000

주소가 validator 후보가 되면, 모든 주소(후보 주소 포함)는 해당 후보의 staking pool로 stake를 시작할 수 있다. 후보의 staking pool에 최소 sui_system::MIN_VALIDATOR_JOINING_STAKE 금액 이상의 stake가 쌓이면, 후보는 sui_system::request_add_validator를 호출하여 다음 에포크의 활성 validator 세트에 공식적으로 자신을 추가할 수 있다:

$ sui client call --package 0x3 --module sui_system --function request_add_validator --args 0x5 --gas-budget 10000000

validator set leave​

다음 에포크부터 validator 세트를 떠나려면, 발신자는 현재 에포크의 활성 validator여야 하며 sui_system::request_remove_validator를 호출해야 한다:

$ sui client call --package 0x3 --module sui_system --function request_remove_validator --args 0x5 --gas-budget 10000

다음 에포크에서 validator가 제거된 후에는 staking pool이 비활성화되며 비활성 풀에서만 stake를 인출할 수 있다.

비공개 보안 수정​

공개적으로 발표하기 전에 긴급 보안 수정을 배포해야 하는 경우가 있을 수 있다(liveliness, SUI 공급량, 거버넌스 등과 관련된 문제). 능동적인 악용을 방지하기 위해, Mysten Labs는 이러한 수정 사항이 포함된 서명된 보안 바이너리를 출시하며, 대다수의 validator가 취약점 패치를 완료할 때까지 소스 코드 공개를 지연한다.

이 릴리스 프로세스는 다르며, 이러한 바이너리에 대한 디렉토리 안내는 대역 외(out of band)로 공지될 것으로 예상해야 한다. 이러한 바이너리를 검증하는 데 사용되는 퍼블릭 키를 확인한다. View the 공개 키 used to verify these binaries

보안 수정 사항이 포함된 필요한 서명된 바이너리와 Docker 아티팩트를 모두 다운로드하는 스크립트도 제공된다.

  • Usage: ./download_private.sh <directory-name>

download_and_verify_private_binary.sh 스크립트를 사용하여 위 스크립트에 포함되지 않을 수 있는 특정 바이너리를 다운로드하고 검증할 수도 있다.

  • Usage: ./download_and_verify_private_binary.sh <directory-name> <binary-name>