Đây là phần 1 nằm trong series Ethereum dành cho Software Architect
  • IPFS – giải pháp lưu trữ tập tin cho public blockchain

Xin chào các bạn, hôm nay chúng ta sẽ nói về IPFS: một giải pháp lưu trữ nội dung dành cho public blockchain hay còn gọi là blockchain công khai.
Bạn có biết blockchain không được thiết kế để lưu trữ các tập tin dung lượng lớn?

Chi phí để lưu trữ các tập tin như hình ảnh, video, PDF trên các public blockchain như Ethereum là cực kì lớn. Vào năm 2017, Jamila Omar của tổ chức Interplanetary Database đã ước tính chi phí lưu trữ 1GB dữ liệu trên Ethereum sẽ tiêu tốn hơn 4 triệu USD. Chi phí để lưu trữ dữ liệu trên Ethereum xấp xỉ 17.500 ETH/GB, khoảng 4,672,500 USD tính theo giá hiện nay.

Vậy đâu là sự lựa chọn thay thế cho việc lưu trữ dữ liệu như trên? Các dịch vụ lưu trữ đám mây tập trung như Amazon’s S3, Google Cloud Storage, Dropbox,… Tuy nhiên, để giữ vững tình thần decentralized của blockchain thì chúng ta có thể dùng IPFS (Interplanetary File System).

IPFS là giao thức hay còn gọi là protocol dùng để tạo và chia sẻ tập tin ngang hàng. Về cơ bản IPFS không phải là blockchain mà nó là hệ thống phân phối tập tin ngang hàng (distributed peer-to-peer file system). IPFS hiện tại là một dự án mã nguồn mở.

Nếu như bạn đã từng về giao thức BitTorrent thì IPFS không có gì xa lạ đối với bạn. BitTorrent cho phép bạn có thể tải về các tập tin lớn mà chỉ sử dụng một lượng nhỏ băng thông Internet. BitTorrent tối ưu hóa tốc độ tải xuống bằng cách thu thập các mảnh nhỏ của tận tin từ những người đang lưu trữ tập tin đó.

Tuy nhiên, IPFS không theo đổi hoàn toàn triết lý thiết kế của BitTorrent. IPFS còn kết hợp thêm một số ý tưởng tốt đến từ các giao thức khác như Git, SFS, Bitcoin và Web. IPFS kết nối tất cả các thiết bị máy tính với cùng một hệ thống tập tin. Nói cách khác, IPFS tương tự như Web.

Lưu trữ dữ liệu trên IPFS:

Các bước để upload file trên IPFS:
– Người dùng upload tập tin lên IPFS bằng cách đặt các file này vào thư mục làm việc liên kết với IPFS.
– IPFS sẽ tạo ra mã hash ứng với file được thêm vào. Các hash mà IPFS sinh ta luôn bắt đầu bằng “Qm…”.
– Sau khi có hash, tận tin của người dùng đã được lưu trữ trên IPFS.
Cần lưu ý rằng, các tập tin có nội dung giống nhau sẽ có hash giống nhau. Đây có thể xem làm ưu điểm của IPFS vì nó giúp chúng ta loại bỏ sự trùng lắp trong không thiết:

Chia sẻ dữ liệu trên IPFS:

IPFS-download

Các bước để share file trên IPFS:

  • Cung cấp mã hash cho người nhận.
  • Người nhận dùng mã hash này để gọi IPFS.
  • Tập tin sẽ được tải về ở máy tính của người nhận.

Bạn có thể thấy vấn đề ở đâu là tất cả mọi người để có thể tải về tập tin thông qua mã hash. Do đó, người tải về có thể đọc được nội dung tập tin. Giải pháp cho vấn đề này sẽ được trình bày ở ngay dưới.

Chia sẻ dữ liệu trên IPFS với mã hóa không đối xứng:

Như đã đề cập ở phía trên, mọi tập tin trên IPFS đều có thể tải về nếu biết được mã hash. Một trong những cách để bảo mật hơn cho vấn đề trên đó là người dùng mã hóa nội dung tập tin thông qua mã hóa không đối xứng (asymetric cryptography).

Giả sử tình huống người gửi muốn upload một file PDF lên IPFS và chỉ muốn 1 người nhận cụ thể nào đó có thể truy cập nội dung:

  • Người gửi mã hóa file PDF với public key của người nhận trước khi đặt file PDF vào thư mục làm việc.
  • IPFS sẽ sinh ra mã hash của tập tin đã được mã hóa. Sau đó, tập tin mã hóa sẽ sẵn sàng tên mạng lưới của IPFS.
  • Người nhận tải về tập tin thông qua mã hash mà người gửi cung cấp.
  • Người nhận tiếp hành giải mã (decrypts) tập tin thông qua private key của public key đã dùng để mã hóa tập tin.
  • Những bên khác sẽ không thể giải mã tập tin nếu như không có private key của người nhận.

Kết hợp giữa IPFS và Ethereum:

IPFS có thể xem như là giải pháp đầy hứa hẹn cho việc lưu trữ data cho những ứng dụng phi tập trung.

Kết hợp Ethereum và IPFS

Về cơ bản, bạn lưu trữ tất cả tập tin trên IPFS và lưu trữ IPFS hash trên Ethereum contract. Tất cả người dùng sở hữu 1 node của IPFS có thể truy cập tập tin thông qua hash.

Kết:

IPFS là giao thức có thể sử dụng độc lập mà không cần có blockchain. Tuy nhiên, IPFS và blockchain là một sự kết hợp hoàn hảo. Với IPFS, tập tin không bị thay đổi và tồn tại vĩnh viễn trên một mạng lưới phi tập trung và các hash như các đường link truy cập đến các tập tin này. Khi kết với public blockchain như Ethereum, các hash được lưu trữ và không bị sửa đổi trên một sổ cái phi tập trung. Ở khía cạnh Ethereum, khi áp dụng IPFS thì Dapp của bạn không cần phải lưu trữ tập tin có dung lượng lớn trên blockchain, thay vào đó chúng ta chỉ lưu trữ hash của tập tin đó trên IPFS.


Nhận thấy các bài viết tiếng Việt chuyên về lập trình blockchain còn ít nên tôi quyết định chuyển hướng sang chuyên viết về chủ đề blockchain dành riêng cho lập trình viên. Hi vọng những bài viết này sẽ giúp ích cho các bạn đang muốn theo đuổi lĩnh vực còn khá mới này.

Nếu bạn thấy bài viết hữu ích, bạn có thể ủng hộ tôi vài tách cà phê thông qua MoMo tại đây

Bạn cũng có thể nhờ tôi tư vấn về giải pháp công nghệ thông tin nói chung và blockchain nói riêng (có tính phí) thông qua đây