> For the complete documentation index, see [llms.txt](https://baryon.gitbook.io/umee/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://baryon.gitbook.io/umee/umee-validators/running-a-node/validator.md).

# 검증인(Validators)

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

## 키링(Keyring)

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

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

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

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

자세한 내용은 Cosmos SDK의 [키링 설명서](https://docs.cosmos.network/master/run-node/keyring.html#setting-up-the-keyring)를 참조하세요.

## 이더리움 노드(Ethereum Node)

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

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

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

{% code title="/etc/systemd/system/geth.service" %}

```bash
[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
```

{% endcode %}

{% hint style="info" %}
`geth` 인스턴스를 외부에서 접근하고 계신다면, 반드시 `--http.addr=0.0.0.0`. 로 설정하십시
{% endhint %}

[systemd](https://systemd.io/) 재로드하고 `geth`을 다시 시작하십시

```bash
$ sudo systemctl daemon-reload
$ sudo systemctl start geth
```

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

```bash
$ sudo systemctl status geth
$ sudo systemctl enable geth
```

## 그래비티 브릿지(Gravity Bridge)

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

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

* 우미 gRPC 인스턴
* 이더리 RPC 인스턴스
* Umee에 트랜잭션을 릴레이 하기 위한 자금이 담긴 우미 체인의 서명 키
* 이더리움에 트랜잭션을 릴레이 하기 위한 자금이 담긴 이더리움 체인의 서명 키

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

```bash
$ 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
```

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

```bash
# Create the configuration directory for the orchestrator
$ mkdir $HOME/gorc && cd $HOME/gorc
$ vim config.toml
```

{% code title="$HOME/gorc/config.toml" %}

```bash
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"
```

{% endcode %}

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

{% hint style="info" %}
The Gravity Bridge contract must be deployed prior to configuring and starting the orchestrator process. Please see the Umee [repository](https://github.com/umee-network/umee) for more information.

오케스트레이터 프로세스를 구성하고 시작하기 전에 그래비티 브릿지 컨트랙트를 배포해야 합니다. 자세한 내용은 Umee [레포지토를 ](https://github.com/umee-network/umee)참조하십시오.
{% endhint %}

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

```bash
# 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](https://systemd.io/) 서비스를 생성하십시

{% code title="/etc/systemd/system/gorc.service" %}

```bash
[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
```

{% endcode %}

## 검증인 생성(Create Validator)

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

```bash
# 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` 키는 사전에 생성된 검증인 오퍼레이터 키에 해당됩니다.&#x20;

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

```bash
# 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>
```

{% hint style="danger" %}
현재 `set-delegate-keys` 명령어 렛저 하드웨어 서명을 지원하지 않습니다.
{% endhint %}

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

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

```bash
$ sudo systemctl daemon-reload
$ sudo systemctl start gorc
```

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

```bash
$ sudo systemctl status gorc
$ sudo systemctl enable gorc
```
