> For the complete documentation index, see [llms.txt](https://unit-zero.gitbook.io/russian-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://unit-zero.gitbook.io/russian-docs/testovaya-set/zapusk-uzla-testovoi-seti.md).

# Запуск узла тестовой сети

Unit Zero — это EVM-совместимая блокчейн-сеть, построенная на основе блокчейна Waves. В этом разделе объясняется, как управлять узлом в тестовой сети Unit Zero.

У вас есть два варианта:

* Запуск валидационного узла без майнинговых блоков
* Запускайте майнинговую ноду и получайте вознаграждение

В обоих вариантах ваша нода синхронизируется с сетью блокчейн и может предлагать новые транзакции. Запуск валидационного узла не предъявляет требований к балансу токенов.

### Необходимые условия <a href="#prerequisites" id="prerequisites"></a>

* Соответствие требованиям к оборудованию: 4 ядра процессора, 8 ГБ ОЗУ, 60+ ГБ SSD.
* Получите актуальные данные блокчейна Waves Testnet. Самый быстрый способ — скачать архив с <http://blockchain-testnet.wavesnodes.com/> и распаковать его. Другие методы подробно описаны в разделе [Synchronize Waves Blockchain](https://docs.waves.tech/en/waves-node/options-for-getting-actual-blockchain/) документации Waves.`blockchain_last.tar`
* Установите [Docker,](https://docs.docker.com/desktop/install/linux-install/) если он еще не установлен.
* Создайте учетную запись тестовой сети Waves, используя один из [кошельков с поддержкой Waves](https://docs.waves.tech/en/blockchain/account/create).

Кроме того, если вы хотите, чтобы ваша нода майнила:

* Переведите немного WAVES на счет ноды, чтобы покрыть комиссию.

  Примечание: Консенсусный клиент вызовет чейн-контракт от имени учетной записи. Поэтому, если вы установили [верификатор](https://docs.waves.tech/en/ride/functions/verifier-function) для учетной записи, он должен разрешить такие транзакции.
* [Сдать в аренду](https://docs.waves.tech/en/blockchain/leasing) (делегировать) не менее 20 000 WAVES на счет ноды для достижения минимального генерирующего баланса.
* Свяжитесь с командой Waves через [чат разработчика](https://t.me/waves_ride_dapps_dev), чтобы получить баланс для генерации L2MP в тестовой сети Waves.

### Конфигурация <a href="#configuration" id="configuration"></a>

1. Создайте каталог, который будет служить основным каталогом для хранения данных и конфигураций. Убедитесь, что текущий пользователь имеет доступ на чтение и запись к этому каталогу.
2. Создайте подкаталог и поместите в него данные блокчейна Waves Testnet.`data`
3. Создайте следующие подкаталоги в главном каталоге:
   * `besu`
   * `log`
   * `log/waves`
   * `log/besu`.
4. Предоставьте пользователю с uid 1000 доступ на запись в подкаталоги and:`besulog/besu`

   Копировать

   ```
   chown 1000 besu log/besu
   ```
5. Подготовьте файл, используя шаблон, представленный ниже. Вставьте seed-фразу вашей учетной записи Waves Testnet, преобразованную в массив байтов, а затем закодированную в base58, и выберите произвольную строку в качестве пароля. Поместите этот файл в основной каталог.`waves.conf`

   Копировать

   ```
   waves {
     blockchain.type = TESTNET
     extensions = [
       com.wavesplatform.l2.ConsensusClient
     ]

     wallet {
       seed = <your-base58-encoded-seed>
       password = <some-string-as-password>
       file = null
     }

     rest-api.bind-address = "0.0.0.0"

     l2 {
       chain-contract = 3MsqKJ6o1ABE37676cHHBxJRs6huYTt72ch
       execution-client-address = besu

       network {
         bind-address = "0.0.0.0"
         port = 6865
         known-peers = [
           "testnet-l2-htz-fsn1-1.wavesnodes.com:6865"
         ]
       }
       mining-enable = yes
     }
   }
   ```
6. Поместите следующий файл в основной каталог.`genesis.json`

   Копировать

   ```
   {
     "config": {
       "terminalTotalDifficulty": 0,
       "homesteadBlock": 0,
       "daoForkBlock": 0,
       "eip150Block": 0,
       "eip158Block": 0,
       "byzantiumBlock": 0,
       "petersburgBlock": 0,
       "istanbulBlock": 0,
       "muirGlacierBlock": 0,
       "berlinBlock": 0,
       "londonBlock": 0,
       "arrowGlacierBlock": 0,
       "grayGlacierBlock": 0,
       "shanghaiTime": 0,
       "cancunTime": 0,
       "ethash": {},
       "chainID": 88817
     },
     "nonce": "0x0",
     "timestamp": "0x660e5e00",
     "gasLimit": "0x1000000",
     "difficulty": "0x0",
     "coinbase": "0x0000000000000000000000000000000000000000",
     "alloc": {}
   }
   ```
7. Поместите следующий файл в основной каталог.`log4j2.xml`

   Копировать

   ```
   <?xml version="1.0" encoding="UTF-8"?>
   <Configuration status="INFO" monitorInterval="5">
     <Properties>
       <Property name="root.log.pattern">%date %-5level [%-25.25thread] %35.35c{1.} - %msg%n%throwable</Property>
     </Properties>


     <!-- Example with JSON: https://github.com/Consensys/quorum-dev-quickstart/blob/b72a0f64d685c851bf8be399a8e33bbdf0e09982/files/besu/config/besu/log-config.xml -->
     <Appenders>
       <Console name="Console" target="SYSTEM_OUT">
         <PatternLayout alwaysWriteExceptions="false" pattern='${root.log.pattern}'/>
       </Console>
       <RollingFile name="RollingFile" fileName="/opt/besu/logs/besu.log" filePattern="/opt/besu/logs/besu-%d{yyyy-MM-dd}-%i.log.gz" >
         <PatternLayout alwaysWriteExceptions="false" pattern='${root.log.pattern}'/>
         <Policies>
           <TimeBasedTriggeringPolicy />
           <SizeBasedTriggeringPolicy size="1000 MB" />
         </Policies>
       </RollingFile>
     </Appenders>

     <Loggers>
       <Logger name="oshi" level="OFF" additivity="false"/>


       <Logger name="io.netty" additivity="false">
         <AppenderRef ref="RollingFile" level="TRACE" />
       </Logger>

       <Logger name="io.vertx" additivity="false">
         <AppenderRef ref="RollingFile" level="TRACE" />
       </Logger>

       <Logger name="org.hyperledger.besu.ethereum.eth.transactions.BlobCache" additivity="false">
         <AppenderRef ref="RollingFile" level="WARN" />
       </Logger>

       <Root>
         <AppenderRef ref="Console" level="INFO" />
         <AppenderRef ref="RollingFile" level="TRACE" />
       </Root>
     </Loggers>

   </Configuration>
   ```
8. Настройте файл следующим образом, предполагая, что все данные находятся в одном каталоге. При необходимости вы можете настроить траектории на своем устройстве.`docker-compose.yml`

   Копировать

   ```
   services:
     besu:
       container_name: besu
       image: hyperledger/besu:latest
       pull_policy: always
       command:
         - --logging=ALL
         - --bootnodes=enode://663ce222c6ca01f14303c290966a21d387cc1fa77e3eec3c6b6c394740f4c56429fd5645b0fb25c75dc4260b0bca3167943566a261b05adcbdaf82012daa56d1@49.13.137.162:30303 
         - --host-allowlist=*
         - --rpc-http-enabled
         - --rpc-http-api=ETH,NET,WEB3,TXPOOL,TRACE,DEBUG
         - --rpc-http-cors-origins=all
         - --engine-rpc-enabled
         - --engine-jwt-disabled
         - --engine-host-allowlist=*
         - --rpc-ws-enabled
         - --genesis-file=/etc/besu/genesis.json
         - --data-path=/var/lib/besu
       volumes:
         - ./besu:/var/lib/besu
         - ./log/besu:/opt/besu/logs
         - ./genesis.json:/etc/besu/genesis.json
         - ./log4j2.xml:/etc/besu/log4j2.xml
       ports:
         - "8545:8545"
         - "30303:30303/tcp"
         - "30303:30303/udp"
       environment:
         - LOG4J_CONFIGURATION_FILE=/etc/besu/log4j2.xml
       healthcheck:
         test: ["CMD-SHELL", "echo", "GET / HTTP/1.0\r\n", ">", "/dev/tcp/127.0.0.1/8545"]
         interval: 10s
         timeout: 1s
         retries: 5

     waves-node:
       container_name: waves-node
       image: wavesplatform/wavesnode:L2-20240507-819059ce4c
       ports:
         - "6868:6868"
         - "6869:6869"
       environment:
        - JAVA_OPTS=-Dlogback.file.directory=/var/log/waves -Dwaves.config.directory=/etc/waves -Dlogback.file.level=TRACE
       volumes:
         - ./data:/var/lib/waves/data
         - ./waves.conf:/etc/waves/waves.conf:ro
         - ./log/waves:/var/log/waves
       depends_on:
         besu:
           condition: service_healthy
   ```

### Запуск узла <a href="#launch-node" id="launch-node"></a>

Запустите ноду, используя следующую команду:

Копировать

```
docker-compose up -d
```

Убедитесь, что Consensus Client синхронизирован с сетью, на что указывает сообщение "Execution chain is synced" в журнале Waves.

### Начать майнинг <a href="#start-mining" id="start-mining"></a>

Вызовите функцию [Testnet Chain Contract](https://waves-dapp.com/3MsqKJ6o1ABE37676cHHBxJRs6huYTt72ch) от имени аккаунта Waves вашей ноды. Укажите свой адрес в тестовой сети Unit Zero в качестве аргумента для получения вознаграждений эпохи и комиссий за транзакции.`join()`

Вы можете преобразовать свой адрес из 0x... в base64 следующим образом:

Копировать

```
echo <paste 0x… address> | xxd -r -p | base64
```

Ваш узел начнет майнинг, когда придет его очередь.

Если у вас возникнут какие-либо трудности, не стесняйтесь обращаться за помощью через [чат разработчика](https://t.me/waves_ride_dapps_dev).

[<br>](https://wavesplatform.gitbook.io/unit-zero-docs/testnet/testnet)
