Lưu trữ dữ liệu trên chuỗi khối rất tốn kém, vì vậy nếu bạn cần lưu trữ một lượng lớn dữ liệu trên đó theo “kiểu chuỗi khối” (theo cách bất biến, không được phép và phân tán), bạn phải sử dụng giải pháp lưu trữ bên ngoài. Lựa chọn phổ biến nhất là sử dụng IPFS , nhưng có một số trình phát khác trên thị trường. Một trong số đó là Ethereum Swarm . Trong bài viết này, tôi sẽ giới thiệu cho bạn những điểm tương đồng và khác biệt giữa Swarm và IPFS để giúp bạn chọn giải pháp lưu trữ phù hợp cho dự án tiếp theo của mình.
IPFS (từ viết tắt của Hệ thống tệp liên hành tinh) được thành lập vào năm 2014 bởi Phòng thí nghiệm giao thức. Đó là một giao thức hệ thống tệp phân tán sử dụng địa chỉ nội dung để xác định duy nhất từng tệp trong một không gian tên chung. IPFS không có hệ thống khuyến khích thực sự, đây là lý do tại sao Phòng thí nghiệm Giao thức đã tạo ra FileCoin vào năm 2017, đây là chuỗi khối tập trung vào lưu trữ của riêng họ.
Ý tưởng về Ethereum Swarm đến từ Gavin Wood, một trong những người sáng lập Ethereum. Vào năm 2015, Viktor Trón và Daniel Nagy đã tiếp quản dự án trong nhóm Geth của Tổ chức. Sau một ICO thành công, họ thực hiện hành trình của riêng mình với tư cách là một dự án tự trị do Ethereum Foundation hỗ trợ. Ngày nay (vào năm 2022) Swarm ít nhiều đã hoàn thiện về tính năng và được phát triển tích cực.
Cả hai hệ thống đều cung cấp một hệ thống phân tán, không thay đổi và có thể định địa chỉ theo nội dung với hệ thống khuyến khích và tiền điện tử riêng, đồng thời cả hai đều dựa trên libp2p . Trong phần tiếp theo, tôi sẽ so sánh từng bước của hai hệ thống.
IPFS về cơ bản là một cộng đồng nhà cung cấp lưu trữ nơi các nút xuất bản nội dung được tham chiếu bởi hàm băm nội dung của nó. Danh sách các nút lưu trữ cho hàm băm được lưu trữ trong DHT . Nếu bạn muốn lấy nội dung, bước đầu tiên bạn phải tìm danh sách ngang hàng trong DHT bằng hàm băm nội dung. Trong bước thứ hai, id ngang hàng phải được dịch sang địa chỉ IP và trong bước thứ ba, bạn có thể tải xuống nội dung từ ngang hàng đã cho tại địa chỉ IP.
Ethereum Swarm có logic khác vì nó tự lưu trữ nội dung trong DHT. Họ gọi hệ thống này là DISC (Distributed Immutable Store for Chunks) và toàn bộ hệ thống được thiết kế để làm cho DHT này hoạt động hiệu quả. Ví dụ: khi một nút chọn các nút khác để kết nối, nó sẽ chọn các nút ngang hàng cho mọi thứ tự lân cận (tức là thứ tự độ lớn của khoảng cách từ địa chỉ của chính nó). Do khả năng kết nối của Kademlia, việc tìm kiếm một đoạn dữ liệu thực sự nhanh chóng trong hệ thống này. Khi một nút muốn truy xuất một đoạn, nó sẽ hỏi các đồng nghiệp của nó. Nếu một máy ngang hàng có nội dung, nó sẽ trả lại nội dung đó, nếu không, nó sẽ yêu cầu các máy ngang hàng của nó, v.v. Nội dung luôn được lưu trữ bởi các nút có khoảng cách Kademlia nhỏ với nó và do kết nối Kademlia, luôn có thể tìm đường đi có độ dài logarit. Khi nút lưu trữ nhận được yêu cầu truy xuất, nó sẽ trả lại nội dung cho nút yêu cầu, nút này sẽ chuyển tiếp nội dung đó trở lại nút đã yêu cầu nó, v.v. cho đến khi nó đến được nguồn gốc của yêu cầu. Swarm gọi phương thức này là chuyển tiếp Kademlia và nó cung cấp tính ẩn danh. Các nút chỉ biết những người ngang hàng yêu cầu nội dung, nhưng không ai biết ai là nguồn gốc của yêu cầu hoặc nội dung. Nó tương tự như những gì mạng Tor thực hiện để ẩn danh các yêu cầu. Nhưng ẩn danh chỉ là một lợi thế của việc chuyển tiếp Kademlia. Nó cũng giúp phân phối nội dung, nhưng tôi sẽ viết về điều này sau.
Nếu bạn muốn lưu trữ nội dung có thể thay đổi (ví dụ: trang web thường xuyên thay đổi) trên IPFS , bạn có thể sử dụng IPNS . Trên IPNS, địa chỉ của nội dung có thể thay đổi là khóa chung và địa chỉ của nội dung không thể thay đổi cơ bản được ký bởi phần khóa riêng của nó. Khóa công khai -> bài tập nội dung đã ký được xuất bản trong DHT. Nếu nội dung thay đổi, chủ sở hữu nội dung sẽ ký mã băm nội dung mới và xuất bản nó cho khóa công khai, vì vậy người truy xuất có thể làm mới việc gán nội dung từ nó.
Trên Ethereum Swarm , có hai loại khối. Một là đoạn địa chỉ nội dung “thông thường” và đoạn còn lại là đoạn chủ sở hữu duy nhất. Địa chỉ của đoạn một chủ sở hữu là hàm băm của chủ sở hữu và một ID duy nhất. Các khối một chủ sở hữu này cũng không thay đổi, nhưng bạn có thể tạo ID từ tên chủ đề và số sê-ri. Khi bạn thay đổi nội dung, bạn chỉ cần tăng số sê-ri và xuất bản một đoạn mới. Những người truy xuất có thể thăm dò hệ thống và nếu có sẵn một đoạn mới với số sê-ri cao hơn thì họ có thể làm mới nội dung từ đoạn đó. Swarm gọi các nguồn cấp dữ liệu cấu trúc được đánh số sê-ri này.
Nếu bạn muốn lưu trữ nội dung trên IPFS , bạn có nhiều lựa chọn hơn. Bạn có thể chỉ cần chọn một nhà cung cấp tập trung như Infura hoặc Pinata, tải nội dung của mình lên và trả phí lưu trữ để cung cấp nội dung của bạn trên IPFS hoặc bạn có thể chỉ cần chạy một nút IPFS trên máy của mình và tự xuất bản nội dung đó.
Một cách khác là sử dụng FileCoin, đây là chuỗi khối “chính thức” của IPFS (cũng được phát triển bởi Phòng thí nghiệm giao thức, nơi đã phát triển chính IPFS). FileCoin về cơ bản là một thị trường dành cho các nhà cung cấp dịch vụ lưu trữ, nơi bạn có thể ký hợp đồng để lưu trữ nội dung của mình. Các cơ chế của mạng FileCoin giữ an toàn cho nội dung của bạn và trừng phạt các nhà cung cấp đã ký hợp đồng không giữ nội dung của bạn hoặc không cung cấp nội dung đó. Nếu bạn truy xuất nội dung và đạt đến ngưỡng truyền dữ liệu, bạn phải trả phí.
Ethereum Swarm sử dụng hệ thống thanh toán của riêng mình thay vì chuỗi khối, tương tự như các kênh thanh toán như Lighting Network , nhưng có một chút khác biệt. Khi một nút thanh toán cho một nút khác, nó sẽ thực hiện bằng séc. Các séc này tương tự như séc trong thế giới thực, các tài liệu đã ký có thể được sử dụng để rút tiền từ hợp đồng sổ séc của nút.
Trên Swarm, truyền dữ liệu có tính phí. Nếu một nút gửi dữ liệu đến nút ngang hàng của nó thì một khoản phí nhỏ sẽ được tính. Mọi kết nối ngang hàng đều có số dư và nếu số dư này đạt đến giới hạn, nút sẽ kiểm tra nút kia. Mọi thứ diễn ra ngoài chuỗi. Chỉ thanh toán séc cần hành động blockchain.
Nếu bạn muốn lấy lại nội dung, bạn phải trả tiền cho người cung cấp nội dung đó cho bạn. Nếu nó có nội dung, nó có thể giữ toàn bộ phí, nhưng nếu không, nó phải trả tiền cho người cung cấp nó. Logic này khuyến khích các nút lưu trữ cục bộ nội dung phổ biến, vì vậy Swarm hoạt động như một CDN thích ứng.
Trên mạng Swarm, không có nhà cung cấp riêng lẻ nào. Nội dung luôn được lưu trữ trên các nút có khoảng cách Kademlia nhỏ nhất từ hàm băm của nó (Swarm gọi các nút này là vùng lân cận). Đó là một thuộc tính thiết yếu của Swarm để giữ cho DHT có thể tìm kiếm được một cách hiệu quả. Bạn có thể xuất bản nội dung trên bất kỳ nút nào, nút này sẽ đẩy nội dung đó tới nút ngang hàng gần nhất, nút này sẽ đẩy nội dung đó tới nơi lưu trữ tốt nhất. Phương pháp này rất giống với truy xuất nội dung nhưng theo hướng ngược lại. Nếu bạn muốn lưu trữ nội dung của mình trong mạng, bạn phải đính kèm một con tem bưu chính vào đó. Tem bưu chính giống như một tấm séc chỉ có thể đổi thành tiền mặt nếu bạn có thể chứng minh rằng bạn giữ nội dung.
Khả năng tương tác của Ethereum là lĩnh vực mà Ethereum Swarm thực sự mạnh. Là kho lưu trữ “chính thức” của Ethereum, mọi thứ đều “tương thích với Ethereum”.
Ví dụ: địa chỉ nút được lấy từ địa chỉ Ethereum của chủ sở hữu. Do đó, chúng ta có thể sử dụng hệ thống chuyển tiếp khối để gửi tin nhắn được mã hóa đến các nút nhất định. Swarm gọi kỹ thuật này là PSS, là sự kế thừa của giao thức nhắn tin Ethereum Whisper.
Chủ sở hữu của khối chủ sở hữu duy nhất cũng là địa chỉ Ethereum và phương thức ký giống như cách sử dụng Ethereum, vì vậy bạn có thể chỉ cần kiểm tra nó trên hợp đồng thông minh hoặc sử dụng nó để chỉ định siêu dữ liệu trong nguồn cấp dữ liệu. Khi tôi xây dựng MyETHMeta (hệ thống siêu dữ liệu giống như Gravatar cho tài khoản Ethereum), tôi phải sử dụng hợp đồng thông minh để lưu trữ địa chỉ Ethereum -> ánh xạ URL siêu dữ liệu. Với Swarm, nó có thể được thực hiện bằng một nguồn cấp dữ liệu đơn giản mà không cần blockchain.
Swarm chunks là cây Merkle . Điều này có nghĩa là địa chỉ chunk là gốc Merkle của nội dung. Điều này hữu ích nếu bạn kiểm tra chúng trong hợp đồng thông minh vì bạn có thể dễ dàng tạo bằng chứng bao gồm cho nội dung. Ví dụ: nếu bạn muốn lưu trữ danh sách trắng dài (>1000 phần tử), bạn có thể lưu trữ danh sách đó trên Swarm thay vì chuỗi khối và kiểm tra tư cách thành viên bằng hợp đồng thông minh bằng cách sử dụng bằng chứng Merkle. Hoặc bạn có thể tạo các bản tổng hợp đầy đủ trên Swarm trong đó gốc trạng thái cũng là địa chỉ nội dung cho toàn bộ trạng thái.
Như bạn có thể thấy, cả hai giải pháp lưu trữ đều có điểm mạnh và điểm yếu.
IPFS là hệ thống cũ hơn (theo nghĩa tốt). Nó có nhiều trường hợp sử dụng, nó được ghi chép đầy đủ và được sử dụng rộng rãi. Có nhiều nhà cung cấp IPFS tập trung và bạn cũng có thể sử dụng FileCoin để lưu trữ nội dung của mình.
Ethereum Swarm tương đối mới và đang được phát triển, nhưng nó có một số thuộc tính rất thú vị. Lưu trữ và truy xuất nội dung ẩn danh, quản lý DHT siêu hiệu quả và khả năng tương thích Ethereum mạnh mẽ là những tính năng độc đáo của giải pháp này.