검증인(Validators)

우미 검증인을 운영하기 위한 단계별 상세 가이드

우미 검증인으로 참여하기 위한 설정 방법에 대한 지침 가이드가 내포되어 있습니다. 먼저, umeed 바이너리를 설치하고 구성하는 방법에 대한 풀노드 지침서를 확인하십시오. 이 가이드에서는 이미 설치 및 구성이 완료되었다고 전제하고 있습니다.

키링(Keyring)

검증인을 생성하기에 앞서, 가장 먼저 "오퍼레이터" 키를 생성하셔야 합니다. 합의 목적의 키가 아니며, 서명에도 사용되지 않는 것에 주목하셔야 합니다. 대신, 우미 네트워크에서 검증인을 식별하기 위해 사용됩니다.

$ umeed keys add <val-oper-key-name> [flags]

umeed 을 통해 OS을 지원하는 키링(keyring)에 키가 디폴트로 저장될 것입니다. 여러분이 변경을 원한다면 --keyring-backend 플래그를 사용할 수 있습니다.

니모닉을 통해 이미 생성된 키를 임포트하고 싶다면, --recover 플래그를 사용하십시오. keys add 명령어를 이용하면 BIP39 니모닉이 생성될 것입니다.

자세한 내용은 Cosmos SDK의 키링 설명서를 참조하세요.

이더리움 노드(Ethereum Node)

그레비티 브릿지(Gravity Bridge)를 사용하려면 검증인은 umeed 프로세스 외에 오케스트레이터(Orchestrator)를 추가적으로 실행해야 합니다. 오케스트레이터의 운용 필요 조건은 geth 노드의 RPC 인스턴스입니다. geth 라이트 클라이언트로 사용할 수 있으나 풀노드가 선호됩니다.

자체 geth 노드를 실행하거나 공개적으로 사용 가능한 노드를 이용할 수 있습니다. 그러나 프로덕션 환경에서는 자체적으로 여러분의 geth 노드를 설치하는 것이 좋습니다. 우미 검증인을 실행하는 네트워크 환경에 따라 적절한 이더리움 네트워크의 geth 노드를 설치해야 될 것입니다. 서로 다른 이더리움 네트워크에 연결하기 위한 자세한 정보는 geth CLI 문서를 참조해주십시오.

geth 노드를 설치하기 위해서는 go-ethereum의 다운로드 페이지로 가셔서 바이너리를 가장 먼저 설치해주십시오. 그런 다음 systemd를 생성하십시오.

/etc/systemd/system/geth.service
[Unit]
Description=Geth node
After=online.target

[Service]
Type=root
User=root
ExecStart=/usr/bin/geth --syncmode "light" --http ...
Restart=on-failure
RestartSec=3
LimitNOFILE=4096

[Install]
WantedBy=multi-user.target

geth 인스턴스를 외부에서 접근하고 계신다면, 반드시 --http.addr=0.0.0.0. 로 설정하십시

systemd 재로드하고 geth을 다시 시작하십시

$ sudo systemctl daemon-reload
$ sudo systemctl start geth

최종적으로, geth 상태를 확인하시고 enable 명령어까지 진행하십시오

$ sudo systemctl status geth
$ sudo systemctl enable geth

그래비티 브릿지(Gravity Bridge)

검증인은 오케스트레이터(gorc)로 알려진 그레비티 브릿지의 중요 컴포넌트를 필수적으로 운영해야 합니다. 오케스트레이터는 다양한 용도로 사용되지만 주로 우미 네트워크와 이더리움 간의 오프체인 중계자 및 오라클 역할을 합니다.

오케스트레이터를 성공적으로 실행하려면 몇 가지 구성 요소가 필요합니다.

  • 우미 gRPC 인스턴

  • 이더리 RPC 인스턴스

  • Umee에 트랜잭션을 릴레이 하기 위한 자금이 담긴 우미 체인의 서명 키

  • 이더리움에 트랜잭션을 릴레이 하기 위한 자금이 담긴 이더리움 체인의 서명 키

우미 네트워크는 그래비티 브릿지의 PeggyJV 버전을 사용합니다. 릴리스 페이지를 방문하여 해당 버전의 gorc를 다운로드 하십시오. gorc는 현재 Linux용으로만 빌드되어 있으므로, 다른 OS 또는 지원되지 않는 아키텍처를 사용하는 경우 소스에서 gorc를 빌드해야 할 수 있습니다.

$ GORC_VERSION=<check version from releases pages>
$ wget https://github.com/PeggyJV/gravity-bridge/releases/download/$GORC_VERSION/gorc
$ chmod +x ./gorc
$ mv ./gorc /usr/local/bin

이미 umeedgeth 인스턴스가 실행 중이라고 가정하고 다음으로 그래비티 브릿지 오케스트레이터를 구성합시다.

# Create the configuration directory for the orchestrator
$ mkdir $HOME/gorc && cd $HOME/gorc
$ vim config.toml
$HOME/gorc/config.toml
keystore = "<$HOME>/gorc/keystore/"

[gravity]
contract = "<gravity-contract-address>"
fees_denom = "uumee"

[ethereum]
key_derivation_path = "m/44'/60'/0'/0/0"
rpc = "http://localhost:8545"
gas_price_multiplier = 1.0

[cosmos]
key_derivation_path = "m/44'/118'/0'/0/0"
grpc = "http://localhost:9090"
prefix = "umee"
# For networks with a large validator set size, you might
# have to adjust the following configurations:
#
# gas_limit = 500000
# msg_batch_size = 5

[cosmos.gas_price]
amount = 0.00001
denom = "uumee"

[metrics]
listen_addr = "127.0.0.1:3000"

인스턴스가 로컬에서 실행되지 않는 경우 우 gRPC 및 이더리움 RPC 엔드포인트 올바른 값으로 바꿉니다.

The Gravity Bridge contract must be deployed prior to configuring and starting the orchestrator process. Please see the Umee repository for more information.

오케스트레이터 프로세스를 구성하고 시작하기 전에 그래비티 브릿지 컨트랙트를 배포해야 합니다. 자세한 내용은 Umee 레포지토를 참조하십시오.

다음으로 두 개의 서명 키를 gorc 키 스토어에 임포트 해야 합니다.

# Import the Umee signing key via the mnemonic
# Note, this is the mnumonic from an Umee account, e.g. umee1...
$ gorc --config $HOME/gorc/config.toml keys cosmos recover <orch-umee-key-name> "<mnemonic>"
# Import the Ethereum signing key via the mnemonic
$ gorc --config $HOME/gorc/config.toml keys eth recover <orch-eth-key-name> "<mnemonic>"
# Or, import the Ethereum signing key via the private key
$ gorc --config $HOME/gorc/config.toml keys eth import <orch-eth-key-name> "0x..."

다음으로, gorc systemd 서비스를 생성하십시

/etc/systemd/system/gorc.service
[Unit]
Description=Gravity Bridge Orchestrator
After=online.target

[Service]
Type=root
User=root
Environment="RUST_LOG=INFO"
ExecStart=/usr/local/bin/gorc --config <$HOME>/gorc/config.toml orchestrator start --cosmos-key <orch-umee-key-name> --ethereum-key <orch-eth-key-name>
Restart=on-failure
RestartSec=3
LimitNOFILE=4096

[Install]
WantedBy=multi-user.target

검증인 생성(Create Validator)

umeedgeth가 실행되면 MsgCreateValidator 트랜잭션을 통해 Umee 네트워크에서 최종적으로 검증인을 생성할 수 있습니다.

# Validator's consensus public key
# e.g. {"@type":"/cosmos.crypto.ed25519.PubKey","key":"..."}
$ UMEE_VAL_CONS_KEY=$(umeed tendermint show-validator)
$ umeed tx staking create-validator \
  --amount=<amount> \
  --pubkey=$UMEE_VAL_CONS_KEY \
  --moniker="<moniker>" \
  --chain-id="<chain-id>" \
  --commission-rate="<commission>" \
  --commission-max-rate="<max-commission>" \
  --commission-max-change-rate="<max-commission-rate-change>" \
  --min-self-delegation="<min-self-delegation>" \
  --fees=<fees> \
  --from=<val-oper-key-name>

접속하는 네트워크와 동일한 chain-id를 반드시 사용해야 합니다. keyval-oper-key-name 키는 사전에 생성된 검증인 오퍼레이터 키에 해당됩니다.

마지막으로, MsgDelegateKeys 트랜잭션을 통해 그래비티 블릿지 내에서 검증인의 "위임자 키(delegate keys)"를 반드시 등록해야 합니다. 이 작업을 통해 검증인은 오케스트레이터의 우미 및 이더리움 주소를 검증인의 오퍼레이터 주소와 관련 짓거나 "연결"할 수 있습니다.

# Validator's operator address
$ VAL_ADDR=$(umeed keys show <val-oper-key-name> --bech val -a)
# Orchestrator's Umee key
$ GORC_UMEE_KEY=$(umeed keys show <orch-umee-key-name> -a)
# Orchestrator's Ethereum key
$ GORC_ETH_KEY=$(gorc --config $HOME/gorc/config.toml keys eth show <orch-eth-key-name>)
# Generate an Ethereum signature over the delegate keys message
$ GORC_ETH_SIG=$(gorc --config $HOME/gorc/config.toml sign-delegate-keys -a <orch-eth-key-name> $VAL_ADDR)
$ umeed tx gravity set-delegate-keys $VAL_ADDR $GORC_UMEE_KEY $GORC_ETH_KEY $GORC_ETH_SIG \
    --chain-id="<chain-id>" \
    --from=<val-oper-key-name> \
    --fees=<fees>

현재 set-delegate-keys 명령어 렛저 하드웨어 서명을 지원하지 않습니다.

MsgCreateValidatorMsgDelegateKeys 트랜잭션이 모두 우미 네트워크에 커밋되었음을 확인했으면 마침내 gorc 오케스트레이터를 시작할 수 있습니다.

systemd를 다시 로드하고 gorc 서비스를 시작합니다.

$ sudo systemctl daemon-reload
$ sudo systemctl start gorc

최종적으로 gorc 서비스 상태를 확인하고, enable 명령어를 실행시키십시오.

$ sudo systemctl status gorc
$ sudo systemctl enable gorc

Last updated