рабочий проект 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 from contracts/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 (или других сетей):

  1. Создай файл .env в корне проекта:

PRIVATE_KEY="0xТВОЙ_ПРИВАТНЫЙ_КЛЮЧ"
GOERLI_URL="https://goerli.infura.io/v3/ВАШ_PROJECT_ID"
  1. Установи dotenv:

npm install dotenv
  1. В scripts/deploy.js подключи:

require("dotenv").config();
  1. Настрой 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."

💡 Запуск скрипта:

  1. PowerShell от имени администратора

  2. Разрешаем выполнение скриптов для текущего сеанса:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
  1. Запускаем скрипт:

.\setup-and-compile-advanced.ps1


Комментарии

Популярные сообщения из этого блога

как приготовить щелочной электролит. Сколько нужно добавить щелочи в воду чтобы получить электролит

Diagbox и Lexia/PP2000 скачать и установить

Где находится папка данных для Bitcoin-Qt? Куда качает bitcoin core? Где я могу найти blockchain, wallet.dat