IPFS (InterPlanetary File System) là giao thức P2P để định địa chỉ và truyền tải file theo nội dung (content addressing), không phải theo vị trí server. File được xác định bằng CID — hash của nội dung — thay vì URL. Tuy nhiên IPFS không đảm bảo ai sẽ lưu file đó. Filecoin là lớp incentive kinh tế: Storage Provider được trả FIL để cam kết giữ dữ liệu, có thể xác minh on-chain bằng Proof of Spacetime. IPFS + Filecoin = giao thức định địa chỉ + đảm bảo kinh tế.
1Vấn đề mà IPFS sinh ra để giải quyết
Trước khi hiểu IPFS là gì, cần hiểu web hiện tại có vấn đề gì. Khi bạn truy cập https://example.com/image.jpg, địa chỉ này nói với browser: "đến server tại domain example.com, lấy file tại path /image.jpg". Đây là location-based addressing — bạn đang trỏ đến một vị trí cụ thể.
Vấn đề với location-based addressing:
- Link rot: Server tắt → URL hỏng → nội dung biến mất. Nghiên cứu của Harvard Law ước tính hơn 70% các link trong phán quyết tòa án Mỹ bị hỏng sau 10 năm.
- Không thể verify nội dung: Cùng một URL có thể trả về nội dung khác nhau tùy thời điểm — server có thể thay đổi file mà bạn không biết.
- Tập trung hóa: Một server bị tấn công, bị kiểm duyệt, hoặc đơn giản là hết tiền trả hosting → toàn bộ nội dung biến mất.
- Không hiệu quả: Nếu cùng một file tồn tại trên 1,000 server, mỗi lần download vẫn phải đến đúng server bạn request, dù server khác gần hơn.
Juan Benet, tác giả của IPFS, nhận ra rằng vấn đề gốc rễ là cách chúng ta đặt địa chỉ cho nội dung. Thay vì hỏi "nó ở đâu?", hãy hỏi "nó là gì?" — và đây là nền tảng của content-based addressing.
2Content Addressing — Triết lý cốt lõi của IPFS
IPFS sử dụng content addressing: địa chỉ của một file là hash của nội dung file đó, không phải vị trí lưu trữ. Địa chỉ này gọi là CID (Content Identifier).
- URL:
https://server.com/file.jpg - Trỏ đến vị trí cụ thể
- Server tắt → URL hỏng
- Không thể verify nội dung
- File thay đổi → URL vẫn giống nhau
- CID:
bafybeigdyrz... - Trỏ đến nội dung cụ thể
- File tồn tại ở bất kỳ node nào có nó
- CID verify nội dung cryptographically
- File thay đổi → CID thay đổi (bất biến)
CID hoạt động như thế nào?
CID là một chuỗi tự mô tả (self-describing) được tạo ra từ nội dung file. Cấu trúc của CID v1 (phiên bản hiện tại):
Vì CID là hash của nội dung, hai file có cùng nội dung sẽ có cùng CID, dù được upload bởi hai người khác nhau ở hai nơi khác nhau. Và bất kỳ node nào có file đó đều có thể phục vụ request cho CID đó — không cần biết file đang "ở đâu".
Merkle DAG — Cách IPFS xử lý file lớn
File lớn không được lưu dưới dạng một chunk duy nhất. IPFS chia file thành các block nhỏ (~256 KB mỗi block), hash từng block, rồi tổ chức chúng thành Merkle DAG (Directed Acyclic Graph). CID của file lớn thực chất là root CID của toàn bộ cây Merkle DAG. Lợi ích:
- Download song song từ nhiều node khác nhau
- Deduplication: Các file chia sẻ block giống nhau sẽ không lưu trùng
- Verify từng block độc lập — không cần tải toàn bộ file mới detect lỗi
3IPFS là giao thức — Không phải dịch vụ lưu trữ
Đây là điểm quan trọng nhất và bị hiểu sai nhiều nhất.
"Tôi upload file lên IPFS — file sẽ được lưu vĩnh viễn."
Sai hoàn toàn. Khi bạn thêm file vào IPFS node của mình (ipfs add file.jpg), file chỉ tồn tại trên node đó. Nếu bạn tắt máy, file biến mất khỏi mạng IPFS — trừ khi node khác đã lấy và pin file đó.
IPFS định nghĩa cách tìm và truyền tải file, không phải ai chịu trách nhiệm lưu file. Đây là hai thứ hoàn toàn khác nhau.
Garbage Collection và vòng đời file trên IPFS
Mỗi IPFS node có cơ chế garbage collection: định kỳ xóa các block không được "pin" để giải phóng disk space. Khi bạn thêm file vào node của mình, file đó được pin tự động trên node đó. Nhưng khi một node khác download file của bạn, họ cache nó nhưng không pin — và cache có thể bị xóa bất kỳ lúc nào.
Vòng đời của một file trên IPFS (không có pinning)
4Filecoin — Lớp incentive kinh tế cho IPFS
Đây là điểm giao thoa quan trọng nhất: Filecoin được xây để giải quyết chính xác vấn đề mà IPFS để ngỏ — ai sẽ lưu dữ liệu và tại sao họ sẽ làm vậy.
Cơ chế Storage Deal
Khi bạn muốn đảm bảo một file tồn tại trên Filecoin, bạn tạo một storage deal với một hoặc nhiều Storage Provider (SP):
- Bạn gửi file đến SP và trả một lượng FIL token theo giá thỏa thuận
- SP cam kết lưu file trong thời gian xác định (thường 6 tháng – 3 năm)
- Deal được ghi lên Filecoin blockchain — không thể sửa hay xóa
- SP phải định kỳ submit Proof of Spacetime (PoSt) để prove file vẫn còn đó
- Nếu SP mất file hoặc không submit proof → collateral FIL của họ bị slashed
IPFS + Filecoin = Stack hoàn chỉnh
| Layer | Vai trò | Đảm bảo gì | Không đảm bảo gì |
|---|---|---|---|
| IPFS | Giao thức định địa chỉ và truyền tải | CID bất biến, verify nội dung, tìm file từ bất kỳ node nào có nó | Ai sẽ lưu file, file tồn tại bao lâu |
| Filecoin | Incentive layer — thị trường lưu trữ phi tập trung | File được lưu bởi SP được trả thưởng, có thể verify on-chain | Giải quyết content addressing (cần IPFS) |
| IPFS + Filecoin | Stack hoàn chỉnh | Địa chỉ bất biến + đảm bảo lưu trữ kinh tế | — |
Ví dụ thực tế: NFT.Storage (service của Protocol Labs) nhận file từ bạn, upload lên IPFS (lấy CID), đồng thời tạo Filecoin storage deal để đảm bảo file tồn tại dài hạn. Bạn nhận CID để ghi vào smart contract NFT — địa chỉ bất biến, nội dung được đảm bảo lưu.
5Pinning Service — Cầu nối giữa IPFS và người dùng thông thường
Không phải ai cũng muốn chạy một Filecoin Storage Provider hay thậm chí một IPFS node riêng. Pinning service là dịch vụ trung gian giúp đơn giản hóa quá trình này.
Pinata
IPFS Pinning · Centralized- Upload qua API hoặc web UI
- Pin file trên cơ sở hạ tầng của Pinata
- Fast gateway (CDN)
- Free tier: 1 GB
- ⚠️ Phụ thuộc Pinata còn hoạt động
NFT.Storage
IPFS + Filecoin · Decentralized- Upload → tự động lưu Filecoin
- Miễn phí (được Protocol Labs tài trợ)
- CID bất biến + storage deal
- Tối ưu cho NFT metadata
- ✅ Không phụ thuộc một công ty
Lighthouse
IPFS + Filecoin · Encryption- Hỗ trợ mã hóa file trước khi lưu
- Token-gated access control
- Lưu Filecoin dài hạn
- API đơn giản cho developer
- ✅ Privacy-focused storage
web3.storage
IPFS + Filecoin · Developer API- SDK cho JavaScript, Go, Python
- Tự động tạo Filecoin deal
- CAR file upload (hiệu quả hơn)
- Free tier hào phóng
- ✅ Phù hợp developer
6IPFS trong thực tế — NFT, dApp và Web3
Tại sao NFT cần IPFS?
Hầu hết NFT không lưu hình ảnh hay metadata on-chain — chi phí sẽ cực kỳ đắt đỏ. Smart contract chỉ lưu tokenURI — địa chỉ trỏ đến metadata JSON. Nếu địa chỉ đó là HTTP URL:
- Project tắt server → NFT mất hình ảnh → giá trị kinh tế về 0
- Project thay đổi metadata → NFT của bạn "đổi mặt" mà không cần quyền của bạn
- Không thể verify rằng metadata bạn thấy là metadata gốc
Khi tokenURI trỏ đến IPFS CID, các vấn đề này được giải quyết: CID là bất biến — bạn có thể verify nội dung cryptographically, và file có thể tồn tại trên bất kỳ node nào pin nó.
dApp frontend hosting
Một số dApp lưu frontend HTML/JS trên IPFS và trỏ domain ENS đến CID. Lợi ích: không có single point of failure — kể cả domain bị thu hồi hay registrar bị kiểm duyệt, người dùng vẫn có thể truy cập trực tiếp qua CID.
Khi nào KHÔNG nên dùng IPFS?
| Use case | IPFS phù hợp? | Lý do |
|---|---|---|
| NFT metadata, hình ảnh cố định | ✅ Phù hợp | Nội dung bất biến, cần CID ổn định |
| Dataset khoa học, tài liệu lịch sử | ✅ Phù hợp | Cần immutable reference |
| User profile, setting thay đổi thường xuyên | ❌ Không phù hợp | Mỗi thay đổi tạo CID mới — không có "update in place" |
| Dữ liệu cần xóa (GDPR) | ❌ Không phù hợp | Content-addressed storage không support xóa |
| Real-time data (chat, live feed) | ❌ Không phù hợp | Latency cao, thiếu streaming support |
| Database thường xuyên write | ❌ Không phù hợp | IPFS tối ưu cho read, không phải write-heavy |
7Khi nào dùng IPFS thuần túy, Filecoin, hay kết hợp?
Để hiểu sâu hơn về sự khác biệt giữa Filecoin và Arweave trong bài toán lưu trữ dài hạn, xem bài phân tích chi tiết: Filecoin vs Arweave: So Sánh Toàn Diện.
8Kỹ thuật nâng cao — IPLD và Mutable Data
IPLD — Dữ liệu liên kết phi tập trung
IPLD (InterPlanetary Linked Data) là data model của IPFS cho phép liên kết giữa các CID — tương tự như hyperlink trong HTML nhưng bất biến và có thể verify. IPLD là nền tảng để biểu diễn cấu trúc dữ liệu phức tạp (thư mục, package, dataset) như một DAG của các CID liên kết nhau.
IPLD đặc biệt quan trọng cho AI/ML dataset (xem bài AI Dataset trên Filecoin) vì nó cho phép versioning dataset: mỗi version có CID riêng, và CID mới chỉ cần reference lại các chunk chưa thay đổi.
IPNS — Mutable Pointers trên IPFS
Vì CID là bất biến (file thay đổi → CID thay đổi), IPFS cung cấp IPNS (InterPlanetary Name System) cho phép tạo "tên" có thể update để trỏ đến CID mới nhất. IPNS record được ký bởi private key và có thể trỏ đến CID bất kỳ.
Để nắm trọn vẹn cách Filecoin đảm bảo dữ liệu tồn tại dài hạn — từ cơ chế Proof of Spacetime đến slashing — bài tổng quan tại FIL.VN phân tích toàn bộ kiến trúc lưu trữ phi tập trung trong blockchain modular.