LocalDeploy.s.sol
Обзор
LocalDeploy.s.sol — это скрипт быстрого локального деплоя смарт-контрактов для целей разработки и тестирования. Он автоматизирует процесс развертывания основных контрактов игровой экосистемы, их настройку и генерацию конфигурационных файлов для взаимодействия с оффчейн компонентами (например, игровым нодом). Скрипт предназначен для использования с инструментарием Foundry (forge) и локальной сетью Anvil.
Основная задача файла — упростить и ускорить подготовку локальной среды для тестирования, предоставляя полный стек контрактов и необходимые настройки "из коробки".
Подробное описание
Контракт LocalDeploy
Наследуется от Script из библиотеки Foundry forge-std. Основная точка входа — функция run(), которая выполняет весь процесс деплоя и настройки.
Методы
function run() external
Описание:
Главный метод, вызываемый при запуске скрипта. Выполняет следующие шаги:
Выводит в консоль информацию о цепочке и деплойере.
Запускает режим трансакций (
vm.startBroadcast()), чтобы все действия выполнялись от имени отправителя.Создаёт экземпляры трех контрактов:
ManaToken— токен MANA с владельцем в лице деплойера.ManaSettlement— контракт для урегулирования операций с MANA, получает адрес токена.GameManager— управляющий контракт игры, получает адресаManaSettlement,ManaTokenи деплойера.
Настраивает права доступа, передавая роль
GAME_MANAGER_ROLEконтрактуGameManager.Инициализирует
ManaSettlementвызовомinitializeс деплойером иGameManager.Минтит 10 миллионов MANA на адрес деплойера для тестов.
Останавливает режим трансакций (
vm.stopBroadcast()).Формирует структуру
DeployedContractsс адресами развернутых контрактов.Сохраняет адреса и метаданные в JSON-файл
./deployments/local.jsonдля использования оффчейн.Вызывает вспомогательную функцию
generateOffChainConfigдля создания конфигурации оффчейн компонентов.Выводит инструкции для дальнейших действий по запуску локальной среды.
Параметры: отсутствуют.
Возвращаемое значение: отсутствует.
Пример использования:
forge script script/LocalDeploy.s.sol --broadcast --rpc-url http://localhost:8545
function generateOffChainConfig(DeployGameContracts.DeployedContracts memory contracts) internal
Описание:
Вспомогательный метод для генерации конфигурационного файла .env.local для оффчейн компонентов (например, игрового нода). В файле прописываются URL RPC, адреса контрактов, приватный ключ для локальной сети и уровень логирования.
Параметры:
contracts— структураDeployedContracts, содержащая адреса развернутых контрактов (manaToken,gameManager,manaSettlement).
Возвращаемое значение: отсутствует.
Использование: вызывается из run() после деплоя.
Важные детали реализации
Используется
vm.startBroadcast()иvm.stopBroadcast()из Foundry для выполнения транзакций от имениmsg.sender.Передача роли
GAME_MANAGER_ROLEконтрактуGameManagerобеспечивает безопасность и разграничение полномочий.Мятается значительный объём тестовых токенов (10 миллионов MANA) для локального тестирования.
Формирование JSON и конфигурационного файла через
vm.writeFile()позволяет интегрировать локальный деплой с внешними системами.Приватный ключ жестко задан для локальной среды (тестовая сеть), что облегчает автоматизацию, но категорически не подходит для продакшена.
Взаимодействие с другими файлами и компонентами
Импортирует и использует
DeployGameContracts.s.solдля структурыDeployedContracts, которая агрегирует адреса контрактов.Разворачивает контракты, реализованные в
ManaToken.sol,GameManager.solиManaSettlement.sol.Генерируемые файлы
./deployments/local.jsonи./off-chain/.env.localиспользуются оффчейн инфраструктурой, например, игровым нодом и демо-клиентом.Интегрируется с локальным RPC-узлом (Anvil) и инструментами Foundry для полного цикла девопса и тестирования.
Диаграмма структуры
classDiagram
class LocalDeploy {
+run()
-generateOffChainConfig(DeployGameContracts.DeployedContracts)
}
class ManaToken {
+constructor(address)
+grantRole(bytes32, address)
+mint(address, uint256)
+GAME_MANAGER_ROLE() view returns (bytes32)
}
class ManaSettlement {
+constructor(address)
+initialize(address, address)
}
class GameManager {
+constructor(address, address, address)
}
class DeployGameContracts {
class DeployedContracts {
+manaToken: address
+gameManager: address
+manaSettlement: address
}
}
LocalDeploy --> ManaToken
LocalDeploy --> ManaSettlement
LocalDeploy --> GameManager
LocalDeploy --> DeployGameContracts.DeployedContracts
Резюме
Файл LocalDeploy.s.sol — это удобный скрипт для локального быстрого развертывания и настройки ключевых игровых смарт-контрактов с последующей генерацией конфигураций для оффчейн компонентов. Он интегрируется в процесс разработки, значительно ускоряя подготовку среды и облегчая тестирование игровых механик и взаимодействия с контрактами.
Инструкции по запуску
Запустить локальный RPC-узел Anvil:
anvilВыполнить скрипт деплоя:
forge script script/LocalDeploy.s.sol --broadcast --rpc-url http://localhost:8545Запустить игровой нод оффчейн:
cd off-chain && make run-game-nodeЗапустить демо-клиент для тестирования.
Если необходима дополнительная помощь по работе с этим скриптом, рекомендуется ознакомиться с документацией Foundry и исходным кодом смарт-контрактов.