ваше сообщение коммита
This commit is contained in:
291
docs/DLE_DEPLOY_GUIDE.md
Normal file
291
docs/DLE_DEPLOY_GUIDE.md
Normal file
@@ -0,0 +1,291 @@
|
||||
# Руководство по деплою DLE v2
|
||||
|
||||
## Обзор
|
||||
|
||||
DLE v2 (Digital Legal Entity) - это система для создания цифровых юридических лиц с мульти-чейн поддержкой. Основная особенность - использование CREATE2 для обеспечения одинакового адреса смарт-контракта во всех поддерживаемых сетях.
|
||||
|
||||
## Архитектура
|
||||
|
||||
### Компоненты системы
|
||||
|
||||
1. **DLE.sol** - Основной смарт-контракт с ERC-20 токенами управления
|
||||
2. **FactoryDeployer.sol** - Фабрика для детерминистического деплоя через CREATE2
|
||||
3. **Модули** - Дополнительная функциональность (Treasury, Timelock, etc.)
|
||||
|
||||
### Мульти-чейн поддержка
|
||||
|
||||
- **CREATE2** - Одинаковый адрес во всех EVM-совместимых сетях
|
||||
- **Single-Chain Governance** - Голосование происходит в одной сети
|
||||
- **Multi-Chain Execution** - Исполнение в целевых сетях по подписям
|
||||
|
||||
## Процесс деплоя
|
||||
|
||||
### 1. Подготовка
|
||||
|
||||
1. Убедитесь, что у вас есть:
|
||||
- Приватный ключ с достаточным балансом в выбранных сетях
|
||||
- RPC URLs для всех целевых сетей
|
||||
- API ключ Etherscan (опционально, для верификации)
|
||||
|
||||
2. Настройте RPC провайдеры в веб-интерфейсе:
|
||||
- Откройте страницу настроек: `http://localhost:5173/settings/security`
|
||||
- Перейдите в раздел "RPC Провайдеры"
|
||||
- Добавьте RPC URLs для нужных сетей:
|
||||
- **Ethereum Mainnet**: Chain ID 1
|
||||
- **Polygon**: Chain ID 137
|
||||
- **BSC**: Chain ID 56
|
||||
- **Arbitrum**: Chain ID 42161
|
||||
- **Sepolia Testnet**: Chain ID 11155111
|
||||
- И другие нужные сети
|
||||
|
||||
3. Приватные ключи вводятся непосредственно в форме деплоя для безопасности
|
||||
|
||||
### 2. Деплой через веб-интерфейс
|
||||
|
||||
1. Откройте страницу: `http://localhost:5173/settings/dle-v2-deploy`
|
||||
|
||||
2. Заполните форму:
|
||||
- **Основная информация**: Название, символ токена
|
||||
- **Юридическая информация**: Страна, ОКВЭД, адрес
|
||||
- **Партнеры**: Адреса и доли токенов
|
||||
- **Сети**: Выберите целевые блокчейн-сети
|
||||
- **Приватный ключ**: Для деплоя контрактов
|
||||
|
||||
3. Нажмите "Развернуть DLE"
|
||||
|
||||
### 3. Процесс деплоя
|
||||
|
||||
Система автоматически:
|
||||
|
||||
1. **Проверяет балансы** во всех выбранных сетях
|
||||
2. **Компилирует контракты** через Hardhat
|
||||
3. **Проверяет Factory адреса** в базе данных
|
||||
4. **Деплоит FactoryDeployer** (если не найден) с одинаковым адресом
|
||||
5. **Сохраняет Factory адреса** в базу данных для переиспользования
|
||||
6. **Создает CREATE2 salt** на основе параметров DLE
|
||||
7. **Деплоит DLE** через FactoryDeployer с одинаковым адресом
|
||||
8. **Деплоит базовые модули** (Treasury, Timelock, Reader) в каждой сети
|
||||
9. **Инициализирует модули** в DLE контракте
|
||||
10. **Верифицирует контракты** в Etherscan (опционально)
|
||||
|
||||
### 4. Результат
|
||||
|
||||
После успешного деплоя вы получите:
|
||||
|
||||
- **Одинаковый адрес DLE** во всех выбранных сетях
|
||||
- **Одинаковый адрес Factory** во всех выбранных сетях
|
||||
- **Базовые модули** (Treasury, Timelock, Reader) в каждой сети
|
||||
- **Инициализированные модули** в DLE контракте
|
||||
- **ERC-20 токены управления** распределенные между партнерами
|
||||
- **Настроенный кворум** для принятия решений
|
||||
- **Поддержку мульти-чейн операций**
|
||||
|
||||
### 5. Управление Factory адресами
|
||||
|
||||
Система автоматически управляет Factory адресами:
|
||||
|
||||
#### API Endpoints:
|
||||
- `GET /api/factory` - Получить все Factory адреса
|
||||
- `GET /api/factory/:chainId` - Получить Factory адрес для сети
|
||||
- `POST /api/factory` - Сохранить Factory адрес
|
||||
- `POST /api/factory/bulk` - Сохранить адреса для нескольких сетей
|
||||
- `DELETE /api/factory/:chainId` - Удалить Factory адрес
|
||||
- `POST /api/factory/check` - Проверить наличие адресов
|
||||
|
||||
#### Автоматическое управление:
|
||||
- **Кэширование** - Factory адреса сохраняются в базе данных
|
||||
- **Переиспользование** - Существующие Factory используются повторно
|
||||
- **Валидация** - Проверка существования Factory в блокчейне
|
||||
- **Автодеплой** - Новые Factory деплоятся при необходимости
|
||||
|
||||
### 6. Проверка одинаковости адресов
|
||||
|
||||
Система автоматически проверяет, что все адреса одинаковые:
|
||||
|
||||
```javascript
|
||||
// Проверка адресов DLE
|
||||
const addresses = results.filter(r => r.success).map(r => r.address);
|
||||
const uniqueAddresses = [...new Set(addresses)];
|
||||
|
||||
if (uniqueAddresses.length === 1) {
|
||||
console.log("✅ Все адреса DLE одинаковые:", uniqueAddresses[0]);
|
||||
} else {
|
||||
throw new Error("CREATE2 не обеспечил одинаковые адреса");
|
||||
}
|
||||
```
|
||||
|
||||
Если адреса не совпадают, это указывает на проблему с:
|
||||
- Разными Factory адресами в сетях
|
||||
- Разными salt значениями
|
||||
- Разными bytecode контрактов
|
||||
|
||||
## Технические детали
|
||||
|
||||
### База данных Factory адресов
|
||||
|
||||
Система использует таблицу `factory_addresses` для хранения адресов:
|
||||
|
||||
```sql
|
||||
CREATE TABLE factory_addresses (
|
||||
id SERIAL PRIMARY KEY,
|
||||
chain_id INTEGER NOT NULL UNIQUE,
|
||||
factory_address VARCHAR(42) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
```
|
||||
|
||||
### CREATE2 Механизм
|
||||
|
||||
Система использует двухуровневый CREATE2 для обеспечения одинаковых адресов:
|
||||
|
||||
#### 1. Factory Deployer
|
||||
```solidity
|
||||
// Предсказуемый адрес Factory через CREATE
|
||||
address factoryAddress = getCreateAddress(
|
||||
from: deployerAddress,
|
||||
nonce: deployerNonce
|
||||
);
|
||||
```
|
||||
|
||||
#### 2. DLE Contract
|
||||
```solidity
|
||||
// Вычисление адреса DLE через CREATE2
|
||||
address predictedAddress = factoryDeployer.computeAddress(
|
||||
salt,
|
||||
keccak256(creationCode)
|
||||
);
|
||||
|
||||
// Деплой DLE с одинаковым адресом
|
||||
factoryDeployer.deploy(salt, creationCode);
|
||||
```
|
||||
|
||||
#### Ключевые принципы:
|
||||
- **Factory Deployer** деплоится с одинаковым адресом во всех сетях
|
||||
- **DLE Contract** деплоится через Factory с одинаковым salt
|
||||
- **Результат**: Одинаковый адрес DLE во всех EVM-совместимых сетях
|
||||
|
||||
### Структура DLE
|
||||
|
||||
```solidity
|
||||
contract DLE is ERC20, ERC20Permit, ERC20Votes, ReentrancyGuard {
|
||||
// Основная информация
|
||||
DLEInfo public dleInfo;
|
||||
|
||||
// Настройки управления
|
||||
uint256 public quorumPercentage;
|
||||
|
||||
// Мульти-чейн поддержка
|
||||
uint256[] public supportedChainIds;
|
||||
uint256 public governanceChainId;
|
||||
|
||||
// Система предложений
|
||||
mapping(uint256 => Proposal) public proposals;
|
||||
}
|
||||
```
|
||||
|
||||
### Базовые модули (автоматически деплоятся)
|
||||
|
||||
При деплое DLE автоматически развертываются и инициализируются:
|
||||
|
||||
- **TreasuryModule** - Управление финансами, депозиты, выводы, дивиденды
|
||||
- **TimelockModule** - Задержки исполнения критических операций
|
||||
- **DLEReader** - API для чтения данных DLE
|
||||
|
||||
### Дополнительные модули (через голосование)
|
||||
|
||||
DLE поддерживает модульную архитектуру:
|
||||
|
||||
- **CommunicationModule** - Внешние коммуникации
|
||||
- **BurnModule** - Сжигание токенов
|
||||
- **MintModule** - Выпуск новых токенов
|
||||
- **OracleModule** - Внешние данные
|
||||
- **CustomModule** - Пользовательские модули
|
||||
|
||||
## Управление DLE
|
||||
|
||||
### Создание предложений
|
||||
|
||||
```solidity
|
||||
// Создать предложение
|
||||
uint256 proposalId = dle.createProposal(
|
||||
"Описание предложения",
|
||||
governanceChainId,
|
||||
targetChains,
|
||||
timelockHours,
|
||||
operationCalldata
|
||||
);
|
||||
```
|
||||
|
||||
### Голосование
|
||||
|
||||
```solidity
|
||||
// Голосовать за предложение
|
||||
dle.vote(proposalId, true); // За
|
||||
dle.vote(proposalId, false); // Против
|
||||
```
|
||||
|
||||
### Исполнение
|
||||
|
||||
```solidity
|
||||
// Исполнить предложение
|
||||
dle.executeProposalBySignatures(proposalId, signatures);
|
||||
```
|
||||
|
||||
## Безопасность
|
||||
|
||||
### Ключевые принципы
|
||||
|
||||
1. **Только токен-холдеры** участвуют в управлении
|
||||
2. **Прямые переводы токенов заблокированы**
|
||||
3. **Все операции через кворум**
|
||||
4. **CREATE2 обеспечивает детерминистические адреса**
|
||||
5. **EIP-712 подписи для мульти-чейн исполнения**
|
||||
|
||||
### Проверки
|
||||
|
||||
- Валидация приватных ключей
|
||||
- Проверка балансов перед деплоем
|
||||
- Верификация CREATE2 адресов
|
||||
- Контроль кворума при голосовании
|
||||
|
||||
## Устранение неполадок
|
||||
|
||||
### Частые проблемы
|
||||
|
||||
1. **Недостаточно средств**
|
||||
- Проверьте балансы во всех сетях
|
||||
- Убедитесь в правильности RPC URLs в настройках
|
||||
|
||||
2. **Ошибки компиляции**
|
||||
- Проверьте версию Solidity (0.8.20)
|
||||
- Убедитесь в корректности импортов OpenZeppelin
|
||||
|
||||
3. **Разные адреса в сетях**
|
||||
- Проверьте, что Factory контракты имеют одинаковые адреса
|
||||
- Проверьте CREATE2 salt для DLE
|
||||
- Убедитесь в одинаковом bytecode контрактов
|
||||
- Проверьте nonce кошелька деплоера
|
||||
|
||||
4. **Ошибки верификации**
|
||||
- Проверьте API ключ Etherscan в форме деплоя
|
||||
- Убедитесь в корректности constructor arguments
|
||||
|
||||
5. **RPC URL не найден**
|
||||
- Проверьте настройки RPC провайдеров в `/settings/security`
|
||||
- Убедитесь, что Chain ID указан правильно
|
||||
- Протестируйте RPC URL через кнопку "Тест" в настройках
|
||||
|
||||
### Логи
|
||||
|
||||
Логи деплоя доступны в:
|
||||
- Backend: `backend/logs/`
|
||||
- Hardhat: `backend/artifacts/`
|
||||
- Результаты: `backend/contracts-data/dles/`
|
||||
|
||||
## Поддержка
|
||||
|
||||
Для получения поддержки:
|
||||
- Email: info@hb3-accelerator.com
|
||||
- Website: https://hb3-accelerator.com
|
||||
- GitHub: https://github.com/HB3-ACCELERATOR
|
||||
Reference in New Issue
Block a user