MENGENAL SOLCIAL JARINGAN SOSIAL TERDISTRIBUSI

WEB-SCALE SOCIAL PEER-TO-PEER PROTOCOL

TLDR:

  • Solcial sedang dibangun untuk memberi pengguna pengalaman sedekat mungkin dengan platform media sosial Web2, sambil memanfaatkan teknologi Web3.
  • Salah satu kendala yang dihadapi platform berbasis blockchain, adalah biaya pengguna. Untuk menghilangkan biaya pengguna untuk operasi terkait non-token sambil menjaga privasi dan konsensus, Solcial sedang membangun lapisan peer-to-peer (P2P) yang berlabuh di Solana dan dibangun di atas libp2p yang mengirimkan konten (umpan, suka, dll) melalui self-hosting dan replikasi rekan.
  • Kami juga telah mengembangkan jenis node khusus yang memiliki protokol eksternal yang sama seperti desktop atau aplikasi seluler biasa, dengan pengoptimalan tambahan yang dirancang untuk menangani puluhan ribu peer secara bersamaan, yang disebut Beacon Nodes . Beacon pada dasarnya adalah serangkaian layanan penyematan yang akan menjaga konten pengguna saat pembuat konten offline dan membuatnya tersedia untuk pengguna lain; semua konten pengguna disimpan di IPFS dan diakses melalui lapisan P2P tanpa bergantung pada server atau gateway yang dapat disensor.

pengantar

Ini adalah posting pertama dalam serangkaian catatan yang menjelaskan bagaimana cara kerja protokol Solcial memberikannya sifat ketahanan sensor yang unik sambil tetap mempertahankan kinerja pertukaran data yang wajar. Artikel ini menyoroti cara kerja jaringan peer-to-peer dan, sementara artikel ini ditujukan untuk audiens yang lebih teknis, kami berharap pengikut Solcial yang kurang teknis akan tetap menemukan nilai dalam teknologi di balik protokol.

Topologi Jaringan

Node berkomunikasi melalui internet publik, membentuk jaringan overlay khusus untuk Solcial menggunakan versi protokol HyparView¹ yang dimodifikasi.

Setiap node m menyimpan daftar rekan-rekan aktif dengan ukuran Log2(N)+1 di mana N adalah perkiraan ukuran seluruh jaringan. Nilai N ditarik dari blockchain dengan menemukan jumlah akun pengguna yang terdaftar hingga saat ini, dan diperbarui secara berkala seiring bertambahnya jumlah pengguna. Koneksi ke rekan-rekan yang aktif stabil, dua arah dan persisten dan itu adalah simpul yang mereka komunikasikan secara langsung selama gosip atau aktivitas p2p lainnya. Setiap node juga menyimpan daftar rekan pasif dengan ukuran 6*(Log2(N) + 1) yang digunakan sebagai rekan cadangan jika salah satu rekan aktif terputus atau menjadi tidak responsif. Protokol yang mendasari untuk koneksi antara rekan-rekan aktif adalah QUIC ²dengan enkripsi NOISE, semua didukung oleh libp2p .

Traversal NAT dicapai dengan menggunakan tiga metode yang digunakan tergantung pada keadaan jaringan peer. Metode pertama adalah menggunakan IPv6 alih-alih IPv4 bila memungkinkan karena dalam hal ini tidak diperlukan NAT, namun menurut statistik hanya di bawah 40% internet menggunakan IPv6 .

Mekanisme fallback adalah menggunakan AutoNAT dengan menggunakan protokol identitas libp2p yang menanyakan node lain di jaringan tentang alamat yang terlihat dari mesin kita. Alamat itu, yang diprakarsai oleh rekan di belakang NAT, sudah terdaftar dengan router mereka ke mesin target, namun ada keadaan ketika ini tidak berhasil, maka kita kembali ke opsi ketiga dan paling andal tetapi mahal.

Opsi ketiga adalah menggunakan protokol relai sirkuit libp2p yang meniru cara kerja protokol TURN dengan memiliki node perantara yang me-relay paket antara dua peer di belakang NAT. Peran ini dapat diasumsikan oleh node suar dan beberapa rekan dengan IP publik yang memilih menjadi relai dengan batas yang dikonfigurasi. Lebih lanjut tentang node suar nanti di posting ini.

Identitas Rekan

Peer diidentifikasi menggunakan kunci publik mereka dalam bentuk multihash yang sama dengan kunci publik dari alamat dompet mereka di Solana yang terdaftar dengan kontrak on-chain Solcial. Satu-satunya cara untuk mengasumsikan id rekan publik yang diberikan adalah dengan memiliki kunci rahasia dari pasangan kunci ED25519.

Pasangan kunci ini juga digunakan untuk membuat saluran terenkripsi untuk semua pesan yang lewat di antara rekan-rekan, serta cara untuk memverifikasi keaslian pesan yang mungkin dibuat oleh pemilik dompet.

Keanggotaan overlay

Peer dengan kunci publik yang tidak terdaftar pada rantai tidak akan diizinkan untuk bergabung dengan overlay jaringan HyparView dan oleh karena itu secara otomatis dikecualikan dari jaringan peer-to-peer Solcial.

Semua rekan yang ingin bergabung dengan Solcial p2p akan mengirim pesan GABUNG ke salah satu node bootstrap (beberapa node bootstrap juga merupakan node suar) pada topik /solcial/public . Pengenalan topik ke HyparView adalah salah satu modifikasi kami pada makalah asli.

Setiap node yang menerima permintaan GABUNG dari rekan pertama-tama akan memverifikasi bahwa multihash ada di rantai dan dikaitkan dengan akun Solcial, kemudian akan mengirim pesan FORWARDJOIN ke salah satu rekan aktifnya dengan jalan acak aktif yang disetel ke 3, mereka di turn akan menyebarkan pesan itu ke semua rekan aktif mereka, meningkatkan jumlah hop saat ini satu per satu hingga mencapai 3 hop. Ini adalah mitigasi serangan DDoS terhadap node bootstrap, serta teknik desentralisasi yang efektif untuk menyebarkan dan mengacak konektivitas antar node sebanyak mungkin.

Setiap node yang berada dalam jarak 3 hop dari penerima JOIN awal akan mengirim pesan NEIGHBOR ke pemohon JOIN awal yang membuat koneksi persisten aktif di antara mereka.

Secara berkala setiap 15 detik node akan menyiarkan pesan SHUFFLE ke rekan aktif acak dengan sampel acak rekan aktif dan pasifnya dan mengatur panjang jalan acak pesan ini ke 4. Ini memastikan bahwa semua rekan dalam jaringan selalu memiliki informasi baru tentang rekan lain yang dapat mereka simpan dalam tampilan pasif untuk tujuan perbaikan jaringan, kapan pun rekan aktif mereka menjadi tidak responsif atau terputus secara eksplisit.

Gosip yang Efisien

Hanya rekan-rekan yang aktif berpartisipasi dalam penyebaran pesan antara rekan-rekan. Peer aktif membentuk jaringan overlay melalui internet publik dan ada siklus dalam grafik konektivitas antar node. Untuk mengaktifkan penggosipan pesan yang efisien antara rekan-rekan di jaringan, pertama-tama kita perlu meminimalkan propagasi pesan duplikat antara rekan-rekan dan kedua, menemukan rute pesan yang paling optimal.

Hal ini dicapai dengan menggunakan algoritma Epidemic Broadcast Trees yang membentuk pohon rentang minimum antara rekan-rekan, dengan membagi rekan-rekan menjadi sekelompok node bersemangat-push dan node malas push. Node Eager-push selalu mendapatkan pesan yang diteruskan segera setelah diterima oleh node mana pun.

Node push malas mendapatkan secara berkala, setiap 500 md, sekumpulan ID pesan yang dilihat oleh node saat ini. Setiap kali sebuah node mengamati bahwa ada id pesan dalam batch lazy-push yang tidak diterima dari node induk upstream-nya, node tersebut akan membangun kembali (GRAFT) koneksi dan memulihkan status active-pushnya. Ini merupakan mekanisme perbaikan pohon rentang minimum jika salah satu node turun dan grafik terputus-putus terbentuk. Pesan GRAFT memulihkan konektivitas jaringan penuh.

Setiap kali pesan yang diterima ditemukan sebagai duplikat dari pesan yang diterima sebelumnya dari node aktif, maka koneksi ke node tersebut dianggap sebagai siklus dalam grafik dan diubah menjadi Lazy-Push dengan mengirimkan pesan PRUNE.

Kasus lain untuk memangkas koneksi aktif dan menggantinya dengan salah satu dari daftar malas adalah ketika kita mengamati bahwa jumlah hop yang dilalui pesan untuk mencapai kita melalui node malas kurang dari 4 hop daripada pesan dari rekan aktif yang bersemangat. Itu membentuk algoritma optimasi pohon siaran.

Diseminasi Konten

pesan yang digosipkan melalui protokol p2p yang dijelaskan di bagian sebelumnya adalah pesan IPFS Bitswap dengan CID konten yang diproduksi oleh pengguna Solcial. Untuk lebih memahami bagaimana Bitswap dan IPFS digunakan di Solcial, pertama-tama mari kita jelaskan struktur profil pengguna.

Setiap akun pengguna di jaringan memiliki sesuatu yang disebut indeks profil . Indeks ini menunjuk ke CID versi terbaru dari konten mereka. Indeks adalah CRDT Urutan Akhirnya Konsisten yang membentuk log operasi yang tidak dapat diubah yang dilakukan oleh akun.

Indeks profil dapat dianggap sebagai daftar tertaut di mana setiap elemen menunjuk ke CID elemen sebelumnya dan diterima oleh rekan-rekan sebagai elemen berikutnya secara berurutan hanya jika ditandatangani oleh kunci pribadi pemilik akun. Contoh logis tingkat tinggi dari umpan profil yang diposting dengan enkode dalam format ini terlihat seperti ini:

Entri seperti itu memiliki CID sendiri dan disiarkan sebagai IPFS PB-DAG¹⁰ object to the /solcial/content HyparView overlay topic. Entri ini ditautkan ke entri sebelumnya dan konten tambahan apa pun dengan menanyakan CID tertaut secara rekursif, pengguna bisa mendapatkan seluruh riwayat akun dan konten.

Objek ini pertama kali divalidasi oleh rekan penerima mana pun jika tanda tangan konten cocok dengan kunci publik penulis. Dalam kasus verifikasi tanda tangan yang gagal, rekan pengirim secara permanen dilarang dari node saat ini karena melanggar protokol. Validasi tanda tangan yang berhasil menyebarkan konten ke semua rekan lain yang tertarik dengan konten yang dibuat oleh akun ini.

Ketika CID tersebut diterima oleh rekan, itu ditambahkan ke log operasi penulis. Jumlah dari semua operasi yang dilakukan oleh penulis merupakan keadaan profil saat ini.

Secara default, setiap simpul menyematkan dan menyemai konten akunnya sendiri dan konten teman-temannya. Ada rekan-rekan khusus yang kami bangun sebagai bagian dari infrastruktur kami yang kami sebut node suar dan mereka seperti rekan pengguna biasa, kecuali mereka tertarik pada konten semua orang dan berfungsi sebagai semacam layanan penyematan IPFS khusus sosial untuk semua konten jika semua seeder saat ini sedang offline. Pikirkan mereka sebagai simpul yang merupakan teman semua orang. Jaringan dapat berfungsi tanpa mereka, tetapi mereka menyediakan lapisan tambahan ketersediaan konten.

Akses Baca

Semua orang di hamparan p2p Solcial dapat meminta, mengunduh, dan menyediakan konten pengguna apa pun dengan menyiarkan pesan IWANT dan IHAVE Bitswap ke topik /solcial/content dengan CID dari indeks akar tingkat atas akun, dan kemudian meminta semua CID tertaut secara rekursif.

Sinkronisasi awal akun, atau mendapatkan entri terbaru akun dicapai dengan menyiarkan pesan HEAD ke topik /solcial/sync , di mana rekan lain yang merupakan seeder (termasuk node beacon) merespons dengan CID konten terbaru yang mereka ketahui dari. Terjemahan antara pegangan pengguna dan kunci publik pengguna dilakukan dengan menanyakan blockchain Solana.

Bidang entri sebelumnya dapat digunakan untuk menyelesaikan KEPALA yang berkonflik dan memutuskan entri terbaru.

Akses Tulis

Untuk dapat menulis ke log akun, pengguna harus memiliki kunci pribadi dari pasangan kunci ED25519 yang sesuai dengan ID akun mereka. Dengan memiliki kunci itu, pengguna dapat menghasilkan tanda tangan yang valid dari entri yang mereka tambahkan ke log yang tidak akan ditolak oleh rekan lain di jaringan.

Akses Konten Istimewa

Beberapa konten yang diposting oleh pengguna hanya ditujukan untuk grup penerima tertentu, seperti umpan langganan Tingkat-1 atau Tingkat-2. Postingan tersebut pertama kali dienkripsi menggunakan kunci enkripsi AES-256 simetris. Hash dari kunci itu dilampirkan ke metadata konten di pos asli.

Kuncinya disebarluaskan ke subset acak dari rekan-rekan yang memenuhi syarat melalui saluran terenkripsi NOISE yang dibuat selama handshake libp2p. Penulis posting dapat memilih untuk mengizinkan node suar untuk juga berpartisipasi dalam skema pertukaran kunci ini untuk membuat proses hampir instan untuk semua pengguna, tetapi mereka tidak harus melakukannya jika mereka yakin bahwa konten mereka sangat sensitif. Saat pengguna yang memenuhi syarat ingin menguraikan konten, mereka mengirim pesan GETKEY ke topik overlay /solcial/keyexchange dengan hash kunci enkripsi.

Semua rekan yang memiliki kunci yang sedang online akan memeriksa kelayakan rekan untuk mendapatkan kunci itu dengan menanyakan blockchain dan memverifikasi apakah pengguna memegang token yang diperlukan untuk mengakses konten. Setelah verifikasi berhasil, kunci ditransmisikan ke rekan yang meminta menggunakan koneksi quic/noise langsung yang melewati protokol gosip.

Dukungan platform

Protokol peer to peer untuk konten yang tahan sensor ini hanya tersedia untuk klien desktop dan seluler dan tidak tersedia melalui antarmuka web. Ini karena keterbatasan browser. Browser secara inheren dirancang sebagai konsumen konten yang dihosting di server dan model keamanannya melarang menerima koneksi acak dari mesin lain.

Tumpukan teknis yang mendasarinya diimplementasikan menggunakan Rust, libp2p dengan binding ke React Native dan Tauri .

[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/


Tentang Solcial

Solcial adalah jaringan sosial terdesentralisasi yang bertujuan untuk memberikan pengguna kekuatan Web3 dengan memungkinkan untuk berinteraksi satu sama lain tanpa takut sensor, dan memungkinkan pembuat konten untuk dihargai secara adil dengan nilai pasar.

Get in Touch/sumber

Telegram: https://t.me/solcial
Twitter: https://twitter.com/solcialofficial
Medium: https://blog.solcial.io/
Web: https://solcial.io
Email: [email protected]

You've successfully subscribed to Solcial Blog
Great! Next, complete checkout to get full access to all premium content.
Error! Could not sign up. invalid link.
Welcome back! You've successfully signed in.
Error! Could not sign in. Please try again.
Success! Your account is fully activated, you now have access to all content.
Error! Stripe checkout failed.
Success! Your billing info is updated.
Error! Billing info update failed.