Основные принципы децентрализованного хранения данных
Регуляторные претензии из-за AWS S3 bucket или постоянные «мы обновляем инфраструктуру» от централизованного провайдера — два явных сигнала. Пора пересмотреть подход к хранению данных. Децентрализованное хранение — это не идеология, а конкретные свойства: отсутствие единой точки отказа, верифицируемость через content addressing (CID) и возможность хранить данные без разрешения оператора. Как отмечалось в статье «IPFS - Content Addressed, Versioned, P2P File System» (Juan Benet, 2014): «content addressing обеспечивает неизменность и верифицируемость данных». Это базовый принцип, на котором строятся все современные DStorage-решения.
Сегодня под DStorage понимают три принципиально разных стека: IPFS + Filecoin, Arweave и Storj/Sia. Каждый подходит для своего класса задач. Разработка децентрализованной системы хранения данных — комплексная задача, требующая понимания как сетевых протоколов, так и экономики токенов. В этой статье разберём практические аспекты каждого решения, включая код, конфигурации и архитектурные компромиссы.
Как выбрать протокол: IPFS, Filecoin или Arweave?
IPFS + Filecoin: content addressing и экономика хранения
Для production систем нужен IPFS Cluster — координатор репликации поверх нескольких IPFS-нод. Минимальная конфигурация: 3 ноды, replication factor 2. Стоимость хранения 1 ГБ в месяц в таком кластере составляет около $0.001 за репликацию, что в 100 раз дешевле Amazon S3.
// Пример pinning через Cluster REST API type ClusterPinRequest struct { CID string `json:"cid"` ReplicationMin int `json:"replication-min"` ReplicationMax int `json:"replication-max"` Name string `json:"name"` Meta map[string]string `json:"meta"` } func PinToCluster(cid string, name string) error { req := ClusterPinRequest{ CID: cid, ReplicationMin: 2, ReplicationMax: 3, Name: name, } body, _ := json.Marshal(req) resp, err := http.Post( "http://cluster-api:9094/pins/" + cid, "application/json", bytes.NewReader(body), ) // ... return err } Filecoin Storage Deals реализуются через web3.storage, который делает hot IPFS pinning и холодный Filecoin deal автоматически.
import { Web3Storage } from 'web3.storage' const client = new Web3Storage({ token: process.env.W3S_TOKEN }) async function storeWithReplication(files: File[]): Promise<string> { const cid = await client.put(files, { wrapWithDirectory: false, onRootCidReady: (rootCid) => { console.log('Root CID:', rootCid) }, onStoredChunk: (size) => { console.log(`Uploaded chunk of ${size} bytes`) } }) return cid } Arweave: permanent storage с однократной оплатой
Arweave — другая модель: платишь один раз, данные хранятся «вечно» (endowment fund рассчитан на 200+ лет). Это принципиально меняет use cases. Arweave обеспечивает перманентное хранение в 200 раз дольше, чем Filecoin deal на 1 год, при сопоставимой цене за 1 ГБ. Стоимость записи 1 МБ в Arweave составляет $10 единоразово, что в долгосрочной перспективе выгоднее ежемесячной платы за IPFS pin.
Когда Arweave — правильный выбор
- Smart contract source code и ABI (верифицируемость навсегда)
- NFT-метаданные и медиа (избежать NFT rot)
- Юридические и нотариальные документы
- Протоколы управления и результаты голосований (DAO governance history)
Данные в Arweave — это transaction с data полем и тегами. Теги — ключ к индексации через GraphQL:
import Arweave from 'arweave' const arweave = Arweave.init({ host: 'arweave.net', port: 443, protocol: 'https' }) async function uploadDocument(data: Buffer, mimeType: string, metadata: Record<string, string>) { const tx = await arweave.createTransaction({ data }) tx.addTag('Content-Type', mimeType) tx.addTag('App-Name', 'YourDApp') tx.addTag('Version', '1.0.0') for (const [key, value] of Object.entries(metadata)) { tx.addTag(key, value) } await arweave.transactions.sign(tx, jwk) const response = await arweave.transactions.post(tx) return tx.id } Для мгновенного подтверждения используем Irys (бывший Bundlr) — layer 2 поверх Arweave.
import Irys from '@irys/sdk' const irys = new Irys({ url: 'https://node1.irys.xyz', token: 'ethereum', key: privateKey, }) const price = await irys.getPrice(data.length) console.log(`Cost: ${irys.utils.fromAtomic(price)} ETH`) const receipt = await irys.upload(data, { tags: [ { name: 'Content-Type', value: 'application/json' }, { name: 'Contract-Address', value: contractAddress }, ] }) Когда нужна гибридная архитектура?
В реальных системах редко используют только один протокол. Типичная архитектура для DApp с требованиями к производительности и постоянству:
| Компонент | Назначение | Задержка |
|---|---|---|
| IPFS Cluster | Горячее хранение с быстрым доступом | < 1 с |
| Arweave (через Irys) | Холодное перманентное хранение | 2 мин |
| PostgreSQL | Индекс CID/TXID и метаданных | < 10 мс |
| Протокол | Время подтверждения транзакции | Стоимость записи 1 МБ |
|---|---|---|
| IPFS (pin) | Секунды | $0.0001/мес репликация |
| Filecoin | ~1 час | $0.001 |
| Arweave (native) | ~2 мин | $10 (единоразово) |
| Irys | Мгновенно | $10 (единоразово) |
Сравните протоколы и выберите подходящий. Для получения консультации свяжитесь с нами.
Верификация целостности: content addressing — это верификация «из коробки» для IPFS: CID — это хэш содержимого. Для Arweave — через транзакционные доказательства.
Шифрование и контроль доступа
Децентрализованное хранение не означает публичное. Для чувствительных данных используем Lit Protocol для threshold encryption с on-chain условиями доступа:
import * as LitJsSdk from '@lit-protocol/lit-node-client' const accessControlConditions = [{ contractAddress: NFT_CONTRACT, standardContractType: 'ERC721', chain: 'ethereum', method: 'balanceOf', parameters: [':userAddress'], returnValueTest: { comparator: '>', value: '0' } }] const { ciphertext, dataToEncryptHash } = await LitJsSdk.encryptString( { accessControlConditions, dataToEncrypt: sensitiveData }, litNodeClient ) const decrypted = await LitJsSdk.decryptToString( { accessControlConditions, ciphertext, dataToEncryptHash, chain: 'ethereum' }, litNodeClient ) Как разработать децентрализованную систему хранения: пошаговая инструкция
- Анализ требований: объём данных, latency, необходимость перманентности, compliance.
- Выбор стека: IPFS+Filecoin для активных данных, Arweave для архивов.
- Проектирование архитектуры: гибридная схема с индексом в PostgreSQL.
- Настройка IPFS Cluster: 3 ноды, replication factor 2, мониторинг.
- Интеграция с Filecoin/Arweave: через web3.storage или Irys.
- Добавление шифрования: Lit Protocol для конфиденциальности.
- Тестирование: нагрузочное тестирование, проверка отказоустойчивости.
- Деплой и документация: CI/CD, мониторинг, runbook.
Что входит в разработку
- Архитектурный документ с обоснованием выбора протоколов
- Настройка IPFS Cluster (3+ ноды, репликация, мониторинг)
- Интеграция с Filecoin или Arweave (web3.storage / Irys)
- Система шифрования на основе Lit Protocol
- Тестирование (нагрузка, отказоустойчивость, безопасность)
- Документация API и инструкции для разработчиков
- Обучение команды (1 день)
- Поддержка 1 месяц после запуска
Наша команда имеет 8+ лет опыта в разработке децентрализованных систем и реализовала 50+ проектов на блокчейне. Свяжитесь с нами для оценки вашего проекта — рассчитаем стоимость и сроки. Закажите разработку сегодня и получите архитектурный документ бесплатно.







