Тестирование Peggo
Добро пожаловать в среду тестирования PegGo. Цель этой сборки согласована с общей целью проекта — привести вещи в соответствие и ускорить итерации. Используя один и тот же язык для модуля, оркестратора и теста, мы можем добиться полного охвата тестами всех логических ветвей.
Это особое место, где нас не волнуют такие вещи, как:
Версия ноды
Мириады пакетов JS, жалующихся на версии и несоответствия API
Различные местоположения артефактов контракта ERC20
Всё развертывается медленно
Отладка ошибок Ganache
Мы заботимся о:
Скорости работы
Отчеты о коде Go
Отсутствии проблем, связанных с инструментами или средой разработки
Кроссплатформенности (macOS)
Поддержке любой целевой EVM, реализующей Ethereum JSON-RPC
100% совместимости с реальной сетью
Предварительные Требования
Вы можете указать любой удаленный EVM эндпоинт для запуска теста, но лучший и наиболее стабильный способ всё протестировать — запустить экземпляр Ganache или Hardhat. Hardhat используется исключительно как поставщик узлов JSON-RPC.
Предпочтительный инструментарий компилятора Solc:
Запустите solc-select use 0.8.2
перед запуском любых тестов.
Запуск С Использованием Hardhat
Hardhat — более новая альтернатива Ganache, которая имеет удобную инициализацию через файл конфигурации.
Запуск скрипта инициализации установит модули ноды в директорию ./test/ethereum
После того, как инициализация выполнена, следующая команда поможет запустить сервер Hardhat:
Единственная опция, которая может быть установлена через переменную окружения:
HARDHAT_PORT
- укажите, какой порт слушать. По умолчанию8545
.
Остальные опции могут быть откорректированы по адресу ./test/ethereum/hardhat.config.js
Подготовка к тестированию с помощью Geth
Чтобы получить максимальную совместимость с реальной средой блокчейна и избежать каких-либо ошибок в среде выполнения EVM Hardhat/Ganache, а также проверить различные условия времени блокировки, можно непосредственно запустить Geth.
Запуск этого скрипта запустит постоянное хранилище данных для частной сети.
Опции инициализации могут быть установлены в переменных окружения:
GETH_NETWORK_ID
- укажите ID сети Ethereum, по умолчанию50
.GETH_ALGO
- укажите алгоритм консенсуса для производства блоков. По умолчаниюclique
(PoA), ноethash
(PoW) также поддерживается. Убедитесь, что установили сложность, пропатчив ваш Geth (смотреть в конце этой страницы)CHAIN_DIR
- укажите директорию данных, префикс для всех директорий с данными и логов. По умолчанию./data
Настройки блокчейна могут быть изменены по адресу ./test/ethereum/geth/genesis.json
После завершения инициализации можно использовать следующую команду для запуска полной ноды Geth:
Опции запуска могут быть установлены в переменных окружения:
GETH_NETWORK_ID
- укажите ID сети Ethereum, по умолчанию50
.GETH_ALGO
- укажите алгоритм консенсуса для производства блоков. По умолчаниюethash
(PoW), ноclique
(PoA) также поддерживается.GETH_PORT
- укажите порт сервера для прослушивания. По умолчанию8545
.CHAIN_DIR
- укажите директорию данных, префикс для всех директорий с данными и логов. По умолчанию./data
Cosmos Daemon
Этот набор тестов поддерживает различные бэкэнды Cosmos, в основном подойдет любое приложение со встроенным gravity
модулем . Мы ожидаем, что универсальное приложение совместимо с Cosmos-SDK и имеет интерфейс командной строки, очень похожий на gaiad
. Существует сценарий, который запустит изолированную полную сеть из 3 узлов, изначально работающую на хост-компьютере. Просто не забудьте указать целевой исполняемый файл в качестве аргумента.
Полный список поддерживаемых переменных окружения:
CHAIN_ID
- указывает Cosmos Chain ID, например,gravity-1
CHAIN_DIR
- префикс для всех директорий с данными и логами, будет удален еслиCLEANUP=1
DENOM
- номинал монет в Cosmos, монета сети по умолчанию. Пример:uatom
,aphoton
,samoleans
и т.д.STAKE_DENOM
- номинал монет Cosmos, который используется для стейкинга и управления. В Cosmos Hub этоstake
. По умолчанию равенDENOM
в скрипте.SCALE_FACTOR
- фактор разрядности монет Cosmos. По умолчанию 1e18 чтобы отражать баланс токенов Ethereum. Используйте000000
чтобы придерживаться стиля Cosmos uatom (1e6).CLEANUP
- если эта опция установлена как1
, следовательноCHAIN_DIR
будет удалено самым небезопасным способом.LOG_LEVEL
- устанавливает уровень логов конфигурации ноды Cosmos. По умолчаниюmain:info,state:info,statesync:info,*:error
.
Важно: безопасно запускать скрипт несколько раз, он остановит узлы при запуске и, возможно, очистит состояние. Если состояние не пусто, скрипт запустит узлы без повторного запуска инициализации. Таким образом, его можно использовать для повторных тестов вручную.
Аккаунты Cosmos
Скрипт импортирует 3 аккаунта валидатора и 1 аккаунт пользователя, указанные мнемоникой в самом скрипте. Каждая учетная запись валидатора доступна как val
на соответствующих узлах, а учетная запись пользователя используется всеми тремя узлами как пользователь.
Дополнение: Патчинг Geth
Geth по умолчанию масштабирует сложность блоков, чтобы достичь целевого темпа блока. Таким образом, даже если ваша сеть начинается со difficulty=1
в генезисе, сложность в следующих блоках будет выше, а время ожидания будет очень большим. Особенно фазы регенерации DAG. Решением этой проблемы в локальной настройке будет либо использование clique
консенсуса для создания блоков в стиле PoA, либо просто исправление кода Geth, чтобы сложность не возрастала.
Просто скопируйте репозиторий go-ethereum
:
И установите его с помощью go install ./cmd/geth
. Добро пожаловать в форк Geth!
Last updated