Skip to content

Сборка Codex

Содержание

Дополнительно

Предварительные требования

Для сборки nim-codex необходимо установить и сделать доступными инструменты разработчика в операционной системе.

Инструкции ниже примерно соответствуют настройкам окружения в CI workflow nim-codex и известны как рабочие.

Другие подходы могут быть жизнеспособны. На macOS некоторые пользователи могут предпочесть MacPorts вместо Homebrew. На Windows вместо MSYS2 некоторые пользователи могут предпочесть установку инструментов разработчика с помощью winget, Scoop или Chocolatey, или загрузку установщиков для, например, Make и CMake, в остальном полагаясь на официальные инструменты разработчика Windows. Приветствуются вклады сообщества в эти документы и нашу систему сборки!

Rust

Текущая реализация схемы доказательств с нулевым разглашением Codex требует установки Rust версии 1.79.0 или выше. Убедитесь, что вы установили его для вашей ОС и добавили в PATH вашего терминала так, чтобы команда cargo --version показывала совместимую версию.

Linux

WARNING

Сборка в Linux в настоящее время требует gcc 13. Если это не вариант в вашей системе, вы можете попробовать сборку в 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

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.

macOS

Установите Xcode Command Line Tools, открыв терминал и выполнив

shell
xcode-select --install

Установите Homebrew (brew) и в новом терминале выполните

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.

Скачайте и запустите установщик с msys2.org.

Запустите среду MSYS2 environment. 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: семейство 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, поэтому затем выполните

shell
make update

Этот шаг может занять некоторое время для завершения, потому что по умолчанию он собирает компилятор Nim.

Чтобы увидеть больше вывода от make, передайте V=1. Это работает для всех целей make в проектах, использующих nimbus-build-system

shell
make V=1 update

Исполняемый файл

В Bash выполните

shell
make

Цель make по умолчанию создает исполняемый файл build/codex.

Инструменты

Инструмент загрузки схемы

Чтобы собрать инструмент загрузки схемы, расположенный в tools/cirdl, выполните:

shell
make cirdl

Пример использования

См. инструкции в Быстром старте.

Тесты

В 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)
  2. Откройте терминал
  3. Перейдите в папку vendor/codex-contracts-eth: cd /<git-root>/vendor/codex-contracts-eth/
  4. npm install -> Должно завершиться с количеством добавленных пакетов и обзором известных уязвимостей.
  5. npm test -> Должен вывести результаты тестов. Может занять минуту.

Перед запуском интеграционных тестов вы должны вручную запустить тестовый узел Ethereum.

  1. Откройте терминал
  2. Перейдите в папку vendor/codex-contracts-eth: cd /<git-root>/vendor/codex-contracts-eth/
  3. 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

и вуаля, у вас должны быть бинарные файлы доступны в текущей папке.