Основні принципи децентралізованого зберігання даних
Регуляторні претензії через 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.
Детальніше про налаштування IPFS Cluster
Для мінімальної конфігурації потрібні 3 ноди з replication factor 2. Вартість зберігання 1 ГБ на місяць — близько $0.001. Моніторинг здійснюється через Prometheus та Grafana.// Приклад 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.
На практиці, для одного DApp з вимогами до швидкодії ми використали гібридну архітектуру: IPFS Cluster для активних даних (час доступу <1с) та Arweave через Irys для перманентного архіву (затримка 2 хв). Це дозволило поєднати швидкість і довговічність. Таким чином, ви можете зменшити витрати на зберігання до 70% порівняно з централізованими рішеннями.
Що входить у розробку
- Архітектурний документ з обґрунтуванням вибору протоколів
- Налаштування IPFS Cluster (3+ ноди, реплікація, моніторинг)
- Інтеграція з Filecoin або Arweave (web3.storage / Irys)
- Система шифрування на основі Lit Protocol
- Тестування (навантаження, відмовостійкість, безпека)
- Документація API та інструкції для розробників
- Навчання команди (1 день)
- Підтримка 1 місяць після запуску
Наша команда має 8+ років досвіду у розробці децентралізованих систем і реалізувала 50+ проєктів на блокчейні. Ми гарантуємо якість розробки та підтримку після запуску. Зв'яжіться з нами для оцінки вашого проєкту — розрахуємо вартість та терміни. Замовте розробку сьогодні та отримайте архітектурний документ безкоштовно. Готові реалізувати ваш проект під ключ за 2-12 тижнів? Пишіть нам — ми оцінимо його безкоштовно та запропонуємо оптимальне рішення.







