TLDR
Solcial được xây dựng để cung cấp cho người dùng trải nghiệm gần nhất có thể với các nền tảng truyền thông xã hội Web2, đồng thời tận dụng các công nghệ Web3.
Một trở ngại mà bất kỳ nền tảng dựa trên blockchain nào cũng phải đối mặt, đó là phí người dùng. Để loại bỏ phí người dùng cho các hoạt động không liên quan đến mã thông báo trong khi vẫn duy trì quyền riêng tư và sự đồng thuận, Solcial đang xây dựng một lớp ngang hàng (P2P) dựa trên Solana và được xây dựng trên libp2p để cung cấp nội dung (nguồn cấp dữ liệu, lượt thích, v.v.) thông qua tự lưu trữ (self-hosting) và duy trì các bản sao của dữ liệu trên nhiều node (peer replication).
Chúng tôi cũng đã phát triển một loại node đặc biệt có cùng giao thức bên ngoài như một ứng dụng dành cho máy tính để bàn hoặc thiết bị di động điển hình, với các tính năng tối ưu hóa bổ sung được thiết kế để xử lý hàng chục nghìn người dùng đồng thời, được gọi là Beacon Nodes. Beacon về cơ bản là một tập hợp các dịch vụ ghim sẽ lưu giữ nội dung của người dùng khi người sáng tạo ngoại tuyến và cung cấp nội dung đó cho những người dùng khác, tất cả nội dung người dùng được lưu trữ trên IPFS và được truy cập thông qua P2P layer mà không cần dựa vào các máy chủ hoặc cổng kiểm duyệt.
GIỚI THIỆU
Đây là bài đăng đầu tiên trong một loạt các ghi chú mô tả cách hoạt động bên trong của giao thức Solcial mang lại cho nó đặc tính kháng kiểm duyệt độc đáo trong khi vẫn duy trì hiệu suất trao đổi dữ liệu hợp lý.
CẤU TRÚC MẠNG
Các node kết nối nhau qua internet công cộng, tạo thành mạng lưới riêng cho Solcial bằng cách sử dụng phiên bản sửa đổi của giao thức HyparView ¹.
Mỗi node duy trì một danh sách người dùng đang hoạt động với kích thước Log2 (N) +1 trong đó N là kích thước ước tính của toàn bộ mạng. Giá trị của N được lấy từ blockchain bằng cách tìm số lượng tài khoản người dùng đã đăng ký cập nhật gần nhất và được cập nhật định kỳ khi số lượng người dùng tăng lên. Kết nối của người dùng đang hoạt động tương đối ổn định, hai chiều, liên tục và đó là các node mà họ giao tiếp trực tiếp trong khi tán gẫu hoặc bất kỳ hoạt động p2p nào khác. Mỗi node cũng duy trì một danh sách các người dùng không hoạt động có kích thước 6 * (Log2 (N) + 1) được sử dụng làm dự phòng trong trường hợp bất kỳ người dùng đang hoạt động bị ngắt kết nối hoặc không thể phản hồi. Giao thức cơ bản cho các kết nối giữa các người dùng đang hoạt động là QUIC² với mã hóa NOISE, tất cả đều được cung cấp bởi libp2p³.
NAT traversal đạt được bằng cách sử dụng ba phương pháp được sử dụng tùy thuộc vào từng trường hợp của người dùng ngang hàng. Phương pháp đầu tiên là sử dụng IPv6 thay vì IPv4 bất cứ khi nào có thể vì trong trường hợp đó không cần NAT. Tuy nhiên theo thống kê chỉ có dưới 40% Internet sử dụng IPv6⁴.
Cơ chế dự phòng là sử dụng AutoNAT bằng cách sử dụng giao thức nhận dạng của libp2p để hỏi các node khác trong mạng về địa chỉ hiển thị của máy chúng ta. Địa chỉ đó, được khởi tạo bởi người dùng ngang hàng đằng sau NAT, đã được đăng ký với bộ định tuyến của họ tới máy mục tiêu, tuy nhiên có những trường hợp khi cơ chế này không hoạt động, khi đó chúng tôi quay lại lựa chọn thứ ba đáng tin cậy nhất nhưng đắt tiền.
Lựa chọn thứ ba là sử dụng giao thức chuyển tiếp mạch libp2p bắt chước hoạt động của giao thức TURN⁶ bằng cách có một node trung gian chuyển tiếp các gói giữa hai người dùng đằng sau NAT. Vai trò này có thể được đảm nhận bởi các Beacon Nodes và một số người dùng có IP công cộng chọn trở thành rơle với các giới hạn được định cấu hình. Thông tin thêm về các Beacon Nodes trong bài đăng này.
NHẬN DẠNG NGƯỜI DÙNG NGANG HÀNG
Những người dùng ngang hàng được xác định bằng cách sử dụng khóa công khai của họ dưới dạng multihash⁷ bằng với khóa công khai của địa chỉ ví của họ trên Solana đã được đăng ký với hợp đồng on-chain của Solcial. Cách duy nhất để giả định một id của người dùng ngang hàng công khai nhất định là sở hữu khóa bí mật của cặp khóa ED25519.
Cặp khóa này cũng được sử dụng để thiết lập các kênh được mã hóa cho tất cả các tin nhắn truyền giữa các người dùng ngang hàng, cũng như một cách để xác minh tính xác thực của các tin nhắn được cho là do chủ sở hữu ví tạo ra.
THÀNH VIÊN MẠNG LƯỚI
Những người dùng ngang hàng có khóa công khai không được đăng ký trên chuỗi sẽ không được phép tham gia lớp mạng HyparView và do đó tự động bị loại khỏi mạng ngang hàng Solcial.
Tất cả các người dùng muốn tham gia Solcial p2p sẽ gửi một thông báo JOIN đến một trong các node bootstrap (một số trong các nút bootstrap đó cũng là các beacon node) về chủ đề/Solcial/public nào đó. Việc đưa các chủ đề vào HyparView là một trong những sửa đổi của chúng tôi đối với bản công bố gốc.
Bất kỳ node nào nhận được yêu cầu JOIN từ một ứng dụng ngang hàng trước tiên sẽ xác minh rằng multihash tồn tại trên chuỗi và được liên kết với tài khoản Solcial, sau đó nó sẽ gửi một thông báo FORWARDJOIN đến một trong những người dùng đang hoạt động của nó với một bước đi ngẫu nhiên hoạt động được đặt thành 3, chúng sẽ lần lượt truyền thông điệp đó cho tất cả người dùng đang hoạt động của mình, tăng số bước nhảy hiện tại lên một cho đến khi đạt 3 bước nhảy. Đây là một biện pháp giảm thiểu các cuộc tấn công DDoS chống lại các node bootstrap, cũng như một kỹ thuật phân quyền hiệu quả để lan truyền và ngẫu nhiên kết nối giữa các node càng nhiều càng tốt.
Bất kỳ node nào nằm trong vòng 3 bước so với máy tiếp nhận yêu cầu JOIN đầu tiên sẽ gửi một thông báo NEIGHBOR đến người yêu cầu JOIN ban đầu để thiết lập một kết nối liên tục hoạt động giữa chúng.
Định kỳ cứ sau 15 giây, các node sẽ phát một thông báo SHUFFLE tới một người dùng hoạt động ngẫu nhiên với một mẫu ngẫu nhiên đến các người dùng hoạt động hay không hoạt động của nó và đặt thời lượng ngẫu nhiên của thông báo này thành 4. Điều này đảm bảo rằng tất cả các người dùng trong mạng luôn có thông tin mới về các người dùng khác mà họ có thể lưu trữ trong chế độ xem thụ động của mình cho mục đích sửa chữa mạng, bất cứ khi nào bất kỳ người dùng đang hoạt động nào của họ không phản hồi hoặc ngắt kết nối rõ ràng.
TÁN GẪU MỘT CÁCH HIỆU QUẢ
Chỉ những người người dùng đang hoạt động mới tham gia vào việc phổ biến thông điệp giữa các người dùng. Các ứng dụng ngang hàng đang hoạt động tạo thành một mạng lưới bao phủ trên internet công cộng và tồn tại các chu kỳ trong biểu đồ kết nối giữa các node. Để kích hoạt tính năng tán gẫu tin nhắn hiệu quả giữa các người dùng trên mạng, trước tiên, chúng ta cần giảm thiểu sự lan truyền thông điệp trùng lặp giữa các người dùng ngang hàng và thứ hai, tìm ra con đường tối ưu nhất cho các thông điệp.
Điều này đạt được bằng cách sử dụng thuật toán Epidemic Broadcast Trees⁸ tạo thành một cây phân chia giữa các người dùng, bằng cách chia các người dùng đồng cấp thành một nhóm eager-push nodes và lazy push nodes. Các node Eager-push luôn nhận được thông báo được chuyển tiếp ngay khi chúng được nhận bởi bất kỳ node nào. Lazy push nodes nhận được định kỳ sau mỗi 500 mili giây, một loạt ID thông báo mà node hiện tại nhìn thấy. Bất cứ khi nào một node quan sát thấy có một id thông báo trong lô lazy-push không được nhận từ node sinh ra nó ngược dòng của nó, nó sẽ xây dựng lại (GRAFT) kết nối và khôi phục trạng thái đẩy hoạt động của nó. Điều này tạo thành cơ chế sửa chữa tối thiểu trong trường hợp một trong các node bị hỏng và các đồ thị rời rạc được hình thành. Tin nhắn GRAFT khôi phục kết nối mạng một cách đầy đủ.
Bất cứ khi nào một thông báo đã nhận được phát hiện là bản sao của một thông báo đã nhận trước đó từ một node đang hoạt động, thì kết nối đến node đó được coi là một chu kỳ trong biểu đồ và được chuyển thành Lazy-Push bằng cách gửi một thông báo PRUNE.
Một trường hợp khác để loại bỏ một kết nối đang hoạt động và thay thế nó bằng một kết nối từ lazy-push là khi chúng ta quan sát thấy rằng số bước nhảy mà một thông điệp đi đến chúng ta thông qua lazy node ít hơn 4 bước so với một thông báo từ người dùng ngang hàng đang hoạt động tích cực. Điều đó tạo nên sự tối ưu cho thuật toán cây phân chia nhóm.
CÁC NỘI DUNG PHỔ BIẾN
Các tin nhắn tán gẫu thông qua giao thức p2p được mô tả trong các phần trước là các tin nhắn IPFS Bitswap⁹ với CID của nội dung do người dùng Solcial tạo ra. Để hiểu rõ hơn về cách Bitswap và IPFS được sử dụng trong Solcial, trước tiên, hãy mô tả cấu trúc của hồ sơ người dùng.
Mỗi tài khoản người dùng trên mạng có một thứ gọi là chỉ mục hồ sơ. Chỉ mục này trỏ đến CID của các phiên bản mới nhất của nội dung của chúng. Chỉ mục là một CRDT trình tự nhất quán cuối cùng tạo thành một nhật ký bất biến về các hoạt động được thực hiện bởi tài khoản.
Chỉ mục hồ sơ có thể được coi như một danh sách được liên kết trong đó mỗi phần tử trỏ đến CID của phần tử trước đó và được người dùng chấp nhận là phần tử tiếp theo trong trình tự chỉ khi nó được ký bởi khóa riêng của chủ sở hữu tài khoản. Ví dụ lôgic cấp cao về nguồn cấp dữ liệu hồ sơ đã đăng được mã hóa ở định dạng này trông giống như sau: {
“author”: “12D3KooWSoeYKbpkb5UoL2T5eiomWRHdxR9cPC4tk11gKU89fFwT”,
“prev”: “QmYtUc4iTCbbfVSDNKvtQqrfyezPPnFvE33wFmutw9PBBk”,
“action”: “append-feed-post”,
“timestamp”: “2022–01–11T15:58Z”,
“params”: {
“content”: “QmV8cfu6n4NT5xRr2AHdKxFMTZEJrA44qgrBCr739BN9Wb”
“enckey”: “z2DhMLJmV8kNQm6zeWUrXQKtmzoh6YkKHSRxVSibscDQ7nq”
},
“signature”: “2Lpnvt23H6qHswCNPmwCCUSas7YNP[…]jV1dC9qdNPR4zDqsCuBX”
}
Mục nhập như vậy có CID riêng và được phát dưới dạng đối tượng IPFS PB-DAG¹⁰ cho các topic/Solcial/content trên mạng lưới HyparView. Mục nhập này được liên kết với mục nhập trước đó và bất kỳ nội dung bổ sung nào bằng cách truy vấn đệ quy các CID được liên kết mà người dùng có thể nhận được toàn bộ nội dung và lịch sử tài khoản.
Đối tượng này được xác nhận đầu tiên bởi bất kỳ người dùng ngang hàng nào nếu chữ ký của nội dung khớp với khóa công khai của tác giả. Trong trường hợp xác minh chữ ký không thành công, người gửi ngang hàng sẽ bị cấm vĩnh viễn khỏi node hiện tại do vi phạm giao thức. Việc xác thực chữ ký thành công sẽ truyền tải nội dung đến tất cả các người dùng khác quan tâm đến nội dung do tài khoản này tạo ra.
Khi một CID như vậy được nhận bởi một người dùng ngang hàng, nó sẽ được thêm vào nhật ký hoạt động của tác giả. Tổng tất cả các thao tác do tác giả thực hiện tạo thành trạng thái hiện tại của hồ sơ.
Tùy thuộc vào nội dung ghim và hướng đến của mỗi tài khoản cùng với nội dung bạn bè của tài khoản đó. Có những người dùng đặc biệt mà chúng tôi đang xây dựng như một phần của cơ sở hạ tầng mà chúng tôi gọi là nút báo hiệu (beacon node) và chúng giống như những người dùng của người dùng thông thường, ngoại trừ họ quan tâm đến nội dung của mọi người và phục vụ như một loại dịch vụ ghim IPFS dành riêng cho Solcial cho tất cả nội dung trong trường hợp tất cả các seeders hiện tại đang ngoại tuyến. Hãy coi chúng như những node mà những người dùng trong đó đều như bạn bè. Mạng có thể hoạt động mà không có chúng, nhưng chúng cung cấp thêm một lớp nội dung sẵn có.
QUYỀN TRUY CẬP ĐỌC NỘI DUNG
Mọi người trên mạng lưới Solcial p2p có thể truy vấn, tải xuống và cung cấp bất kỳ nội dung nào của người dùng bằng cách phát thông báo IWANT và IHAVE Bitswap tới topic / solcial / content với CID của chỉ mục gốc cấp cao nhất của tài khoản, sau đó yêu cầu đệ quy tất cả các CID được liên kết.
Đồng bộ hóa ban đầu của tài khoản hoặc nhận các mục nhập gần đây nhất của tài khoản có thể đạt được bằng cách phát thông báo HEAD tới chủ đề / solcial / sync, nơi các đồng nghiệp khác là người tạo các seed (bao gồm cả các beacon node) phản hồi bằng CID của nội dung mới nhất mà họ biết. Việc chuyển đổi giữa handle của người dùng và các khóa công khai của người dùng được thực hiện bằng cách truy vấn chuỗi khối Solana.
Các trường mục nhập trước đó có thể được sử dụng để giải quyết các HEAD xung đột và quyết định mục nhập gần đây nhất.
QUYỀN ĐƯỢC VIẾT NỘI DUNG
Để có thể ghi vào nhật ký của tài khoản, người dùng phải có khóa riêng của cặp khóa ED25519 tương ứng với ID tài khoản của họ. Bằng cách có khóa đó, người dùng có thể tạo chữ ký hợp lệ của một mục nhập mà họ đang gắn vào nhật ký sẽ không bị từ chối bởi các người dùng ngang hàng khác trên mạng.
QUYỀN TRUY CẬP NỘI DUNG ĐẶC QUYỀN
Khóa được phổ biến cho một tập hợp con ngẫu nhiên của các người dùng ngang hàng đủ điều kiện qua kênh mã hóa NOISE được thiết lập trong quá trình bắt tay cùng với libp2p. Tác giả bài đăng có thể chọn cho phép các beacon node cũng tham gia vào lược đồ trao đổi khóa này để thực hiện quy trình gần như tức thì cho tất cả người dùng, nhưng họ không cần phải làm như vậy nếu họ tin rằng nội dung của họ là siêu nhạy cảm. Khi người dùng đủ điều kiện muốn giải mã nội dung, họ sẽ gửi thông báo GETKEY đến chủ đề mạng lưới / solcial / keyexchange bằng hash của khóa mã hóa.
Tất cả người dùng ngang hàng sở hữu khóa đó trực tuyến sẽ kiểm tra tính đủ điều kiện của đồng cấp để nhận khóa bằng cách truy vấn chuỗi khối và xác minh xem người dùng có giữ các mã thông báo cần thiết để truy cập nội dung hay không. Sau khi xác minh thành công, khóa sẽ được truyền đến máy ngang hàng yêu cầu bằng cách sử dụng kết nối quic / noise trực tiếp bỏ qua giao thức gossip.
HỖ TRỢ NỀN TẢNG
Giao thức ngang hàng dành cho nội dung chống kiểm duyệt này chỉ có sẵn cho máy tính để bàn và thiết bị di động và không có sẵn trên giao diện web. Điều này là do giới hạn của trình duyệt. Các trình duyệt vốn dĩ được thiết kế với tư cách là nội dung người dùng viết ra được lưu trữ trên máy chủ và mô hình bảo mật của chúng cấm chấp nhận các kết nối ngẫu nhiên từ các máy khác.
Nền tảng kỹ thuật cơ bản được triển khai bằng cách sử dụng Rust, libp2p và các liên kết với React Native và Tauri¹¹.
Các chú thích kỹ thuật được làm rõ qua các tài liệu tiếng Anh bên dưới:
[1] Leitao, Joao, José Pereira, and Luis Rodrigues. “HyParView: A membership protocol for reliable gossip-based broadcast.”
[2] https://en.wikipedia.org/wiki/QUIC
[3] https://libp2p.io/
[4] https://www.google.com/intl/en/ipv6/statistics.html
[5] https://docs.libp2p.io/concepts/circuit-relay/
[6] https://datatracker.ietf.org/doc/html/rfc5766
[7] https://docs.libp2p.io/reference/glossary/#multihash
[8] Leitao, Joao, Jose Pereira, and Luis Rodrigues. “Epidemic broadcast trees.” 2007 26th IEEE International Symposium on Reliable Distributed Systems (SRDS 2007). IEEE, 2007.
[9] https://docs.ipfs.io/concepts/bitswap/
[10] https://github.com/ipld/ipld/blob/master/specs/codecs/dag-pb/spec.md
[11] https://tauri.studio/
VỀ DỰ ÁN SOLCIAL
Solcial là một mạng xã hội phi tập trung nhằm cung cấp cho người dùng các đặc điểm vượt trội của web3 bằng cách cho phép người dùng tương tác với nhau mà không sợ bị kiểm duyệt và cho phép người tạo nội dung được phần thưởng công bằng theo giá trị thị trường.
Liên lạc:
Telegram: https://t.me/solcial
Twitter: https://twitter.com/solcialofficial
Discord: https://discord.com/invite/3EpaAbcRPp
Blog: https://blog.solcial.io/
Web: https://solcial.io
Email: [email protected]
Linktree: https://linktr.ee/solcial