OrbitDB и IPFS: создание децентрализованного приложения с базой данных на Node.js
Разработка децентрализованных приложений (dApp) часто требует использования распределённых технологий хранения данных. IPFS (InterPlanetary File System) и OrbitDB - популярный стек для создания peer-to-peer баз данных. Однако настройка этой связки может вызывать трудности, особенно у новичков. В этой статье мы разберём типичные ошибки, возникающие при попытке подключить IPFS и OrbitDB в Node.js, и предложим пошаговое решение.
Почему возникает ошибка require('ipfs')?
Ошибка Cannot find module 'ipfs' при использовании const IPFS = require('ipfs') чаще всего связана с неправильной установкой зависимостей или устаревшей версией модуля. Начиная с версии 0.55.0, IPFS перешёл на ESM-модули, и классический CommonJS-синтаксис require() перестал работать. Вместо этого нужно использовать динамический импорт.
Как правильно установить и импортировать IPFS и OrbitDB
Для корректной работы выполните следующие шаги:
1. Инициализация проекта и установка зависимостей
- Создайте директорию проекта и выполните
npm init -y. - Установите IPFS:
npm install ipfs@0.63.7(используйте стабильную версию, совместимую с CommonJS). - Установите OrbitDB:
npm install orbit-db@0.26.3. - Дополнительно установите
@chainsafe/libp2p-gossipsubиlibp2pдля работы сети.
2. Импорт модулей в коде
Используйте синтаксис async/await и динамический импорт:
const IPFS = await import('ipfs');
const OrbitDB = await import('orbit-db');
const ipfs = await IPFS.create();
const orbitdb = await OrbitDB.createInstance(ipfs);
const db = await orbitdb.keyvalue('my-db');
await db.put('key', 'value');
console.log(await db.get('key'));
Типичные ошибки и их решения
Ошибка: require не распознаёт модуль
Если вы работаете в среде, где CommonJS не поддерживается, переключитесь на ES-модули. Добавьте в package.json строку "type": "module" и используйте import вместо require.
Ошибка: IPFS.create() не является функцией
Убедитесь, что вы установили совместимую версию IPFS. Рекомендуется версия 0.63.7, так как более новые версии (0.64+) требуют дополнительных конфигураций libp2p.
Ошибка: OrbitDB не может подключиться к IPFS
Проверьте, что IPFS-узел запущен и доступен. Иногда помогает настройка ipfsOptions в конструкторе OrbitDB, например, указание порта или репозитория.
Как создать простую децентрализованную базу данных
Для минимального рабочего примера используйте Key-Value Store:
import { create } from 'ipfs-core';
import OrbitDB from 'orbit-db';
const ipfs = await create();
const orbitdb = await OrbitDB.createInstance(ipfs);
const db = await orbitdb.keyvalue('my-first-db');
await db.put('message', 'Hello, decentralized world!');
console.log(await db.get('message'));
Этот код создаёт запись в распределённой базе данных, которая автоматически синхронизируется между узлами.
Советы по отладке и дальнейшей разработке
- Всегда проверяйте версии модулей в
package.json- используйте фиксированные версии вместо последних. - Включайте логирование:
process.env.DEBUG = 'orbit*'для отслеживания событий OrbitDB. - Для курсовой работы можно использовать IPFS Companion (браузерное расширение) для визуализации данных.
Следуя этим рекомендациям, вы сможете избежать распространённых ошибок и сосредоточиться на функциональности вашего децентрализованного приложения.