
IPFS & Content Addressing: Hệ Thống Lưu Trữ Phi Tập Trung Không Bị Xóa Mất
IPFS (InterPlanetary File System) là giao thức và mạng peer-to-peer dùng content addressing thay vì location addressing. Khi bạn yêu cầu file trên HTTP, server trả về nội dung tại URL — nếu server offline, file mất. IPFS yêu cầu nội dung qua CID (Content Identifier), tìm peer nào có CID đó và tải về. CID là hash SHA-256 của nội dung, nên cùng nội dung luôn cùng CID — bất biến, không thể sửa đổi, không thể xóa.

Content Addressing vs Location Addressing
HTTP dùng location addressing: https://server.com/path/file.txt. IPFS dùng content addressing: ipfs://QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco. CID là base32/ base58 encoded multihash (SHA-256 + codec). Ví dụ: QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco = SHA-256 của chuỗi “hello world” với codec dag-pb.
Ưu điểm:
- Deduplication tự động: cùng nội dung → cùng CID → lưu 1 lần trên mạng
- Tìm kiếm nhanh: DHT (Distributed Hash Table) ánh xạ CID → peer address
- Verifiable: CID xác minh tính toàn vẹn — thay đổi 1 bit thì CID khác hoàn toàn
Kiến Trúc IPFS: Merkle DAG & IPLD
IPFS tổ chức dữ liệu dưới dạng Merkle DAG (Directed Acyclic Graph). Mỗi node là một block dữ liệu, được hash (CID). Các block lớn được chia nhỏ, mỗi block có CID riêng. Cấu trúc này cho phép:
- Chunking: file lớn → các block 256KB, dùng rolling hash (Rabin fingerprinting) để chia tách nội dung tốt nhất
- DAG linking: block cha trỏ đến CID các block con — tạo cây Merkle
- UnixFS: layer trừu tượng hóa file/directory lên trên Merkle DAG
IPLD (InterPlanetary Linked Data) mở rộng Merkle DAG cho bất kỳ cấu trúc dữ liệu nào — từ JSON, CBOR, đến blockchain state. Ethereum, Filecoin, Polkadot đều dùng IPLD để index dữ liệu.

Gateway & Truy Cập IPFS
Để truy cập IPFS từ trình duyệt (HTTP), dùng gateway công khai:
https://ipfs.io/ipfs/https://cloudflare-ipfs.com/ipfs/https://dweb.link/ipfs/
Gateway sẽ tìm peer có CID, tải về, cache và trả về HTTP. Gateways hiện đại hỗ trợ Path Gateway và Subdomain Gateway (CID dưới subdomain).
Dùng IPFS trong ứng dụng
Thư viện phổ biến: js-ipfs (browser/Node), go-ipfs (CLI/daemon), Kubo (go-ipfs mới). Cài đặt Kubo, chạy ipfs daemon, API chạy tại localhost:5001.
# Add file
ipfs add photo.jpg
# Output: QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco
# Get file
ipfs get QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco
# Pin để giữ vĩnh viễn
ipfs pin add QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco
Pinning & Persistence
IPFS không tự lưu trữ vĩnh viễn — node chỉ cache khi bạn request. Để file luôn có sẵn, cần pinning. Các dịch vụ pinning chuyên nghiệp:
- Pinata: 1GB free, API S3-compatible
- web3.storage: tích hợp Filecoin, free tier lớn
- NFT.Storage: chuyên cho NFT metadata
Filecoin là layer động lực kinh tế cho IPFS — miner được trả FIL để lưu trữ dữ liệu dài hạn (storage deals). IPFS + Filecoin = lưu trữ phi tập trung có động lực kinh tế.
IPNS — Tên Miền Phi Tập Trung
IPNS (InterPlanetary Naming System) cho phép đưa tên có thể thay đổi trỏ đến CID mới. CID là bất biến — cùng nội dung luôn cùng CID. IPNS dùng public key (base36) làm tên, trỏ đến CID mới nhất. Ví dụ: /ipns/QmSoLSafmPCkSc3Cdxjf1MmVJPLm9gX6ojShNA1mJYNB2Y. Khi cập nhật content, bạn publish IPNS record mới trỏ đến CID mới.
Tuy nhiên, IPNS có nhược điểm: thời gian phản hồi chậm (do phải propagate qua toàn mạng DHT), và record hết hạn sau 12 giờ. DNSLink là giải pháp thay thế: dùng DNS _dnslink TXT record để trỏ tên miền về CID IPFS.
Use Case Thực Tế
NFT metadata: metadata JSON + hình ảnh upload lên IPFS, CID ghi trong smart contract. Không server nào có thể xóa hoặc sửa metadata sau khi mint. Đây là lý do tại sao ERC-721 và ERC-1155 tokens thường lưu metadata trên IPFS.
Website phi tập trung: host static site trên IPFS, trỏ domain qua DNSLink (_dnslink TXT record). Ví dụ: dnslink=/ipns/k51qzi5uqu5d.... Cập nhật site = publish IPNS mới.
Dữ liệu khoa học/backup: tập dữ liệu lớn (genomics, climate) chia sẻ qua IPFS — researcher nào cũng truy cập được mà không cần server trung tâm. Các dự án như Open Problems dùng IPFS để phân phối dataset machine learning.
Nội dung web bền vững: khi server gốc ngừng hoạt động, IPFS giữ nguyên nội dung thông qua các peer khác nhau. Dự án Archive.org đang thử nghiệm lưu trữ bản snapshot trên IPFS để nội dung không bao giờ bị mất.
IPFS thay đổi tư duy: dữ liệu không gắn liền với server, mà gắn liền với bản thân nội dung. Khi web chuyển sang Web3, content addressing sẽ là nền tảng cho việc lưu trữ, chia sẻ và xác minh dữ liệu không thể kiểm duyệt.
