mirror of
https://github.com/logos-storage/logos-storage-docs.git
synced 2026-01-03 22:03:09 +00:00
239 lines
12 KiB
Markdown
239 lines
12 KiB
Markdown
|
|
# Сборка Codex
|
|||
|
|
|
|||
|
|
## Содержание
|
|||
|
|
|
|||
|
|
- [Установка инструментов разработчика](#prerequisites)
|
|||
|
|
- [Linux](#linux)
|
|||
|
|
- [macOS](#macos)
|
|||
|
|
- [Windows + MSYS2](#windows-msys2)
|
|||
|
|
- [Другие](#other)
|
|||
|
|
- [Клонирование и подготовка Git-репозитория](#repository)
|
|||
|
|
- [Сборка исполняемого файла](#executable)
|
|||
|
|
- [Запуск примера](#example-usage)
|
|||
|
|
|
|||
|
|
**Дополнительно**
|
|||
|
|
- [Запуск тестов](#tests)
|
|||
|
|
|
|||
|
|
## Предварительные требования
|
|||
|
|
|
|||
|
|
Для сборки nim-codex необходимо установить и сделать доступными инструменты разработчика в операционной системе.
|
|||
|
|
|
|||
|
|
Инструкции ниже примерно соответствуют настройкам окружения в [CI workflow](https://github.com/codex-storage/nim-codex/blob/master/.github/workflows/ci.yml) nim-codex и известны как рабочие.
|
|||
|
|
|
|||
|
|
Другие подходы могут быть жизнеспособны. На macOS некоторые пользователи могут предпочесть [MacPorts](https://www.macports.org/) вместо [Homebrew](https://brew.sh/). На Windows вместо MSYS2 некоторые пользователи могут предпочесть установку инструментов разработчика с помощью [winget](https://docs.microsoft.com/en-us/windows/package-manager/winget/), [Scoop](https://scoop.sh/) или [Chocolatey](https://chocolatey.org/), или загрузку установщиков для, например, Make и CMake, в остальном полагаясь на официальные инструменты разработчика Windows. Приветствуются вклады сообщества в эти документы и нашу систему сборки!
|
|||
|
|
|
|||
|
|
### Rust
|
|||
|
|
|
|||
|
|
Текущая реализация схемы доказательств с нулевым разглашением Codex требует установки Rust версии 1.79.0 или выше. Убедитесь, что вы установили его для вашей ОС и добавили в PATH вашего терминала так, чтобы команда `cargo --version` показывала совместимую версию.
|
|||
|
|
|
|||
|
|
### Linux
|
|||
|
|
|
|||
|
|
> [!WARNING]
|
|||
|
|
> Сборка в Linux в настоящее время требует gcc $\leq$ 13. Если это не вариант в вашей системе, вы можете попробовать [сборку в Docker](#building-within-docker) как обходной путь.
|
|||
|
|
|
|||
|
|
*Команды менеджера пакетов могут требовать `sudo` в зависимости от настройки ОС.*
|
|||
|
|
|
|||
|
|
На базовой установке Debian (или дистрибутива, производного от Debian, такого как Ubuntu), выполните
|
|||
|
|
|
|||
|
|
```shell
|
|||
|
|
apt-get update && apt-get install build-essential cmake curl git rustc cargo
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Не-Debian дистрибутивы имеют разные менеджеры пакетов: `apk`, `dnf`, `pacman`, `rpm`, `yum` и т.д.
|
|||
|
|
|
|||
|
|
Например, на базовой установке Fedora выполните
|
|||
|
|
|
|||
|
|
```shell
|
|||
|
|
dnf install @development-tools cmake gcc-c++ rust cargo
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
В случае, если ваш дистрибутив не предоставляет требуемую версию Rust, мы можем установить её с помощью [rustup](https://www.rust-lang.org/tools/install)
|
|||
|
|
```shell
|
|||
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs/ | sh -s -- --default-toolchain=1.79.0 -y
|
|||
|
|
|
|||
|
|
. "$HOME/.cargo/env"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Обратите внимание, что в настоящее время вы не сможете собрать Codex с gcc 14. Чтобы проверить, что у вас поддерживаемая версия, выполните:
|
|||
|
|
|
|||
|
|
```shell
|
|||
|
|
gcc --version
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Если вы получите число, начинающееся с 14 (например, `14.2.0`), то вам нужно либо понизить версию, либо попробовать обходной путь, например [сборку в Docker](#building-within-docker).
|
|||
|
|
|
|||
|
|
### macOS
|
|||
|
|
|
|||
|
|
Установите [Xcode Command Line Tools](https://mac.install.guide/commandlinetools/index.html), открыв терминал и выполнив
|
|||
|
|
```shell
|
|||
|
|
xcode-select --install
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Установите [Homebrew (`brew`)](https://brew.sh/) и в новом терминале выполните
|
|||
|
|
```shell
|
|||
|
|
brew install bash cmake rust
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Проверьте, что `PATH` настроен правильно
|
|||
|
|
```shell
|
|||
|
|
which bash cmake
|
|||
|
|
|
|||
|
|
# /usr/local/bin/bash
|
|||
|
|
# /usr/local/bin/cmake
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Windows + MSYS2
|
|||
|
|
|
|||
|
|
*Инструкции ниже предполагают, что ОС - 64-битная Windows и что оборудование или ВМ совместимо с [x86-64](https://en.wikipedia.org/wiki/X86-64).*
|
|||
|
|
|
|||
|
|
Скачайте и запустите установщик с [msys2.org](https://www.msys2.org/).
|
|||
|
|
|
|||
|
|
Запустите среду MSYS2 [environment](https://www.msys2.org/docs/environments/). UCRT64 обычно рекомендуется: из меню *Пуск* Windows выберите `MSYS2 MinGW UCRT x64`.
|
|||
|
|
|
|||
|
|
Предполагая среду UCRT64, в Bash выполните
|
|||
|
|
```shell
|
|||
|
|
pacman -Suy
|
|||
|
|
pacman -S base-devel git unzip mingw-w64-ucrt-x86_64-toolchain mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-rust
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Нам следует понизить GCC до версии 13 [^gcc-14]
|
|||
|
|
```shell
|
|||
|
|
pacman -U --noconfirm \
|
|||
|
|
https://repo.msys2.org/mingw/ucrt64/mingw-w64-ucrt-x86_64-gcc-13.2.0-6-any.pkg.tar.zst \
|
|||
|
|
https://repo.msys2.org/mingw/ucrt64/mingw-w64-ucrt-x86_64-gcc-libs-13.2.0-6-any.pkg.tar.zst
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Опционально: Интеграция с терминалом VSCode
|
|||
|
|
|
|||
|
|
Вы можете связать терминал MSYS2-UCRT64 с VSCode, изменив файл конфигурации, как показано ниже.
|
|||
|
|
Файл: `C:/Users/<username>/AppData/Roaming/Code/User/settings.json`
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
...
|
|||
|
|
"terminal.integrated.profiles.windows": {
|
|||
|
|
...
|
|||
|
|
"MSYS2-UCRT64": {
|
|||
|
|
"path": "C:\\msys64\\usr\\bin\\bash.exe",
|
|||
|
|
"args": [
|
|||
|
|
"--login",
|
|||
|
|
"-i"
|
|||
|
|
],
|
|||
|
|
"env": {
|
|||
|
|
"MSYSTEM": "UCRT64",
|
|||
|
|
"CHERE_INVOKING": "1",
|
|||
|
|
"MSYS2_PATH_TYPE": "inherit"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Другие
|
|||
|
|
|
|||
|
|
Возможно, что nim-codex может быть собран и запущен на других платформах, поддерживаемых языком [Nim](https://nim-lang.org/): семейство BSD, более старые версии Windows и т.д. Не было достаточного экспериментирования с nim-codex на таких платформах, поэтому инструкции не предоставляются. Приветствуются вклады сообщества в эти документы и нашу систему сборки!
|
|||
|
|
|
|||
|
|
## Репозиторий
|
|||
|
|
|
|||
|
|
В Bash выполните
|
|||
|
|
```shell
|
|||
|
|
git clone https://github.com/codex-storage/nim-codex.git repos/nim-codex && cd repos/nim-codex
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
nim-codex использует [nimbus-build-system](https://github.com/status-im/nimbus-build-system), поэтому затем выполните
|
|||
|
|
```shell
|
|||
|
|
make update
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Этот шаг может занять некоторое время для завершения, потому что по умолчанию он собирает [компилятор Nim](https://nim-lang.org/docs/nimc.html).
|
|||
|
|
|
|||
|
|
Чтобы увидеть больше вывода от `make`, передайте `V=1`. Это работает для всех целей `make` в проектах, использующих nimbus-build-system
|
|||
|
|
```shell
|
|||
|
|
make V=1 update
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Исполняемый файл
|
|||
|
|
|
|||
|
|
В Bash выполните
|
|||
|
|
```shell
|
|||
|
|
make
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Цель `make` по умолчанию создает исполняемый файл `build/codex`.
|
|||
|
|
|
|||
|
|
## Инструменты
|
|||
|
|
|
|||
|
|
### Инструмент загрузки схемы
|
|||
|
|
|
|||
|
|
Чтобы собрать инструмент загрузки схемы, расположенный в `tools/cirdl`, выполните:
|
|||
|
|
|
|||
|
|
```shell
|
|||
|
|
make cirdl
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Пример использования
|
|||
|
|
|
|||
|
|
См. инструкции в [Быстром старте](/learn/quick-start).
|
|||
|
|
|
|||
|
|
## Тесты
|
|||
|
|
|
|||
|
|
В Bash выполните
|
|||
|
|
```shell
|
|||
|
|
make test
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### testAll
|
|||
|
|
|
|||
|
|
#### Предварительные требования
|
|||
|
|
|
|||
|
|
Для запуска интеграционных тестов требуется тестовый узел Ethereum. Следуйте этим инструкциям для его настройки.
|
|||
|
|
|
|||
|
|
##### Windows (сделайте это перед "Все платформы")
|
|||
|
|
|
|||
|
|
1. Скачайте и установите Visual Studio 2017 или новее. (Не VSCode!) В обзоре рабочих нагрузок включите `Desktop development with C++`. ( https://visualstudio.microsoft.com )
|
|||
|
|
|
|||
|
|
##### Все платформы
|
|||
|
|
|
|||
|
|
1. Установите NodeJS (проверено с v18.14.0), рассмотрите использование NVM как менеджера версий. [Node Version Manager (`nvm`)](https://github.com/nvm-sh/nvm#readme)
|
|||
|
|
1. Откройте терминал
|
|||
|
|
1. Перейдите в папку vendor/codex-contracts-eth: `cd /<git-root>/vendor/codex-contracts-eth/`
|
|||
|
|
1. `npm install` -> Должно завершиться с количеством добавленных пакетов и обзором известных уязвимостей.
|
|||
|
|
1. `npm test` -> Должен вывести результаты тестов. Может занять минуту.
|
|||
|
|
|
|||
|
|
Перед запуском интеграционных тестов вы должны вручную запустить тестовый узел Ethereum.
|
|||
|
|
1. Откройте терминал
|
|||
|
|
1. Перейдите в папку vendor/codex-contracts-eth: `cd /<git-root>/vendor/codex-contracts-eth/`
|
|||
|
|
1. `npm start` -> Это должно запустить Hardhat и вывести ряд ключей и предупреждающее сообщение.
|
|||
|
|
|
|||
|
|
#### Запуск
|
|||
|
|
|
|||
|
|
Цель `testAll` запускает те же тесты, что и `make test`, а также запускает тесты для контрактов Ethereum nim-codex, а также базовый набор интеграционных тестов.
|
|||
|
|
|
|||
|
|
Чтобы запустить `make testAll`.
|
|||
|
|
|
|||
|
|
Используйте новый терминал для запуска:
|
|||
|
|
```shell
|
|||
|
|
make testAll
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Сборка в Docker
|
|||
|
|
|
|||
|
|
Для конкретного случая дистрибутивов Linux, которые поставляются с gcc 14
|
|||
|
|
и понижение до 13 невозможно/нежелательно, сборка в контейнере Docker
|
|||
|
|
и извлечение бинарных файлов путем копирования или монтирования остается
|
|||
|
|
вариантом; например:
|
|||
|
|
|
|||
|
|
```bash=
|
|||
|
|
# Клонировать оригинальный репозиторий.
|
|||
|
|
git clone https://github.com/codex-storage/nim-codex
|
|||
|
|
|
|||
|
|
# Собрать внутри docker
|
|||
|
|
docker build -t codexstorage/nim-codex:latest -f nim-codex/docker/codex.Dockerfile nim-codex
|
|||
|
|
|
|||
|
|
# Извлечь исполняемый файл
|
|||
|
|
docker create --name=codex-build codexstorage/nim-codex:latest
|
|||
|
|
docker cp codex-build:/usr/local/bin/codex ./codex
|
|||
|
|
docker cp codex-build:/usr/local/bin/cirdl ./cirdl
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
и вуаля, у вас должны быть бинарные файлы доступны в текущей папке.
|