2023. 6. 15. 10:45ㆍBlockchain/Cosmos
※ 원글 작성 : 23년 4월 26일
Cosmos SDK 기반 체인 구성
[Blockchain/Cosmos] - Cosmos SDK 기반 체인 로컬 테스트넷 구성
[Blockchain/Cosmos] - Cosmos SDK 기반 체인 다중 validator 환경 구성
댓글에서 확인 요청도 있었고, 실제 메인넷 환경에서는 다중 validator의 consensus 환경이 이루어지기 때문에 1편의 single validator 노드 구성에 이어 multi validator 노드 구성에 대해 확인하려 한다. multi validator로 구성하는 방법은 생각보다 간단하다. 똑같은 genesis block을 공유한 상태에서 각 노드가 서로 consensus를 이룰 수 있도록 환경 구성을 하면 된다.
Validator node configuration
먼저 앞선 게시글을 통해 validator가 생성 되었을 시 확인할 수 있는 home directory의 tree이다.
├── validator0
│ ├── config
│ │ ├── app.toml
│ │ ├── config.toml
│ │ ├── genesis.json
│ │ ├── gentx
│ │ │ └── gentx-f94b6f0cebc48468cfef95084bdbf1d12181ba44.json
│ │ ├── node_key.json
│ │ └── priv_validator_key.json
│ ├── data
│ │ └── priv_validator_state.json
│ ├── keyring-file
│ │ ├── 2d419fc05ab8486e496627b88b9e8fd0d4dac0f3.address
│ │ ├── 34585d96409d8af38b2db5894b170f03ec6ace76.address
│ │ ├── 8c64277064884e40b848911f3f0130d9645ee68b.address
│ │ ├── keyhash
│ │ ├── myKey1.info
│ │ ├── myKey2.info
│ │ ├── myKey3.info
...
Multi node 환경을 구성하기 위해서는 확인해야 할 사항이 config 내의 config.toml
과 gentx
이다. app.toml
과 config.toml
의 파라미터는 이전 글에서 다뤘으니 파라미터의 역할을 확인하고 싶으면 참고해도 좋을 것 같다.
Validator를 생성한 후에 config.toml
상의 persistent_peer
와 unconditional_peer_ids
에 상대 validator의 정보를 기입한다. persistent_peer
상에는 nodeID@IPAddress:port의 형태로, unconditonal_peer_ids
는 상대의 nodeID만 기입한다. persistent_peer
에는 validator 자신의 정보를 기입해도 상관없다.
e.g.
persistent_peers = "6cf839ce557d3dcfdc888873c34305c02107b709@172.26.0.20:26656"
unconditional_peer_ids = "6cf839ce557d3dcfdc888873c34305c02107b709"
이를 통해 validator가 지속적으로 연결을 시도할 peer 리스트 등록이 완료된다. 만약 DDoS 방지를 위한 sentry node 또한 구성이 필요할 시에는 config.toml
파일 내에 위 두 params를 제외한 다른 값들도 설정이 필요하다. Validator-sentry 구조는 Tendermint docs 페이지에서 확인 가능하며, 해당 페이지에 입력해야 하는 configuration param의 종류와 값도 확인 할 수 있으니 validator 뿐만 아니라 sentry도 config 값을 설정해야 한다.
Validator가 각각 서로의 정보를 설정했다면 gentx
파일을 모아서 genesis.json
에 모아야 한다. 각 gentx
의 정보를 복붙해서 genesis에 추가해도 되고, collect-gentxs
명령을 통해 genesis에 추가 시켜도 된다. 이 경우에는 생성된 gentx 들을 한 폴더에 모아서 실행하는 것이 좋다.
gaiad collect-gentxs
마지막으로 각 validator를 실행하면 설정된 node ID와 IP를 통해 서로를 확인하고, 동작한다.
gaiad start
Example
Cosmos 기반 메인넷인 XPLA의 노드 구성을 위한 configuration 자동 생성 tool을 구현해 놓았다 (링크). XPLA에 참여하기 위한 validator들 또는 테스터들을 위해 tool 실행만으로 validator와 sentry configuration을 쉽게 생성할 수 있음이 목적이다. 실제 메인넷 구동에 적용되는 옵션값들을 지정해 놓았으니 validator 참여를 원하는 노드나 정확한 데이터 값을 추출하기 원하는 XPLA 개발자들께서도 참고하면 좋을듯 하다.
Default로 설정한 config.yaml
파일을 통해 실행하면 아래와 같은 config directory 구조를 확인 가능하다.
.xplaset
├── gentxs
│ ├── validator_node_0.json
│ └── validator_node_1.json
├── validator0
│ ├── config
│ │ ├── app.toml
│ │ ├── config.toml
│ │ ├── genesis.json
│ │ ├── gentx
│ │ │ └── gentx-f94b6f0cebc48468cfef95084bdbf1d12181ba44.json
│ │ ├── node_key.json
│ │ └── priv_validator_key.json
│ ├── data
│ │ └── priv_validator_state.json
│ ├── keyring-file
│ │ ├── 2d419fc05ab8486e496627b88b9e8fd0d4dac0f3.address
│ │ ├── 34585d96409d8af38b2db5894b170f03ec6ace76.address
│ │ ├── 8c64277064884e40b848911f3f0130d9645ee68b.address
│ │ ├── keyhash
│ │ ├── myKey1.info
│ │ ├── myKey1_mnemonic.json
│ │ ├── myKey2.info
│ │ ├── myKey2_mnemonic.json
│ │ ├── myKey3.info
│ │ └── myKey3_mnemonic.json
│ ├── sentry0
│ │ ├── config
│ │ │ ├── app.toml
│ │ │ ├── config.toml
│ │ │ ├── genesis.json
│ │ │ ├── node_key.json
│ │ │ └── priv_validator_key.json
│ │ └── data
│ │ └── priv_validator_state.json
│ └── sentry1
│ ├── config
│ │ ├── app.toml
│ │ ├── config.toml
│ │ ├── genesis.json
│ │ ├── node_key.json
│ │ └── priv_validator_key.json
│ └── data
│ └── priv_validator_state.json
└── validator1
├── ...
CLI로 생성할 때와의 차이점만 간략히 확인해본다. gentxs
폴더 내에 자동으로 validator들의 gentx들을 모아서 collect-gentxs
과정을 거치고, 각 validator 및 sentry내의 genesis에 반영을 한다. Option 설정을 통해 mnemonic을 관리하는데, 자동 생성이기 때문에 생성 key의 mnemonic을 따로 추출하니 확인 후 삭제를 권장한다. Sentry의 경우 node_key.json
등 key파일들을 생성하지 않아도 구동할 시 자동으로 생성되니 삭제할 필요는 없다.
위에서 생성된 directory를 각 validator와 sentry 노드의 home directory에 copy하고 xplad start
를 통해 구동하면 서로 연결되어 동작한다.
참고
https://docs.tendermint.com/v0.34/tendermint-core/validators.html
'Blockchain > Cosmos' 카테고리의 다른 글
Inter-Blockchain Communication 구조와 Relayer (0) | 2023.07.07 |
---|---|
Cosmos state query 방법 (0) | 2023.06.22 |
Ethereum과 Cosmos의 genesis (0) | 2023.06.15 |
Cosmos chain module 및 components (0) | 2023.06.14 |
Cosmos SDK 기반 체인 configuration (1) | 2023.06.14 |