рабочий проект DAO
Если постоянно появляются зависимости, конфиги, Node версии, ESM/CommonJS — это классический кошмар при работе с Hardhat на Windows.
Давай сделаем чистый, стабильный старт, чтобы у тебя был рабочий проект DAO без этих заплаток. Я дам тебе готовый набор файлов + последовательность команд, которые гарантированно работают.
1️⃣ Файлы проекта
package.json
{
"name": "netvojne-dao",
"version": "1.0.0",
"private": true,
"scripts": {
"compile": "hardhat compile",
"test": "hardhat test",
"deploy:sepolia": "hardhat run scripts/deploy.js --network sepolia",
"start-frontend": "cd frontend && npm install && npm run dev"
},
"devDependencies": {
"hardhat": "2.17.0",
"@nomicfoundation/hardhat-toolbox": "6.1.0",
"@nomicfoundation/hardhat-ethers": "3.1.0",
"@nomicfoundation/hardhat-chai-matchers": "2.1.0",
"chai": "^4.3.7"
},
"dependencies": {
"dotenv": "^16.3.1",
"ethers": "^6.9.0"
}
}
hardhat.config.cjs
require("@nomicfoundation/hardhat-toolbox");
module.exports = {
solidity: "0.8.19",
paths: {
sources: "./contracts",
tests: "./test",
cache: "./cache",
artifacts: "./artifacts"
}
};
Структура проекта
DAO_token/
├─ contracts/
│ └─ MyToken.sol
├─ scripts/
│ └─ deploy.js
├─ test/
│ └─ test.js
├─ package.json
├─ hardhat.config.cjs
Все пути прописаны в конфиге, Hardhat создаст
artifacts/иcache/.Solidity версии 0.8.19 — современная, совместимая с Hardhat 2.x.
2️⃣ Полная последовательность команд для Windows PowerShell
# 1. Очистка старого мусора
Remove-Item -Recurse -Force node_modules
Remove-Item -Force package-lock.json
Remove-Item -Recurse -Force artifacts
Remove-Item -Recurse -Force cache
# 2. Установка зависимостей (совместимых)
npm install --legacy-peer-deps
# 3. Компиляция контрактов
npx hardhat compile
После этого компиляция должна пройти без ошибок ESM/require, без конфликтов зависимостей и без “заплаток”.
Ага, теперь это уже чисто проблема OpenZeppelin. ⚡
Ошибка HH404 говорит:
File
@openzeppelin/contracts/security/ReentrancyGuard.sol, imported fromcontracts/CampaignManager.sol, not found.
То есть твой контракт импортирует ReentrancyGuard.sol, а npm пока не установил библиотеку OpenZeppelin или она не там, где Hardhat ожидает.
Исправляем шаг за шагом
1️⃣ Устанавливаем OpenZeppelin:
npm install @openzeppelin/contracts
Это создаст папку
node_modules/@openzeppelin/contractsсо всеми контрактами.
2️⃣ Проверяем, что импорт в контракте правильный:
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
Если ты используешь более старую версию OpenZeppelin, пути могли поменяться.
С последней версией (например 5.x) структура такая:
@openzeppelin/contracts/security/ReentrancyGuard.sol.
3️⃣ Компиляция:
npx hardhat compile
✅ После этого Hardhat должен найти ReentrancyGuard.sol и скомпилировать контракт без ошибок HH404.
💡 Совет:
Любые импорты из
@openzeppelin/contractsтребуют, чтобы npm-пакет был установлен.Если используешь несколько контрактов OpenZeppelin (ERC20, Ownable, SafeMath, ReentrancyGuard) — ставим одним пакетом:
npm install @openzeppelin/contracts
Отлично! 🚀
Я составил рабочий PowerShell-скрипт для твоего проекта DAO/токена с Hardhat 3.x, который удаляет старые пакеты, ставит нужные версии, добавляет ESM, компилирует контракты и готовит проект к деплою.
Сохрани этот код в файл, например setup-and-compile.ps1, и запускай в папке проекта D:\DAO_token.
# ===============================================================
# Скрипт для полной установки, компиляции и подготовки Hardhat
# проекта DAO/токена с OpenZeppelin и необходимыми плагинами
# ===============================================================
# 1️⃣ Переходим в папку проекта
cd "D:\DAO_token"
# 2️⃣ Удаляем старые node_modules и package-lock.json
Write-Host "Удаляем старые node_modules и package-lock.json..."
Remove-Item -Recurse -Force node_modules, package-lock.json -ErrorAction SilentlyContinue
# 3️⃣ Удаляем старые версии Hardhat и Toolbox
Write-Host "Удаляем старые версии Hardhat и плагинов..."
npm uninstall hardhat @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-verify @nomicfoundation/hardhat-ignition-ethers @nomicfoundation/hardhat-network-helpers --legacy-peer-deps
# 4️⃣ Добавляем поддержку ESM в package.json
Write-Host "Добавляем type='module' в package.json..."
npm pkg set type="module"
# 5️⃣ Устанавливаем рабочую связку
Write-Host "Устанавливаем Hardhat, Toolbox, Verify, Ignition-Ethers, Network-Helpers, Ethers, Chai и OpenZeppelin..."
npm install --save-dev `
hardhat@^3.0.5 `
@nomicfoundation/hardhat-toolbox@6.1.0 `
@nomicfoundation/hardhat-verify@^3.0.2 `
@nomicfoundation/hardhat-ignition-ethers@^3.0.3 `
@nomicfoundation/hardhat-network-helpers@^3.0.0 `
ethers `
chai `
@openzeppelin/contracts `
--legacy-peer-deps
# 6️⃣ Проверяем версии Hardhat
Write-Host "Проверяем версию Hardhat..."
npx hardhat --version
# 7️⃣ Компилируем контракты
Write-Host "Компилируем контракты..."
npx hardhat compile
# 8️⃣ Проверка успешной компиляции
if ($LASTEXITCODE -eq 0) {
Write-Host "`n✅ Контракты успешно скомпилированы! Проект готов к деплою." -ForegroundColor Green
} else {
Write-Host "`n❌ Ошибка компиляции! Проверьте вывод выше." -ForegroundColor Red
}
# 9️⃣ Рекомендации
Write-Host "`n💡 Рекомендация: использовать Node.js >= 22.10.0 для стабильной работы Hardhat 3.x"
Write-Host "После компиляции можно запускать скрипты деплоя и тесты через:"
Write-Host "npx hardhat run scripts/deploy.js --network <network_name>"
Отлично! 🔥
Вот рабочий PowerShell-скрипт для деплоя твоего токена и маркетплейса DAO после того, как Hardhat и все плагины уже установлены и контракты скомпилированы. Сохрани его, например, как deploy.ps1 в корне проекта D:\DAO_token.
Он рассчитан на тестовую сеть Hardhat (локальную) и легко адаптируется под Goerli или любую другую сеть, если добавить .env с приватным ключом и RPC URL.
# ===============================================================
# Скрипт деплоя токена и маркетплейса DAO с Hardhat
# ===============================================================
cd "D:\DAO_token"
# Проверка компиляции
Write-Host "Компилируем контракты перед деплоем..."
npx hardhat compile
if ($LASTEXITCODE -ne 0) {
Write-Host "❌ Ошибка компиляции! Исправьте ошибки перед деплоем." -ForegroundColor Red
exit
}
# Деплой контрактов на локальную сеть Hardhat
Write-Host "`n🚀 Деплой на локальную сеть Hardhat..."
npx hardhat run scripts/deploy.js --network hardhat
if ($LASTEXITCODE -ne 0) {
Write-Host "❌ Ошибка деплоя на локальную сеть!" -ForegroundColor Red
exit
}
# Деплой на Goerli (или другую тестовую сеть)
# Для этого создайте файл .env с переменными:
# PRIVATE_KEY=ваш приватный ключ
# GOERLI_URL=RPC URL сети Goerli
if (Test-Path ".env") {
Write-Host "`n🌐 Деплой на тестовую сеть Goerli..."
npx hardhat run scripts/deploy.js --network goerli
if ($LASTEXITCODE -ne 0) {
Write-Host "❌ Ошибка деплоя на Goerli!" -ForegroundColor Red
exit
}
}
Write-Host "`n✅ Деплой завершен успешно!" -ForegroundColor Green
Write-Host "💡 После деплоя проверяйте адреса контрактов в scripts/deploy.js"
Write-Host "💡 Для взаимодействия используйте npx hardhat console --network <network_name>"
Что нужно для Goerli (или других сетей):
Создай файл
.envв корне проекта:
PRIVATE_KEY="0xТВОЙ_ПРИВАТНЫЙ_КЛЮЧ"
GOERLI_URL="https://goerli.infura.io/v3/ВАШ_PROJECT_ID"
Установи dotenv:
npm install dotenv
В
scripts/deploy.jsподключи:
require("dotenv").config();
Настрой Hardhat config для Goerli:
import "@nomicfoundation/hardhat-toolbox";
import "dotenv/config";
export default {
solidity: "0.8.20",
networks: {
goerli: {
url: process.env.GOERLI_URL,
accounts: [process.env.PRIVATE_KEY],
},
},
};
Отлично! Вот продвинутая версия скрипта PowerShell для твоего проекта D:\DAO_token. Она учитывает:
Проверку Node.js (совместимость с Hardhat ≥22.10.0)
Приведение проекта к ESM (
"type": "module")Удаление старых зависимостей
Установку всех нужных плагинов и библиотек с корректными версиями
Скачивание последней стабильной версии OpenZeppelin
Компиляцию контрактов с выводом логов в отдельный файл
compile-log.txt
Сохрани этот код как setup-and-compile-advanced.ps1:
# -------------------------------
# Advanced setup and compile script
# -------------------------------
# Переходим в папку проекта
cd "D:\DAO_token"
# Проверка Node.js
$nodeVersion = node -v
Write-Host "Detected Node.js version: $nodeVersion"
if ([version]$nodeVersion.TrimStart('v') -lt [version]"22.10.0") {
Write-Warning "Hardhat рекомендует Node.js >= 22.10.0. Пожалуйста, обновите Node.js."
}
# Установка ESM типа проекта
Write-Host "Setting project type to module..."
npm pkg set type=module
# Удаляем старые node_modules и lock-файлы
Write-Host "Removing old dependencies..."
Remove-Item -Recurse -Force node_modules, package-lock.json -ErrorAction SilentlyContinue
# Удаляем старые версии Hardhat и плагинов
Write-Host "Uninstalling old Hardhat packages..."
npm uninstall hardhat @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-verify @nomicfoundation/hardhat-ignition-ethers @nomicfoundation/hardhat-network-helpers --legacy-peer-deps
# Устанавливаем все необходимые зависимости
Write-Host "Installing required packages..."
npm install --save-dev `
hardhat@3.0.5 `
@nomicfoundation/hardhat-toolbox@6.1.0 `
@nomicfoundation/hardhat-verify@3.0.2 `
@nomicfoundation/hardhat-ignition-ethers@3.0.3 `
@nomicfoundation/hardhat-network-helpers@3.0.0 `
ethers `
chai `
@openzeppelin/contracts@latest `
--legacy-peer-deps
# Проверяем версию Hardhat
Write-Host "Checking Hardhat version..."
npx hardhat --version
# Компиляция контрактов с логированием
Write-Host "Compiling contracts..."
npx hardhat compile 2>&1 | Tee-Object -FilePath compile-log.txt
Write-Host "✅ Setup and compilation finished. See compile-log.txt for details."
💡 Запуск скрипта:
PowerShell от имени администратора
Разрешаем выполнение скриптов для текущего сеанса:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Запускаем скрипт:
.\setup-and-compile-advanced.ps1
Комментарии
Отправить комментарий