# Docker ашиглаж валидатор node ажиллуулах заавар

Энэ хэсэгт Docker Container дээр валидатор node ажиллуулах талаар тайлбарлана.

## Шаардагдах хэрэгслүүдийг суулгах

Энэхүү зааварт Docker програмийг Ubuntu үйлдлийн системтэй сервер дээр тохируулсан болно.

1. apt-ыг шинэчилж, Docker програмыг суулгахад хэрэглэгдэх програмуудыг суулгана.

```shell
sudo apt-get update

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
```

1. Албан ёсны GPG түлхүүрийг нэмэх, програмын тогтвортой хувилбарыг татах санг нэмэх.

```shell
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```

1. Дээрх командуудыг ажиллуулсны дараа таны компьютерт Docker програм суух орчин бүрдэнэ. Доорх командаар Docker болон түүнтэй холбоотой ажиллах програмуудыг суулгана.

```shell
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io
```

1. Docker програм зөв суусан эсэхийг шалгаж `hello-world`-ийг ажиллуулъя.

```shell
docker run hello-world
```

1. Docker-compose програмыг суулгах.

```shell
 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
```

1. Татсан програмыг ажиллуулах эрхийг олгох.

```shell
 sudo chmod +x /usr/local/bin/docker-compose
```

### Docker-compose ашиглаж corex -ийг асаах

1. Бидний бэлдсэн docker image -ийг татаж авах.

```shell
docker pull corexchain/corex
```

corexchain/corex-ийн тухай дэлгэрэнгүй мэдээллийг [эндээс](https://hub.docker.com/repository/docker/corexchain/corex) авна уу.

Үндсэн ubuntu үйлдлийн систем дээрх datadir гэсэн директорийг container-ийн /root/.corexchain гэсэн директортой холбож асаана. Хоёр директорийг холбож асааснаар бид өгөгдлөө алдагдхаас зайлс хийх, node-ийн өгөгдлийг зөөх боломжтой болно.

1. Corex Validator node-ыг ажиллуулахаас өмнө эхлээд corex энгийн node-ыг асааж, үүнтэйгээ харьцаж байж validator эрхийг бүртгүүлнэ. Дараах алхмаар `corex`-ыг ажиллуулснаар энгийн node асаж, corex сүлжээтэй шууд синхрон хийж эхлэх болно.

```shell
docker container run -v $(pwd)/datadir:/root/.corexchain:rw corexchain/corex ./corex --genesis /genesis/mainnet.g 
```

### Валидатор хэтэвч үүсгэх

Бидний ажиллаж буй терминал дээр энгийн node ажиллаж эхэлсэн учраас бид SSH ашиглан валидатор сервертэйгээ нэмж холбогдоно. Сервертэй холбогдсоны дараагаар дараах командаар шинэ хэтэвч үүсгэнэ.

```shell
docker container exec -it {CONTAINER ID} ./corex account new
```

&#x20;Дээрх командыг ажиллуулснаар танаас түлхүүрийг нууцлах нууц үгийг асуух болно. Энэ нууц үгийг та мартахгүй санах хэрэгтэй. Нууц үгээ мартсан тохиолдолд, эсвэл хэтэвч устсан тохиолдолд сэргээх боломжгүй гэдгийг хатуу анхаарна уу. Тиймээс аюулгүйн үүднээс та secret key file-д заагдсан зам, нэрээр үүсгэгдсэн файлыг хаа нэгтэй нөөцөлж авах нь зүйтэй. Уг файл доторх таны хувийн түлхүүр таны нууц үгээр хамгаалагдсан байх болно.

Зурагт үзүүлснээр `Public address of the key` хэсэгт таны түлхүүрийн хаяг байрлах болно. Энэхүү зургаас түлхүүрийн хаягийг албаар авч хаясан болно. Одоо та өөрийн хаягаа [www.corex.mn](http://www.corex.mn) биржээр орж дор хаяж 2,000,000CRX-р цэнэглэх ёстой. Нэмэлт гүйлгээний төлбөрт зориулж арай ихээр цэнэглэхээ мартуузай.

Одоо validator түлхүүрийг үүсгэе.

```shell
docker container exec -it {CONTAINER ID} ./corex validator new
```

&#x20;Дээрх командыг ажиллуулсны дараа танаас түлхүүрийг нууцлах нууц үгийг асууна. Энэ нууц үгийг та мартахгүй санах хэрэгтэй. Нууц үгээ мартсан тохиолдолд, эсвэл хэтэвч устсан тохиолдолд сэргээх боломжгүй гэдгийг хатуу анхаарна уу. Тиймээс аюулгүйн үүднээс та secret key file-д заагдсан зам, нэрээр үүсгэгдсэн файлыг хаа нэгтэй нөөцөлж авах нь зүйтэй. Уг файл таны нууц үгээр хамгаалагдсан байх болно.

## Валидатор бүртгүүлэх

Валидатор бүртгүүлэхдээ бид гүйлгээ хийж ухаалаг гэрээтэй харьцах тул дараах командаар JavaScript console-д орно.

```shell
docker container exec -it {CONTAINER ID} ./corex attach
```

&#x20;Уг console дээр `web3` гэж бичиж та хийж болох үйлдлүүдийг харах боломжтой.

Одоо бид корэкс сүлжээнд суурилсан ухаалаг гэрээг ашиглан валидатор бүртгүүлэх болно. Эхлээд бидэнд уг гэрээний ABI хэрэгтэй. ABI-г эндээс [github](https://github.com/corex-mn/releases/blob/main/abi/sfc-abi.json) авах боломжтой.

```shell
abi = JSON.parse('Татаж авсан json тэкст')
```

ABI нь Корэксийн албан ёсны ухаалаг гэрээний, JSON хэлбэрт байгаа [abi](https://en.wikipedia.org/wiki/Application_binary_interface). Одоо гэрээний хуулбарыг авчиръя. Уг албан ёсны ухаалаг гэрээ corex блокчейн дээр `0xc04e800000000000000000000000000000000cfc` хаяг дээр үүсгэгдсэн байдаг.

```shell
sfcc = web3.crx.contract(abi).at("0xc04e800000000000000000000000000000000cfc")
```

Хэрэв бүх зүйл амжилттай болсон бол одоо ухаалаг гэрээний функцийг дуудаж шалгаж үзье. `sfcc` гэж доторх үйлдлүүдийг харах боломжтой.

```shell
sfcc
# Хамгийн сүүлийн Validator-ын ID. Алдаагүй бол 0-ээс их утга буцаана.
sfcc.lastValidatorID()
```

&#x20;Хэрэв бүх зүйл амжилттай болсон бол энд алдаа заах учиргүй ба хамгийн сүүлд бүртгүүлсэн валидаторын ID -ыг буцаана. Валидатор бүр дахин давхардахгүй ID -тай байдаг.

Мөн бусад Validator-уудын мэдээллийг эндээс харах боломжтой.

```shell
for (i = 1; i <= sfcc.lastValidatorID(); i++) { console.log(sfcc.getValidator(i)); }
```

Дээрх коммандаар бусад бүх Валидаторын барьцааны хэмжээ төлөв гэх мэт мэдээллийг харуулна.

Одоо валидтор үүсгэх гүйлгээг хийцгээе. Эхлээд гүйлгээ хийхэд бэлдэж хэтэвчээ нээх хэрэгтэй.

```shell
personal.unlockAccount("<таны хаяг>")
```

Дээрх командын `<таны хаяг>` хэсэг дээр `./corex account new` командаар буцаасан хаягийг тавина. Командыг ажиллуулахад түлхүүрийг онгойлгох нууц үгийг танаас асуух болно. Амжилттай болсон бол **true** утга буцаана.

Валидатораар бүртгүүлэхийн тулд гэрээний `createValidator` функцийг дуудна. Уг гүйлгээ 2,000,000CRX болон гүйлгээний шимтгэлийг шаардана.

```shell
tx = sfcc.createValidator("<таны нийтийн түлхүүр>", {from:"<таны хаяг>", value: web3.toWei("1000000.0", "crx")}) 
```

Дээрх командын `<таны нийтийн түлхүүр>` хэсэгт `./corex validator new` командаар буцаасан `Public Key:` дээрх нийтийн түлхүүрийг хуулж тавина. Харин `<таны хаяг>` гэдэг нь өмнөх командтай адилхан байх юм. `tx`-т Validator үүсгэх гүйлгээний хаяг хадгалагдана. Энд бид 2,000,000CRX ашиглан validator бүртгүүлсэн бөгөөд та энэ хэмжээг ихэсгэх боломжтой. Одоо гүйгээ аль хэдийн хийгдсэн бөгөөд гүйлгээ амжилттай болсон эсэхийг

```shell
crx.getTransactionReceipt(tx)
```

гэж харах боломжтой.

Одоо та албан ёсоор валидатор болсон бөгөөд өөрийн валидатор ID-аа дараах командаар харах боломжтой.

```shell
sfcc.getValidatorID("<таны хаяг>")
```

**Анхааруулга**: Дээрх зурагт үзүүлсэн ID-г туршилтаар үүсгэсэн бөгөөд корэкс сүлжээнд ямар ч холбоогүй болно.

Та валидатор болоход барьцаанд тавьсан CRX-ын хэмжээг дараах үйлдлээр харах боломжтой.

```shell
sfcc.getStake("<таны хаяг>", "<таны Validator ID>")
```

Одоо та өөрийн node-ыг validator горимоор дахин асаах л үлдлээ.

## Валидатор node асаах

Одоо сүүлийн алхам үлдлээ. Та өөрийн серверийг валидатор горимоор ажиллуулах ёстой. Та өнмө ажиллуулсан энгийн node (Docker container) -ийг унтраана `docker container stop {CONTAINER ID}`, дараах `docker-compose.yaml` -ийг datadir / corex -ийн өгөгдөл байгаа газар үүсгэнэ.

```shell
# docker-compose.yaml
version: '3.9'
services:
  go-corex:
    image: corexchain/corex
    command: /corex --genesis /genesis/mainnet.g --validator.id=${VALIDATOR_ID} --validator.pubkey=${VALIDATOR_PUB_KEY} --validator.password=/passphrase 
    volumes:
      - $(pwd)/datadir:/root/.corexchain
      - $(pwd)/passphrase:/passphrase
    ports:
      - "5050:5050"
```

Дээрх командыг дуудахдаа та өөрийн валидатор ID, нийтийн түлхүүр, валидатор түлхүүрийн нууц үгийг агуулах файлыг зааж өгнө. Нууц үг текст хэлбэрээр файл дотор байрших шаардлагатай. Одоо таны node валидатор горимоор ажиллаж эхэллээ. Танд баяр хүргэе!


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.teo.mn/general/network-connection/validator-docker.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
