diff --git a/.gitbook/docs.json b/.gitbook/docs.json index 854487e8..2e9cb9d5 100644 --- a/.gitbook/docs.json +++ b/.gitbook/docs.json @@ -1205,7 +1205,25 @@ "ko/infra/set-up-keyring", "ko/infra/join-a-network", "ko/infra/cosmovisor", - "ko/infra/upgrade-node" + "ko/infra/upgrade-node", + { + "group": "메인넷 검증자", + "pages": [ + "ko/infra/validator-mainnet/index", + "ko/infra/validator-mainnet/peggo", + "ko/infra/validator-mainnet/canonical-chain-upgrade" + ] + }, + { + "group": "테스트넷 검증자", + "pages": [ + "ko/infra/validator-testnet/index", + "ko/infra/validator-testnet/peggo" + ] + }, + "ko/infra/public-endpoints", + "ko/infra/premium-endpoints", + "ko/infra/archival-setup" ] }, "ko/faq", diff --git a/.gitbook/ko/infra/archival-setup.mdx b/.gitbook/ko/infra/archival-setup.mdx new file mode 100644 index 00000000..56a4a6e6 --- /dev/null +++ b/.gitbook/ko/infra/archival-setup.mdx @@ -0,0 +1,134 @@ +--- +title: 아카이벌 설정 +--- + +이 가이드는 아카이벌 데이터를 제공하는 노드 플릿을 생성하고 게이트웨이를 사용하여 연결하는 과정을 안내합니다. + +## 아키텍처 + +아카이벌 데이터 제공을 더 접근하기 쉽게 하기 위해 데이터를 더 작은 세그먼트로 분할합니다. 이러한 세그먼트는 `s3://injective-snapshots/mainnet/subnode`에 저장됩니다. + +| Snapshot Dir | 높이 범위 | Injective 버전 | 권장 디스크 크기 | +| ------------ | ------------ | ----------------- | --------------------- | +| `/0073` | 0 – 73M | v1.12.1 | 42 TiB | +| `/6068` | 60M – 68M | v1.12.1 | 7 TiB | +| `/7380` | 73M – 80M | v1.12.1 | 7 TiB | +| `/8088` | 80M – 88M | v1.13.3 | 7 TiB | +| `/8896` | 88M – 96M | v1.13.3 | 7 TiB | +| `/8898` | 88M – 98M | v1.13.3 | 7 TiB | +| `/98106` | 98M – 106M | v1.13.3 | 7 TiB | +| `/98107` | 98M – 107M | v1.14.0 | 7.5 TiB | +| `/66101` | 66M – 101M | v1.14.0 | 27 TiB | +| `/105116` | 105M – 116M | v1.15.0 | 7.5 TiB | +| `/113127` | 113M – 127M | v1.15.0 | 11 TiB | +| `/119143` | 119M – 143M | v1.17.0 | 16 TiB | +| `/138150` | 138M – 150M | v1.17.2 | 5.8 TiB | + +이러한 세그먼트는 블록 범위에 따라 쿼리를 적절한 노드로 라우팅하는 애그리게이터 프록시인 게이트웨이를 통해 연결됩니다. + +![Archival Architecture](./assets/archival_architecture.jpg) + +## 시스템 요구 사항 + +아카이벌 데이터 슬라이스를 호스팅하는 각 노드는 다음 최소 요구 사항을 충족해야 합니다. + +| 구성 요소 | 최소 사양 | 참고 | +| ----------- | --------------------- | ---------------------------------------------------------- | +| **CPU** | AMD EPYC™ 9454P | 48 코어 / 96 스레드 | +| **메모리** | 128 GB DDR5 ECC | DDR5-5200 MHz 이상, 데이터 무결성을 위한 ECC | +| **스토리지** | 7 – 40 TB NVMe Gen 4 | PCIe 4.0 드라이브, 단일 드라이브 또는 RAID-0 어레이 가능 | + +## 설정 단계 +### 아카이벌 세그먼트를 호스팅하는 각 노드에서: +#### 1. 설정에 필요한 히스토리가 있는 아카이벌 세그먼트를 다운로드합니다: +```bash +aws s3 cp --recursive s3://injective-snapshots/mainnet/subnode/ $INJ_HOME +``` + +#### 2. 위 표를 기반으로 적절한 injective 바이너리 또는 이미지 태그를 다운로드하거나 설정합니다. + +#### 3. config 폴더를 생성합니다: +```bash +injectived init $MONIKER --chain-id injective-1 --home $INJ_HOME --overwrite +``` +#### 4. app.toml 파일에서 프루닝을 비활성화하고 config.toml 파일에서 p2p를 차단하고 로그 레벨을 error로 설정합니다. + +이렇게 하면 데이터가 프루닝되지 않고 노드가 중지된 상태로 유지됩니다. 로그 레벨을 error로 설정하면 디스크 작업이 줄어들고 성능이 향상됩니다. + +```bash +# app.toml에서 프루닝 비활성화 +sed -i 's/^pruning *= *.*/pruning = "nothing"/' $INJ_HOME/config/app.toml + +# config.toml에서 p2p 비활성화 및 빈 블록 생성 비활성화 +awk ' + BEGIN { section = "" } + /^\[/ { + section = $0 + } + section == "[p2p]" { + if ($1 ~ /^laddr/) $0 = "laddr = \"tcp://0.0.0.0:26656\"" + if ($1 ~ /^max_num_inbound_peers/) $0 = "max_num_inbound_peers = 0" + if ($1 ~ /^min_num_inbound_peers/) $0 = "min_num_inbound_peers = 0" + if ($1 ~ /^pex/) $0 = "pex = false" + if ($1 ~ /^seed_mode/) $0 = "seed_mode = false" + } + section == "[consensus]" { + if ($1 ~ /^create_empty_blocks/) $0 = "create_empty_blocks = false" + } + { print } + ' $INJ_HOME/config/config.toml > $INJ_HOME/config/config.tmp && mv $INJ_HOME/config/config.tmp $INJ_HOME/config/config.toml + +# 로그 레벨을 error로 설정 (디스크 쓰기 감소 = 성능 향상) +sed -i 's/^log_level *= *.*/log_level = "error"/' $INJ_HOME/config/app.toml +``` + +#### 5. 노드를 실행합니다: +```bash +injectived start --home $INJ_HOME +``` + +### 게이트웨이 구성 + +#### 1. 게이트웨이 저장소를 클론합니다: +```bash +git clone https://github.com/decentrio/gateway +``` +#### 2. 게이트웨이를 빌드합니다: +```bash +make build +``` +#### 3. 구성 파일을 생성합니다: +```yaml +upstream: + # 예시: 노드 1은 블록 0-80M을 보유하고 노드 2는 블록 80-88M을 보유 + - rpc: "http://$NODE1:$RPC_PORT" + grpc: "$NODE1:$GRPC_PORT" + api: "http://$NODE1:$API_PORT" + blocks: [0,80000000] + - rpc: "http://$NODE2:$RPC_PORT" + grpc: "$NODE2:$GRPC_PORT" + api: "http://$NODE2:$API_PORT" + blocks: [80000000,88000000] + + # <다른 노드들> + + # 아카이벌 팁, 최신 x 블록을 제공하며 일반적으로 프루닝된 노드로 설정 + - rpc: "http://$PRUNED_NODE:$RPC_PORT" + grpc: "$PRUNED_NODE:$GRPC_PORT" + api: "http://$PRUNED_NODE:$API_PORT" + blocks: [1000] + + +ports: + rpc: $RPC_PORT + api: $API_PORT + grpc: $GRPC_PORT + # 현재 비활성화하려면 0으로 설정 + jsonrpc: 0 + jsonrpc_ws: 0 + +``` +#### 4. 게이트웨이를 실행합니다: +```bash +gateway start --config $CONFIG_FILE +``` diff --git a/.gitbook/ko/infra/assets/archival_architecture.jpg b/.gitbook/ko/infra/assets/archival_architecture.jpg new file mode 100644 index 00000000..dbdeafbc Binary files /dev/null and b/.gitbook/ko/infra/assets/archival_architecture.jpg differ diff --git a/.gitbook/ko/infra/premium-endpoints.mdx b/.gitbook/ko/infra/premium-endpoints.mdx new file mode 100644 index 00000000..b59547fa --- /dev/null +++ b/.gitbook/ko/infra/premium-endpoints.mdx @@ -0,0 +1,23 @@ +--- +description: >- + 개발자로서 dApp을 구동하는 전용 노드 또는 인덱싱 솔루션에 관심이 있을 수 있습니다. +title: 프리미엄 엔드포인트 +--- + +다음은 프라이빗 Injective 인프라 서비스를 제공하는 외부 제공자 목록입니다. 자세한 정보는 아래 웹사이트를 클릭하세요: + +* [QuickNode](https://www.quicknode.com/chains/inj) +* [CryptoCrew](https://forms.gle/Aa2XYBB4sLxzHNzc6) +* [Imperator](https://www.imperator.co/products/dedicated-and-rpc-nodes#get-started) +* [AllNodes](https://injective.publicnode.com/) +* [NowNodes](https://nownodes.io/injective-inj) +* [RockX](https://access.rockx.com/product/injective-blockchain-api-for-web3-builders) + +| 제공자 | Chain | Indexer | +|-------------------|-------|---------| +| QuickNode | [x] | [ ] +| CryptoCrew | [x] | [x] | +| Imperator | [x] | [x] | +| AllNodes | [x] | [x] | +| NowNodes | [x] | [ ] | +| RockX | [x] | [ ] | diff --git a/.gitbook/ko/infra/public-endpoints.mdx b/.gitbook/ko/infra/public-endpoints.mdx new file mode 100644 index 00000000..a7596d08 --- /dev/null +++ b/.gitbook/ko/infra/public-endpoints.mdx @@ -0,0 +1,55 @@ +--- +title: 퍼블릭 엔드포인트 +--- + + +높은 사용량/트래픽이 있는 애플리케이션의 경우 프로덕션 환경에서 이를 사용하는 것을 **권장하지 않습니다**. 수천 명의 개발자가 퍼블릭 인프라를 사용하고 있으며 100% 가동 시간과 안정성을 보장할 수 없습니다. + + +## 메인넷 + +| 서비스 | 주소 | +| ---------------- | ------------------------------------------------------------- | +| Chain Swagger | https://sentry.lcd.injective.network/swagger/#/ | +| Chain LCD | https://sentry.lcd.injective.network:443 | +| Chain RPC | https://sentry.tm.injective.network:443 | +| Chain WebSocket | wss://sentry.tm.injective.network:443/websocket | +| Chain Streamer | sentry.chain.stream.injective.network:443 | +| Chain gRPC | sentry.chain.grpc.injective.network:443 | +| Chain gRPC-Web | https://sentry.chain.grpc-web.injective.network:443 | +| EVM JSON-RPC | https://sentry.evm-rpc.injective.network/ | +| EVM WebSocket | wss://sentry.evm-ws.injective.network | +| Indexer Swagger | https://sentry.exchange.grpc-web.injective.network/swagger/#/ | +| Indexer gRPC | sentry.exchange.grpc.injective.network:443 | +| Indexer gRPC-Web | https://sentry.exchange.grpc-web.injective.network:443 | +| Indexer EventProvider | k8s.global.mainnet.events.grpc.injective.network:443 | +| Hub | https://injhub.com/ | +| Explorer | https://explorer.injective.network/ | +| Faucet | https://inj.supply/ | +| Status | https://uptime.com/statuspage/status.injective.network | + + +Chain ID, 컨트랙트 및 추가 제공자를 포함한 더 많은 EVM 네트워크 세부 정보는 [EVM 네트워크 정보](/developers-evm/network-information)를 참조하세요. + + +## 테스트넷 + +| 서비스 | 주소 | +| ---------------- | --------------------------------------------------------------------- | +| Chain Swagger | https://testnet.sentry.lcd.injective.network/swagger/ | +| Chain RPC | https://testnet.sentry.tm.injective.network:443 | +| Chain LCD | https://testnet.sentry.lcd.injective.network:443 | +| Chain WebSocket | wss://testnet.sentry.tm.injective.network:443/websocket | +| Chain Streamer | testnet.sentry.chain.stream.injective.network:443 | +| Chain gRPC | testnet.sentry.chain.grpc.injective.network:443 | +| Chain gRPC-Web | https://testnet.sentry.chain.grpc-web.injective.network:443 | +| EVM JSON-RPC | https://k8s.testnet.json-rpc.injective.network/ | +| EVM WebSocket | wss://k8s.testnet.ws.injective.network/ | +| Indexer Swagger | https://testnet.sentry.exchange.grpc-web.injective.network/swagger/#/ | +| Indexer gRPC | testnet.sentry.exchange.grpc.injective.network:443 | +| Indexer gRPC-Web | https://testnet.sentry.exchange.grpc-web.injective.network:443 | +| Indexer EventProvider | k8s.global.testnet.events.grpc.injective.network:443 | +| Hub | https://testnet.hub.injective.network/ | +| Explorer | https://testnet.explorer.injective.network/ | +| Faucet | https://testnet.faucet.injective.network/ | +| Status | https://uptime.com/statuspage/testnet.status.injective.network | diff --git a/.gitbook/ko/infra/validator-mainnet/canonical-chain-upgrade.mdx b/.gitbook/ko/infra/validator-mainnet/canonical-chain-upgrade.mdx new file mode 100644 index 00000000..dd3711da --- /dev/null +++ b/.gitbook/ko/infra/validator-mainnet/canonical-chain-upgrade.mdx @@ -0,0 +1,67 @@ +--- +title: Canonical Chain 업그레이드 +--- + +## 릴리스 버전 확인 + +### Github의 릴리스 + +Docker를 통해 `injectived` 또는 `peggo` 버전 번호를 확인하려면 +[`verify-injective-release`](https://github.com/injective-dev/snippets-inj/tree/main/verify-injective-release) 코드 스니펫의 지침을 따르세요. + +이것은 Linux가 아닌 운영 체제를 사용하면서 +각 릴리스의 바이너리를 독립적으로 확인하고 싶을 때 유용합니다. + +예를 들어, `v1.16.1`의 경우 다음과 같은 출력이 생성되어야 합니다: + +```text +injectived version +Version v1.16.1 (8be67e82d) +Compiled at 20250802-1910 using Go go1.23.9 (amd64) +peggo version +Version v1.16.1 (8be67e82d) +Compiled at 20250802-1913 using Go go1.23.9 (amd64) +``` + +### Docker의 릴리스 + +각 바이너리에 단일 명령만 필요하므로 더 간단합니다. + +`injectived`의 경우 다음 명령을 사용하세요: + +```shell +docker run -it --rm injectivelabs/injective-core:v1.16.1 injectived version +``` + +이것은 다음과 유사한 출력을 생성해야 합니다: + +```text +Version v1.16.1 (8be67e8) +Compiled at 20250802-1909 using Go go1.23.9 (arm64) +``` + +`peggo`의 경우 다음 명령을 사용하세요: + +```shell +docker run -it --rm injectivelabs/injective-core:v1.16.1 peggo version +``` + +이것은 다음과 유사한 출력을 생성해야 합니다: + +```text +Version v1.16.1 (8be67e8) +Compiled at 20250802-1911 using Go go1.23.9 (arm64) +``` + +위 명령에서 `v1.16.1`을 원하는 Injective 릴리스 버전 번호로 교체해야 합니다. + +### 일치 여부 확인 + +위 명령의 출력에는 +버전 번호(예: `v1.16.1`) 외에도 다음이 포함됩니다: + +- 바이너리 릴리스 해시(예: `8be67e82d`) +- 컴파일 타임스탬프(예: `20250802-1910`) +- 컴파일러(예: `Go go1.23.9 (amd64)`) + +Github의 [Injective chain releases](https://github.com/InjectiveLabs/injective-chain-releases/releases) 페이지에 명시된 값과 **일치**하는지 확인할 수 있습니다. diff --git a/.gitbook/ko/infra/validator-mainnet/index.mdx b/.gitbook/ko/infra/validator-mainnet/index.mdx new file mode 100644 index 00000000..5e665e97 --- /dev/null +++ b/.gitbook/ko/infra/validator-mainnet/index.mdx @@ -0,0 +1,155 @@ +--- +title: 메인넷 +--- + +노드 운영자는 최적의 성능을 위해 베어메탈 서버를 배포해야 합니다. +또한 검증자 노드는 높은 가동 시간을 보장하기 위해 권장 하드웨어 사양, 특히 CPU 요구 사항을 충족해야 합니다. + +#### 하드웨어 요구 사항 + +| _최소_ | _권장_ | +| :--------------------------: | :---------------------------: | +| RAM 메모리 128GB | RAM 메모리 128GB | +| CPU 12 코어 | CPU 16 코어 | +| CPU 기본 클럭 3.7GHz | CPU 기본 클럭 4.2GHz | +| 스토리지 2TB NVMe | 스토리지 2TB NVMe | +| 네트워크 1Gbps+ | 네트워크 1Gbps+ | + +### Step 1: 검증자 계정 생성 + +먼저, 원하는 검증자 키 이름으로 keygen 명령을 실행합니다. + +```bash +export VALIDATOR_KEY_NAME=[my-validator-key] +injectived keys add $VALIDATOR_KEY_NAME +``` + +이렇게 하면 새로운 private key가 생성되고 디스크에 암호화되어 저장됩니다. 사용한 비밀번호를 꼭 기억하세요. + +```bash +# 출력 예시 +- name: myvalidatorkey + type: local + address: inj1queq795wx8gzqc8706uz80whp07mcgg5nmpj6h + pubkey: injpub1r0mckeepqwzmrzt5af00hgc7fhve05rr0q3q6wvx4xn6k46zguzykdszg6cnu0zca4q + mnemonic: "" + threshold: 0 + pubkeys: [] + + +**중요** 이 니모닉 문구를 안전한 곳에 저장하세요. +비밀번호를 잊어버렸을 때 계정을 복구할 수 있는 유일한 방법입니다. +``` + + +**출력에는 키를 평문으로 나타내는 니모닉 문구가 포함됩니다. 키 없이는 검증자를 제어할 수 없으므로 이 문구를 키의 백업으로 반드시 저장하세요. 문구는 물리적인 종이에 백업하는 것이 좋으며, 클라우드 스토리지에 저장하면 나중에 검증자가 손상될 수 있습니다.** + +`inj`로 시작하는 주소를 기억하세요. 이것이 Injective 검증자 계정 주소가 됩니다. + + +### Step 2: 메인넷 INJ 획득 + +다음 단계를 진행하려면 메인넷 Ethereum에서 실제 INJ를 획득해야 합니다(ERC-20 토큰 주소 [`0xe28b3b32b6c345a34ff64674606124dd5aceca30`](https://etherscan.io/token/0xe28b3b32b6c345a34ff64674606124dd5aceca30)). + +### Step 3: Injective의 검증자 계정으로 INJ "전송" + +스테이킹 대시보드를 사용하여 메인넷 INJ 토큰을 Injective의 검증자 계정에 입금하세요. [Hub](https://injhub.com/bridge)에서 [지갑을 연결](https://medium.com/injective-labs/injective-hub-guide-9a14f09f6a7d)한 다음 Ethereum 메인넷 네트워크에서 INJ를 입금해야 합니다. 이렇게 하면 Ethereum 네트워크에서 Injective로 토큰을 매핑하는 자동화된 브릿지가 실행됩니다. + +몇 분 후 UI에서 입금이 성공했는지 확인할 수 있습니다. 또는 다음 명령으로 `injectived` CLI를 사용하여 계정 잔액을 조회할 수 있습니다: + +```bash +injectived q bank balances +``` + +### Step 4: 검증자 계정 생성 + +노드의 Tendermint 검증자 Bech32 인코딩된 PubKey consensus 주소를 획득합니다. + +```bash +VALIDATOR_PUBKEY=$(injectived tendermint show-validator) +echo $VALIDATOR_PUBKEY + +# 예시: {"@type": "/cosmos.crypto.ed25519.PubKey", "key": "GWEJv/KSFhUUcKBWuf9TTT3Ful+3xV/1lFhchyW1TZ8="} +``` + +그런 다음 INJ 토큰으로 self-delegation이 초기화된 새 검증자를 생성합니다. 가장 중요한 것은 검증자의 스테이킹 매개변수 값을 결정하는 것입니다. + +* `--moniker` - 검증자 이름 +* `--amount` - 검증자의 초기 본딩 INJ 금액 +* `--commission-max-change-rate` - 검증자의 최대 수수료 변경률 (일당) +* `--commission-max-rate` - 검증자의 최대 수수료율 +* `--commission-rate` - 검증자의 초기 수수료율 +* `--min-self-delegation` - 검증자의 최소 필수 self-delegation + +원하는 값을 결정한 후 다음과 같이 설정합니다. + +```bash +MONIKER= +AMOUNT=100000000000000000000inj # 100 INJ를 위임하려면, INJ는 18 decimals로 표현됩니다. +COMMISSION_MAX_CHANGE_RATE=0.1 # 예: 하루 최대 10% 변경률 +COMMISSION_MAX_RATE=0.1 # 예: 최대 10% 수수료율 +COMMISSION_RATE=0.1 # 예: 초기 10% 수수료율 +MIN_SELF_DELEGATION_AMOUNT=50000000000000000000 # 예: 검증자에 필요한 최소 50 INJ self-delegation +``` + +그런 다음 다음 명령을 실행하여 검증자를 생성합니다. + +```bash +injectived tx staking create-validator \ +--moniker=$MONIKER \ +--amount=$AMOUNT \ +--gas-prices=500000000inj \ +--pubkey=$VALIDATOR_PUBKEY \ +--from=$VALIDATOR_KEY_NAME \ +--keyring-backend=file \ +--yes \ +--node=tcp://localhost:26657 \ +--chain-id=injective-1 +--commission-max-change-rate=$COMMISSION_MAX_CHANGE_RATE \ +--commission-max-rate=$COMMISSION_MAX_RATE \ +--commission-rate=$COMMISSION_RATE \ +--min-self-delegation=$MIN_SELF_DELEGATION_AMOUNT +``` + +고려할 추가 `create-validator` 옵션: + +``` +--identity= 선택적 신원 서명 (예: UPort 또는 Keybase) +--pubkey= 검증자의 Bech32 인코딩된 PubKey +--security-contact= 검증자의 (선택적) 보안 연락처 이메일 +--website= 검증자의 (선택적) 웹사이트 +``` + +[Injective Hub 스테이킹 대시보드](https://injhub.com/stake)를 확인하거나 다음 CLI 명령을 입력하여 검증자가 성공적으로 생성되었는지 확인할 수 있습니다. + +```bash +injectived q staking validators +``` + +검증자 목록에서 자신의 검증자가 보이면, 축하합니다! 공식적으로 Injective 메인넷 검증자가 되셨습니다! 🎉 + +### Step 5: (선택사항) 검증자에 추가 INJ 위임 + +미래 위임자들이 경험할 사용자 경험을 더 깊이 이해하기 위해 [스테이킹 가이드](https://medium.com/injective-labs/injective-hub-guide-9a14f09f6a7d)를 통해 위임을 시도해 볼 수 있습니다. + +이 단계들을 통해 MetaMask 트랜잭션을 사용한 위임 흐름을 경험할 수 있습니다. 🦊 + +또는 Injective CLI를 사용하여 위임 트랜잭션을 보낼 수도 있습니다. + +```bash +injectived tx staking delegate [validator-addr] [amount] --from $VALIDATOR_KEY_NAME --keyring-backend=file --yes --node=tcp://localhost:26657 +``` + +### Step 6: (권장) Keybase로 검증자 신원 연결 + +Injective의 검증자 신원 정보에 Keybase pubkey를 추가하면 Injective Hub 및 Explorer와 같은 클라이언트 애플리케이션에서 Keybase 공개 프로필 정보를 자동으로 가져올 수 있습니다. Keybase pubkey와 검증자 신원을 연결하는 방법은 다음과 같습니다: + +1. [https://keybase.io/](https://keybase.io/)에서 검증자 프로필을 만들고 완성하세요. +2. Injective에 검증자 신원 pubkey를 추가하세요: + * `MsgEditValidator`를 전송하여 Keybase pubkey로 `Identity` 검증자 신원을 업데이트합니다. 이 메시지를 사용하여 웹사이트, 연락처 이메일 및 기타 세부 정보도 변경할 수 있습니다. + +완료입니다! 검증자 신원을 Keybase와 연결하면 Injective Explorer와 Hub에서 브랜드 정체성 및 기타 공개 프로필 정보를 자동으로 가져올 수 있습니다. + +#### 다음 단계 + +다음으로 [Ethereum Bridge Relayer](/ko/infra/validator-mainnet/peggo/)를 설정하세요. 이는 검증자가 슬래싱되는 것을 방지하기 위해 필요한 단계입니다. 검증자 설정 직후에 이 작업을 수행해야 합니다. diff --git a/.gitbook/ko/infra/validator-mainnet/peggo.mdx b/.gitbook/ko/infra/validator-mainnet/peggo.mdx new file mode 100644 index 00000000..4b54bce0 --- /dev/null +++ b/.gitbook/ko/infra/validator-mainnet/peggo.mdx @@ -0,0 +1,296 @@ +--- +title: Peggo +--- + +이 페이지에 있다면 아마도 Injective의 검증자가 되셨을 것입니다. 축하합니다! `peggo` 구성은 설정의 마지막 단계입니다. + +peggo용 `.env` 예시: + +```bash +PEGGO_ENV="local" # 메트릭용 환경 이름 (dev/test/staging/prod/local) +PEGGO_LOG_LEVEL="debug" # 로그 레벨 깊이 + +PEGGO_COSMOS_CHAIN_ID="injective-1" # Injective 네트워크의 chain ID +PEGGO_COSMOS_GRPC="tcp://localhost:9090" # injectived 프로세스의 gRPC +PEGGO_TENDERMINT_RPC="http://localhost:26657" # injectived 프로세스의 Tendermint RPC + +# 참고: PEGGO_COSMOS_GRPC와 PEGGO_TENDERMINT_RPC를 생략하면 독립 실행형 peggo 모드가 활성화됩니다. 이 모드에서 +# peggo는 Injective 네트워크에서 제공하는 로드 밸런싱된 엔드포인트에 연결됩니다. 이로 인해 peggo의 연결이 injectived 프로세스에서 분리됩니다. + +# Injective 구성 +PEGGO_COSMOS_FEE_DENOM="inj" # Injective에서 수수료를 지불하는 데 사용되는 토큰 +PEGGO_COSMOS_GAS_PRICES="160000000inj" # Injective에 메시지를 보낼 때 기본 --gas-prices 플래그 값 +PEGGO_COSMOS_KEYRING="file" # keyring 백엔드 ("os", "file", "kwallet", "memory", "pass", "test") +PEGGO_COSMOS_KEYRING_DIR= # keyring 디렉토리 경로 +PEGGO_COSMOS_KEYRING_APP="peggo" # keyring 앱의 임의 이름 +PEGGO_COSMOS_FROM= # 검증자 (또는 위임된 Orchestrator)의 계정 주소 +PEGGO_COSMOS_FROM_PASSPHRASE= # keyring 비밀번호 +PEGGO_COSMOS_PK= # 검증자 (또는 위임된 Orchestrator)의 private key +PEGGO_COSMOS_USE_LEDGER=false + +# Ethereum 구성 +PEGGO_ETH_KEYSTORE_DIR= # Ethereum keystore 경로 +PEGGO_ETH_FROM= # Ethereum 주소 (검증자인 경우 위임된 Ethereum 주소여야 함) +PEGGO_ETH_PASSPHRASE= # Ethereum keystore 비밀번호 +PEGGO_ETH_PK= # Ethereum 주소의 private key +PEGGO_ETH_GAS_PRICE_ADJUSTMENT=1.3 # 제안된 Ethereum 가스 가격이 이 계수로 조정됩니다 (Relayer) +PEGGO_ETH_MAX_GAS_PRICE="500gwei" # Eth 트랜잭션 전송에 허용되는 최대 가스 가격 (Relayer) +PEGGO_ETH_CHAIN_ID=1 # Ethereum 네트워크의 chain ID +PEGGO_ETH_RPC="http://localhost:8545" # Ethereum 노드의 RPC +PEGGO_ETH_ALCHEMY_WS="" # Peggy.sol에서 대기 중인 트랜잭션을 수신하기 위한 선택적 websocket 엔드포인트 +PEGGO_ETH_USE_LEDGER=false + +# 토큰 자산을 위한 가격 피드 제공자 (Batch Creator) +PEGGO_COINGECKO_API="https://api.coingecko.com/api/v3" + +# Relayer 구성 +PEGGO_RELAY_VALSETS=true # Validator Sets를 릴레이하려면 `true`로 설정 +PEGGO_RELAY_VALSET_OFFSET_DUR="5m" # Valset이 릴레이 대상이 되기 전에 만료되어야 하는 기간 +PEGGO_RELAY_BATCHES=true # Token Batches를 릴레이하려면 `true`로 설정 +PEGGO_RELAY_BATCH_OFFSET_DUR="5m" # Token Batch가 릴레이 대상이 되기 전에 만료되어야 하는 기간 +PEGGO_RELAY_PENDING_TX_WAIT_DURATION="20m" # 대기 중인 tx가 처리될 때까지 대기하는 시간 + +# Batch Creator 구성 +PEGGO_MIN_BATCH_FEE_USD=23.2 # Token Batch가 생성되기 위해 충족해야 하는 최소 수수료 금액 + +# 메트릭 구성 +PEGGO_STATSD_PREFIX="peggo." +PEGGO_STATSD_ADDR="localhost:8125" +PEGGO_STATSD_STUCK_DUR="5m" +PEGGO_STATSD_MOCKING=false +PEGGO_STATSD_DISABLED=true +``` + + +**중요 참고:** 자체 `injectived`(Injective 노드)와 `geth`(Ethereum 노드) 프로세스를 실행하는 경우, 최신 상태와 동기화되어 있는지 확인하세요. 오래된 노드는 `peggo`의 비즈니스 로직을 왜곡하여 때때로 "거짓 경보" 로그를 표시할 수 있습니다. + + +## Step 1: .env 구성 + +```bash +# 공식 Injective 메인넷 .env 구성 +mkdir ~/.peggo +cp mainnet-config/10001/peggo-config.env ~/.peggo/.env +cd ~/.peggo +``` + +Ethereum 구성 + +먼저 `.env` 파일의 `PEGGO_ETH_RPC`를 유효한 Ethereum EVM RPC 엔드포인트로 업데이트합니다. + +자체 Ethereum 풀 노드를 설정하려면 [여기](https://ethereum.org/en/developers/docs/nodes-and-clients/run-a-node/)의 지침을 따르세요. Alchemy나 Infura와 같은 외부 Ethereum RPC 제공자를 사용할 수 있지만, Peggo 브릿지 릴레이어가 `eth_getLogs` 호출을 많이 사용하므로 제공자에 따라 비용 부담이 증가할 수 있습니다. + +## **peggo를 위한 Ethereum 키 관리** + +Peggo는 서명 키 자격 증명을 제공하는 두 가지 옵션을 지원합니다 - Geth keystore 사용(권장) 또는 평문 Ethereum private key 제공. + +#### **옵션 1. Geth Keystore** + +Geth 문서 [여기](https://geth.ethereum.org/docs/interface/managing-your-accounts)에서 keystore를 사용하여 새 Ethereum 계정을 안전하게 생성하는 방법을 찾을 수 있습니다. + +편의를 위해 아래에 예시가 제공됩니다. + +```bash +geth account new --datadir=/home/ec2-user/.peggo/data/ + +INFO [03-23|18:18:36.407] Maximum peer count ETH=50 LES=0 total=50 +Your new account is locked with a password. Please give a password. Do not forget this password. +Password: +Repeat password: + +Your new key was generated + +Public address of the key: 0x9782dc957DaE6aDc394294954B27e2118D05176C +Path of the secret key file: /home/ec2-user/.peggo/data/keystore/UTC--2021-03-23T15-18-44.284118000Z--9782dc957dae6adc394294954b27e2118d05176c + +- You can share your public address with anyone. Others need it to interact with you. +- You must NEVER share the secret key with anyone! The key controls access to your funds! +- You must BACKUP your key file! Without the key, it's impossible to access account funds! +- You must REMEMBER your password! Without the password, it's impossible to decrypt the key! +``` + +geth가 제공하는 경고, 특히 실수로 키를 잃지 않도록 키 파일을 백업하는 것에 대해 주의하세요. 또한 peggo 호환성을 위해 비밀번호에 따옴표나 백틱 문자를 사용하지 않는 것이 좋습니다. + +이제 다음 환경 변수를 설정해야 합니다: + +```bash +# 예시 값, 자신의 값으로 교체하세요 +PEGGO_ETH_KEYSTORE_DIR=/home/ec2-user/.peggo/data/keystore +PEGGO_ETH_FROM=0x9782dc957DaE6aDc394294954B27e2118D05176C +PEGGO_ETH_PASSPHRASE=12345678 +``` + +그런 다음 Ethereum 주소에 충분한 ETH가 있는지 확인하세요. + +#### **옵션 2. Ethereum Private Key (안전하지 않음)** + +새 계정에서 새 Ethereum Private Key로 `PEGGO_ETH_PK`를 업데이트하기만 하면 됩니다. + +그런 다음 Ethereum 주소에 충분한 ETH가 있는지 확인하세요. + +## Injective 구성 + +### **Injective 트랜잭션 전송을 위한 위임된 Cosmos 키 생성** + +peggo orchestrator는 다음 중 하나를 사용할 수 있습니다: + +* 검증자별 Peggy 트랜잭션(즉, `ValsetConfirm`, `BatchConfirm`, `SendToCosmos` 트랜잭션)을 전송하기 위해 명시적으로 위임된 계정 키를 사용하거나 +* 단순히 검증자의 계정 키를 사용합니다("검증자가 곧 Orchestrator") + +격리 목적으로 검증자 계정 키 대신 위임된 Cosmos 키를 생성하여 Injective 트랜잭션을 보내는 것이 좋습니다. + +새 키를 생성하려면 다음을 실행하세요: + +```bash +injectived keys add $ORCHESTRATOR_KEY_NAME +``` + +그런 다음 orchestrator inj 주소에 INJ 잔액이 있는지 확인하여 peggo orchestrator가 Injective에 메시지를 보낼 수 있도록 합니다. + +orchestrator의 inj 주소를 얻으려면 다음을 실행하세요: + +```bash +injectived keys list $ORCHESTRATOR_KEY_NAME +``` + +이 명령을 사용하여 검증자 계정에서 orchestrator 주소로 INJ를 전송할 수 있습니다: + +```bash +injectived tx bank send $VALIDATOR_KEY_NAME $ORCHESTRATOR_INJ_ADDRESS --chain-id=injective-1 --keyring-backend=file --yes --node=tcp://localhost:26657 --gas-prices=500000000inj +``` + +예시: + +```bash +injectived tx bank send genesis inj1u3eyz8nkvym0p42h79aqgf37gckf7szreacy9e 20000000000000000000inj --chain-id=injective-1 --keyring-backend=file --yes --node=tcp://localhost:26657 --gas-prices=500000000inj +``` + +다음을 실행하여 orchestrator 계정에 INJ 잔액이 있는지 확인할 수 있습니다: + +```bash +injectived q bank balances $ORCHESTRATOR_INJ_ADDRESS +``` + +### **peggo를 위한 Cosmos 계정 키 관리** + +Peggo는 Cosmos 서명 키 자격 증명을 제공하는 두 가지 옵션을 지원합니다 - Cosmos keyring 사용(권장) 또는 평문 private key 제공. + +#### **옵션 1. Cosmos Keyring** + +`.env` 파일에서 먼저 peggo 계정 서명 키에 해당하는 `PEGGO_COSMOS_FROM`과 `PEGGO_COSMOS_FROM_PASSPHRASE`를 지정합니다. + +위에서 권장한 대로 위임된 계정 키 구성을 사용하는 경우, 이는 각각 `$ORCHESTRATOR_KEY_NAME`과 비밀번호가 됩니다. 그렇지 않으면 `$VALIDATOR_KEY_NAME`과 관련 검증자 비밀번호여야 합니다. + +기본 keyring 백엔드는 `file`이며, 따라서 peggo는 기본적으로 디스크에서 키를 찾으려고 합니다. + +기본 injectived 키 구성을 사용하려면 keyring 경로를 injectived 노드의 홈 디렉토리로 설정해야 합니다. 예: `~/.injectived`. + +Cosmos Keyring 설정에 대해 [여기](https://docs.cosmos.network/v0.46/run-node/keyring.html)에서 자세히 읽을 수 있습니다. + +#### **옵션 2. Cosmos Private Key (안전하지 않음)** + +`.env` 파일에서 peggo 계정 서명 키에 해당하는 `PEGGO_COSMOS_PK`를 지정합니다. + +위에서 권장한 대로 위임된 계정 키 구성을 사용하는 경우, 이는 orchestrator 계정의 private key가 됩니다. 그렇지 않으면 검증자의 계정 private key여야 합니다. + +orchestrator의 Cosmos private key를 얻으려면(해당되는 경우) 다음을 실행하세요: + +```bash +injectived keys unsafe-export-eth-key $ORCHESTRATOR_KEY_NAME +``` + +검증자의 Cosmos private key를 얻으려면(해당되는 경우) 다음을 실행하세요: + +```bash +injectived keys unsafe-export-eth-key $VALIDATOR_KEY_NAME +``` + +다시 말하지만, 이 방법은 덜 안전하며 권장되지 않습니다. + +### Step 2: Orchestrator 및 Ethereum 주소 등록 + +orchestrator와 ethereum 주소는 한 번만 등록할 수 있습니다. 나중에 **업데이트할 수 없습니다**. 아래 명령을 실행하기 전에 두 번 확인하세요. + +```bash +injectived tx peggy set-orchestrator-address $VALIDATOR_INJ_ADDRESS $ORCHESTRATOR_INJ_ADDRESS $ETHEREUM_ADDRESS --from $VALIDATOR_KEY_NAME --chain-id=injective-1 --keyring-backend=file --yes --node=tcp://localhost:26657 --gas-prices=500000000inj + +``` + +* 검증자의 inj 주소를 얻으려면 `injectived keys list $VALIDATOR_KEY_NAME`을 실행하세요. +* orchestrator의 inj 주소를 얻으려면 `injectived keys list $ORCHESTRATOR_KEY_NAME`을 실행하세요. + +예시: + +```bash +injectived tx peggy set-orchestrator-address inj10m247khat0esnl0x66vu9mhlanfftnvww67j9n inj1x7kvxlz2epqx3hpq6v8j8w859t29pgca4z92l2 0xf79D16a79130a07e77eE36e8067AeA783aBdA3b6 --from validator-key-name --chain-id=injective-1 --keyring-backend=file --yes --node=tcp://localhost:26657 --gas-prices=500000000inj +``` + +https://lcd.injective.network/peggy/v1/valset/current에서 검증자의 매핑된 Ethereum 주소를 확인하여 성공적인 등록을 확인할 수 있습니다. + + +**참고:** `set-orchestrator-address` 메시지로 Orchestrator를 등록한 후에는 다시 등록**할 수 없습니다**. 이 단계가 완료되면 `검증자`는 제공된 Ethereum 주소(및 제공했을 수 있는 위임된 주소)에 바인딩됩니다. 즉, peggo는 항상 등록에 제공한 주소로 실행해야 합니다. + + +### Step 3: Relayer 시작 + +```bash +cd ~/.peggo +peggo orchestrator +``` + +Peggo 브릿지(relayer/orchestrator)가 시작됩니다. + +### Step 4: Peggo systemd 서비스 생성 + +`/etc/systemd/system/peggo.service` 아래에 다음 내용으로 `peggo.service` 파일을 추가합니다: + +```ini +[Unit] + Description=peggo + +[Service] + WorkingDirectory=/home/ec2-user/.peggo + ExecStart=/bin/bash -c 'peggo orchestrator ' + Type=simple + Restart=always + RestartSec=1 + User=ec2-user + +[Install] + WantedBy=multi-user.target +``` + +그런 다음 다음 명령을 사용하여 환경 변수를 구성하고 peggo relayer를 시작 및 중지합니다. + +```bash +sudo systemctl start peggo +sudo systemctl stop peggo +sudo systemctl restart peggo +sudo systemctl status peggo + +# 시스템 부팅 시 시작 활성화 +sudo systemctl enable peggo + +# 로그 확인 +journalctl -f -u peggo +``` + +### Step 5: (선택사항) 무단 액세스로부터 Cosmos Keyring 보호 + + +이것은 고급 DevOps 주제입니다. 시스템 관리자와 상담하세요. + + +Cosmos Keyring 설정에 대해 [여기](https://docs.cosmos.network/v0.46/run-node/keyring.html)에서 자세히 알아보세요. 노드를 시작하면 기본 keyring에 검증자 운영자 키가 암호화된 형태로 디스크에 저장됩니다. 일반적으로 keyring은 노드의 홈 디렉토리 내에 있습니다. 예: `~/.injectived/keyring-file`. + +Injective Staking 문서의 일부 섹션에서는 거버넌스 목적, 즉 트랜잭션 제출 및 Ethereum 브릿지 설정을 위해 이 키를 사용하는 방법을 안내합니다. keyring 비밀번호가 구성을 통해 유출되더라도 무단 액세스로부터 키를 보호하기 위해 `injectived`/`peggo` 프로세스에만 디스크 액세스를 허용하는 OS 권한을 설정할 수 있습니다. + +Debian, Ubuntu, RHEL과 같은 Linux 시스템에서는 POSIX Access Control Lists(ACL)를 사용하여 이를 달성할 수 있습니다. ACL 작업을 시작하기 전에 파일 시스템이 ACL이 켜진 상태로 마운트되어야 합니다. 각 배포판에 대한 공식 가이드가 있습니다: + +* [Ubuntu](https://help.ubuntu.com/community/FilePermissionsACLs) +* [Debian](https://wiki.debian.org/Permissions) +* [Amazon Linux (RHEL)](https://www.redhat.com/sysadmin/linux-access-control-lists) + +### 기여 + +Peggo orchestrator 소스 코드를 검토하고 기여하고 싶다면 [https://github.com/InjectiveLabs/peggo](https://github.com/InjectiveLabs/peggo)에서 할 수 있습니다. diff --git a/.gitbook/ko/infra/validator-testnet/index.mdx b/.gitbook/ko/infra/validator-testnet/index.mdx new file mode 100644 index 00000000..fbf59e6b --- /dev/null +++ b/.gitbook/ko/infra/validator-testnet/index.mdx @@ -0,0 +1,146 @@ +--- +title: 테스트넷 +--- + +노드 운영자는 최적의 성능을 위해 베어메탈 서버를 배포해야 합니다. 또한 검증자 노드는 높은 가동 시간을 보장하기 위해 권장 하드웨어 사양, 특히 CPU 요구 사항을 충족해야 합니다. + +#### 하드웨어 요구 사항 + +| _최소_ | _권장_ | +| :--------------------------: | :---------------------------: | +| RAM 메모리 128GB | RAM 메모리 128GB | +| CPU 12 코어 | CPU 16 코어 | +| CPU 기본 클럭 3.7GHz | CPU 기본 클럭 4.2GHz | +| 스토리지 2TB NVMe | 스토리지 2TB NVMe | +| 네트워크 1Gbps+ | 네트워크 1Gbps+ | + +### Step 1: 검증자 계정 생성 + +먼저, 원하는 검증자 키 이름으로 keygen 명령을 실행합니다. + +```bash +export VALIDATOR_KEY_NAME=[my-validator-key] +injectived keys add $VALIDATOR_KEY_NAME +``` + +이렇게 하면 새로운 private key가 생성되고 디스크에 암호화되어 저장됩니다. 사용한 비밀번호를 꼭 기억하세요. + +```bash +# 출력 예시 +- name: myvalidatorkey + type: local + address: inj1queq795wx8gzqc8706uz80whp07mcgg5nmpj6h + pubkey: injpub1r0mckeepqwzmrzt5af00hgc7fhve05rr0q3q6wvx4xn6k46zguzykdszg6cnu0zca4q + mnemonic: "" + threshold: 0 + pubkeys: [] + + +**중요** 이 니모닉 문구를 안전한 곳에 저장하세요. +비밀번호를 잊어버렸을 때 계정을 복구할 수 있는 유일한 방법입니다. +``` + + +**출력에는 키를 평문으로 나타내는 니모닉 문구가 포함됩니다. 키 없이는 검증자를 제어할 수 없으므로 이 문구를 키의 백업으로 반드시 저장하세요. 문구는 물리적인 종이에 백업하는 것이 좋으며, 클라우드 스토리지에 저장하면 나중에 검증자가 손상될 수 있습니다.** + +`inj`로 시작하는 주소를 기억하세요. 이것이 Injective Chain 검증자 계정 주소가 됩니다. + + +### Step 2: INJ 획득 + +다음 단계를 진행하려면 Injective에서 INJ를 획득해야 합니다. + +[테스트넷 Faucet](https://faucet.injective.network/)에서 자금을 요청할 수 있습니다. + +몇 분 후 UI에서 입금이 성공했는지 확인할 수 있습니다. 또는 다음 명령으로 `injectived` CLI를 사용하여 계정 잔액을 조회할 수 있습니다: + +```bash +injectived q bank balances +``` + +### Step 3: 검증자 계정 생성 + +노드의 Tendermint 검증자 Bech32 인코딩된 PubKey consensus 주소를 획득합니다. + +```bash +VALIDATOR_PUBKEY=$(injectived tendermint show-validator) +echo $VALIDATOR_PUBKEY + +# 예시: {"@type": "/cosmos.crypto.ed25519.PubKey", "key": "GWEJv/KSFhUUcKBWuf9TTT3Ful+3xV/1lFhchyW1TZ8="} +``` + +그런 다음 INJ 토큰으로 self-delegation이 초기화된 새 검증자를 생성합니다. 가장 중요한 것은 검증자의 스테이킹 매개변수 값을 결정하는 것입니다. + +* `--moniker` - 검증자 이름 +* `--amount` - 검증자의 초기 본딩 INJ 금액 +* `--commission-max-change-rate` - 검증자의 최대 수수료 변경률 (일당) +* `--commission-max-rate` - 검증자의 최대 수수료율 +* `--commission-rate` - 검증자의 초기 수수료율 +* `--min-self-delegation` - 검증자의 최소 필수 self-delegation + +원하는 값을 결정한 후 다음과 같이 설정합니다. + +```bash +MONIKER= +AMOUNT=100000000000000000000inj # 100 INJ를 위임하려면, INJ는 18 decimals로 표현됩니다. +COMMISSION_MAX_CHANGE_RATE=0.1 # 예: 하루 최대 10% 변경률 +COMMISSION_MAX_RATE=0.1 # 예: 최대 10% 수수료율 +COMMISSION_RATE=0.1 # 예: 초기 10% 수수료율 +MIN_SELF_DELEGATION_AMOUNT=50000000000000000000 # 예: 검증자에 필요한 최소 50 INJ self-delegation +``` + +그런 다음 다음 명령을 실행하여 검증자를 생성합니다. + +```bash +injectived tx staking create-validator \ +--moniker=$MONIKER \ +--amount=$AMOUNT \ +--gas-prices=500000000inj \ +--pubkey=$VALIDATOR_PUBKEY \ +--from=$VALIDATOR_KEY_NAME \ +--keyring-backend=file \ +--yes \ +--node=tcp://localhost:26657 \ +--chain-id=injective-888 +--commission-max-change-rate=$COMMISSION_MAX_CHANGE_RATE \ +--commission-max-rate=$COMMISSION_MAX_RATE \ +--commission-rate=$COMMISSION_RATE \ +--min-self-delegation=$MIN_SELF_DELEGATION_AMOUNT +``` + +고려할 추가 `create-validator` 옵션: + +``` +--identity= 선택적 신원 서명 (예: UPort 또는 Keybase) +--pubkey= 검증자의 Bech32 인코딩된 PubKey +--security-contact= 검증자의 (선택적) 보안 연락처 이메일 +--website= 검증자의 (선택적) 웹사이트 +``` + +[스테이킹 대시보드](https://injhub.com/stake/)를 확인하고 "Validators" 섹션으로 스크롤하여 검증자가 성공적으로 생성되었는지 확인할 수 있습니다. +다음과 같이 보입니다: +![Inj Hub Staking Validators Section](/img/inj-hub-staking-validators-section.png) + +또는 다음 CLI 명령을 입력하세요: + +```bash +injectived q staking validators +``` + +검증자 목록에서 자신의 검증자가 보이면, 축하합니다! 공식적으로 Equinox Staking 검증자가 되셨습니다! 🎉 + +### Step 4: (선택사항) 검증자에 추가 INJ 위임 + +미래 위임자들이 경험할 사용자 경험을 더 깊이 이해하기 위해 [스테이킹 가이드](https://medium.com/injective-labs/injective-hub-guide-9a14f09f6a7d)의 나머지 단계를 완료할 수 있습니다. + +이 단계들을 통해 MetaMask 트랜잭션을 사용한 위임 흐름을 경험할 수 있습니다. 🦊 + +또는 Injective CLI를 사용하여 위임 트랜잭션을 보낼 수도 있습니다. + +```bash +injectived tx staking delegate [validator-addr] [amount] --from $VALIDATOR_KEY_NAME --chain-id=injective-888 --keyring-backend=file --yes --node=tcp://localhost:26657 +``` + +### 다음 단계 + +다음으로 Ethereum Bridge Relayer를 설정하세요. 이는 검증자가 슬래싱되는 것을 방지하기 위해 필요한 단계입니다. 검증자 설정 직후에 이 작업을 수행해야 합니다. diff --git a/.gitbook/ko/infra/validator-testnet/peggo.mdx b/.gitbook/ko/infra/validator-testnet/peggo.mdx new file mode 100644 index 00000000..fbb71756 --- /dev/null +++ b/.gitbook/ko/infra/validator-testnet/peggo.mdx @@ -0,0 +1,177 @@ +--- +title: 테스트넷 Peggo +--- + +## Equinox 테스트넷 + +## Step 1: Peggo relayer 구성 + +```bash +mkdir ~/.peggo +cp testnet-config/staking/40014/peggo-config.env ~/.peggo/.env +cd ~/.peggo +``` + +먼저 `.env` 파일의 `PEGGO_ETH_RPC`를 유효한 Sepolia EVM RPC 엔드포인트로 업데이트합니다. + +자체 Sepolia 풀 노드를 설정하려면 [여기](https://ethereum.org/en/developers/docs/nodes-and-clients/run-a-node/)의 지침을 따르세요. Alchemy나 Infura RPC를 사용할 수 있지만, Peggo 브릿지는 아직 개발 중이며 RPC에 대한 요청 양이 최적화되지 않았습니다. 계정에 높은 비용이 발생하지 않도록 주의하세요. + +Peggo는 또한 해당 네트워크에 대한 트랜잭션에 서명하기 위해 검증자의 Cosmos 및 Ethereum 자격 증명에 대한 액세스가 필요합니다. + +## **Cosmos 키** + +자격 증명 액세스를 제공하는 두 가지 방법이 있습니다 - 암호화된 키가 있는 keyring 또는 평문 private key. + +### **1. Cosmos Keyring** + +`PEGGO_COSMOS_FROM`을 검증자 키 이름(또는 계정 주소)으로, `PEGGO_COSMOS_FROM_PASSPHRASE`를 Cosmos Keyring 비밀번호로 업데이트합니다. 기본 keyring 백엔드는 `file`이며 디스크에서 키를 찾으려고 합니다. + +keyring 경로는 키를 재사용하려면 injectived 노드의 홈 디렉토리를 가리켜야 합니다. + +Keyring 설정에 대해 [여기](https://docs.cosmos.network/v0.46/run-node/keyring.html)에서 자세히 알아보세요. + +### **2. Cosmos Private Key (안전하지 않음)** + +검증자의 계정 private key로 `PEGGO_COSMOS_PK`를 업데이트하기만 하면 됩니다. + +검증자의 Cosmos private key를 얻으려면 `injectived keys unsafe-export-eth-key $VALIDATOR_KEY_NAME`을 실행하세요. + +이 방법은 안전하지 않으며 권장되지 않습니다. + +## **Ethereum 키** + +자격 증명 액세스를 제공하는 두 가지 방법이 있습니다 - 암호화된 키가 있는 Geth keystore 또는 평문 private key. + +### **1. Geth Keystore** + +새 private key store를 생성하고 다음 환경 변수를 업데이트하기만 하면 됩니다: + +* `PEGGO_ETH_KEYSTORE_DIR` +* `PEGGO_ETH_FROM` +* `PEGGO_ETH_PASSPHRASE` + +Geth 문서 [여기](https://geth.ethereum.org/docs/interface/managing-your-accounts)에서 keystore를 사용하여 새 Ethereum 계정을 안전하게 생성하는 방법을 찾을 수 있습니다. + +아래에 예시가 제공됩니다. + +```bash +geth account new --datadir=/home/ec2-user/.peggo/data/ + +INFO [03-23|18:18:36.407] Maximum peer count ETH=50 LES=0 total=50 +Your new account is locked with a password. Please give a password. Do not forget this password. +Password: +Repeat password: + +Your new key was generated + +Public address of the key: 0x9782dc957DaE6aDc394294954B27e2118D05176C +Path of the secret key file: /home/ec2-user/.peggo/data/keystore/UTC--2021-03-23T15-18-44.284118000Z--9782dc957dae6adc394294954b27e2118d05176c + +- You can share your public address with anyone. Others need it to interact with you. +- You must NEVER share the secret key with anyone! The key controls access to your funds! +- You must BACKUP your key file! Without the key, it's impossible to access account funds! +- You must REMEMBER your password! Without the password, it's impossible to decrypt the key! +``` + +이제 다음과 같이 환경 변수를 설정할 수 있습니다: + +```ini +PEGGO_ETH_KEYSTORE_DIR=/home/ec2-user/.peggo/data/keystore +PEGGO_ETH_FROM=0x9782dc957DaE6aDc394294954B27e2118D05176C +PEGGO_ETH_PASSPHRASE=12345678 +``` + +다음으로, Ethereum 주소에 Sepolia ETH가 있는지 확인하세요. [여기](https://www.alchemy.com/faucets/ethereum-sepolia)의 공개 faucet에서 Sepolia ETH를 요청할 수 있습니다. + +### **2. Ethereum Private Key (안전하지 않음)** + +새 계정에서 새 Ethereum Private Key로 `PEGGO_ETH_PK`를 업데이트하기만 하면 됩니다. + +다음으로, Ethereum 주소에 Sepolia ETH가 있는지 확인하세요. [여기](https://www.alchemy.com/faucets/ethereum-sepolia)의 공개 faucet에서 Sepolia ETH를 요청할 수 있습니다. + +### Step 2: Orchestrator 및 Ethereum 주소 등록 + +orchestrator와 ethereum 주소는 한 번만 등록할 수 있습니다. 나중에 **업데이트할 수 없습니다**. 아래 명령을 실행하기 전에 두 번 확인하세요. + +```bash +injectived tx peggy set-orchestrator-address $VALIDATOR_INJ_ADDRESS $ORCHESTRATOR_INJ_ADDRESS $ETHEREUM_ADDRESS --from $VALIDATOR_KEY_NAME --chain-id=injective-888 --keyring-backend=file --yes --node=tcp://localhost:26657 --gas-prices=160000000inj + +``` + +* 검증자의 inj 주소를 얻으려면 `injectived keys list $VALIDATOR_KEY_NAME`을 실행하세요. +* orchestrator의 inj 주소를 얻으려면 `injectived keys list $ORCHESTRATOR_KEY_NAME`을 실행하세요. + +예시: + +```bash +injectived tx peggy set-orchestrator-address inj10m247khat0esnl0x66vu9mhlanfftnvww67j9n inj1x7kvxlz2epqx3hpq6v8j8w859t29pgca4z92l2 0xf79D16a79130a07e77eE36e8067AeA783aBdA3b6 --from validator-key-name --chain-id=injective-888 --keyring-backend=file --yes --node=tcp://localhost:26657 --gas-prices=160000000inj +``` + +https://testnet.sentry.lcd.injective.network/peggy/v1/valset/current에서 검증자의 매핑된 Ethereum 주소를 확인하여 성공적인 등록을 확인할 수 있습니다. + + +**참고:** `set-orchestrator-address` 메시지로 Orchestrator를 등록한 후에는 다시 등록**할 수 없습니다**. 이 단계가 완료되면 `검증자`는 제공된 Ethereum 주소(및 제공했을 수 있는 위임된 주소)에 바인딩됩니다. 즉, peggo는 항상 등록에 제공한 주소로 실행해야 합니다. + + +## Step 3: Relayer 시작 + +```bash +peggo orchestrator +``` + +Peggo 브릿지(relayer/orchestrator)가 시작됩니다. + +## Step 4: Peggo systemd 서비스 생성 + +`/etc/systemd/system/peggo.service` 아래에 다음 내용으로 `peggo.service` 파일을 추가합니다: + +```ini +[Unit] + Description=peggo + +[Service] + WorkingDirectory=/home/ec2-user/.peggo + ExecStart=/bin/bash -c 'peggo orchestrator ' + Type=simple + Restart=always + RestartSec=1 + User=ec2-user + +[Install] + WantedBy=multi-user.target +``` + +그런 다음 다음 명령을 실행하여 환경 변수를 구성하고 peggo relayer를 시작 및 중지합니다. + +```bash +sudo systemctl start peggo +sudo systemctl stop peggo +sudo systemctl restart peggo +sudo systemctl status peggo + +# 시스템 부팅 시 시작 활성화 +sudo systemctl enable peggo + +# 로그 확인 +journalctl -f -u peggo +``` + +## Step 5: (선택사항) 무단 액세스로부터 Cosmos Keyring 보호 + + +이것은 고급 DevOps 주제입니다. 시스템 관리자와 상담하세요. + + +Cosmos Keyring 설정에 대해 [여기](https://docs.cosmos.network/v0.46/run-node/keyring.html)에서 자세히 알아보세요. 노드를 시작하면 기본 keyring에 검증자 운영자 키가 암호화된 형태로 디스크에 저장됩니다. 일반적으로 keyring은 노드의 홈 디렉토리 내에 있습니다. 예: `~/.injectived/keyring-file`. + +Injective Staking 문서의 일부 섹션에서는 거버넌스 목적, 즉 트랜잭션 제출 및 Ethereum 브릿지 설정을 위해 이 키를 사용하는 방법을 안내합니다. keyring 비밀번호가 구성을 통해 유출되더라도 무단 액세스로부터 키를 보호하기 위해 `injectived`/`peggo` 프로세스에만 디스크 액세스를 허용하는 OS 권한을 설정할 수 있습니다. + +Debian, Ubuntu, RHEL과 같은 Linux 시스템에서는 POSIX Access Control Lists(ACL)를 사용하여 이를 달성할 수 있습니다. ACL 작업을 시작하기 전에 파일 시스템이 ACL이 켜진 상태로 마운트되어야 합니다. 각 배포판에 대한 공식 가이드가 있습니다: + +* [Ubuntu](https://help.ubuntu.com/community/FilePermissionsACLs) +* [Debian](https://wiki.debian.org/Permissions) +* [Amazon Linux (RHEL)](https://www.redhat.com/sysadmin/linux-access-control-lists) + +## 기여 + +Peggo orchestrator 소스 코드를 검토하고 기여하고 싶다면 [https://github.com/InjectiveLabs/peggo](https://github.com/InjectiveLabs/peggo)에서 할 수 있습니다.