Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
6d02e30
fix(snapshot): detect and recover validator vote snapshot inconsisten…
On1x May 21, 2026
9cd2143
docs(build): remove all references to low-memory node build flag and …
On1x May 21, 2026
74ff904
chore(config): remove deprecated mongo config files
On1x May 21, 2026
fd8c678
fix(network): replace ilog with dlog for peer connection logging
On1x May 21, 2026
40cd17f
fix(webserver): add CORS headers and handle preflight OPTIONS requests
On1x May 21, 2026
5ec792a
fix(network): prevent log spamming during peer disconnect
On1x May 22, 2026
35aef46
fix(network): prevent deadlock by closing socket before cancelling re…
On1x May 22, 2026
4fc71ec
docs(introduction): add community symbol and display conventions
On1x May 22, 2026
3e34469
chain: clear currently_syncing after auto-recovery completes
On1x May 23, 2026
f5d0d46
fix(snapshot): defer wake-up until block strictly after validator slot
On1x May 23, 2026
f313266
fix: show correct next scheduled validator in missed block log
On1x May 25, 2026
bf42081
fix(auto-recovery): reset recovery_in_progress flag and prevent SYNC/…
On1x May 25, 2026
a5d8e61
Add diagnostic logs to database::open() startup path
On1x May 25, 2026
1a2d888
fix(memory-order): upgrade currently_syncing atomics to release/acquire
On1x May 25, 2026
6c6d7a4
Add crash detection for undo_all() using marker file
On1x May 25, 2026
3af3eba
docs: remove CORS from nginx examples
On1x May 25, 2026
f4ae63e
fix(chain): make shared memory auto-grow (inc-shared-file-size) safer
On1x May 27, 2026
be747e0
update chainbase
On1x May 27, 2026
602e3f3
add json api spec for plugins and json rpc methods
On1x May 27, 2026
44cd2eb
update info about account_history plugin in docs + fix purge
On1x May 28, 2026
ee85cb3
fix: disconnect signal handlers in plugin_shutdown() across 6 plugins
On1x May 28, 2026
e162c93
update docker log rotation recomendations
On1x May 28, 2026
21d38d9
add try-catch sections to limit log spam
On1x May 28, 2026
cfc5dbf
fix: remove duplicate history-count-blocks option registration in acc…
On1x May 28, 2026
db07bd5
fix: prevent double-resize race corrupting shared memory segment
On1x May 28, 2026
80e2884
fix: clear soft-bans on auto-recovery to allow majority fork reconnect
On1x May 28, 2026
f9de06e
fix: start gap fill from LIB when minority fork detected to trigger f…
On1x May 28, 2026
fd99ad3
fix: replace dangling dgp ref with guarded bool copy in maybe_validat…
On1x May 28, 2026
da03b66
fix(chain): detect and handle missing validator account corruption
On1x May 30, 2026
5e5c2a4
fix(chain): add detailed logging during shared memory resize operations
On1x May 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,353 changes: 1,353 additions & 0 deletions .qoder/docs/jsonrpc-api-spec.json

Large diffs are not rendered by default.

9 changes: 0 additions & 9 deletions @l10n/ru/docs/development/building.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,8 @@ chmod +x build-linux.sh

```bash
./build-linux.sh # Release-сборка (по умолчанию)
./build-linux.sh -l # LOW_MEMORY_NODE (узлы-валидаторы)
./build-linux.sh -n # Testnet-сборка
./build-linux.sh -t Debug -j4 # Debug-сборка с 4 параллельными задачами
./build-linux.sh --skip-deps # Пропустить установку зависимостей
./build-linux.sh --install # Установить в систему после сборки

# Пользовательские пути к зависимостям
Expand All @@ -54,7 +52,6 @@ chmod +x build-mac.sh
**Параметры:**

```bash
./build-mac.sh -l # Low-memory узел
./build-mac.sh -n # Testnet
./build-mac.sh --skip-deps # Пропустить установки Homebrew
./build-mac.sh --boost-root /opt/boost_1_74_0
Expand All @@ -77,7 +74,6 @@ build-mingw.bat
| Переменная | По умолчанию | Описание |
|-----------|-------------|---------|
| `VIZ_BUILD_TYPE` | Release | Release или Debug |
| `VIZ_LOW_MEMORY` | OFF | Включить low-memory узел |
| `VIZ_BUILD_TESTNET` | OFF | Testnet-сборка |
| `VIZ_FULL_STATIC` | OFF | Полностью статический бинарник |
| `VIZ_CMAKE_EXTRA` | — | Дополнительные флаги CMake |
Expand All @@ -100,7 +96,6 @@ build-msvc.bat
|-----------|-------------|---------|
| `VIZ_VS_VERSION` | "Visual Studio 17 2022" | Генератор Visual Studio |
| `VIZ_BUILD_TYPE` | Release | Тип сборки |
| `VIZ_LOW_MEMORY` | OFF | Low-memory узел |
| `VIZ_BUILD_TESTNET` | OFF | Testnet-сборка |

**Требования:** Visual Studio 2019+ с нагрузкой "Desktop development with C++", CMake 3.16+.
Expand All @@ -125,7 +120,6 @@ build-msvc.bat
| Параметр | По умолчанию | Описание |
|---------|-------------|---------|
| `BUILD_TESTNET` | OFF | Сборка для testnet |
| `LOW_MEMORY_NODE` | OFF | Исключить неконсенсусные данные (уменьшает RAM) |
| `CHAINBASE_CHECK_LOCKING` | OFF | Включить проверку блокировок (только для разработки) |
| `BUILD_SHARED_LIBRARIES` | OFF | Собирать разделяемые библиотеки |
| `USE_PCH` | OFF | Включить предкомпилированные заголовки (ускоряет пересборку) |
Expand All @@ -140,9 +134,6 @@ build-msvc.bat
# Release-сборка
python3 programs/build_helpers/configure_build.py --release --src ../..

# Debug с low-memory
python3 programs/build_helpers/configure_build.py --debug --low-memory

# Кросс-компиляция для Windows с MinGW
python3 programs/build_helpers/configure_build.py --win --release

Expand Down
9 changes: 0 additions & 9 deletions @l10n/ru/docs/node/building.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,6 @@ chmod +x build-linux.sh
### Основные флаги сборки

```bash
# Низкопамятный узел (для валидаторов/сид-узлов — без плагинов индексирования истории)
./build-linux.sh -l

# Сборка для тестнета
./build-linux.sh -n

Expand All @@ -58,9 +55,6 @@ chmod +x build-linux.sh
# Параллельные задания
./build-linux.sh -j 8

# Пропустить установку зависимостей (уже установлены)
./build-linux.sh --skip-deps

# Пользовательские пути к Boost / OpenSSL
./build-linux.sh --boost-root /opt/boost_1_74_0 --openssl-root /opt/openssl
```
Expand Down Expand Up @@ -99,7 +93,6 @@ build-mingw.bat
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `VIZ_BUILD_TYPE` | `Release` | `Release` или `Debug` |
| `VIZ_LOW_MEMORY` | `OFF` | `ON` для низкопамятного узла |
| `VIZ_BUILD_TESTNET` | `OFF` | `ON` для сборки тестнета |
| `VIZ_FULL_STATIC` | `OFF` | `ON` для полностью статического бинарного файла |

Expand All @@ -124,7 +117,6 @@ build-msvc.bat
| Опция | По умолчанию | Описание |
|-------|--------------|----------|
| `BUILD_TESTNET` | `OFF` | Включить код для тестнета |
| `LOW_MEMORY_NODE` | `OFF` | Исключить плагины истории/индексирования |
| `CHAINBASE_CHECK_LOCKING` | `OFF` | Включить проверки блокировок (debug) |
| `BUILD_SHARED_LIBRARIES` | `OFF` | Собрать разделяемые библиотеки |
| `USE_PCH` | `OFF` | Включить предкомпилированные заголовки (ускоряет пересборку) |
Expand All @@ -134,7 +126,6 @@ build-msvc.bat
```bash
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release \
-DLOW_MEMORY_NODE=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local \
..
make -j$(nproc)
Expand Down
62 changes: 58 additions & 4 deletions @l10n/ru/docs/node/docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,10 +129,10 @@ docker build \

### CMake-флаги для каждого образа

| Образ | `LOW_MEMORY_NODE` | `BUILD_TESTNET` |
|-------|:-----------------:|:---------------:|
| production | OFF | OFF |
| testnet | OFF | ON |
| Образ | `BUILD_TESTNET` |
|-------|:---------------:|
| production | OFF |
| testnet | ON |

---

Expand Down Expand Up @@ -167,6 +167,59 @@ shared-file-size = 4G

---

## Ротация логов

vizd пишет весь вывод в stdout/stderr. Дефолтный драйвер `json-file` в Docker **не имеет ограничений по размеру** — цикл краша или буря ошибок может заполнить диск хоста за считанные минуты (в продакшне наблюдалось 35 ГБ+).

Вместо этого используйте драйвер `local`. Он хранит логи в компактном бинарном формате и автоматически ротирует файлы.

**Глобальная конфигурация (рекомендуется — защищает все контейнеры на хосте):**

```json
// /etc/docker/daemon.json
{
"log-driver": "local",
"log-opts": {
"max-size": "100m",
"max-file": "5"
}
}
```

Применить:

```bash
sudo systemctl restart docker
```

**Для конкретного контейнера (`docker run`):**

```bash
docker run -d \
--log-driver=local \
--log-opt max-size=100m \
--log-opt max-file=5 \
--name vizd \
vizblockchain/vizd:latest
```

**Для конкретного контейнера (docker-compose):**

```yaml
services:
vizd:
image: vizblockchain/vizd:latest
logging:
driver: local
options:
max-size: "100m"
max-file: "5"
```

> При `max-file: 5` и `max-size: 100m` Docker хранит не более 500 МБ логов на контейнер и автоматически удаляет старейший файл при ротации.

---

## Устранение неполадок

| Симптом | Причина | Решение |
Expand All @@ -176,3 +229,4 @@ shared-file-size = 4G
| Нет пиров | Файрвол блокирует порт 2001 | Откройте порт 2001 TCP входящий |
| Медленная синхронизация | Снимок не загружен | Предоставьте снимок в томе перед первым запуском |
| `Permission denied` на `/var/lib/vizd` | Несоответствие владельца тома | `chown -R 1000:1000 /data/vizd` |
| Диск заполняется логами Docker | Драйвер `json-file` не имеет ограничения по размеру | Настройте драйвер `local` с `max-size`/`max-file` — см. [Ротация логов](#ротация-логов) |
3 changes: 1 addition & 2 deletions @l10n/ru/docs/node/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ shared-file-size = 4G

# Плагины (полный узел)
plugin = chain p2p webserver json_rpc database_api network_broadcast_api
plugin = social_network tags follow account_history
plugin = account_history
```

Для узла-валидатора см. [Узел-валидатор](./validator-node.md).
Expand Down Expand Up @@ -172,7 +172,6 @@ curl -s -X POST http://localhost:8090 \
| Полный узел | `config.ini` | Все плагины, публичные RPC-эндпоинты |
| Валидатор | `config_witness.ini` | Производство блоков, RPC только на localhost |
| Тестовая сеть | `config_testnet.ini` | Разработка и тестирование |
| Малая память | `config.ini` + флаг сборки `LOW_MEMORY_NODE` | Только консенсус, без индексов истории |

---

Expand Down
18 changes: 18 additions & 0 deletions @l10n/ru/docs/plugins/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,24 @@ DLT P2P-сетевое взаимодействие — распростране
- `track-account-range` — диапазон имён аккаунтов для индексирования (по умолчанию: все аккаунты)
- `history-count-blocks` — сохранять историю за N блоков

> **Зависимость:** `account_history` **требует** `operation_history` как родительский плагин
> (`APPBASE_PLUGIN_REQUIRES`). Нода не запустится при отсутствии `operation_history`.
> `account_history` хранит ссылки `operation_id_type` (внешние ключи) на строки `operation_object`,
> которыми управляет `operation_history`; при запросе `get_account_history` разрешает их через
> `database.get(itr->op)`.
>
> **Всегда включать оба плагина вместе:**
> ```ini
> plugin = operation_history
> plugin = account_history
> ```
>
> **Координация очистки:** Оба плагина читают один и тот же ключ `history-count-blocks` из
> `config.ini` — разделения по плагинам нет. Одно значение применяется к обоим одновременно.
> Внутри `account_history` дополнительно вызывает `operation_history::get_min_keep_block()`
> при каждом блоке как защитную проверку, гарантируя, что его записи никогда не будут ссылаться
> на уже удалённый `operation_object`.

---

### `operation_history`
Expand Down
16 changes: 0 additions & 16 deletions @l10n/ru/docs/plugins/webserver.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,22 +137,6 @@ server {
}

location / {
# CORS — разрешить любой источник (публичный API)
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, PATCH, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;

if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, PATCH, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization' always;
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}

proxy_pass http://127.0.0.1:8090;
proxy_http_version 1.1;

Expand Down
34 changes: 24 additions & 10 deletions @l10n/ru/docs/storage/shared-memory.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,10 +92,21 @@ skip-virtual-ops = true

База данных автоматически увеличивается, когда свободное место падает ниже `min-free-shared-file-size`. При каждом изменении размера:

1. Приостанавливаются все операции (включая производство блоков и API-запросы).
2. Уничтожается текущее отображение памяти.
3. Файл увеличивается на `inc-shared-file-size`.
4. Файл заново отображается, пересчитываются все указатели индексов.
1. Записывается маркер сбоя `resize_in_progress`.
2. Все грязные страницы сбрасываются на диск (`flush()`).
3. Приостанавливаются все операции (включая производство блоков и API-запросы).
4. Уничтожается текущее отображение памяти.
5. Файл увеличивается на `inc-shared-file-size`.
6. Файл заново отображается, пересчитываются все указатели индексов.
7. Проверяется, что ключевые объекты (например, `dynamic_global_property_object`) пережили перераспределение.
8. Маркер сбоя удаляется.

### Механизмы безопасности

- **Сброс перед изменением размера:** Грязные страницы записываются на диск до уничтожения отображения, что гарантирует согласованность файла на диске в случае сбоя во время увеличения.
- **Маркер сбоя:** Файл `resize_in_progress` записывается перед деструктивным перераспределением и удаляется после успешного завершения. Если процесс аварийно завершается во время изменения размера, маркер сохраняется и запускает автоматическое восстановление при следующем запуске.
- **Проверка после изменения размера:** После перераспределения узел проверяет, что `max_memory()` соответствует ожидаемому размеру и что критические объекты (например, `dynamic_global_property_object`) не повреждены. Повреждение обнаруживается рано, а не приводит к запутанным сбоям позже.
- **Безопасность при bad_alloc:** Если разделяемая память исчерпана во время применения блока, сессия отмены безопасно отбрасывается (вместо попытки обречённой отмены, которая привела бы к краху процесса через `std::terminate`). Отложенное изменение размера планируется на следующий блок.

Выделяйте `shared-file-size` с запасом, чтобы минимизировать частоту изменений размера. Каждое изменение вызывает скачок задержки.

Expand All @@ -121,22 +132,25 @@ skip-virtual-ops = true
```
1. Открыть shared_memory.bin (увеличить, если shared-file-size больше)
2. Захватить эксклюзивную блокировку файла
3. Инициализировать индексы
4. Если отсутствует genesis → init_genesis()
5. Открыть block_log или dlt_block_log
6. undo_all() → откатиться к последнему необратимому блоку
7. Проверить совпадение head блока с block log
3. Проверить маркер сбоя resize_in_progress → запустить восстановление при обнаружении
4. Инициализировать индексы
5. Если отсутствует genesis → init_genesis()
6. Открыть block_log или dlt_block_log
7. undo_all() → откатиться к последнему необратимому блоку
8. Проверить совпадение head блока с block log
```

---

## Восстановление

| Симптом | Действие |
|---------|---------|
|---------|--------|
| `CRITICAL: validator X account object MISSING` | Повреждение — использовать `--replay-from-snapshot --snapshot-auto-latest` |
| `Could not modify object, uniqueness constraint violated` | Повреждение — использовать `--replay-from-snapshot --snapshot-auto-latest` |
| `Unable to acquire READ lock` | Конкуренция за блокировку — увеличить `read-wait-micro` / включить `single-write-thread` |
| `Shared memory corrupted: previous resize() crashed` | Прерванное изменение размера — использовать `--replay-from-snapshot --snapshot-auto-latest` |
| `dynamic_global_property_object missing after resize` | Повреждение после изменения размера — использовать `--replay-from-snapshot --snapshot-auto-latest` |
| Узел зацикливается при запуске | Повреждённый файл — `--replay-from-snapshot --snapshot-auto-latest` |

Варианты восстановления:
Expand Down
9 changes: 0 additions & 9 deletions @l10n/zh-CN/docs/development/building.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,8 @@ chmod +x build-linux.sh

```bash
./build-linux.sh # Release 构建(默认)
./build-linux.sh -l # LOW_MEMORY_NODE(验证者节点)
./build-linux.sh -n # Testnet 构建
./build-linux.sh -t Debug -j4 # Debug 构建,4 个并行任务
./build-linux.sh --skip-deps # 跳过依赖安装
./build-linux.sh --install # 构建后安装到系统

# 自定义依赖路径
Expand All @@ -54,7 +52,6 @@ chmod +x build-mac.sh
**选项:**

```bash
./build-mac.sh -l # 低内存节点
./build-mac.sh -n # Testnet
./build-mac.sh --skip-deps # 跳过 Homebrew 安装
./build-mac.sh --boost-root /opt/boost_1_74_0
Expand All @@ -77,7 +74,6 @@ build-mingw.bat
| 变量 | 默认值 | 描述 |
|------|--------|------|
| `VIZ_BUILD_TYPE` | Release | Release 或 Debug |
| `VIZ_LOW_MEMORY` | OFF | 启用低内存节点 |
| `VIZ_BUILD_TESTNET` | OFF | Testnet 构建 |
| `VIZ_FULL_STATIC` | OFF | 完全静态二进制文件 |
| `VIZ_CMAKE_EXTRA` | — | 附加 CMake 标志 |
Expand All @@ -100,7 +96,6 @@ build-msvc.bat
|------|--------|------|
| `VIZ_VS_VERSION` | "Visual Studio 17 2022" | Visual Studio 生成器 |
| `VIZ_BUILD_TYPE` | Release | 构建类型 |
| `VIZ_LOW_MEMORY` | OFF | 低内存节点 |
| `VIZ_BUILD_TESTNET` | OFF | Testnet 构建 |

**要求:** Visual Studio 2019+(带"Desktop development with C++"工作负载)、CMake 3.16+。
Expand All @@ -125,7 +120,6 @@ build-msvc.bat
| 选项 | 默认值 | 描述 |
|------|--------|------|
| `BUILD_TESTNET` | OFF | 为 testnet 构建 |
| `LOW_MEMORY_NODE` | OFF | 排除非共识数据(减少 RAM) |
| `CHAINBASE_CHECK_LOCKING` | OFF | 启用锁检查(仅用于开发) |
| `BUILD_SHARED_LIBRARIES` | OFF | 构建共享库 |
| `USE_PCH` | OFF | 启用预编译头文件(加速重新构建) |
Expand All @@ -140,9 +134,6 @@ build-msvc.bat
# Release 构建
python3 programs/build_helpers/configure_build.py --release --src ../..

# 带低内存的 Debug
python3 programs/build_helpers/configure_build.py --debug --low-memory

# 使用 MinGW 交叉编译 Windows 版本
python3 programs/build_helpers/configure_build.py --win --release

Expand Down
Loading
Loading