ورقة عمل NEAR

Oleh Alex Skidanov and Illia Polosukhin · 2019

Dasar-dasar Berbagi

Mari kita mulai dengan pendekatan sharding yang paling sederhana. Dalam pendekatan ini, bukan menjalankan satu blockchain, kita akan menjalankan beberapa, dan memanggil masing-masing blockchain a "pecahan". Setiap pecahan akan memiliki kumpulan validatornya sendiri. Di sini dan di bawah kami menggunakan istilah umum “validator” untuk merujuk pada peserta yang memverifikasi transaksi dan menghasilkan blok, baik dengan menambang, seperti di Proof of Work, atau melalui pemungutan suara 1Bagian ini sebelumnya diterbitkan pada https://near.ai/shard1. Jika Anda pernah membacanya sebelumnya, lewati ke bagian berikutnya.

mekanisme. Untuk saat ini mari kita asumsikan bahwa pecahan tidak pernah berkomunikasi satu sama lain lainnya. Desain ini, meskipun sederhana, cukup untuk menguraikan beberapa tantangan besar awal dalam sharding. 1.1 Partisi validator dan rantai Beacon Katakanlah sistem terdiri dari 10 pecahan. Tantangan pertama adalah tantangan masing-masing shard memiliki validator sendiri, setiap shard kini 10 kali lebih aman dibandingkan seluruh rantai. Jadi jika rantai non-sharded dengan X validators memutuskan untuk melakukan hard-fork menjadi rantai pecahan, dan membagi X validator menjadi 10 pecahan, masing-masing pecahan sekarang hanya memiliki X/10 validators, dan merusak satu pecahan hanya memerlukan kerusakan 5,1% (51% / 10) dari jumlah total validators (lihat gambar 1), Gambar 1: Membagi validator menjadi pecahan yang membawa kita ke poin kedua: siapa yang memilih validator untuk setiap pecahan? Mengontrol 5,1% dari validator hanya akan merugikan jika 5,1% dari validator tersebut semuanya berada di pecahan yang sama. Jika validators tidak dapat memilih pecahan mana yang akan divalidasi di, peserta yang menguasai 5,1% dari validator sangat kecil kemungkinannya untuk mendapatkan semuanya validator mereka di pecahan yang sama, sangat mengurangi kemampuan mereka untuk berkompromi sistem. Hampir semua desain sharding saat ini bergantung pada sumber keacakan tetapkan validators ke pecahan. Keacakan pada blockchain sendiri merupakan topik yang sangat menantang dan berada di luar cakupan dokumen ini. Untuk saat ini mari kita asumsikan ada beberapa sumber keacakan yang bisa kita gunakan. Kami akan membahas tugas validator di lebih detail di bagian 2.1. Baik keacakan maupun penugasan validator memerlukan perhitungan yang tidak memerlukan perhitungan khusus untuk pecahan tertentu. Untuk perhitungan itu, praktis semuanya ada desain memiliki blockchain terpisah yang bertugas melakukan operasi diperlukan untuk pemeliharaan seluruh jaringan. Selain menghasilkan secara acakangka dan menugaskan validator ke pecahan, operasi ini juga sering terjadi termasuk menerima pembaruan dari pecahan dan mengambil cuplikannya, serta memprosesnya taruhan dan pemotongan dalam sistem Proof-of-Stake, dan menyeimbangkan kembali pecahan saat itu fitur didukung. Rantai seperti itu disebut rantai Beacon di Ethereum, Relay rantai di PolkaDot, dan Hub Cosmos di Cosmos. Sepanjang dokumen ini kami akan menyebut rantai tersebut sebagai rantai Beacon. Keberadaan rantai Beacon membawa kita ke topik menarik berikutnya, yaitu pecahan kuadrat. 1.2 Pecahan kuadrat Sharding sering kali diiklankan sebagai solusi yang berskala tanpa batas dengan jumlah yang ada node yang berpartisipasi dalam operasi jaringan. Meskipun secara teori mungkin saja demikian rancang solusi sharding seperti itu, solusi apa pun yang memiliki konsep Beacon rantai tidak memiliki skalabilitas yang tak terbatas. Untuk memahami alasannya, perhatikan Beacon itu rantai harus melakukan beberapa perhitungan pembukuan, seperti menugaskan validators ke pecahan, atau memotret blok rantai pecahan, yang sebanding dengan jumlahnya pecahan dalam sistem. Karena rantai Beacon itu sendiri merupakan blockchain tunggal, dengan komputasi dibatasi oleh kemampuan komputasi node yang mengoperasikannya, jumlah pecahan secara alami terbatas. Namun, struktur jaringan sharding memang memberikan perkalian berpengaruh pada perbaikan apa pun pada nodenya. Pertimbangkan kasus yang bersifat sewenang-wenang perbaikan dilakukan pada efisiensi node dalam jaringan yang memungkinkan mereka waktu pemrosesan transaksi lebih cepat. Jika node yang mengoperasikan jaringan, termasuk node dalam rantai Beacon, menjadi empat kali lebih cepat, maka setiap pecahan akan mampu diproses empat kali lebih banyak transaksi, dan rantai Beacon akan mampu mempertahankan pecahan 4 kali lebih banyak. Throughput di seluruh sistem akan meningkat dengan faktor 4 × 4 = 16 — demikianlah namanya sharding kuadrat. Sulit untuk memberikan pengukuran yang akurat mengenai berapa banyak pecahannya dapat dilakukan saat ini, namun kecil kemungkinannya untuk mencapai throughput di masa mendatang kebutuhan blockchain pengguna akan melampaui keterbatasan sharding kuadrat. Banyaknya node yang diperlukan untuk mengoperasikan pecahan sebanyak itu dengan aman kemungkinan besarnya lebih tinggi dari jumlah node yang beroperasi secara keseluruhan blockchain digabungkan hari ini. 1.3 Pecahan negara Sampai saat ini kita belum dapat mendefinisikan dengan baik apa sebenarnya yang bisa dipisahkan dan apa yang tidak ketika jaringan dibagi menjadi pecahan. Secara khusus, node di blockchain melakukan tiga tugas penting: mereka tidak hanya 1) memproses transaksi, mereka juga juga 2) menyampaikan transaksi yang divalidasi dan menyelesaikan blok ke node lain dan 3) menyimpan keadaan dan sejarah seluruh buku besar jaringan. Masing-masing dari ketiganya tugas-tugas ini membebankan kebutuhan yang semakin besar pada node-node yang mengoperasikan jaringan:1. Kebutuhan untuk memproses transaksi memerlukan daya komputasi yang lebih besar peningkatan jumlah transaksi yang diproses; 2. Kebutuhan untuk merelay transaksi dan memblokir memerlukan lebih banyak bandwidth jaringan seiring dengan meningkatnya jumlah transaksi yang direlai; 3. Kebutuhan untuk menyimpan data memerlukan lebih banyak penyimpanan seiring dengan pertumbuhan negara. Yang penting, tidak seperti kekuatan pemrosesan dan jaringan, kebutuhan penyimpanan bertambah meskipun tingkat transaksi (jumlah transaksi yang diproses per detik) tetap konstan. Dari daftar di atas mungkin tampak bahwa kebutuhan penyimpanannya adalah yang paling mendesak, karena ini adalah satu-satunya hal yang terus meningkat seiring berjalannya waktu walaupun jumlah transaksi per detiknya tidak berubah, namun dalam praktiknya persyaratan paling mendesak saat ini adalah kekuatan komputasi. Seluruh negara bagian Ethereum pada tulisan ini adalah 100GB, mudah dikelola oleh sebagian besar node. Namun jumlah transaksi yang dapat diproses Ethereum adalah sekitar 20 pesanan besarnya kurang dari apa yang dibutuhkan untuk banyak kasus penggunaan praktis. Zilliqa adalah proyek paling terkenal yang memproses pecahan tetapi tidak menyimpan. Sharding pemrosesan adalah masalah yang lebih mudah karena setiap node memiliki keseluruhannya menyatakan, artinya kontrak dapat dengan bebas meminta kontrak lain dan membaca data apa pun dari blockchain. Diperlukan rekayasa yang cermat untuk memastikan pembaruan dari beberapa pecahan yang memperbarui bagian negara yang sama tidak bertentangan. Di dalam hal ini Zilliqa mengambil pendekatan yang relatif sederhana2. Meskipun sharding penyimpanan tanpa sharding pemrosesan telah diusulkan, namun memang demikian sangat jarang. Jadi dalam praktiknya sharding penyimpanan, atau State Sharding, hampir selalu menyiratkan sharding pemrosesan dan sharding jaringan. Praktisnya, di bawah State Sharding, node di setiap shard membangunnya sendiri memiliki blockchain yang berisi transaksi yang hanya mempengaruhi bagian lokal dari keadaan global yang ditugaskan ke pecahan itu. Oleh karena itu, validators di shard hanya perlu menyimpan bagian lokalnya dari status global dan hanya mengeksekusi, dan dengan demikian hanya relay, transaksi yang mempengaruhi bagian negara mereka. Ini partisi secara linear mengurangi kebutuhan pada semua daya komputasi, penyimpanan, dan bandwidth jaringan, namun menimbulkan masalah baru, seperti ketersediaan data dan transaksi lintas pecahan, keduanya akan kami bahas di bawah. 1.4 Transaksi lintas pecahan Model sharding yang kami jelaskan sejauh ini tidak terlalu berguna, karena bersifat individual pecahan tidak dapat berkomunikasi satu sama lain, mereka tidak lebih baik dari banyak mandiri blockchains. Bahkan saat ini, ketika sharding tidak tersedia, ada a permintaan besar untuk interoperabilitas antara berbagai blockchains. Untuk saat ini, mari kita pertimbangkan transaksi pembayaran sederhana saja, di mana setiap peserta memiliki akun tepat pada satu shard. Jika seseorang ingin mentransfer uang dari 2Analisis kami mengenai pendekatan mereka dapat ditemukan di sini: https://medium.com/nearprotocol/ 8f9efae0ce3bsatu akun ke akun lain dalam shard yang sama, transaksi dapat diproses seluruhnya dengan validator di pecahan itu. Namun, jika Alice berada di beling

1 ingin mengirim uang kepada Bob yang berada di pecahan #2, tidak juga validators

pada pecahan #1 (mereka tidak akan dapat mengkredit akun Bob) atau validator pada pecahan #2 (mereka tidak akan bisa mendebit rekening Alice) dapat memproses keseluruhannya transaksi. Ada dua kelompok pendekatan untuk transaksi lintas pecahan: • Sinkron: setiap kali transaksi lintas pecahan perlu dijalankan, blok dalam beberapa pecahan yang berisi transisi keadaan terkait dengan semua transaksi diproduksi secara bersamaan, dan validator dari beberapa pecahan berkolaborasi dalam mengeksekusi transaksi tersebut.3 • Asynchronous: transaksi lintas shard yang memengaruhi banyak shard dieksekusi dalam pecahan tersebut secara asinkron, pecahan “Kredit” dijalankan setengahnya setelah memiliki cukup bukti bahwa pecahan “Debit” telah melaksanakan bagiannya. Pendekatan ini cenderung lebih lazim karena sifatnya kesederhanaan dan kemudahan koordinasi. Sistem ini saat ini diusulkan di Cosmos, Ethereum Serenity, Near, Kadena, dan lainnya. Ada masalah dengan ini Pendekatannya terletak pada bahwa jika blok diproduksi secara independen, ada kemungkinan bukan nol bahwa salah satu dari beberapa blok akan menjadi yatim piatu, sehingga membuat transaksi hanya diterapkan sebagian. Perhatikan gambar 2 yang menggambarkan dua pecahan yang keduanya mengalami fork, dan transaksi lintas pecahan yang dicatat di blok A dan X’ secara berurutan. Jika rantai A-B dan V'-X'-Y'-Z' menjadi kanonik di pecahan yang sesuai, yaitu transaksi telah selesai sepenuhnya. Jika A’-B’-C’-D’ dan V-X menjadi kanonik, maka transaksi tersebut sepenuhnya ditinggalkan, yang dapat diterima. Tapi jika, untuk Misalnya, A-B dan V-X menjadi kanonik, lalu satu bagian transaksi diselesaikan dan satu lagi ditinggalkan, sehingga menimbulkan kegagalan atomisitas. Kami akan membahas bagaimana masalah ini diatasi dalam protokol yang diusulkan di bagian kedua, ketika membahas perubahan pada aturan pilihan fork dan konsensus algoritma yang diusulkan untuk protokol sharded. Perhatikan bahwa komunikasi antar rantai berguna di luar blockchains yang dipecah juga. Interoperabilitas antar rantai adalah masalah kompleks yang banyak diproyeksikan sedang mencoba menyelesaikannya. Di blockchains yang dipecah, masalahnya menjadi lebih mudah struktur blok dan konsensusnya sama di seluruh shard, dan terdapat rantai suar yang dapat digunakan untuk koordinasi. Namun, dalam blockchain yang dipecah, semua rantai pecahannya sama, sedangkan di ekosistem global blockchains ada Ada banyak blockchain yang berbeda, dengan kasus penggunaan target yang berbeda, desentralisasi dan jaminan privasi. Membangun sistem di mana sekumpulan rantai memiliki sifat yang berbeda tetapi menggunakan konsensus dan struktur blok yang cukup mirip serta memiliki rantai suar yang sama dapat memungkinkan terciptanya ekosistem blockchain heterogen yang memiliki 3Itu paling rinci usulan diketahui untuk itu penulis dari ini dokumen adalah Gabungkan Blok, dijelaskan di sini: https://ethresear.ch/t/ gabung-blok-dan-sinkronisasi-lintas-pecahan-eksekusi/1240Gambar 2: Transaksi lintas pecahan asinkron subsistem interoperabilitas yang berfungsi. Sistem seperti ini kemungkinan tidak menampilkan rotasi validator, sehingga beberapa tindakan tambahan perlu diambil untuk memastikan keamanan. Keduanya Cosmos dan PolkaDot adalah sistem yang efektif4 1.5 Perilaku berbahaya Di bagian ini kami akan meninjau perilaku permusuhan apa yang dapat menyebabkan validators berbahaya latihan jika mereka berhasil merusak pecahan. Kami akan meninjau pendekatan klasik untuk menghindari kerusakan pecahan di bagian 2.1. 1.5.1 Garpu berbahaya Sekumpulan validator yang berbahaya mungkin mencoba membuat fork. Perhatikan bahwa tidak masalah apakah konsensus yang mendasarinya adalah BFT atau tidak, akan merusak jumlah yang cukup dari validators akan selalu memungkinkan untuk membuat garpu. Secara signifikan lebih mungkin terjadi kerusakan pada lebih dari 50% satu shard, dibandingkan lebih dari 50% keseluruhan jaringan yang rusak (kita akan selami lebih dalam probabilitas ini di bagian 2.1). Seperti yang dibahas di bagian 1.4, transaksi lintas pecahan melibatkan perubahan keadaan tertentu di beberapa pecahan, dan blok yang sesuai dalam pecahan tersebut yang menerapkan perubahan status tersebut harus baik semuanya sudah diselesaikan (yaitu muncul di rantai yang dipilih pada rantai yang sesuai pecahan), atau semuanya menjadi yatim piatu (yaitu tidak muncul dalam rantai yang dipilih pada pecahan yang sesuai). Karena umumnya kemungkinan pecahannya rusak 4Lihat artikel ini oleh Zaki Manian dari Cosmos: https://forum.cosmos.network/ t/polkadot-vs-cosmos/1397/2 dan tweet-storm ini oleh penulis pertama dokumen ini: https://twitter.com/AlexSkidanov/status/1129511266660126720 untuk perbandingan detail dari keduanya

tidak dapat diabaikan, kita tidak dapat berasumsi bahwa percabangan tidak akan terjadi bahkan jika konsensus Bizantium tercapai di antara validator pecahan, atau banyak blok yang dihancurkan diproduksi di atas blok dengan perubahan keadaan. Masalah ini memiliki banyak solusi, solusi yang paling umum adalah solusi sesekali tautan silang blok rantai pecahan terbaru ke rantai suar. Garpu aturan pilihan dalam rantai pecahan kemudian diubah untuk selalu memilih rantai yang ada terhubung silang, dan hanya menerapkan aturan pilihan garpu khusus pecahan untuk blok yang ada diterbitkan sejak cross-link terakhir. 1.5.2 Menyetujui blok yang tidak valid Sekumpulan validator mungkin mencoba membuat blok yang menerapkan fungsi transisi status secara tidak benar. Misalnya, dimulai dengan keadaan dimana Alice memiliki 10 tokens dan Bob memiliki 0 tokens, blok tersebut mungkin berisi transaksi yang mengirimkan 10 token dari Alice ke Bob, tetapi berakhir dengan keadaan di mana Alice memiliki 0 tokens dan Bob memiliki 1000 tokens, seperti yang ditunjukkan pada gambar 3. Gambar 3: Contoh blok yang tidak valid Dalam blockchain non-sharded klasik, serangan seperti itu tidak mungkin dilakukan, karena semuanya peserta dalam jaringan memvalidasi semua blok, dan blok dengan itu transisi keadaan yang tidak valid akan ditolak oleh produsen blok lainnya, dan peserta jaringan yang tidak membuat blok. Sekalipun itu jahat validators terus membuat blok di atas blok yang tidak valid tersebut lebih cepat dari validators yang jujur membangun rantai yang benar, sehingga memiliki rantai dengan yang tidak valid blok menjadi lebih panjang, tidak masalah, karena setiap peserta yang menggunakan blockchain untuk tujuan apa pun memvalidasi semua blok, dan membuang semua blok dibangun di atas blok yang tidak valid. Pada gambar 4 ada lima validator, tiga di antaranya berbahaya. Mereka membuat blok A' yang tidak valid, dan kemudian melanjutkan pembuatan blok baru di atasnya itu. Dua validator yang jujur ​​membuang A' karena tidak valid dan dibangun di atasnyaGambar 4: Mencoba membuat blok yang tidak valid di blockchain yang tidak di-shard dari blok valid terakhir yang mereka ketahui, menciptakan garpu. Karena jumlahnya lebih sedikit validator berada di garpu yang jujur, rantainya lebih pendek. Namun, dalam blockchain nonsharded klasik, setiap peserta yang menggunakan blockchain untuk tujuan apa pun adalah bertanggung jawab untuk memvalidasi semua blok yang mereka terima dan menghitung ulang statusnya. Jadi siapa pun yang berkepentingan dengan blockchain akan mengamati bahwa A' tidak valid, dan dengan demikian segera membuang B', C' dan D', sehingga mengambil rantai A-B sebagai rantai valid terpanjang saat ini. Namun, dalam blockchain shard, tidak ada peserta yang dapat memvalidasi semua transaksi di semua shard, jadi mereka perlu memiliki cara untuk mengonfirmasinya kapan pun titik dalam riwayat pecahan apa pun dari blockchain tidak ada blok yang tidak valid yang disertakan. Perhatikan bahwa tidak seperti fork, tautan silang ke rantai Beacon bukanlah solusi yang memadai, karena rantai Beacon tidak memiliki kapasitas untuk memvalidasi blok. Itu hanya dapat memvalidasi bahwa jumlah validator yang cukup dalam pecahan itu menandatangani blok tersebut (dan dengan demikian membuktikan kebenarannya). Kami akan membahas solusi untuk masalah ini di bagian 2.2 di bawah.

أساسيات المشاركة

لنبدأ بأبسط طريقة للمشاركة. في هذا النهج بدلا من بتشغيل blockchain واحد، سنقوم بتشغيل عدة، ونستدعي كل منها blockchain a "الشظية". سيكون لكل جزء مجموعته الخاصة من validators. هنا وأدناه نستخدم مصطلح عام "validator" للإشارة إلى المشاركين الذين يتحققون من المعاملات و إنتاج الكتل، إما عن طريق التعدين، كما هو الحال في إثبات العمل، أو عن طريق التصويت على أساس 1تم نشر هذا القسم مسبقًا في https://near.ai/shard1. إذا قرأته من قبل، انتقل إلى القسم التالي.

آلية. لنفترض الآن أن القطع لا تتواصل مع بعضها أبدًا أخرى. هذا التصميم، على الرغم من بساطته، يكفي لتوضيح بعض التحديات الرئيسية الأولية في التقسيم. 1.1 تقسيم المدقق وسلاسل المنارة لنفترض أن النظام يتكون من 10 أجزاء. التحدي الأول هو أنه مع كل منهما الجزء الذي يحتوي على validators خاص به، أصبح كل جزء الآن أقل أمانًا بعشر مرات من الجزء السلسلة بأكملها. لذا، إذا قررت سلسلة غير مجزأة تحتوي على X validators إجراء عملية الانقسام الكلي إلى سلسلة مجزأة، وتقسم X validators عبر 10 أجزاء، كل جزء الآن يحتوي فقط على X/10 validators، وإفساد جزء واحد يتطلب إفسادًا فقط 5.1% (51% / 10) من إجمالي عدد validators (انظر الشكل 1)، الشكل 1: تقسيم validators عبر الأجزاء وهو ما يقودنا إلى النقطة الثانية: من يختار validators لكل جزء؟ إن التحكم في 5.1% من validators يكون ضارًا فقط إذا كانت كل تلك الـ 5.1% من validators هم في نفس القشرة. إذا لم يتمكن validators من اختيار الجزء الذي يمكنهم التحقق من صحته في، من غير المرجح أن يحصل المشارك الذي يتحكم في 5.1% من validators على كل شيء validators في نفس القطعة، مما يقلل بشكل كبير من قدرتهم على التسوية النظام. تعتمد جميع تصميمات التجزئة تقريبًا اليوم على بعض مصادر العشوائية قم بتعيين validators إلى الأجزاء. تعتبر العشوائية في blockchain في حد ذاتها موضوعًا صعبًا للغاية وهي خارج نطاق هذه الوثيقة. الآن دعونا نفترض أن هناك بعض مصادر العشوائية التي يمكننا استخدامها. سوف نقوم بتغطية مهمة validators في مزيد من التفاصيل في القسم 2.1. تتطلب كل من العشوائية والتخصيص validator حسابًا ليس كذلك خاص بأي شريحة معينة. لهذا الحساب، عمليا كل الموجود تحتوي التصميمات على blockchain منفصل مكلف بتنفيذ العمليات اللازمة لصيانة الشبكة بأكملها. إلى جانب توليد عشوائيالأرقام وتعيين validators للأجزاء، غالبًا ما تكون هذه العمليات أيضًا تتضمن تلقي التحديثات من الأجزاء والتقاط لقطات منها ومعالجتها الرهانات والتخفيض في أنظمة إثبات الحصة، وإعادة موازنة القطع عند ذلك الميزة مدعومة. تسمى هذه السلسلة بسلسلة المنارة في Ethereum، وهي مرحل السلسلة في PolkaDot، والمركز Cosmos في Cosmos. في جميع أنحاء هذه الوثيقة سوف نشير إلى هذه السلسلة باسم سلسلة المنارة. يقودنا وجود سلسلة Beacon إلى الموضوع التالي المثير للاهتمام، وهو تقسيم تربيعي. 1.2 التقسيم التربيعي غالبًا ما يتم الإعلان عن المشاركة كحل يتسع بشكل لا نهائي مع العدد من العقد المشاركة في تشغيل الشبكة. في حين أنه من الناحية النظرية ممكن تصميم مثل هذا الحل للمشاركة، أي حل يحتوي على مفهوم المنارة السلسلة ليس لديها قابلية التوسع اللانهائية. لفهم السبب، لاحظ أن المنارة يتعين على السلسلة إجراء بعض العمليات الحسابية المحاسبية، مثل تعيين validators إلى القطع، أو قطع سلسلة القطع، التي تتناسب مع العدد من الشظايا في النظام. نظرًا لأن سلسلة Beacon هي نفسها blockchain واحدة، مع الحساب يحده القدرات الحسابية للعقد التي تعمل عليه، عدد القطع محدود بشكل طبيعي. ومع ذلك، فإن بنية الشبكة المجزأة تمنح عملية مضاعفة التأثير على أي تحسينات على العقد الخاصة به. النظر في الحالة التي يكون فيها التعسفي يتم إجراء تحسين على كفاءة العقد في الشبكة مما سيسمح بذلك لهم أوقات معالجة المعاملات أسرع. إذا كانت العقد التي تقوم بتشغيل الشبكة، بما في ذلك العقد الموجودة في سلسلة المنارة، تصبح أسرع بأربع مرات، فستكون كل قطعة قادرة على المعالجة أربع مرات أكثر المعاملات، وستكون سلسلة المنارة قادرة على الحفاظ على شظايا أكثر بأربعة أضعاف. ستزداد الإنتاجية عبر النظام بعامل 4 × 4 = 16 - ومن هنا جاء اسم التقسيم التربيعي. من الصعب توفير قياس دقيق لعدد الشظايا قابلة للحياة اليوم، ولكن من غير المرجح أن في أي المستقبل المنظور الإنتاجية سوف تتجاوز احتياجات مستخدمي blockchain قيود التقسيم التربيعي. العدد الهائل من العقد اللازمة لتشغيل مثل هذا الحجم من القطع بشكل آمن من المحتمل أن يكون حجمها أعلى من عدد العقد التي تعمل جميعها blockchains مجتمعة اليوم. 1.3 تقسيم الدولة حتى الآن لم نحدد بشكل جيد ما هو منفصل وما هو غير منفصل عندما يتم تقسيم الشبكة إلى أجزاء. على وجه التحديد، العقد الموجودة في blockchain أداء ثلاث مهام مهمة: لا يقومون فقط بـ 1) معالجة المعاملات، بل يقومون أيضًا أيضًا 2) ترحيل المعاملات التي تم التحقق منها والكتل المكتملة إلى العقد الأخرى و3) تخزين حالة وتاريخ دفتر أستاذ الشبكة بالكامل. كل واحد من هؤلاء الثلاثة تفرض المهام متطلبات متزايدة على العقد التي تقوم بتشغيل الشبكة:1. تتطلب ضرورة معالجة المعاملات المزيد من القوة الحاسوبية زيادة عدد المعاملات التي تتم معالجتها؛ 2. تتطلب ضرورة ترحيل المعاملات والكتل مزيدًا من النطاق الترددي للشبكة مع زيادة عدد المعاملات التي يتم ترحيلها؛ 3. ضرورة تخزين البيانات تتطلب المزيد من التخزين مع نمو الدولة. الأهم من ذلك، على عكس قوة المعالجة والشبكة، فإن متطلبات التخزين تنمو حتى لو كان معدل المعاملة (عدد المعاملات التي تمت معالجتها). في الثانية) يظل ثابتًا. من القائمة أعلاه قد يبدو أن متطلبات التخزين ستكون كذلك والأكثر إلحاحا، لأنه الوحيد الذي يتزايد مع مرور الوقت حتى لو لم يتغير عدد المعاملات في الثانية، ولكن في الممارسة العملية الشرط الأكثر إلحاحا اليوم هو قوة الحوسبة. الدولة بأكملها Ethereum حتى كتابة هذه السطور تبلغ 100 جيجابايت، ويمكن التحكم فيها بسهولة بواسطة معظم العقد. لكن عدد المعاملات التي يمكن لـ Ethereum معالجتها يبلغ حوالي 20 ألف طلب حجمها أقل مما هو مطلوب في العديد من حالات الاستخدام العملي. Zilliqa هو المشروع الأكثر شهرة الذي يقوم بمعالجة القطع وليس التخزين. تعد عملية تقاسم المعالجة مشكلة أسهل لأن كل عقدة تحتوي على كامل المعالجة State، مما يعني أنه يمكن للعقود استدعاء العقود الأخرى بحرية وقراءة أي بيانات من blockchain. هناك حاجة إلى بعض الهندسة الدقيقة للتأكد من التحديثات من شظايا متعددة تحديث نفس الأجزاء من الدولة لا تتعارض. في فيما يتعلق بهذه الأمور، تتخذ Zilliqa نهجًا مبسطًا نسبيًا. في حين تم اقتراح تقسيم التخزين دون تقسيم المعالجة، فهو كذلك غير شائع للغاية. وبالتالي، في الممارسة العملية، تقاسم التخزين، أو تقاسم الدولة، يعني دائمًا تقريبًا تقسيم المعالجة وتقسيم الشبكة. من الناحية العملية، في ظل تقسيم الحالة، تقوم العقد الموجودة في كل جزء ببناء عقدها الخاصة الخاص blockchain الذي يحتوي على المعاملات التي تؤثر فقط على الجزء المحلي من الحالة العالمية المخصصة لتلك القطعة. ولذلك، فإن validators في تحتاج Shard فقط إلى تخزين الجزء المحلي الخاص بها من الحالة العالمية وتنفيذها فقط، وعلى هذا النحو فقط يقومون بترحيل المعاملات التي تؤثر على الجزء الخاص بهم من الدولة. هذا يعمل التقسيم خطيًا على تقليل المتطلبات على جميع طاقة الحوسبة والتخزين و عرض النطاق الترددي للشبكة، ولكنه يقدم مشاكل جديدة، مثل توفر البيانات و المعاملات المتقاطعة، والتي سنغطيها أدناه. 1.4 المعاملات المتقاطعة نموذج التجزئة الذي وصفناه حتى الآن ليس مفيدًا جدًا، لأنه إذا كان فرديًا لا تستطيع الشظايا التواصل مع بعضها البعض، فهي ليست أفضل من المتعددة مستقل blockchains. حتى اليوم، عندما لا تكون المشاركة متاحة، هناك الطلب الكبير على قابلية التشغيل البيني بين مختلف blockchains. دعونا الآن نفكر فقط في معاملات الدفع البسيطة، حيث يكون لكل مشارك حساب في جزء واحد بالضبط. إذا كان أحد يرغب في تحويل الأموال من 2يمكن العثور على تحليلنا لنهجهم هنا: https://medium.com/nearprotocol/ 8f9efae0ce3bمن حساب إلى آخر ضمن نفس الجزء، يمكن معالجة المعاملة بالكامل بواسطة validators في تلك القطعة. ومع ذلك، إذا كانت أليس تسكن على القشرة يريد رقم 1 إرسال أموال إلى بوب الذي يقيم في الجزء رقم 2، وليس validators في الجزء رقم 1 (لن يتمكنوا من إضافة حساب بوب) ولا validators على يمكن للجزء رقم 2 (لن يتمكنوا من الخصم من حساب أليس) معالجة العملية بالكامل معاملة. هناك مجموعتان من أساليب التعامل مع المعاملات المتقاطعة: • متزامن: عندما يلزم تنفيذ معاملة متقاطعة، الكتل الموجودة في أجزاء متعددة تحتوي على انتقال الحالة المتعلق بـ يتم إنتاج جميع المعاملات في نفس الوقت، وتتعاون validators من الأجزاء المتعددة في تنفيذ مثل هذه المعاملات.3 • غير متزامن: معاملة متقاطعة تؤثر على أجزاء متعددة يتم تنفيذه في تلك الأجزاء بشكل غير متزامن، ويتم تنفيذ جزء "الائتمان". نصفها بمجرد أن يكون لديها أدلة كافية على أن الجزء "المدين" قد نفذ نصيبه. يميل هذا النهج إلى أن يكون أكثر انتشارًا نظرًا لخصائصه البساطة وسهولة التنسيق. يُقترح هذا النظام اليوم في Cosmos، Ethereum Serenity، Near، Kadena، وغيرها. مشكلة في هذا يكمن النهج في أنه إذا تم إنتاج الكتل بشكل مستقل، فهناك فرصة غير صفرية لأن تصبح إحدى الكتل المتعددة معزولة، مما يجعل تم تطبيق المعاملة جزئيًا فقط. خذ بعين الاعتبار الشكل 2 الذي يصور اثنين واجه كلاهما شوكة ومعاملة متقاطعة التي تم تسجيلها في الكتلتين A وX على التوالي. إذا كانت السلاسل A-B وV'-X'-Y'-Z' ينتهي بهما الأمر إلى أن يكونا أساسيين في الأجزاء المقابلة، the تم الانتهاء من الصفقة بالكامل. إذا أصبح A'-B'-C'-D' وV-X أساسيين، ومن ثم يتم التخلي عن المعاملة بالكامل، وهو أمر مقبول. ولكن إذا، ل على سبيل المثال، تصبح A-B وV-X أساسية، ثم يتم الانتهاء من جزء واحد من المعاملة ويتم التخلي عن جزء آخر، مما يؤدي إلى فشل ذري. نحن سوف يغطي كيفية معالجة هذه المشكلة في البروتوكولات المقترحة في الجزء الثاني، عند تغطية التغييرات في قواعد اختيار الشوكة والإجماع الخوارزميات المقترحة للبروتوكولات المجزأة. لاحظ أن الاتصال بين السلاسل مفيد خارج blockchains المقسمة أيضا. تعد إمكانية التشغيل البيني بين السلاسل مشكلة معقدة تواجهها العديد من المشاريع يحاولون حل. في blockchains المشكلة أسهل إلى حد ما منذ ذلك الحين هيكل الكتلة والإجماع متماثلان عبر الأجزاء، وهناك سلسلة إشارات يمكن استخدامها للتنسيق. ومع ذلك، في blockchain مجزأة، جميع سلاسل الأجزاء هي نفسها، بينما في النظام البيئي العالمي blockchains هناك هناك الكثير من blockchains، مع حالات استخدام مستهدفة مختلفة، واللامركزية وضمانات الخصوصية. بناء نظام تكون فيه مجموعة من السلاسل لها خصائص مختلفة ولكن استخدام إجماع وبنية كتلة متماثلين بدرجة كافية والحصول على سلسلة إشارات مشتركة يمكن أن تمكن نظامًا بيئيًا من blockchains غير المتجانسة التي لها 3ال معظم مفصلة اقتراح معروف ل ال المؤلفين من هذا وثيقة هو دمج كتل، الموصوفة هنا: https://ethresear.ch/t/ دمج الكتل والتزامن عبر تنفيذ الحالة / 1240الشكل 2: المعاملات المتقاطعة غير المتزامنة العمل على النظام الفرعي للتشغيل البيني. من غير المحتمل أن يتميز مثل هذا النظام بالتناوب validator، لذا يلزم اتخاذ بعض الإجراءات الإضافية لضمان الأمان. كلاهما Cosmos وPolkaDot هما من هذه الأنظمة بشكل فعال4 1.5 السلوك الضار سنراجع في هذا القسم السلوك العدائي الذي يمكن أن يكون ضارًا لـ validators ممارسة إذا تمكنوا من إفساد شظية. سنراجع الأساليب الكلاسيكية لتجنب إتلاف القطع في القسم 2.1. 1.5.1 شوكات ضارة قد تحاول مجموعة من validators الضارة إنشاء تفرع. لاحظ أنه لا لا يهم إذا كان الإجماع الأساسي هو BFT أم لا، مما يؤدي إلى إفساد العدد الكافي من validators سيجعل من الممكن دائمًا إنشاء شوكة. من المرجح بشكل كبير أن يفسد أكثر من 50% من جزء واحد، أكثر من أن يفسد أكثر من 50% من الشبكة بأكملها (سنقوم بذلك) تعمق أكثر في هذه الاحتمالات في القسم 2.1). كما تمت مناقشته في القسم 1.4، تتضمن المعاملات المتقاطعة تغييرات معينة في الحالة في أجزاء متعددة، و يجب أن تكون الكتل المقابلة في هذه القطع التي تطبق مثل هذه التغييرات في الحالة إما أن يتم الانتهاء منها جميعًا (أي تظهر في السلاسل المحددة في السلاسل المقابلة لها القطع)، أو تكون جميعها يتيمة (أي لا تظهر في السلاسل المحددة على القطع المقابلة لها). منذ عموما احتمال تلف القطع 4 ارجع إلى هذه الكتابة التي كتبها زكي مانيان من Cosmos: https://forum.cosmos.network/ t/polkadot-vs-cosmos/1397/2 وهذه العاصفة من التغريدات التي كتبها المؤلف الأول لهذه الوثيقة: https://twitter.com/AlexSkidanov/status/1129511266660126720 للحصول على مقارنة تفصيلية من الاثنين

لا يمكن إهمالها، فلا يمكننا أن نفترض أن التشعبات لن تحدث حتى لو تم التوصل إلى إجماع بيزنطي بين الكسور validators، أو تم إنشاء العديد من الكتل أنتجت على رأس الكتلة مع تغيير الحالة. لهذه المشكلة حلول متعددة، وأكثرها شيوعًا هو الحلول العرضية الربط المتبادل لأحدث كتلة سلسلة شظية بسلسلة المنارة. الشوكة يتم بعد ذلك تغيير قاعدة الاختيار في سلاسل القطع لتفضل دائمًا السلسلة الموجودة مرتبطة بشكل متقاطع، ولا تطبق إلا قاعدة اختيار الشوكة الخاصة بالكتل التي كانت تم نشره منذ آخر رابط متقاطع. 1.5.2 الموافقة على الكتل غير الصالحة قد تحاول مجموعة من validators إنشاء كتلة تطبق وظيفة انتقال الحالة بشكل غير صحيح. على سبيل المثال، البدء بالحالة التي تكون فيها أليس لديه 10 tokens وBob لديه 0 tokens، قد تحتوي الكتلة على معاملة يرسل 10 tokens من أليس إلى بوب، لكنه ينتهي بحالة تكون فيها أليس 0 tokens وبوب لديه 1000 tokens، كما هو موضح في الشكل 3. الشكل 3: مثال على كتلة غير صالحة في blockchain الكلاسيكية غير المجزأة، مثل هذا الهجوم غير ممكن، لأن كل شيء يقوم المشارك في الشبكة بالتحقق من صحة جميع الكتل، والكتلة بها سيتم رفض انتقال الحالة غير الصالح من قبل منتجي الكتل الآخرين و المشاركون في الشبكة الذين لا يقومون بإنشاء كتل. حتى لو كانت خبيثة يستمر validators في إنشاء الكتل فوق هذه الكتلة غير الصالحة بشكل أسرع من يقوم validators الصادقون ببناء السلسلة الصحيحة، وبالتالي الحصول على السلسلة مع غير الصالح كون الكتلة أطول، لا يهم، لأن كل مشارك يستخدم blockchain لأي غرض من الأغراض يتحقق من صحة كافة الكتل، ويتجاهل كافة الكتل بنيت على رأس كتلة غير صالحة. في الشكل 4 يوجد خمسة validator، ثلاثة منها خبيثة. هم أنشأنا كتلة غير صالحة "أ"، ثم واصلنا بناء كتل جديدة في الأعلى منه. تم تجاهل اثنين من validators الصادقين A' باعتباره غير صالح وكانا يبنيان في الأعلىالشكل 4: محاولة إنشاء كتلة غير صالحة في blockchain غير مقسمة من آخر كتلة صالحة معروفة لهم، مما أدى إلى إنشاء شوكة. نظرًا لوجود عدد أقل validators في الشوكة الصادقة سلسلتهم أقصر. ومع ذلك، في blockchain الكلاسيكي غير المقسم، كل مشارك يستخدم blockchain لأي غرض هو مسؤول عن التحقق من صحة جميع الكتل التي يتلقونها وإعادة حساب الحالة. وبالتالي فإن أي شخص لديه أي مصلحة في blockchain سوف يلاحظ أن "أ" غير صالح، وبالتالي أيضًا تجاهل B' وC' وD' على الفور، على هذا النحو مع أخذ السلسلة A-B هي أطول سلسلة صالحة حاليًا. ومع ذلك، في blockchain المجزأة، لا يستطيع أي مشارك التحقق من صحة جميع المعاملات على جميع الأجزاء، لذلك يحتاجون إلى طريقة ما لتأكيد ذلك نقطة في تاريخ أي جزء من blockchain لم يتم تضمين كتلة غير صالحة. لاحظ أنه على عكس الشوكات، فإن الارتباط المتبادل بسلسلة Beacon ليس حلاً كافيًا، نظرًا لأن سلسلة Beacon لا تتمتع بالقدرة على التحقق من صحة كتل. يمكنها فقط التحقق من وجود عدد كافٍ من validators في تلك القطعة وقع على الكتلة (وبالتالي يشهد على صحتها). سنناقش حلول هذه المشكلة في القسم 2.2 أدناه.

Validitas Negara dan Ketersediaan Data

Ide inti dalam blockchains yang dipecah adalah sebagian besar peserta mengoperasikan atau menggunakan jaringan tidak dapat memvalidasi blok di semua pecahan. Dengan demikian, kapan pun setiap peserta perlu berinteraksi dengan pecahan tertentu yang biasanya tidak bisa mereka lakukan unduh dan validasi seluruh riwayat beling. Namun, aspek partisi sharding memunculkan potensi yang signifikan masalah: tanpa mengunduh dan memvalidasi seluruh riwayat tertentu shard peserta belum tentu bisa memastikan negara bagian mana 5Bagian ini, kecuali subbagian 2.5.3, sebelumnya diterbitkan di https://near.ai/ pecahan2. Jika Anda membacanya sebelumnya, lewati ke bagian berikutnya.

mereka berinteraksi adalah hasil dari beberapa rangkaian blok yang valid dan rangkaian tersebut blok memang merupakan rantai kanonik dalam beling. Sebuah masalah yang tidak terjadi ada di blockchain yang tidak di-sharding. Pertama-tama kami akan menyajikan solusi sederhana untuk masalah yang telah diusulkan ini oleh banyak protokol dan kemudian menganalisis bagaimana solusi ini dapat rusak dan apa upaya telah dilakukan untuk mengatasinya. 2.1 Rotasi validator Solusi naif terhadap validitas negara ditunjukkan pada gambar 5: katakanlah kita berasumsi yang dimiliki seluruh sistem berjumlah ribuan validator, di antaranya tidak lebih dari 20% bersifat berbahaya atau akan gagal (misalnya gagal online untuk menghasilkan blok). Lalu jika kita mengambil sampel 200 validators, probabilitasnya lebih dari 1 3 kegagalan untuk tujuan praktis dapat diasumsikan nol. Gambar 5: Pengambilan sampel validatordtk 1 3 adalah ambang batas yang penting. Ada sekumpulan protokol konsensus, yang disebut BFT protokol konsensus, yang menjamin bahwa selama kurang dari 1 3 dari peserta gagal, baik karena menabrak atau bertindak dengan cara yang melanggar protokol, konsensus akan tercapai. Dengan asumsi persentase validator yang jujur, jika ditetapkan saat ini validators dalam pecahan memberi kita beberapa blok, asumsi solusi naif bahwa blok tersebut valid dan dibangun berdasarkan apa yang diyakini oleh validator rantai kanonik untuk pecahan tersebut ketika mereka mulai memvalidasi. validators mempelajari rantai kanonik dari kumpulan validator sebelumnya, yang juga melakukan hal yang sama asumsi yang dibangun di atas blok yang merupakan kepala rantai kanonik sebelum itu. Dengan induksi seluruh rantai valid, dan karena tidak ada himpunan validators pada titik mana pun dihasilkan garpu, solusi naifnya juga pasti arusnya rantai adalah satu-satunya rantai di pecahan. Lihat gambar 6 untuk visualisasinya.

Gambar 6: blockchain dengan setiap blok diselesaikan melalui konsensus BFT Solusi sederhana ini tidak akan berhasil jika kita berasumsi bahwa validator bisa berhasil dirusak secara adaptif, yang bukan merupakan asumsi yang tidak masuk akal6. Secara adaptif merusak satu pecahan dalam sistem dengan 1000 pecahan jauh lebih murah daripada merusak seluruh sistem. Oleh karena itu, keamanan protokol menurun secara linear seiring dengan jumlah shard. Untuk memperoleh kepastian keabsahan sebuah blok, kita harus tahu bahwa pada titik mana pun dalam sejarah tidak ada pecahan dalam sistem yang memilikinya mayoritas validator berkolusi; dengan musuh adaptif, kita tidak lagi memilikinya kepastian seperti itu. Seperti yang telah kita bahas di bagian 1.5, berkolusi validator dapat dilakukan dua perilaku dasar berbahaya: membuat fork, dan menghasilkan blok yang tidak valid. Garpu berbahaya dapat diatasi dengan menghubungkan blok ke rantai Beacon yang umumnya dirancang untuk memiliki keamanan yang jauh lebih tinggi daripada rantai pecahan. Namun, menghasilkan blok yang tidak valid adalah hal yang jauh lebih buruk masalah yang menantang untuk diatasi. 2.2 Validitas Negara Perhatikan gambar 7 di mana Shard #1 rusak dan dihasilkan oleh aktor jahat blok B tidak valid. Misalkan di blok ini 1000 token dicetak tipis mengudara di akun Alice. Aktor jahat kemudian menghasilkan blok C yang valid (dalam a merasakan bahwa transaksi di C diterapkan dengan benar) di atas B, membingungkan blok B yang tidak valid, dan memulai transaksi lintas pecahan ke Shard #2 itu mentransfer 1000 token itu ke rekening Bob. Mulai saat ini yang tidak semestinya token yang dibuat berada di blockchain yang sepenuhnya valid di Shard #2. Beberapa pendekatan sederhana untuk mengatasi masalah ini adalah: 6Baca ini artikel untuk detail pada bagaimana adaptif korupsi bisa menjadi dibawa keluar: https://medium.com/nearprotocol/d859adb464c8. Untuk lebih detail pada adaptif korupsi, membaca https://github.com/ethereum/wiki/wiki/Sharding-FAQ# model-keamanan-apa-yang-kami-operasikan-dibawahnyaGambar 7: Transaksi lintas pecahan dari rantai yang memiliki blok tidak valid 1. Untuk validators Shard #2 untuk memvalidasi blok tempat transaksi dimulai. Ini tidak akan berfungsi bahkan pada contoh di atas, karena blok C tampaknya sepenuhnya valid. 2. Untuk validators di Shard #2 untuk memvalidasi sejumlah besar blok sebelum blok tempat transaksi dimulai. Tentu saja untuk sejumlah blok N yang divalidasi oleh pecahan penerima yang berbahaya validators dapat membuat N+1 blok valid di atas blok tidak valid tersebut diproduksi. Ide yang menjanjikan untuk mengatasi masalah ini adalah dengan menyusun pecahan menjadi sebuah grafik tidak berarah di mana setiap pecahan terhubung ke beberapa pecahan lainnya, dan hanya mengizinkan transaksi lintas pecahan antar pecahan yang bertetangga (misalnya begini caranya Pecahan Vlad Zamfir pada dasarnya berhasil7, dan gagasan serupa digunakan dalam gagasan Kadena Jaringan rantai [1]). Jika diperlukan transaksi lintas shard antar shard yang ada bukan tetangga, transaksi tersebut disalurkan melalui banyak pecahan. Dalam desain ini a validator di setiap shard diharapkan memvalidasi semua blok di shardnya serta semua blok di semua pecahan di sekitarnya. Perhatikan gambar di bawah ini dengan 10 pecahan, masing-masing memiliki empat pecahan tetangga, dan tidak ada dua pecahan yang membutuhkan lebih banyak dari dua lompatan untuk komunikasi lintas pecahan yang ditunjukkan pada gambar 8. Pecahan #2 tidak hanya memvalidasi blockchain miliknya sendiri, tetapi juga blockchain dari semua tetangga, termasuk Shard #1. Jadi jika ada aktor jahat di Shard #1 sedang mencoba membuat blok B yang tidak valid, lalu membangun blok C di atasnya dan memulai transaksi lintas pecahan, transaksi lintas pecahan tersebut tidak akan berjalan melalui sejak Shard #2 akan memvalidasi seluruh sejarah Shard #1 yang mana akan menyebabkannya mengidentifikasi blok B yang tidak valid. 7Baca lebih lanjut tentang desain di sini: https://medium.com/nearprotocol/37e538177ed9

Gambar 8: Transaksi lintas pecahan yang tidak valid dalam sistem seperti chainweb yang akan melakukannya terdeteksi Meskipun merusak satu pecahan bukan lagi serangan yang layak, namun merusak a beberapa pecahan masih menjadi masalah. Pada gambar 9 musuh merusak kedua Shard

1 dan Shard #2 berhasil mengeksekusi transaksi lintas shard ke Shard #3

dengan dana dari blok B yang tidak valid: Gambar 9: Transaksi lintas pecahan yang tidak valid dalam sistem seperti chainweb yang akan melakukannya tidak terdeteksi Shard #3 memvalidasi semua blok di Shard #2, tetapi tidak di Shard #1, dan tidak memiliki cara untuk mendeteksi blok berbahaya. Ada dua arah utama dalam menyelesaikan validitas negara dengan tepat: nelayan

dan bukti komputasi kriptografi. 2.3 Nelayan Ide di balik pendekatan pertama adalah sebagai berikut: setiap kali ada header blok dikomunikasikan antar rantai untuk tujuan apa pun (seperti tautan silang ke rantai suar, atau transaksi lintas pecahan), ada periode waktu selama itu yang mana validator yang jujur dapat memberikan bukti bahwa blok tersebut tidak valid. Di sana Ada berbagai konstruksi yang memungkinkan bukti yang sangat ringkas bahwa balok-balok tersebut memang ada tidak valid, sehingga overhead komunikasi untuk node penerima jauh lebih kecil daripada menerima blok penuh. Dengan pendekatan ini selama setidaknya ada satu validator yang jujur di dalamnya pecahan, sistem aman. Gambar 10: Nelayan Ini adalah pendekatan yang dominan (selain berpura-pura bahwa masalahnya tidak ada) di antara protokol-protokol yang diusulkan saat ini. Namun pendekatan ini memiliki dua hal kelemahan utama: 1. Periode tantangan harus cukup lama untuk validator yang jujur untuk mengenali suatu blok telah diproduksi, mengunduhnya, memverifikasinya sepenuhnya, dan mempersiapkannya tantangan jika blok tidak valid. Memperkenalkan periode seperti itu akan membantu secara signifikan memperlambat transaksi lintas pecahan. 2. Adanya protokol tantangan menciptakan vektor serangan baru ketika node jahat melakukan spam dengan tantangan yang tidak valid. Solusi yang jelas untuk masalah ini adalah membuat penantang menyetor sejumlah tokens itu dikembalikan jika tantangannya valid. Ini hanyalah solusi parsial mungkin masih bermanfaat bagi musuh untuk mengirim spam ke sistem (dan membakar deposito) dengan tantangan yang tidak valid, misalnya untuk mencegah validtantangan dari validator yang jujur ​​dari yang dilalui. Serangan-serangan ini adalah disebut Serangan Berduka. Lihat bagian 3.7.2 untuk mengetahui cara menyiasati poin terakhir. 2.4 Argumen Pengetahuan Non-interaktif Ringkas Solusi kedua terhadap korupsi multiple-shard adalah dengan menggunakan semacam konstruksi kriptografi yang memungkinkan seseorang membuktikan bahwa perhitungan tertentu (seperti sebagai komputasi satu blok dari serangkaian transaksi) dilakukan dengan benar. Konstruksi seperti itu memang ada, mis. zk-SNARKs, zk-STARKs dan beberapa lainnya, dan beberapa saat ini secara aktif digunakan dalam protokol blockchain untuk pembayaran pribadi, terutama ZCash. Masalah utama dengan kaum primitif seperti itu adalah mereka terkenal lambat untuk dihitung. Misalnya. Protokol Coda, yang menggunakan zk-SNARKs khusus untuk membuktikan bahwa semua blok di blockchain valid, dikatakan dalam satu dari wawancara bahwa diperlukan waktu 30 detik per transaksi untuk membuat bukti (jumlah ini mungkin lebih kecil saat ini). Menariknya, sebuah pembuktian tidak perlu dihitung oleh pihak yang terpercaya buktinya tidak hanya membuktikan keabsahan penghitungan yang dibuatnya, tetapi juga membuktikannya keabsahan pembuktian itu sendiri. Dengan demikian, perhitungan pembuktian tersebut dapat dibagi di antara sekelompok peserta dengan redundansi yang jauh lebih sedikit dibandingkan yang seharusnya diperlukan untuk melakukan beberapa perhitungan yang tidak dapat dipercaya. Hal ini juga memungkinkan untuk peserta yang menghitung zk-SNARK untuk dijalankan pada perangkat keras khusus tanpa mengurangi desentralisasi sistem. Tantangan zk-SNARKs, selain kinerja, adalah: 1. Ketergantungan pada kriptografi primitif yang kurang diteliti dan kurang teruji waktu; 2. "Limbah beracun" - zk-SNARK bergantung pada pengaturan tepercaya di mana suatu grup orang melakukan beberapa perhitungan dan kemudian membuang perantara nilai perhitungan itu. Jika semua peserta dalam prosedur berkolusi dan mempertahankan nilai tengahnya, bukti palsu dapat dibuat; 3. Kompleksitas ekstra dimasukkan ke dalam desain sistem; 4. zk-SNARKs hanya berfungsi untuk sebagian dari kemungkinan komputasi, jadi sebuah protokol dengan bahasa smart contract lengkap Turing tidak akan dapat digunakan SNARK untuk membuktikan validitas rantai. 2.5 Ketersediaan Data Masalah kedua yang akan kami bahas adalah ketersediaan data. Umumnya node mengoperasikan blockchain tertentu dipisahkan menjadi dua kelompok: Node Penuh, mereka yang mengunduh setiap blok penuh dan memvalidasi setiap transaksi, dan Ringan Node, yang hanya mengunduh header blok, dan menggunakan bukti Merkle untuk bagian-bagiannya negara dan transaksi yang mereka minati, seperti yang ditunjukkan pada gambar 11.

Gambar 11: Pohon Merkle Sekarang jika mayoritas node penuh berkolusi, mereka dapat menghasilkan blok, valid atau tidak valid, dan kirimkan hash-nya ke node lampu, tetapi jangan pernah mengungkapkan konten lengkapnya dari blok tersebut. Ada berbagai cara yang dapat mereka manfaatkan. Misalnya, perhatikan gambar 12: Gambar 12: Masalah Ketersediaan Data Ada tiga blok: blok sebelumnya, A, diproduksi oleh validators yang jujur; arus, B, berkolusi validator; dan berikutnya, C, juga akan diproduksi dengan jujur validators (blockchain digambarkan di pojok kanan bawah). Anda adalah seorang pedagang. validators dari blok saat ini (B) menerima blok A dari validators sebelumnya, menghitung blok tempat Anda menerima uang,dan mengirimi Anda tajuk blok itu dengan bukti Merkle tentang negara bagiannya Anda memiliki uang (atau bukti Merkle dari transaksi sah yang mengirimkan uang tersebut kepada Anda). Yakin transaksi telah selesai, Anda menyediakan layanan tersebut. Namun, validators tidak pernah mendistribusikan seluruh konten blok B ke dalamnya siapa pun. Dengan demikian, validator yang jujur dari blok C tidak dapat mengambil blok tersebut, dan terpaksa menghentikan sistem atau membangun di atas A, sehingga membuat Anda kehilangan a pedagang uang. Saat kami menerapkan skenario yang sama pada sharding, definisi penuh dan light node umumnya berlaku per shard: validators di setiap unduhan shard memblokir di pecahan itu dan memvalidasi setiap transaksi di pecahan itu, tetapi lainnya node dalam sistem, termasuk node yang mengambil status rantai pecahan ke dalam rantai suar, hanya unduh headernya. Jadi validator yang ada di pecahan adalah node penuh secara efektif untuk pecahan itu, sementara peserta lain dalam sistem, termasuk rantai suar, beroperasi sebagai titik cahaya. Agar pendekatan nelayan yang kita bahas di atas berhasil, jujurlah validators harus dapat mengunduh blok yang terhubung silang ke rantai suar. Jika validators jahat menghubungkan header dari blok yang tidak valid (atau menggunakannya untuk memulai transaksi lintas pecahan), tetapi tidak pernah mendistribusikan blok, jujur validators tidak punya cara untuk membuat tantangan. Kami akan membahas tiga pendekatan untuk mengatasi masalah ini yang saling melengkapi satu sama lain. 2.5.1 Bukti Penitipan Masalah paling mendesak yang harus dipecahkan adalah apakah suatu blok tersedia satu kali itu diterbitkan. Salah satu ide yang diusulkan adalah untuk memiliki apa yang disebut Notaris yang melakukan rotasi antar pecahan lebih sering daripada validator yang tugasnya hanya mengunduh a memblokir dan membuktikan fakta bahwa mereka dapat mengunduhnya. Bisa jadi diputar lebih sering karena tidak perlu mengunduh seluruh negara bagian pecahan, tidak seperti validator yang tidak dapat sering diputar sejak saat itu harus mengunduh status pecahan setiap kali beling diputar, seperti yang ditunjukkan pada gambar 13. Masalah dengan pendekatan naif ini adalah tidak mungkin dibuktikan di kemudian hari apakah Notaris itu mampu atau tidak untuk mengunduh blok tersebut, jadi Notaris dapat memilih untuk selalu membuktikan bahwa mereka dapat mengunduh blok tersebut tanpa bahkan mencoba mengambilnya. Salah satu solusinya adalah Notaris yang menyediakan beberapa bukti atau mempertaruhkan sejumlah token untuk membuktikan bahwa blok tersebut benar diunduh. Salah satu solusi tersebut dibahas di sini: https://ethresear.ch/t/ Obligasi-penahanan-ramah-agregasi-1-bit/2236. 2.5.2 Kode Penghapusan Ketika node cahaya tertentu menerima hash dari sebuah blok, untuk meningkatkan node tersebut yakin bahwa blok tersebut tersedia, ia dapat mencoba mengunduh beberapa secara acak potongan blok. Ini bukan solusi yang lengkap, karena kecuali titik cahaya secara kolektif mengunduh seluruh blok yang dapat dipilih oleh produsen blok jahat

Gambar 13: Validator perlu mengunduh status sehingga tidak dapat dirotasi sering untuk menahan bagian blok yang tidak diunduh oleh node lampu mana pun, sehingga masih membuat blok tidak tersedia. Salah satu solusinya adalah dengan menggunakan konstruksi yang disebut Erasure Codes untuk mewujudkannya untuk memulihkan blok penuh meskipun hanya sebagian dari blok yang tersedia, seperti yang ditunjukkan pada gambar 14. Gambar 14: Merkle tree dibangun di atas data berkode penghapusan Baik Polkadot dan Ethereum Serenity memiliki desain seputar gagasan ini yang menyediakan cara bagi node cahaya untuk cukup yakin bahwa blok tersebut tersedia. Pendekatan Ethereum Serenity memiliki penjelasan rinci di [2].2.5.3 Pendekatan Polkadot terhadap ketersediaan data Di Polkadot, seperti pada sebagian besar solusi shard, setiap shard (disebut parachain) mengambil snapshot bloknya ke rantai suar (disebut rantai relai). Katakanlah ada 2f + 1 validators pada rantai relai. Produsen blok dari blok parachain, disebut collators, setelah blok parachain diproduksi, hitung versi blok yang diberi kode penghapusan yang terdiri dari 2f +1 bagian sedemikian rupa sehingga f bagian mana pun mencukupi untuk merekonstruksi blok tersebut. Mereka kemudian mendistribusikan satu bagian ke setiap validator di rantai relai. Rantai relai tertentu validator hanya akan masuk pada rantai relai blok jika mereka memiliki bagiannya untuk setiap blok parachain yang di-snapshot blok rantai relai tersebut. Jadi, jika blok rantai relai memiliki tanda tangan dari 2f + 1 validators, dan selama tidak lebih dari f yang melanggar protokol, masing-masing blok parachain dapat direkonstruksi dengan mengambil bagian dari validators yang mengikuti protokol. Lihat gambar 15. Gambar 15: ketersediaan data Polkadot 2.5.4 Ketersediaan data jangka panjang Perhatikan bahwa semua pendekatan yang dibahas di atas hanya membuktikan fakta bahwa sebuah blok telah diterbitkan sama sekali, dan tersedia sekarang. Blok nantinya bisa menjadi tidak tersedia karena berbagai alasan: node mati, node sengaja menghapus riwayat data, dan lain-lain. Whitepaper yang layak disebutkan untuk mengatasi masalah ini adalah Polyshard [3], yang menggunakan kode penghapusan untuk membuat blok tersedia di seluruh pecahan meskipun beberapa pecahan benar-benar kehilangan datanya. Sayangnya pendekatan khusus mereka memerlukan hal ini semua pecahan untuk mengunduh blok dari semua pecahan lainnya, yang merupakan penghalang mahal. Ketersediaan jangka panjang bukanlah suatu masalah yang mendesak: karena tidak ada peserta dalam sistem diharapkan mampu memvalidasi semua rantai di semua

pecahan, keamanan protokol shard perlu dirancang sedemikian rupa cara agar sistem tetap aman meskipun beberapa blok lama di beberapa pecahan menjadi sama sekali tidak tersedia.

صحة الدولة وتوافر البيانات

الفكرة الأساسية في blockchains المجزأة هي أن معظم المشاركين يعملون أو لا يمكن باستخدام الشبكة التحقق من صحة الكتل في جميع الأجزاء. على هذا النحو، كلما يحتاج أي مشارك إلى التفاعل مع جزء معين لا يستطيع ذلك بشكل عام قم بتنزيل السجل الكامل للجزء والتحقق من صحته. ومع ذلك، فإن جانب التقسيم في التقسيم يثير إمكانات كبيرة المشكلة: دون تنزيل السجل الكامل لملف معين والتحقق من صحته لا يمكن بالضرورة أن يكون المشارك على يقين من أن الحالة التي معه 5تم نشر هذا القسم، باستثناء القسم الفرعي 2.5.3، مسبقًا في https://near.ai/ شارد2. إذا قرأته من قبل، فانتقل إلى القسم التالي.

تفاعلهم هو نتيجة لبعض التسلسل الصحيح للكتل وهذا التسلسل من الكتل هي في الواقع السلسلة الأساسية في القشرة. مشكلة لا موجودة في blockchain غير مجزأة. سنقدم أولاً حلاً بسيطًا لهذه المشكلة التي تم اقتراحها بواسطة العديد من البروتوكولات ثم قم بتحليل كيف يمكن أن ينكسر هذا الحل وماذا وقد بذلت محاولات لمعالجتها. 2.1 تناوب المدققين يظهر الحل الساذج لصلاحية الحالة في الشكل 5: لنفترض أننا نفترض أن النظام بأكمله يحتوي على آلاف validators، منها ما لا يزيد عن 20% منها تكون ضارة أو ستفشل (مثل الفشل في أن تكون عبر الإنترنت لإنتاج كتلة). ثم إذا أخذنا عينة من 200 validators، فإن الاحتمال من أكثر من 1 3 يمكن افتراض أن الفشل للأغراض العملية هو صفر. الشكل 5: أخذ العينات validators 1 3 عتبة مهمة. هناك عائلة من بروتوكولات الإجماع تسمى BFT بروتوكولات الإجماع، التي تضمن ذلك لمدة تقل عن 1 3 من يفشل المشاركون، إما عن طريق الانهيار أو عن طريق التصرف بطريقة تنتهك قواعد اللعبة البروتوكول، سيتم التوصل إلى توافق في الآراء. مع هذا الافتراض بنسبة validator الصادقة، إذا كانت المجموعة الحالية من validators في الجزء يزودنا ببعض الكتل، كما يفترض الحل الساذج أن الكتلة صالحة وأنها مبنية على ما يعتقده validators السلسلة الأساسية لتلك القطعة عندما بدأوا في التحقق من صحتها. validators تعلمت السلسلة الأساسية من المجموعة السابقة من validators، والتي بنفس الطريقة تم بناء الافتراض فوق الكتلة التي كانت رأس السلسلة القانونية قبل ذلك. عن طريق الاستقراء تكون السلسلة بأكملها صالحة، وبما أنه لا توجد مجموعة من validators في أي لحظة أنتجت الشوك، والحل الساذج هو أيضا على يقين من أن التيار السلسلة هي السلسلة الوحيدة في القشرة. انظر الشكل 6 للتصور.

الشكل 6: blockchain مع الانتهاء من كل كتلة من خلال إجماع BFT هذا الحل البسيط لا يعمل إذا افترضنا أن validators يمكن أن يكون كذلك تالف بشكل تكيفي، وهو ليس افتراضًا غير معقول. بشكل تكيفي إن إفساد جزء واحد في نظام يحتوي على 1000 جزء يعد أرخص بكثير بدلاً من إفساد النظام بأكمله. ولذلك، فإن أمان البروتوكول يتناقص خطيًا مع عدد الأجزاء. أن يكون على يقين من صحة كتلة، يجب أن نعرف أنه في أي وقت من التاريخ لم يحدث أي شظية في النظام أغلبية validators تتواطأ؛ مع الخصوم التكيفيين، لم يعد لدينا مثل هذا اليقين. كما ناقشنا في القسم 1.5، يمكن أن يكون التواطؤ validator أمرًا فعالاً هناك سلوكان خبيثان أساسيان: إنشاء تشعبات وإنتاج كتل غير صالحة. يمكن معالجة التشعبات الضارة من خلال ربط الكتل بسلسلة Beacon المصممة بشكل عام لتكون ذات مستوى أمان أعلى بكثير من تلك الموجودة في سلسلة Beacon. سلاسل القشرة. ومع ذلك، فإن إنتاج كتل غير صالحة يعد أمرًا أكثر أهمية مشكلة صعبة لمعالجة. 2.2 صلاحية الدولة خذ بعين الاعتبار الشكل 7 الذي تظهر فيه القطعة رقم 1 تالفة وينتجها ممثل خبيث الكتلة غير الصالحة B. لنفترض في هذه الكتلة B أنه تم سك 1000 tokens من الرقاقة الهواء على حساب أليس. يقوم الممثل الخبيث بعد ذلك بإنتاج كتلة C صالحة (في ملف بمعنى أن المعاملات في C يتم تطبيقها بشكل صحيح) أعلى B، مما يؤدي إلى التشويش الكتلة B غير الصالحة، وتبدأ معاملة مشتركة للجزء رقم 2 ينقل تلك الـ 1000 tokens إلى حساب بوب. من هذه اللحظة بشكل غير صحيح تم إنشاء tokens على blockchain صالح تمامًا بخلاف ذلك في الجزء رقم 2. بعض الطرق البسيطة لمعالجة هذه المشكلة هي: 6اقرأ هذا مقالة ل التفاصيل على كيف التكيف الفساد يمكن يكون نفذت خارج: https://medium.com/nearprotocol/d859adb464c8. ل المزيد التفاصيل على التكيف الفساد, قراءة https://github.com/ethereum/wiki/wiki/Sharding-FAQ# ما هي نماذج الأمان التي نعمل بموجبها؟الشكل 7: معاملة مشتركة من سلسلة تحتوي على كتلة غير صالحة 1. بالنسبة إلى validators من الجزء رقم 2 للتحقق من صحة الكتلة التي يتم منها المعاملة بدأ. لن ينجح هذا حتى في المثال أعلاه، نظرًا لأن الكتلة C يبدو أنه صالح تماما. 2. بالنسبة لـ validators في الجزء رقم 2 للتحقق من صحة عدد كبير من الكتل التي تسبق الكتلة التي تبدأ منها المعاملة. بطبيعة الحال، ل أي عدد من الكتل N التي تم التحقق من صحتها بواسطة الجزء المتلقي الخبيث يمكن لـ validators إنشاء كتل صالحة N+1 أعلى الكتلة غير الصالحة أنتجت. قد تكون الفكرة الواعدة لحل هذه المشكلة هي ترتيب القطع في ملف رسم بياني غير موجه حيث ترتبط كل قطعة بعدة أجزاء أخرى، و السماح فقط بالمعاملات المتقاطعة بين الأجزاء المجاورة (على سبيل المثال، هذه هي الطريقة إن عملية التقسيم التي اقترحها فلاد زامفير تعمل بشكل أساسي7، كما تم استخدام فكرة مماثلة في فكرة كادينا تشينويب [1]). إذا كانت هناك حاجة إلى معاملة متقاطعة بين الأجزاء الموجودة وليس الجيران، يتم توجيه هذه المعاملة من خلال أجزاء متعددة. في هذا التصميم من المتوقع أن يقوم validator في كل جزء بالتحقق من صحة كل الكتل الموجودة في الجزء الخاص بهم وكذلك جميع الكتل في جميع القطع المجاورة. النظر في الشكل أدناه مع 10 شظايا، لكل منها أربعة جيران، ولا تتطلب شظيتين أكثر أكثر من قفزتين للاتصال المتقاطع الموضح في الشكل 8. لا تقوم القطعة رقم 2 بالتحقق من صحة blockchain الخاصة بها فحسب، بل أيضًا blockchains الخاصة بها جميع الجيران، بما في ذلك الشارد رقم 1. فإذا كان فاعل خبيث على الكسرة رقم 1 يحاول إنشاء كتلة B غير صالحة، ثم بناء الكتلة C فوقها وبدء معاملة القطع المتقاطعة، لن تتم مثل هذه المعاملة المتقاطعة من خلال الجزء رقم 2 سيكون قد تم التحقق من صحة تاريخ الجزء رقم 1 بأكمله والذي سيؤدي ذلك إلى تحديد الكتلة غير الصالحة B. 7 اقرأ المزيد عن التصميم هنا: https://medium.com/nearprotocol/37e538177ed9

الشكل 8: معاملة متقاطعة غير صالحة في نظام يشبه شبكة الويب من شأنه أن الحصول على الكشف عنها على الرغم من أن إتلاف جزء واحد لم يعد هجومًا قابلاً للتطبيق، إلا أن إتلاف ملف تبقى شظايا قليلة مشكلة. في الشكل 9، هناك خصم يفسد كلاً من الشارد نجح #1 وShard #2 في تنفيذ معاملة مشتركة إلى Shard #3 بأموال من الكتلة B غير الصالحة: الشكل 9: معاملة متقاطعة غير صالحة في نظام يشبه شبكة الويب من شأنه أن لا يتم الكشف عنها الجزء رقم 3 يتحقق من صحة جميع الكتل في الجزء رقم 2، ولكن ليس في الجزء رقم 1، و ليس لديه طريقة للكشف عن الكتلة الضارة. هناك اتجاهان رئيسيان لحل مشكلة صلاحية الدولة بشكل صحيح: الصيادون

والبراهين التشفيرية للحساب. 2.3 صياد الفكرة وراء النهج الأول هي ما يلي: كلما كان رأس الكتلة يتم توصيله بين السلاسل لأي غرض (مثل الارتباط المتبادل بـ سلسلة منارات، أو معاملة متقاطعة)، هناك فترة زمنية خلالها والتي يمكن لأي validator صادق أن يقدم دليلاً على أن الكتلة غير صالحة. هناك هي إنشاءات مختلفة توفر أدلة موجزة للغاية على وجود الكتل غير صالح، وبالتالي فإن حمل الاتصالات للعقد المستقبلة يكون أصغر بكثير من الحصول على كتلة كاملة. مع هذا النهج طالما أن هناك على الأقل validator صادقًا واحدًا في شارد، النظام آمن. الشكل 10: صياد وهذا هو النهج السائد (إلى جانب التظاهر بعدم وجود المشكلة) بين البروتوكولات المقترحة اليوم. ومع ذلك، فإن هذا النهج له طريقتان العيوب الرئيسية: 1. يجب أن تكون فترة التحدي طويلة بما فيه الكفاية للصادق validator للتعرف على الكتلة التي تم إنتاجها، قم بتنزيلها والتحقق منها بالكامل والاستعداد التحدي إذا كانت الكتلة غير صالحة. إدخال مثل هذه الفترة سيكون إبطاء المعاملات المتقاطعة بشكل كبير. 2. إن وجود بروتوكول التحدي يخلق ناقلًا جديدًا للهجمات عندما ترسل العقد الضارة رسائل غير مرغوب فيها باختبارات غير صالحة. حل واضح لحل هذه المشكلة هو جعل المنافسين يودعون مبلغًا قدره tokens يتم إرجاعها إذا كان التحدي صالحًا. وهذا ليس سوى حل جزئي، كما هو الحال قد يكون من المفيد للخصم أن يرسل بريدًا عشوائيًا إلى النظام (ويحرق ملفات الودائع) مع الطعون الباطلة، على سبيل المثال لمنع صالحةتحدي من validator صادق من المرور. هذه الهجمات تسمى هجمات الحزن. انظر القسم 3.7.2 لمعرفة طريقة للالتفاف على النقطة الأخيرة. 2.4 حجج المعرفة غير التفاعلية المختصرة الحل الثاني لفساد الأجزاء المتعددة هو استخدام نوع ما من بنيات التشفير التي تسمح للشخص بإثبات أن عملية حسابية معينة (مثل (مثل حساب كتلة من مجموعة من المعاملات) تم تنفيذها بشكل صحيح. مثل هذه الإنشاءات موجودة بالفعل، على سبيل المثال. zk-SNARKs، zk-STARKs وعدد قليل من الآخرين، ويتم استخدام بعضها بشكل نشط في بروتوكولات blockchain اليوم للمدفوعات الخاصة، وأبرزها ZCash. المشكلة الأساسية مع هؤلاء البدائيين هي أنهم من المعروف أنها بطيئة في الحساب. على سبيل المثال. بروتوكول Coda، الذي يستخدم zk-SNARKs على وجه التحديد لإثبات أن جميع الكتل الموجودة في blockchain صالحة، قيل في أحد من المقابلات أن الأمر قد يستغرق 30 ثانية لكل معاملة لإنشاء دليل (ربما يكون هذا الرقم أصغر الآن). ومن المثير للاهتمام أن الدليل لا يحتاج إلى حساب من قبل طرف موثوق به، منذ ذلك الحين لا يشهد الدليل على صحة الحساب الذي بني من أجله فحسب، بل يشهد أيضًا على صحة الدليل نفسه. وبالتالي، يمكن تقسيم حساب هذه البراهين بين مجموعة من المشاركين الذين لديهم تكرار أقل بكثير مما سيكون عليه الحال اللازمة لإجراء بعض الحسابات غير الموثوق بها. كما يسمح للمشاركين الذين يحسبون zk-SNARKs للتشغيل على أجهزة خاصة دون تقليل اللامركزية في النظام. تحديات zk-SNARKs، إلى جانب الأداء، هي: 1. الاعتماد على أساسيات التشفير الأقل بحثًا واختبارها على مر الزمن؛ 2. "النفايات السامة" - تعتمد zk-SNARKs على إعداد موثوق فيه مجموعة من الأشخاص يقومون ببعض العمليات الحسابية ثم يتجاهلون الوسيط قيم هذا الحساب. إذا تواطأ جميع المشاركين في الإجراء والحفاظ على القيم المتوسطة، يمكن إنشاء أدلة وهمية؛ 3. تعقيد إضافي تم إدخاله في تصميم النظام؛ 4. تعمل zk-SNARKs فقط مع مجموعة فرعية من الحسابات المحتملة، وبالتالي البروتوكول مع لغة Turing-Complete smart contract لن يكون من الممكن استخدامها SNARKs لإثبات صحة السلسلة. 2.5 توفر البيانات المشكلة الثانية التي سنتطرق إليها هي توفر البيانات. العقد عموما يتم فصل تشغيل blockchain معين إلى مجموعتين: العقد الكاملة، تلك التي تقوم بتنزيل كل كتلة كاملة والتحقق من صحة كل معاملة، وLight العقد، تلك التي تقوم فقط بتنزيل رؤوس الكتل، وتستخدم إثباتات Merkle للأجزاء للدولة والمعاملات التي يهتمون بها، كما هو مبين في الشكل 11.

الشكل 11: شجرة ميركل الآن، إذا تواطأت غالبية العقد الكاملة، فيمكنها إنتاج كتلة صالحة أو غير صالح، وأرسل hash إلى العقد الخفيفة، ولكن لا تكشف مطلقًا عن المحتوى الكامل من الكتلة. هناك طرق مختلفة يمكنهم الاستفادة منها. على سبيل المثال، النظر في الشكل 12: الشكل 12: مشكلة توفر البيانات هناك ثلاث كتل: السابقة، A، تم إنتاجها بواسطة validators الصادق؛ التيار، B، لديه validators متواطئ؛ وسيتم أيضًا إنتاج المنتج التالي، C بواسطة validators الصادق (تم توضيح blockchain في الزاوية اليمنى السفلية). أنت تاجر. تم استلام الكتلة validators للكتلة الحالية (B). A من validators السابقة، قامت بحساب الكتلة التي تتلقى فيها الأموال،وأرسلت لك رأسًا لتلك الكتلة مع إثبات Merkle للحالة التي فيها لديك أموال (أو إثبات Merkle لمعاملة صالحة ترسل الأموال لك). بعد التأكد من إتمام المعاملة، يمكنك تقديم الخدمة. ومع ذلك، لا يقوم validators أبدًا بتوزيع المحتوى الكامل للكتلة B عليه أي شخص. على هذا النحو، لا يمكن لـ validators الصادقة من الكتلة C استرداد الكتلة، و إما أن تضطر إلى تعطيل النظام أو البناء على الجزء A، مما يحرمك من دورك تاجر المال. عندما نطبق نفس السيناريو على المشاركة، فإن تعريفات كامل و يتم تطبيق العقدة الخفيفة بشكل عام لكل جزء: validators في كل تنزيل جزء كل قم بحظر تلك القطعة والتحقق من صحة كل معاملة في تلك القطعة، ولكن غيرها العقد في النظام، بما في ذلك تلك التي تلتقط سلاسل الأجزاء في سلسلة منارة، فقط تحميل الرؤوس. وبالتالي فإن validators الموجودة في الجزء هي العقد الكاملة لتلك القطعة بشكل فعال، بينما يقوم المشاركون الآخرون في النظام، بما في ذلك سلسلة المنارة، تعمل كعقد ضوئية. لكي ينجح نهج الصياد الذي ناقشناه أعلاه، يجب أن يكون صادقًا validators يجب أن تكون قادرًا على تنزيل الكتل المرتبطة بسلسلة المنارات. إذا قامت validators الضارة بربط رأس كتلة غير صالحة (أو استخدمتها لـ بدء معاملة متقاطعة)، ولكن لم يتم توزيع الكتلة أبدًا، الصادق validators ليس لديهم طريقة لصياغة التحدي. سنغطي ثلاثة طرق لمعالجة هذه المشكلة المكملة بعضها البعض. 2.5.1 إثباتات الحضانة المشكلة الأكثر إلحاحًا التي يجب حلها هي ما إذا كانت الكتلة متاحة مرة واحدة أم لا تم نشره. إحدى الأفكار المقترحة هي أن يكون هناك ما يسمى بكتاب العدل الذين يتناوبون بين الأجزاء في كثير من الأحيان أكثر من validators التي تتمثل مهمتها الوحيدة في تنزيل ملف حظر ويشهد على حقيقة أنهم تمكنوا من تنزيله. يمكن أن يكونوا كذلك يتم تدويرها بشكل متكرر لأنهم لا يحتاجون إلى تنزيل الحالة بأكملها من القطعة، على عكس validators الذين لا يمكن تدويرهم بشكل متكرر منذ ذلك الحين يجب تنزيل حالة الجزء في كل مرة يتم تدويرها، كما هو موضح في الشكل 13. المشكلة في هذا النهج الساذج هو أنه من المستحيل إثباته لاحقًا ما إذا كان كاتب العدل قادرًا على تنزيل الكتلة أم لا، لذلك كاتب العدل يمكنهم اختيار التأكيد دائمًا على أنهم تمكنوا من تنزيل الكتلة بدونها وحتى محاولة استعادته. أحد الحلول لذلك هو أن يقدمه كتاب العدل بعض الأدلة أو حصة مبلغ من tokens يشهد على أن الكتلة كانت تم تنزيله. تتم مناقشة أحد هذه الحلول هنا: https://ethresear.ch/t/ 1-بت-التجميع-ودية-سندات الحضانة/2236. 2.5.2 رموز المحو عندما تتلقى عقدة ضوئية معينة hash من الكتلة، لزيادة عدد العقد الثقة بأن الكتلة متاحة يمكنها محاولة تنزيل عدد قليل عشوائيًا قطع الكتلة. وهذا ليس حلا كاملا، لأنه ما لم تكن العقد الخفيفة قم بتنزيل الكتلة بأكملها بشكل جماعي والتي يمكن لمنتجي الكتل الضارة اختيارها

الشكل 13: تحتاج أدوات التحقق إلى تنزيل الحالة وبالتالي لا يمكن تدويرها في كثير من الأحيان لحجب أجزاء الكتلة التي لم يتم تنزيلها بواسطة أي عقدة خفيفة، وبالتالي لا يزال يجعل الكتلة غير متاحة. أحد الحلول هو استخدام بنية تسمى Erasure Codes لجعل ذلك ممكنًا لاستعادة الكتلة الكاملة حتى في حالة توفر جزء فقط من الكتلة، كما هو موضح في الشكل 14 الشكل 14: Merkle tree مبني على بيانات مشفرة مشفرة لدى كل من Polkadot وEthereum Serenity تصميمات تدور حول هذه الفكرة توفير طريقة للعقد الخفيفة لتكون واثقة بشكل معقول من توفر الكتل. يتضمن أسلوب الصفاء Ethereum وصفًا تفصيليًا في [2].2.5.3 نهج Polkadot فيما يتعلق بتوفر البيانات في Polkadot، كما هو الحال في معظم الحلول المجزأة، تقوم كل جزء (تسمى سلسلة Parachain) بتصوير كتلها إلى سلسلة المنارة (تسمى سلسلة التتابع). لنفترض أن هناك 2f + 1 validators على سلسلة التتابع. يُطلق على منتجي الكتل من كتل المظلات اسم المقارنات، بمجرد إنتاج كتلة المظلة، قم بحساب نسخة مشفرة للمسح من الكتلة التي تتكون من أجزاء 2f +1 بحيث تكون أي أجزاء f كافية لإعادة بناء الكتلة. ثم يقومون بتوزيع جزء واحد على كل validator على سلسلة التتابع. سلسلة ترحيل معينة validator ستوقع فقط على سلسلة ترحيل block إذا كان لديهم الجزء الخاص بهم لكل كتلة من الكتل المظلية التي تم التقاطها إليها مثل كتلة سلسلة التتابع. وبالتالي، إذا كانت كتلة سلسلة التتابع تحتوي على توقيعات من 2f + 1 validators، وطالما لم ينتهك البروتوكول أكثر من f منهم، كل منهم يمكن إعادة بناء كتلة المظلة عن طريق جلب الأجزاء من validators التي تتبع البروتوكول. انظر الشكل 15. الشكل 15: توفر بيانات Polkadot 2.5.4 توافر البيانات على المدى الطويل لاحظ أن جميع الأساليب التي تمت مناقشتها أعلاه تشهد فقط على حقيقة أن الكتلة تم نشره على الإطلاق، وهو متاح الآن. يمكن أن تصبح الكتل غير متاحة لاحقًا لعدة أسباب: العقد غير متصلة بالإنترنت، والعقد تمحو التاريخ عمدًا البيانات، وغيرها. من الجدير بالذكر أن المستند التقني الذي يعالج هذه المشكلة هو Polyshard [3]، والذي يستخدم رموز المسح لإتاحة الكتل عبر الأجزاء حتى لو كانت متعددة تفقد القطع بياناتها تمامًا. لسوء الحظ يتطلب نهجهم المحدد جميع الأجزاء لتنزيل الكتل من جميع الأجزاء الأخرى، وهو أمر محظور باهظة الثمن. إن التوفر على المدى الطويل ليس مشكلة ملحة: حيث لا يوجد مشارك في النظام من المتوقع أن يكون قادرًا على التحقق من صحة جميع السلاسل في جميع

shards، يجب تصميم أمان بروتوكول sharded على هذا النحو الطريقة التي يكون بها النظام آمنًا حتى لو أصبحت بعض الكتل القديمة في بعض القطع غير متوفر تماما.

Nightshade

3.1 Dari rantai pecahan hingga pecahan pecahan Model sharding dengan rantai shard dan rantai suar sangat kuat namun mempunyai kompleksitas tertentu. Secara khusus, aturan pilihan garpu perlu dijalankan di setiap rantai secara terpisah, aturan pilihan garpu di rantai pecahan dan suar rantai harus dibuat secara berbeda dan diuji secara terpisah. Di Nightshade kami memodelkan sistem sebagai blockchain tunggal, yang masing-masingnya blok secara logis berisi semua transaksi untuk semua pecahan, dan mengubah seluruh keadaan dari semua pecahan. Namun secara fisik, tidak ada peserta yang mengunduhnya keadaan penuh atau blok logis penuh. Sebaliknya, masing-masing peserta jaringan saja mempertahankan status yang sesuai dengan pecahan yang transaksinya divalidasi, dan daftar semua transaksi di blok dibagi menjadi fisik potongan, satu potongan per pecahan. Dalam kondisi ideal, setiap blok berisi tepat satu bongkahan per pecahan per blok, yang kira-kira sesuai dengan model dengan rantai pecahan di mana rantai pecahan menghasilkan balok dengan kecepatan yang sama dengan rantai suar. Namun, karena penundaan jaringan, beberapa bagian mungkin hilang, jadi dalam praktiknya setiap blok berisi satu atau nol potongan per pecahan. Lihat bagian 3.3 untuk rincian tentang caranya blok diproduksi. Gambar 16: Model dengan rantai pecahan di sebelah kiri dan memiliki satu rantai blok terbelah menjadi beberapa bagian di sebelah kanan

3.2 Konsensus Dua pendekatan dominan terhadap konsensus di blockchains saat ini adalah rantai terpanjang (atau terberat), yaitu rantai yang mempunyai pekerjaan atau pasak paling banyak digunakan untuk membangunnya dianggap kanonik, dan BFT, di mana untuk setiap blok beberapa kumpulan validator mencapai konsensus BFT. Dalam protokol yang diusulkan baru-baru ini, pendekatan terakhir adalah pendekatan yang lebih dominan, karena hal ini memberikan penyelesaian langsung, sedangkan pada rantai terpanjang dibutuhkan lebih banyak blok untuk dibangun di atas blok untuk memastikan finalitas. Seringkali untuk sesuatu yang bermakna keamanan waktu yang dibutuhkan untuk membangun jumlah blok yang cukup urutan jam. Penggunaan konsensus BFT pada setiap blok juga memiliki kelemahan, seperti: 1. BFT konsensus melibatkan banyak komunikasi. Sementara kemajuan terkini memungkinkan konsensus dicapai dalam jumlah waktu yang linier peserta (lihat misalnya [4]), masih terlihat biaya overhead per blok; 2. Tidak mungkin semua peserta jaringan berpartisipasi dalam BFT konsensus per blok, sehingga biasanya hanya sebagian peserta yang diambil sampelnya secara acak yang mencapai konsensus. Himpunan sampel yang diambil secara acak, pada prinsipnya, dapat berupa dirusak secara adaptif, dan sebuah percabangan dalam teori dapat tercipta. Sistem keduanya perlu dicontohkan agar siap menghadapi peristiwa semacam itu, dan dengan demikian tetap saja memiliki aturan pilihan bercabang selain konsensus BFT, atau dirancang untuk ditutup turun dalam acara seperti itu. Perlu disebutkan bahwa beberapa desain, seperti Algorand [5], secara signifikan mengurangi kemungkinan korupsi adaptif. 3. Yang terpenting, sistem terhenti jika 1 3 atau lebih dari semua peserta adalah offline. Oleh karena itu, kesalahan jaringan sementara atau perpecahan jaringan dapat menghentikan sistem sepenuhnya. Idealnya sistem harus dapat terus berjalan beroperasi selama setidaknya setengah dari peserta sedang online (yang terberat protokol berbasis rantai terus beroperasi meskipun kurang dari separuh peserta sedang online, namun keinginan akan properti ini masih bisa diperdebatkan dalam komunitas). Model hibrida yang menggunakan konsensus adalah model yang paling berat rantai, tetapi beberapa blok diselesaikan secara berkala menggunakan gadget finalitas BFT mempertahankan keunggulan kedua model. Gadget finalitas BFT seperti itu Casper FFG [6] digunakan di Ethereum 2.0 8, Casper CBC (lihat https://vitalik. ca/general/2018/12/05/cbc_casper.html) dan GRANDPA (lihat https:// medium.com/polkadot-network/d08a24a021b5) digunakan di Polkadot. Nightshade menggunakan konsensus rantai terberat. Khususnya ketika sebuah blok produsen memproduksi sebuah blok (lihat bagian 3.3), mereka dapat mengumpulkan tanda tangan darinya produsen blok lain dan validators membuktikan blok sebelumnya. Lihat bagian 3.8 untuk rincian bagaimana sejumlah besar tanda tangan dikumpulkan. Beratnya 8Lihat juga sesi papan tulis bersama Justin Drake untuk gambaran mendalam tentang Casper FFG, dan bagaimana integrasinya dengan konsensus rantai terberat GHOST di sini: https://www. youtube.com/watch?v=S262StTwkmosuatu blok kemudian merupakan saham kumulatif dari semua penandatangan yang memiliki tanda tangan tersebut termasuk dalam blok tersebut. Berat suatu rantai adalah jumlah dari berat balok. Di atas konsensus rantai terberat, kami menggunakan gadget finalitas yang digunakan pengesahan untuk menyelesaikan blok. Untuk mengurangi kompleksitas sistem, kami menggunakan gadget finalitas yang tidak mempengaruhi aturan pilihan garpu dengan cara apa pun, dan sebagai gantinya hanya memperkenalkan kondisi pemotongan tambahan, sehingga satu blok menjadi satu diselesaikan oleh gadget finalitas, percabangan tidak mungkin dilakukan kecuali persentasenya sangat besar dari total taruhannya dipotong. Casper CBC adalah gadget finalitas, dan kami saat ini menjadi model dengan mempertimbangkan Casper CBC. Kami juga mengerjakan protokol BFT terpisah yang disebut TxFlow. Pada saat saat menulis dokumen ini, tidak jelas apakah TxFlow akan digunakan sebagai pengganti Casper KBK. Namun kami mencatat bahwa pilihan gadget finalitas sebagian besar ortogonal terhadap desain lainnya. 3.3 Blokir produksi Di Nightshade ada dua peran: produser blok dan validators. Kapan saja titik sistem berisi produsen blok w, w = 100 dalam model kita, dan wv validators, dalam model kami v = 100, wv = 10, 000. Sistemnya adalah Proof-of-Stake, artinya produsen blok dan validator memiliki sejumlah internal mata uang (disebut ”tokens”) dikunci untuk durasi waktu yang jauh melebihi waktu yang mereka habiskan untuk melaksanakan tugas mereka membangun dan memvalidasi rantai. Seperti semua sistem Proof of Stake, tidak semua produsen blok w dan tidak semua wv validator adalah entitas yang berbeda, karena hal tersebut tidak dapat diterapkan. Masing-masing dari produsen blok w dan wv validators, bagaimanapun, memiliki yang terpisah taruhan. Sistem berisi n pecahan, n = 1000 dalam model kami. Seperti disebutkan dalam bagian 3.1, di Nightshade tidak ada rantai pecahan, sebagai gantinya semua produsen blok dan validator sedang membangun satu blockchain, yang kami sebut sebagai rantai utama. Keadaan rantai utama dibagi menjadi n pecahan, dan setiap blok produser dan validator setiap saat hanya mengunduh sebagian dari secara lokal keadaan yang sesuai dengan beberapa subset pecahan, dan hanya memproses dan memvalidasi transaksi yang mempengaruhi bagian negara bagian tersebut. Untuk menjadi produsen blok, peserta jaringan mengunci beberapa blok besar jumlah tokens (satu taruhan). Pemeliharaan jaringan dilakukan dalam jangka waktu tertentu, di mana suatu zaman adalah periode waktu dalam urutan hari. Para peserta dengan taruhan terbesar pada awal periode tertentu adalah blok produsen untuk zaman itu. Setiap produser blok ditugaskan ke sw shards, (misalnya sw = 40, yang berarti sww/n = 4 produsen blok per pecahan). Blok produser mengunduh status shard yang ditugaskan kepada mereka sebelum epoch dimulai, dan sepanjang epoch mengumpulkan transaksi yang memengaruhi pecahan itu, dan menerapkannya pada negara. Untuk setiap blok b pada rantai utama, dan untuk setiap pecahan s, terdapat salah satu darinya menugaskan produser blok ke s yang bertanggung jawab memproduksi bagian b terkait ke pecahan. Bagian b yang berhubungan dengan shard s disebut chunk, dan berisi daftar transaksi pecahan yang akan dimasukkan ke dalam b, serta merkleakar dari keadaan yang dihasilkan. b pada akhirnya hanya akan berisi header yang sangat kecil chunk yaitu akar merkle dari semua transaksi yang diterapkan (lihat bagian 3.7.1 untuk rincian yang tepat), dan akar merkle dari keadaan akhir. Sepanjang sisa dokumen ini kita sering merujuk pada produsen blok yang bertanggung jawab untuk menghasilkan potongan pada waktu tertentu untuk pecahan tertentu sebagai produsen bongkahan. Produser bongkahan selalu menjadi salah satu produsen blok. Produsen blok dan produsen bongkahan merotasi setiap blok sesuai ke jadwal yang tetap. Produsen blok mendapat pesanan dan memproduksi berulang kali blok dalam urutan itu. Misalnya. jika ada 100 produsen blok, blok pertama produsen bertanggung jawab untuk memproduksi blok 1, 101, 201 dst, yang kedua adalah bertanggung jawab untuk memproduksi 2, 102, 202 dll). Karena produksi potongan, tidak seperti produksi blok, memerlukan pemeliharaan negara bagian, dan untuk setiap shard hanya produsen blok sww/n yang mempertahankan negara bagian tersebut per pecahan, hanya produsen blok sww/n yang dirotasi untuk membuat potongan. Misalnya. dengan konstanta di atas dengan empat produsen blok yang ditugaskan setiap pecahan, setiap produsen blok akan membuat potongan setiap empat blok. 3.4 Memastikan ketersediaan data Untuk memastikan ketersediaan data kami menggunakan pendekatan yang serupa dengan Polkadot dijelaskan di bagian 2.5.3. Setelah produsen blok memproduksi suatu bongkahan, mereka menciptakannya versi kode penghapusan dengan kode blok optimal (w, ⌊w/6 + 1⌋) dari potongan. Mereka kemudian mengirimkan satu bagian dari potongan kode penghapusan (kami menyebutnya potongan tersebut bagian potongan, atau hanya bagian) ke setiap produsen blok. Kami menghitung pohon merkle yang berisi semua bagian seperti daun, dan header setiap potongan berisi akar merkle dari pohon tersebut. Bagian-bagian tersebut dikirim ke validators melalui pesan satu bagian. Setiap pesan tersebut berisi header potongan, urutan bagian, dan isi bagian. Itu pesan juga berisi tanda tangan produser blok yang memproduksinya chunk dan jalur merkle untuk membuktikan bahwa bagian tersebut sesuai dengan header dan diproduksi oleh produsen blok yang tepat. Setelah produsen blok menerima blok rantai utama, pertama-tama mereka memeriksa apakah sudah diterima memiliki pesan satu bagian untuk setiap potongan yang disertakan dalam blok. Jika tidak, blokir tidak diproses sampai pesan satu bagian yang hilang diambil. Setelah semua pesan satu bagian diterima, produser blok mengambil pesan tersebut bagian yang tersisa dari rekan-rekannya dan merekonstruksi bagian-bagian yang mereka pegang negara bagian. Produsen blok tidak memproses blok rantai utama jika setidaknya untuk satu blok potongan yang termasuk dalam blok tersebut tidak memiliki pesan satu bagian yang sesuai, atau jika setidaknya untuk satu pecahan yang statusnya dipertahankan, mereka tidak dapat merekonstruksi seluruh potongan. Agar potongan tertentu tersedia, cukup ⌊w/6⌋+1 blok tersebut produsen memiliki bagiannya dan melayaninya. Jadi, selama jumlahnya aktor jahat tidak melebihi ⌊w/3⌋tidak ada rantai yang memiliki lebih dari setengah blok produsen yang membangunnya mungkin memiliki bagian yang tidak tersedia.Gambar 17: Setiap blok berisi satu atau nol bongkahan per pecahan, dan setiap bongkahan adalah kode penghapusan. Setiap bagian dari potongan kode penghapusan dikirim ke tempat yang ditunjuk blok produser melalui pesan satu bagian khusus 3.4.1 Berurusan dengan produsen blok yang malas Jika produsen blok mempunyai blok yang pesan satu bagiannya hilang, mereka mungkin memilih untuk tetap menandatanganinya, karena jika blok itu akhirnya dirantai akan memaksimalkan imbalan bagi produsen blok. Tidak ada risiko untuk pemblokiran tersebut produsen blok karena tidak mungkin untuk membuktikan kemudian bahwa produsen blok tidak memilikinya pesan satu bagian. Untuk mengatasinya kita membuat setiap potongan menjadi produser saat membuat potongan tersebut pilih warna (merah atau biru) untuk setiap bagian dari potongan yang dikodekan di masa depan, dan simpan bitmask warna yang ditetapkan dalam potongan sebelum dikodekan. Masing-masing bagian pesan kemudian berisi warna yang ditetapkan ke bagian tersebut, dan warna tersebut digunakan saat menghitung akar merkle dari bagian yang dikodekan. Jika produsen bongkahan menyimpang dari protokolnya bisa dibuktikan dengan mudah, karena root merkle juga tidak sesuai dengan pesan satu bagian, atau warna dalam pesan satu bagian itu sesuai dengan akar merkle tidak akan cocok dengan topeng di potongan. Ketika produsen blok menandatangani sebuah blok, mereka menyertakan bitmask dari semuanya bagian merah yang mereka terima untuk bongkahan yang termasuk dalam blok. Penerbitan sebuah bitmask yang salah adalah perilaku yang dapat disayat. Jika produsen blok belum menerima a pesan satu bagian, mereka tidak tahu warna pesannya, dan sehingga memiliki peluang 50% untuk ditebas jika mereka mencoba menandatangani secara membabi buta blok. 3.5 Aplikasi transisi negara Produsen bongkahan hanya memilih transaksi mana yang akan dimasukkan ke dalam bongkahan tersebut jangan menerapkan transisi keadaan ketika mereka menghasilkan potongan. Sejalan dengan itu,

header chunk berisi root merkle dari status merkel seperti sebelumnya transaksi dalam potongan diterapkan. Transaksi hanya diterapkan bila blok penuh yang mencakup potongan sedang diproses. Seorang peserta hanya memproses satu blok jika 1. Blok sebelumnya telah diterima dan diproses; 2. Untuk setiap bagian, peserta tidak mempertahankan status yang mereka miliki melihat pesan satu bagian; 3. Untuk setiap bagian, peserta mempertahankan status yang mereka miliki potongan penuh. Setelah blok diproses, untuk setiap pecahan yang menjadi peserta mempertahankan statusnya, mereka menerapkan transaksi dan menghitung status baru terhitung setelah transaksi diterapkan, setelah itu siap berproduksi potongan untuk blok berikutnya, jika ditugaskan ke pecahan apa pun, karena sudah ada akar merkle dari negara merkel baru. 3.6 Transaksi dan penerimaan lintas pecahan Jika suatu transaksi perlu memengaruhi lebih dari satu shard, transaksi tersebut harus dilakukan secara berurutan dieksekusi di setiap pecahan secara terpisah. Transaksi lengkap dikirim ke pecahan pertama terpengaruh, dan setelah transaksi dimasukkan dalam potongan untuk pecahan tersebut, dan diterapkan setelah potongan dimasukkan ke dalam blok, itu menghasilkan apa yang disebut tanda terima transaksi, yang dialihkan ke pecahan berikutnya yang memerlukan transaksi dieksekusi. Jika diperlukan lebih banyak langkah, eksekusi transaksi penerimaan menghasilkan transaksi penerimaan baru dan seterusnya. 3.6.1 Penerimaan transaksi seumur hidup Sebaiknya transaksi penerimaan diterapkan di blok yang segera mengikuti blok tempat transaksi tersebut dihasilkan. Transaksi resinya saja dihasilkan setelah blok sebelumnya diterima dan diterapkan oleh produsen blok yang mempertahankan pecahan asal, dan perlu diketahui pada saat itu potongan untuk blok berikutnya diproduksi oleh produsen blok tujuan pecahan. Oleh karena itu, tanda terima harus dikomunikasikan dari pecahan sumber ke pecahan tujuan dalam jangka waktu singkat antara kedua peristiwa tersebut. Misalkan A adalah blok terakhir yang diproduksi yang berisi transaksi t yang menghasilkan tanda terima r. Misalkan B adalah blok yang diproduksi berikutnya (yaitu blok yang mempunyai A sebagai blok sebelumnya) yang ingin kita tampung r. Misalkan t berada di pecahan a dan r dalam pecahan b. Masa berlaku kuitansi, juga digambarkan pada gambar 18, adalah sebagai berikut: Memproduksi dan menyimpan kuitansi. Cpa produsen bongkahan untuk shard a menerima blok A, menerapkan transaksi t dan menghasilkan tanda terima r. cpa kemudian menyimpan semua penerimaan yang dihasilkan dalam penyimpanan persisten internal yang diindeks dengan id pecahan sumber.Mendistribusikan kuitansi. Setelah cpa siap untuk menghasilkan potongannya shard a untuk blok B, mereka mengambil semua tanda terima yang dihasilkan dengan menerapkan transaksi dari blok A untuk shard a, dan memasukkannya ke dalam potongan untuk shrad a di blok B. Setelah potongan tersebut dibuat, cpa menghasilkan kode penghapusannya versi dan semua pesan satu bagian yang terkait. cpa mengetahui produsen blok mana yang mempertahankan status penuh untuk pecahan mana. Untuk produsen blok tertentu bp cpa mencakup penerimaan yang dihasilkan dari penerapan transaksi di blok A untuk shard a yang memiliki salah satu shard yang dipedulikan bp sebagai tujuannya dalam pesan satu bagian ketika mereka mendistribusikan potongan untuk pecahan a di blok B (lihat gambar 17, yang menunjukkan tanda terima yang disertakan dalam pesan satu bagian). Menerima kuitansi. Ingatlah bahwa peserta (produsen blok dan validators) tidak memproses blok sampai mereka memiliki pesan satu bagian untuk setiap potongan yang termasuk dalam blok. Jadi, pada saat peserta tertentu menerapkan blok B, mereka memiliki semua pesan satu bagian yang sesuai potongan di B, dan dengan demikian mereka memiliki semua tanda terima masuk yang memiliki pecahannya peserta mempertahankan negara bagian sebagai tujuannya. Saat menerapkan transisi status untuk pecahan tertentu, peserta menerapkan kedua tanda terima tersebut yang telah mereka kumpulkan untuk pecahan di pesan satu bagian, dan juga semuanya transaksi yang termasuk dalam potongan itu sendiri. Gambar 18: Seumur hidup transaksi penerimaan 3.6.2 Menangani terlalu banyak tanda terima Ada kemungkinan bahwa jumlah penerimaan yang menargetkan pecahan tertentu di a blok tertentu terlalu besar untuk diproses. Misalnya, perhatikan gambar 19, di yang mana setiap transaksi di setiap shard menghasilkan tanda terima yang menargetkan shard 1. Pada blok berikutnya, jumlah resi yang perlu diproses oleh shard 1 adalah sebanding dengan beban yang diproses gabungan semua pecahan saat ditangani blok sebelumnya.

Gambar 19: Jika semua tanda terima menargetkan shard yang sama, shard tersebut mungkin tidak memilikinya kemampuan untuk memprosesnya Untuk mengatasinya kami menggunakan teknik serupa dengan yang digunakan di QuarkChain 9. Khususnya, untuk setiap shard, blok B terakhir dan shard terakhir di dalamnya blok dari mana tanda terima diterapkan dicatat. Saat pecahan baru ada dibuat, tanda terima diterapkan secara berurutan terlebih dahulu dari sisa pecahan di B, dan kemudian di blok berikutnya B, sampai bongkahan baru penuh. Di bawah normal keadaan dengan beban seimbang maka umumnya akan menghasilkan semua penerimaan sedang diterapkan (dan dengan demikian pecahan terakhir dari blok terakhir akan dicatat setiap potongan), tetapi pada saat beban tidak seimbang, dan tertentu shard menerima banyak tanda terima yang tidak proporsional, teknik ini memungkinkannya diproses dengan tetap menghormati batasan jumlah transaksi yang disertakan. Perhatikan bahwa jika beban tidak seimbang tersebut bertahan dalam waktu yang lama, penundaan akan terjadi pembuatan tanda terima hingga aplikasi dapat terus berkembang tanpa batas. Satu cara untuk mengatasinya adalah dengan membatalkan transaksi apa pun yang menghasilkan tanda terima yang menargetkan a pecahan yang memiliki penundaan pemrosesan yang melebihi beberapa konstanta (misalnya satu zaman). Perhatikan gambar 20. Berdasarkan blok B pecahan 4 tidak dapat memproses semua kuitansi, jadi hanya memproses penerimaan asal hingga shard 3 di blok A, dan mencatatnya. Di blok C disertakan resi hingga pecahan 5 di blok B, dan kemudian di blok D pecahannya menyusul, memproses semua sisa kuitansi yang masuk blok B dan semua kuitansi dari blok C. 3.7 Validasi potongan Potongan yang dihasilkan untuk shard tertentu (atau blok shard yang diproduksi untuk rantai shard tertentu dalam model dengan rantai shard) hanya dapat divalidasi oleh 9Lihat episode papan tulis dengan QuarkChain di sini: https://www.youtube.com/watch? v=opEtG6NM4x4, yang didalamnya dibahas antara lain pendekatan transaksi cross-shard halGambar 20: Pemrosesan tanda terima tertunda peserta yang memelihara negara. Mereka dapat menjadi produsen blok, validators, atau hanya saksi eksternal yang mengunduh status dan memvalidasi pecahannya tempat mereka menyimpan aset. Dalam dokumen ini kami berasumsi bahwa mayoritas peserta tidak dapat menyimpan keadaan untuk sebagian besar pecahan. Namun perlu disebutkan, bahwa ada blockchain pecahan yang dirancang dengan asumsi bahwa sebagian besar peserta memiliki kapasitas untuk menyimpan status dan memvalidasi sebagian besarnya pecahannya, seperti QuarkChain. Karena hanya sebagian kecil peserta yang memiliki negara bagian untuk memvalidasi pecahan tersebut potongannya, dimungkinkan untuk adaptif korup hanya pada peserta yang memilikinya negara bagian, dan menerapkan transisi keadaan yang tidak valid. Beberapa desain sharding diusulkan dengan sampel validators setiap beberapa hari, dan dalam satu hari setiap blok dalam rantai pecahan yang memiliki lebih dari 2/3 tanda tangan validator yang ditugaskan pada pecahan tersebut segera dipertimbangkan terakhir. Dengan pendekatan seperti itu, musuh adaptif hanya perlu merusak 2n/3+1 dari validators dalam rantai pecahan untuk menerapkan transisi keadaan yang tidak valid, yang, Meskipun hal ini mungkin sulit dilakukan, namun tingkat keamanannya tidak memadai bagi masyarakat blockchain. Seperti yang dibahas di bagian 2.3, pendekatan umum adalah memberikan jangka waktu tertentu setelah blok dibuat untuk setiap peserta yang memiliki status (baik itu adalah produsen blok, validator, atau pengamat eksternal) yang menantang validitasnya. Peserta seperti ini disebut Nelayan. Agar seorang nelayan bisa menantang blok yang tidak valid, harus dipastikan bahwa blok tersebut tersedia mereka. Ketersediaan data di Nightshade dibahas di bagian 3.4. Di Nightshade, setelah blok diproduksi, potongan tersebut tidak divalidasi oleh siapa pun kecuali produser bongkahan sebenarnya. Khususnya, produsen blok itu menyarankan blok tersebut secara alami tidak memiliki status untuk sebagian besar pecahannya, dantidak dapat memvalidasi potongan tersebut. Ketika blok berikutnya diproduksi, blok tersebut berisi pengesahan (lihat bagian 3.2) dari beberapa produsen blok dan validators, tapi karena mayoritas produsen blok dan validator tidak mengelola negara untuk sebagian besar shard, sebuah blok yang hanya memiliki satu bongkahan yang tidak valid akan mengumpulkan lebih dari separuh pengesahan secara signifikan dan akan terus berada pada pengesahan terberat. rantai. Untuk mengatasi masalah ini, kami mengizinkan peserta mana pun yang mempertahankan status pecahan untuk mengirimkan tantangan secara on-chain untuk setiap potongan tidak valid yang dihasilkan di dalamnya pecahan. 3.7.1 Tantangan validitas negara Setelah peserta mendeteksi bahwa potongan tertentu tidak valid, mereka harus memberikan bukti bahwa potongan tersebut tidak valid. Karena sebagian besar peserta jaringan tidak mempertahankan status pecahan yang berisi potongan tidak valid dihasilkan, bukti tersebut perlu memiliki informasi yang cukup untuk memastikan blok tersebut tidak sah tanpa memiliki negara. Kami menetapkan batas Ls dari jumlah negara (dalam byte) yang satu transaksi dapat membaca atau menulis secara kumulatif. Setiap transaksi yang menyentuh lebih dari Ls negara dianggap tidak sah. Ingat dari bagian 3.5 bahwa potongan tersebut di blok B tertentu hanya berisi transaksi yang akan diterapkan, tapi tidak akar negara baru. Akar negara bagian yang termasuk dalam potongan di blok B adalah negara bagian root sebelum menerapkan transaksi tersebut, tetapi setelah menerapkan transaksi dari potongan terakhir di pecahan yang sama sebelum blok B. Aktor jahat itu ingin menerapkan transisi keadaan yang tidak valid akan mencakup akar keadaan yang salah di blok B yang tidak sesuai dengan state root yang dihasilkan dari penerapan transaksi pada potongan sebelumnya. Kami memperluas informasi yang disertakan oleh produsen bongkahan ke dalam bongkahan tersebut. Alih-alih hanya menyertakan negara setelah menerapkan semua transaksi, malahan menyertakan akar keadaan setelah menerapkan setiap rangkaian transaksi yang berdekatan itu secara kolektif membaca dan menulis Ls byte negara. Dengan informasi ini untuk nelayan untuk menciptakan tantangan bahwa transisi negara diterapkan secara tidak benar cukup untuk menemukan akar status pertama yang tidak valid, dan hanya menyertakan Ls byte keadaan yang dipengaruhi oleh transaksi antara akar keadaan terakhir (yang tadinya valid) dan akar status saat ini dengan bukti merkle. Lalu peserta mana saja dapat memvalidasi transaksi di segmen tersebut dan memastikan bahwa potongan tersebut benar tidak valid. Demikian pula, jika produsen potongan mencoba memasukkan transaksi yang terbaca dan menulis lebih dari Ls byte status, untuk tantangannya cukup dengan menyertakannya byte Ls pertama yang disentuhnya dengan bukti merkle, yang sudah cukup menerapkan transaksi dan memastikan bahwa ada saatnya upaya untuk melakukannya membaca atau menulis konten melebihi Ls byte dibuat.

3.7.2 Nelayan dan transaksi lintas pecahan yang cepat Seperti yang dibahas di bagian 2.3, setelah kita berasumsi bahwa potongan shard (atau shard blok dalam model dengan rantai pecahan) bisa jadi tidak valid dan menimbulkan tantangan periode, hal ini berdampak negatif pada finalitas, dan dengan demikian komunikasi lintas pecahan. Di khususnya, shard tujuan dari transaksi lintas shard tidak dapat dipastikan bongkahan atau blok pecahan asal bersifat final hingga periode tantangan selesai (lihat gambar 21). Gambar 21: Menunggu periode tantangan sebelum menerapkan tanda terima Cara mengatasinya dengan cara melakukan transaksi cross-shard instantenious adalah agar shard tujuan tidak menunggu periode tantangan setelah transaksi pecahan sumber dipublikasikan, dan terapkan transaksi tanda terima segera, tetapi kemudian kembalikan pecahan tujuan bersama dengan sumbernya shard jika kemudian potongan atau blok asal ditemukan tidak valid (lihat gambar 22). Ini berlaku secara alami pada desain Nightshade yang menggunakan beling rantai tidak independen, melainkan semua potongan pecahannya dipublikasikan bersama-sama dalam blok rantai utama yang sama. Jika ada potongan yang ditemukan tidak valid, maka seluruh blok dengan potongan itu dianggap tidak valid, dan semua blok dibangun di atasnya di atasnya. Lihat gambar 23. Kedua pendekatan di atas memberikan atomisitas dengan asumsi tantangan tersebut periodenya cukup lama. Kami menggunakan pendekatan terakhir karena menyediakan transaksi crossshard cepat dalam keadaan normal melebihi ketidaknyamanannya pecahan tujuan dibatalkan karena transisi status yang tidak valid di salah satu pecahan sumber, yang merupakan peristiwa yang sangat langka. 3.7.3 Menyembunyikan validators Adanya tantangan-tantangan tersebut sudah secara signifikan mengurangi kemungkinan terjadinya hal tersebut korupsi adaptif, karena menyelesaikan bagian dengan pos transisi keadaan yang tidak validGambar 22: Menerapkan tanda terima segera dan mengembalikan tujuan rantai jika rantai sumber memiliki blok yang tidak valid Gambar 23: Tantangan nelayan di Nightshade periode tantangan yang dibutuhkan musuh adaptif untuk merusak semua peserta yang mempertahankan status pecahan, termasuk semua validators. Memperkirakan kemungkinan kejadian seperti itu sangatlah rumit, karena tidak ada sharded blockchain telah berumur cukup lama untuk mencoba melakukan serangan seperti itu. Kami berpendapat bahwa kemungkinannya, walaupun sangat rendah, masih cukup besar besar untuk sistem yang diharapkan dapat mengeksekusi jutaan transaksi dan menjalankan operasi keuangan di seluruh dunia. Ada dua alasan utama keyakinan ini: 1. Sebagian besar validator rantai Proof-of-Stake dan penambang di

Rantai Proof-of-Work terutama diberi insentif oleh keuntungan finansial. Jika musuh yang adaptif menawarkan mereka lebih banyak uang daripada keuntungan yang diharapkan dari beroperasi dengan jujur, masuk akal untuk mengharapkan banyak validator akan menerima tawaran itu. 2. Banyak entitas melakukan validasi rantai Proof-of-Stake secara profesional, dan diperkirakan akan ada sebagian besar saham di rantai mana pun dari entitas tersebut. Jumlah entitas tersebut cukup kecil untuk sebuah musuh adaptif untuk mengenal sebagian besar dari mereka secara pribadi dan memiliki a pemahaman yang baik tentang kecenderungan mereka untuk dirusak. Kami mengambil satu langkah lebih jauh dalam mengurangi kemungkinan korupsi adaptif dengan menyembunyikan validator yang ditugaskan ke shard mana. Idenya adalah mirip dengan cara Algorand [5] menyembunyikan validators. Penting untuk dicatat bahwa meskipun validator disembunyikan, seperti pada Algorand atau seperti dijelaskan di bawah ini, korupsi adaptif secara teori masih mungkin terjadi. Sementara musuh adaptif tidak mengetahui peserta yang akan membuat atau memvalidasi satu blok atau satu bagian, para peserta sendiri mengetahui bahwa mereka akan tampil tugas seperti itu dan memiliki bukti kriptografiknya. Jadi, musuh bisa menyiarkan niatnya untuk melakukan korupsi, dan membayar kepada siapa saja peserta yang mau memberikan bukti kriptografi seperti itu. Namun kami mencatat, karena musuh tidak melakukannya mengetahui validator yang ditugaskan ke pecahan yang ingin mereka rusak, mereka tidak punya pilihan lain selain menyiarkan niat mereka untuk merusak pecahan tertentu seluruh komunitas. Pada titik ini, hal ini menguntungkan secara ekonomi bagi siapa pun yang jujur peserta untuk memutar node penuh yang memvalidasi pecahan tersebut, karena ada nilai high kemungkinan munculnya blok yang tidak valid di pecahan itu, yang merupakan peluang untuk itu buat tantangan dan kumpulkan hadiah terkait. Untuk tidak mengungkapkan validator yang ditetapkan ke pecahan tertentu, kami melakukannya berikut ini (lihat gambar 24): Menggunakan VRF untuk mendapatkan tugas. Di awal setiap zaman masing-masing validator menggunakan VRF untuk mendapatkan bitmask dari pecahan yang validator ditugaskan. Bitmask setiap validator akan memiliki bit Sw (lihat bagian 3.3 untuk definisinya dari Sw). validator kemudian mengambil status pecahan yang sesuai, dan selama masa untuk setiap blok yang diterima memvalidasi potongan yang sesuai ke pecahan tempat validator ditugaskan. Masuk dalam blok, bukan bongkahan. Karena penetapan pecahan disembunyikan, validator tidak dapat menandatangani pecahan. Sebaliknya, ia selalu memberi tanda secara keseluruhan blok, sehingga tidak mengungkapkan pecahan apa yang divalidasinya. Khususnya, ketika validator menerima sebuah blok dan memvalidasi semua potongan, ia akan membuat pesan yang membuktikan bahwa semua potongan di semua pecahan yang validator ditugaskan adalah valid (tanpa menunjukkan dengan cara apa pun pecahan itu), atau pesan itu berisi bukti transisi keadaan yang tidak valid jika ada bagian yang tidak valid. Lihat bagian 3.8 untuk rincian tentang bagaimana pesan-pesan tersebut dikumpulkan, bagian 3.7.4 untuk detail tentang cara mencegah validators membonceng pesan dari validator lainnya, dan bagian 3.7.5 untuk detail cara memberi penghargaan dan hukuman validators seandainya tantangan transisi keadaan tidak valid yang berhasil benar-benar terjadi.Gambar 24: Menyembunyikan validator di Nightshade 3.7.4 Pengungkapan Komitmen Salah satu masalah umum dengan validators adalah validator dapat melewatkan pengunduhan status dan benar-benar memvalidasi potongan dan blok, dan sebagai gantinya amati jaringannya, lihat apa yang dikirimkan validator lainnya dan ulangi pesan. validator yang mengikuti strategi seperti itu tidak memberikan tambahan apa pun keamanan untuk jaringan, tetapi mengumpulkan hadiah. Solusi umum untuk masalah ini adalah setiap validator memberikan bukti bahwa mereka benar-benar memvalidasi blok tersebut, misalnya dengan memberikan jejak unik penerapan transisi negara, namun bukti-bukti tersebut meningkatkan biaya secara signifikan validasi. Gambar 25: Pengungkapan komitmen

Sebaliknya kita membuat validator pertama yang berkomitmen pada hasil validasi (baik pesan yang membuktikan keabsahan potongan, atau bukti ketidakabsahan transisi keadaan), tunggu selama jangka waktu tertentu, baru kemudian tampilkan hasil validasi sebenarnya, seperti ditunjukkan pada gambar 25. Periode penerapan tidak bersinggungan dengan periode pengungkapan, dan dengan demikian validator yang malas tidak dapat meniru validator yang jujur. Terlebih lagi, jika validator yang tidak jujur berkomitmen pada pesan yang membuktikan hal tersebut validitas potongan yang ditetapkan, dan setidaknya satu potongan tidak valid, jika memang demikian ditunjukkan bahwa potongan tersebut tidak valid, validator tidak dapat menghindari pemotongan, karena, seperti yang kami tunjukkan di bagian 3.7.5, satu-satunya cara agar tidak terpotong dalam situasi seperti ini adalah menyajikan pesan yang berisi bukti transisi keadaan yang tidak valid itu cocok dengan komit. 3.7.5 Menangani tantangan Seperti dibahas di atas, setelah validator menerima blok dengan potongan yang tidak valid, mereka terlebih dahulu menyiapkan bukti transisi keadaan yang tidak sah (lihat bagian 3.7.1), kemudian berkomitmen pada bukti tersebut (lihat 3.7.4), dan setelah beberapa waktu ungkapkan tantangannya. Setelah tantangan yang terungkap dimasukkan ke dalam blok, hal berikut akan terjadi: 1. Semua transisi keadaan yang terjadi dari blok yang berisi potongan tidak valid sampai blok di mana tantangan yang terungkap disertakan, dapatkan dibatalkan. Keadaan sebelum blok yang mencakup tantangan yang terungkap dianggap sama dengan keadaan sebelum blok yang memuatnya potongan yang tidak valid. 2. Dalam jangka waktu tertentu setiap validator harus menampilkan bitmasknya pecahan yang mereka validasi. Karena bitmask dibuat melalui VRF, jika mereka ditugaskan ke pecahan yang memiliki transisi status tidak valid, mereka tidak bisa menghindari pengungkapannya. Setiap validator yang gagal menampilkan bitmask diasumsikan ditugaskan ke beling. 3. Setiap validator yang setelah periode tersebut ditemukan ditugaskan ke pecahan, yang melakukan komit pada beberapa hasil validasi untuk blok yang berisi potongan yang tidak valid dan itu tidak mengungkapkan bukti transisi keadaan yang tidak valid yang sesuai dengan komit mereka dipotong. 4. Setiap validator mendapat tugas pecahan baru, dan periode baru dijadwalkan untuk memulai setelah beberapa waktu yang cukup bagi semua validator untuk mengunduh keadaan, seperti yang ditunjukkan pada gambar 26. Perhatikan bahwa sejak validator mengungkapkan pecahan yang ditugaskan padanya hingga zaman baru dimulai, keamanan sistem berkurang sejak tugas pecahan terungkap. Para peserta jaringan perlu menjaganya diingat saat menggunakan jaringan selama periode tersebut. 3.8 Agregasi Tanda Tangan Agar sistem dengan ratusan pecahan dapat beroperasi dengan aman, kami ingin memilikinya pesanan 10.000 atau lebih validators. Seperti yang dibahas di bagian 3.7, kita menginginkan masing-masingGambar 26: Menangani tantangan validator untuk mempublikasikan rata-rata komit pada pesan dan tanda tangan tertentu sekali per blok. Meskipun pesan komitnya sama, menggabungkan a Menandatangani BLS dan memvalidasinya akan sangat mahal. Tapi tentu saja pesan komit dan pengungkapan tidak sama di validators, dan oleh karena itu kita memerlukan cara untuk menggabungkan pesan-pesan dan tanda tangan tersebut di a cara yang memungkinkan validasi cepat nanti. Pendekatan spesifik yang kami gunakan adalah sebagai berikut: Validator bergabung dengan produsen blok. Produsen blok sudah dikenal beberapa saat sebelum zaman dimulai, karena mereka memerlukan waktu untuk mengunduhnya menyatakan sebelum epoch dimulai, dan tidak seperti validators, produsen bloknya tidak disembunyikan. Setiap produser blok memiliki v validator slot. Validator mengirimkan proposal off-chain kepada produsen blok untuk dimasukkan sebagai salah satu dari v validatordtk. Jika produsen blok ingin memasukkan validator, mereka mengirimkan a transaksi yang berisi permintaan off-chain awal dari validator, dan tanda tangan produser blok yang membuat validator bergabung dengan produser blok. Perhatikan bahwa validator yang ditugaskan ke produsen blok belum tentu memvalidasi pecahan yang sama dengan yang dihasilkan oleh produsen blok. Jika sebuah validator diterapkan untuk bergabung dengan beberapa produsen blok, hanya transaksi dari produsen blok pertama akan berhasil. Produsen blok mengumpulkan komitmen. Produser blok terus-menerus mengumpulkan komit dan mengungkapkan pesan dari validators. Setelah sejumlah pesan tersebut terakumulasi, produsen blok menghitung merekle pohon pesan-pesan ini, dan mengirimkan ke setiap validator root merkle dan jalur merkle ke pesan mereka. validator memvalidasi jalur dan tanda masuk akar merkle. Produser blok kemudian mengumpulkan tanda tangan BLS di root merkle dari validators, dan hanya menerbitkan root merkle dan akumulasi tanda tangan. Produsen blok juga menandatangani keabsahan multisignature menggunakan tanda tangan ECDSA yang murah. Jika multisignature tidak cocok dengan root merkle yang dikirimkan atau bitmask dari validator yang berpartisipasi, ini merupakan perilaku yang dapat disayat. Saat menyinkronkan rantai, seorang peserta dapat memilih untuk memvalidasi semua tanda tangan BLS dari validator (yang sangat mahal karena melibatkan pengumpulan kunci publik validator), atau hanyatanda tangan ECDMA dari produsen blok dan mengandalkan fakta bahwa produsen blok tidak ditantang dan dipangkas. Menggunakan transaksi on-chain dan bukti merkle untuk tantangan. Itu dapat dicatat bahwa tidak ada gunanya mengungkapkan pesan dari validators jika tidak transisi keadaan yang tidak valid terdeteksi. Hanya pesan-pesan yang berisi hal yang sebenarnya bukti transisi negara yang tidak valid perlu diungkapkan, dan hanya untuk pesan-pesan seperti itu perlu ditunjukkan bahwa mereka cocok dengan komitmen sebelumnya. Pesannya perlu diungkapkan untuk dua tujuan: 1. Untuk benar-benar memulai rollback rantai ke momen sebelum transisi keadaan tidak valid (lihat bagian 3.7.5). 2. Untuk membuktikan bahwa validator tidak berusaha membuktikan keabsahan potongan tidak valid. Apa pun kasusnya, kita perlu mengatasi dua masalah: 1. Komit sebenarnya tidak disertakan pada rantai, hanya akar merkle saja komit dikumpulkan dengan pesan lain. validator perlu menggunakan jalur merkle yang disediakan oleh produsen blok dan komitmen awal mereka membuktikan bahwa mereka berkomitmen terhadap tantangan tersebut. 2. Ada kemungkinan bahwa semua validator yang ditugaskan ke beling dengan yang tidak valid transisi negara kebetulan ditugaskan ke produsen blok yang korup itu sedang menyensor mereka. Untuk menyiasatinya, kami mengizinkan mereka mengirimkan pengungkapannya sebagai transaksi reguler on-chain dan melewati agregasi. Yang terakhir ini hanya diperbolehkan untuk bukti transisi negara yang tidak sah, yaitu sangat jarang terjadi, sehingga tidak akan mengakibatkan pemblokiran spam. Masalah terakhir yang perlu diatasi adalah bahwa produsen blok dapat melakukan hal tersebut memilih untuk tidak berpartisipasi dalam pengumpulan pesan atau dengan sengaja menyensor validators tertentu. Kita buat yang tidak menguntungkan secara ekonomi, dengan membuat blok imbalan produser sebanding dengan jumlah validator yang ditugaskan kepada mereka. Kami juga mencatat bahwa karena produsen blok antar zaman sebagian besar berpotongan (sejak selalu menjadi peserta teratas dengan taruhan tertinggi), validator bisa sebagian besar tetap bekerja sama dengan produsen blok yang sama, dan dengan demikian mengurangi risiko ditugaskan ke produser blok yang pernah menyensornya di masa lalu. 3.9 Rantai Snapshot Karena blok pada rantai utama sangat sering diproduksi, pengunduhan sejarah lengkap mungkin menjadi mahal dengan sangat cepat. Apalagi sejak setiap blok berisi tanda tangan BLS dari sejumlah besar peserta, hanya agregasi kunci publik untuk memeriksa tanda tangan mungkin menjadi penghalang mahal juga. Terakhir, karena di masa mendatang Ethereum 1.0 kemungkinan besar akan tetap menjadi satu dari blockchain yang paling banyak digunakan, memiliki cara yang berarti untuk mentransfer aset

Mendekati Ethereum adalah persyaratan, dan hari ini memverifikasi tanda tangan BLS untuk memastikannya Validitas blok dekat pada sisi Ethereum tidak dimungkinkan. Setiap blok di rantai utama Nightshade secara opsional dapat berisi Schnorr multisignature pada header blok terakhir yang menyertakan Schnorr tersebut multitanda tangan. Kami menyebut blok tersebut sebagai blok snapshot. Blok pertama dari setiap zaman harus berupa blok snapshot. Saat mengerjakan multisignature seperti itu, produsen blok juga harus mengumpulkan tanda tangan BLS dari validators pada blok snapshot terakhir, dan menggabungkannya dengan cara yang sama seperti yang dijelaskan dalam bagian 3.8. Karena kumpulan produsen blok konstan sepanjang zaman, maka validasi hanya blok snapshot pertama di setiap epoch yang cukup dengan asumsi bahwa pada no menunjukkan sebagian besar produsen blok dan validator berkolusi dan berkreasi sebuah garpu. Blok pertama dari zaman tersebut harus berisi informasi yang cukup untuk dihitung produsen blok dan validators untuk zaman tersebut. Kami menyebut subrantai dari rantai utama yang hanya berisi snapshot memblokir rantai snapshot. Membuat multisignature Schnorr adalah proses interaktif, tapi sejak kami hanya perlu melakukannya secara jarang, proses apa pun, tidak peduli seberapa tidak efisiennya akan cukup. Multisignature Schnorr dapat dengan mudah divalidasi di Ethereum, sehingga memberikan primitif penting untuk cara yang aman dalam melakukan cross-blockchain komunikasi. Untuk menyinkronkan dengan rantai Dekat, seseorang hanya perlu mengunduh semua snapshot memblokir dan mengonfirmasi bahwa tanda tangan Schnorr sudah benar (opsional juga memverifikasi masing-masing tanda tangan BLS dari validators), dan kemudian hanya menyinkronkan blok rantai utama dari blok snapshot terakhir.

Nightshade

3.1 من سلاسل القطع إلى قطع القطع يعتبر نموذج التجزئة الذي يحتوي على سلاسل شظية وسلسلة منارة قويًا جدًا ولكن لديه تعقيدات معينة. على وجه الخصوص، يجب تنفيذ قاعدة اختيار الشوكة وفي كل سلسلة على حدة، قاعدة اختيار الشوكة في سلاسل الكسرة والمنارة يجب بناء السلسلة بشكل مختلف واختبارها بشكل منفصل. في Nightshade، قمنا بتصميم النظام على أنه blockchain واحد، حيث يحتوي كل منهما على blockchain تحتوي الكتلة بشكل منطقي على جميع المعاملات لجميع الأجزاء، وتغير الحالة الكاملة لجميع الشظايا. ومع ذلك، فعليًا، لا يقوم أي مشارك بتنزيل الملف الحالة الكاملة أو الكتلة المنطقية الكاملة. وبدلا من ذلك، كل مشارك في الشبكة فقط يحافظ على الحالة التي تتوافق مع الأجزاء التي يتحقق من صحة المعاملات الخاصة بها، ويتم تقسيم قائمة جميع المعاملات في الكتلة إلى معاملات فعلية قطع، قطعة واحدة لكل قطعة. في ظل الظروف المثالية، تحتوي كل كتلة على قطعة واحدة بالضبط لكل قطعة كتلة، والتي تتوافق تقريبًا مع النموذج الذي يحتوي على سلاسل شظية تنتج سلاسل القطع كتلًا بنفس سرعة سلسلة المنارة. ومع ذلك، بسبب تأخيرات الشبكة، قد تكون بعض القطع مفقودة، لذلك عمليًا كل كتلة يحتوي على قطعة واحدة أو صفر قطعة لكل قطعة. انظر القسم 3.3 للحصول على تفاصيل حول كيفية القيام بذلك يتم إنتاج الكتل. الشكل 16: نموذج به سلاسل شظية على اليسار وبه سلسلة واحدة كتل مقسمة إلى قطع على اليمين

3.2 الإجماع النهجان المهيمنان على الإجماع في blockchains اليوم هما أطول (أو أثقل) سلسلة، وهي السلسلة التي لديها أكبر قدر من العمل أو الحصة المستخدمة في بنائه تعتبر قانونية، و BFT، فيها لكل كتلة بعض مجموعة من validators تصل إلى إجماع BFT. وفي البروتوكولات المقترحة مؤخرا، يعتبر النهج الأخير هو النهج الأكثر هيمنة، لأنها توفر نهائية فورية، بينما في السلسلة الأطول تحتاج إلى المزيد من الكتل ليتم بناؤها على رأس الكتلة لضمان النهاية. في كثير من الأحيان لمعنى الأمن هو الوقت الذي يستغرقه بناء عدد كافٍ من الكتل ترتيب الساعات. استخدام BFT الإجماع على كل كتلة له أيضًا عيوب، مثل: 1. BFT يتضمن الإجماع قدرًا كبيرًا من التواصل. بينما تسمح التطورات الحديثة بالتوصل إلى الإجماع في الوقت الخطي من حيث العدد من المشاركين (راجع على سبيل المثال [4])، لا يزال هناك حمل ملحوظ لكل كتلة؛ 2. من غير الممكن لجميع المشاركين في الشبكة المشاركة في BFT الإجماع لكل كتلة، وبالتالي عادةً ما يصل فقط مجموعة فرعية من المشاركين تم أخذ عينات منها بشكل عشوائي إلى الإجماع. يمكن لمجموعة العينات العشوائية، من حيث المبدأ، أن تكون: تالف بشكل تكيفي، ويمكن إنشاء شوكة من الناحية النظرية. النظام إما أن تكون على غرار ليكون جاهزا لمثل هذا الحدث، وبالتالي لا يزال لديك قاعدة اختيار شوكة إلى جانب إجماع BFT، أو مصممة لإغلاق أسفل في مثل هذا الحدث. ومن الجدير بالذكر أن بعض التصاميم مثل Algorand [5]، يقلل بشكل كبير من احتمالية الفساد التكيفي. 3. والأهم من ذلك، أن النظام يتوقف إذا 1 3 أو أكثر من جميع المشاركين غير متصل. وبالتالي، فإن أي خلل مؤقت في الشبكة أو انقسام في الشبكة يمكن أن يؤدي إلى توقف النظام تمامًا. من الناحية المثالية، يجب أن يكون النظام قادرًا على الاستمرار تعمل طالما أن نصف المشاركين على الأقل متصلون بالإنترنت (أثقل تستمر البروتوكولات القائمة على السلسلة في العمل حتى لو كان أقل من نصف المشاركين متصلين بالإنترنت، ولكن مدى استصواب هذه الخاصية أكثر إثارة للجدل داخل المجتمع). النموذج الهجين الذي يكون فيه الإجماع المستخدم هو الأثقل نوعًا ما سلسلة، ولكن يتم الانتهاء من بعض الكتل بشكل دوري باستخدام أداة BFT النهائية للحفاظ على مزايا كلا النموذجين. مثل هذه الأدوات BFT هي Casper FFG [6] المستخدم في Ethereum 2.0 8، Casper CBC (راجع https://vitalik. ca/general/2018/12/05/cbc_casper.html) و GRANDPA (راجع https:// Medium.com/polkadot-network/d08a24a021b5) المستخدم في Polkadot. يستخدم Nightshade إجماع السلسلة الأثقل. على وجه التحديد عندما كتلة ينتج المنتج كتلة (انظر القسم 3.3)، ويمكنه جمع التوقيعات منها منتجو الكتل الآخرون وvalidators يشهدون على الكتلة السابقة. انظر القسم 3.8 للحصول على تفاصيل حول كيفية تجميع هذا العدد الكبير من التوقيعات. الوزن 8 راجع أيضًا جلسة السبورة البيضاء مع جاستن دريك للحصول على نظرة عامة متعمقة عن Casper FFG، وكيف يتم دمجه مع إجماع سلسلة GHOST الأثقل هنا: https://www. youtube.com/watch?v=S262StTwkmoمن الكتلة هي الحصة التراكمية لجميع الموقعين الذين لديهم توقيعات المدرجة في الكتلة. وزن السلسلة هو مجموع أوزان الكتلة. علاوة على إجماع السلسلة الأثقل، نستخدم أداة نهائية تستخدم الشهادات لإنهاء الكتل. لتقليل تعقيد النظام، نحن نستخدم أداة نهائية لا تؤثر على قاعدة اختيار الشوكة بأي شكل من الأشكال، وبدلاً من ذلك يقدم فقط شروط القطع الإضافية، مثل تلك التي يتم قطعها مرة واحدة في الكتلة تم الانتهاء من الشوكة بواسطة الأداة النهائية، ومن المستحيل الحصول على شوكة ما لم تكن هناك نسبة كبيرة جدًا من إجمالي الحصة تم تخفيضها. إن Casper CBC عبارة عن أداة نهائية، ونحن كذلك النموذج حاليًا مع وضع Casper CBC في الاعتبار. نحن نعمل أيضًا على بروتوكول BFT منفصل يسمى TxFlow. في وقت عند كتابة هذه الوثيقة، من غير الواضح ما إذا كان سيتم استخدام TxFlow بدلاً من Casper سي بي سي. ومع ذلك، نلاحظ أن اختيار الأداة النهائية متعامد إلى حد كبير مع بقية التصميم. 3.3 إنتاج الكتلة يوجد في Nightshade دوران: منتجو الكتل وvalidators. في أي نقطة النظام يحتوي على منتجي الكتلة w، w = 100 في نماذجنا، وwv validators، في نموذجنا v = 100، wv = 10,000. النظام هو إثبات الحصة، مما يعني أن كلا من منتجي الكتل وvalidator لديهم عدد من العناصر الداخلية العملة (المشار إليها باسم "tokens") مقفلة لمدة زمنية تتجاوز بكثير الوقت الذي يقضونه في أداء واجباتهم في بناء السلسلة والتحقق من صحتها. كما هو الحال مع جميع أنظمة إثبات الحصة، ليس كل منتجي الكتلة وليس كذلك جميع wv validators هي كيانات مختلفة، حيث لا يمكن فرض ذلك. كل ومع ذلك، فإن منتجي الكتل w وwv validators لديهم قسم منفصل حصة. يحتوي النظام على n شظايا، n = 1000 في نموذجنا. كما ذكر في القسم 3.1، في Nightshade لا توجد سلاسل شظية، وبدلاً من ذلك يقوم جميع منتجي الكتل وvalidator ببناء blockchain واحد، والذي نشير إليه باسم السلسلة الرئيسية. يتم تقسيم حالة السلسلة الرئيسية إلى أجزاء n وكل كتلة المنتج وvalidator في أي لحظة قاموا فقط بتنزيل مجموعة فرعية من الحالة التي تتوافق مع بعض المجموعات الفرعية من القطع، والمعالجة فقط التحقق من صحة المعاملات التي تؤثر على تلك الأجزاء من الدولة. لكي تصبح منتجًا للكتل، يجب على أحد المشاركين في الشبكة أن يقوم بتأمين بعض الكتل الكبيرة مبلغ tokens (حصة). تتم صيانة الشبكة على فترات، حيث العصر هو فترة من الزمن بترتيب الأيام. المشاركون مع أكبر الرهانات في بداية حقبة معينة هي الكتلة المنتجين لتلك الحقبة. يتم تعيين كل منتج كتلة إلى قطع sw، (على سبيل المثال sw = 40، مما يجعل sww/n = 4 منتجي كتلة لكل قطعة). الكتلة يقوم المنتج بتنزيل حالة الجزء الذي تم تعيينه له قبل العصر يبدأ، وعلى مدار العصر يجمع المعاملات التي تؤثر على تلك القطعة، ويطبقها على الدولة. لكل كتلة b في السلسلة الرئيسية، ولكل قطعة s، هناك واحدة من تم تعيين منتجي الكتل إلى المسؤول عن إنتاج الجزء المتعلق ب إلى القشرة. الجزء من b المرتبط بالشظية يسمى قطعة، ويحتوي على قائمة المعاملات الخاصة بالجزء المراد تضمينه في b، بالإضافة إلى Merkleجذر الحالة الناتجة. b سيحتوي في النهاية على رأس صغير جدًا فقط القطعة، وهي جذر Merkle لجميع المعاملات المطبقة (انظر القسم 3.7.1 للحصول على تفاصيل دقيقة)، وجذر ميركل للحالة النهائية. غالبًا ما نشير في بقية الوثيقة إلى منتج الكتل المسؤولة عن إنتاج قطعة في وقت معين لقطعة معينة كمنتج قطعة. يعد منتج Chunk دائمًا أحد منتجي الكتل. يقوم منتجو الكتل ومنتجو القطع بتدوير كل كتلة وفقًا لذلك لجدول زمني محدد. منتجو الكتل لديهم طلب وينتجون بشكل متكرر كتل في هذا الترتيب. على سبيل المثال. إذا كان هناك 100 منتج كتلة، الكتلة الأولى المنتجون مسؤولون عن إنتاج الكتل 1، 101، 201 إلخ، والثاني هو المسؤول عن إنتاج 2، 102، 202 الخ). نظرًا لأن إنتاج القطع، على عكس إنتاج الكتل، يتطلب الصيانة الدولة، ولكل جزء فقط منتجو كتلة sww/n يحافظون على الدولة لكل قطعة، في المقابل، يتم تدوير منتجي كتل sww/n فقط لإنشاءها قطع. على سبيل المثال. مع الثوابت المذكورة أعلاه مع أربعة منتجين للكتل تم تعيينهم كل قطعة، سيقوم كل منتج كتلة بإنشاء قطع مرة واحدة كل أربع كتل. 3.4 ضمان توافر البيانات لضمان توفر البيانات، نستخدم أسلوبًا مشابهًا لأسلوب Polkadot الموصوفة في القسم 2.5.3. بمجرد أن ينتج منتج الكتلة قطعة، فإنه يقوم بإنشائها نسخة مشفرة للمحو باستخدام رمز الكتلة الأمثل (w, ⌊w/6 + 1⌋) قطعة. ثم يرسلون بعد ذلك قطعة واحدة من قطعة المحو المشفرة (نسميها هذه القطع أجزاء قطعة، أو أجزاء فقط) لكل منتج كتلة. نقوم بحساب شجرة ميركل التي تحتوي على جميع الأجزاء مثل الأوراق، و يحتوي رأس كل قطعة على جذر ميركل لهذه الشجرة. يتم إرسال الأجزاء إلى validators عبر رسائل onepart. كل رسالة من هذا القبيل يحتوي على رأس القطعة والترتيبي للجزء ومحتويات الجزء. ال تحتوي الرسالة أيضًا على توقيع منتج الكتلة الذي أنتج الملف قطعة ومسار ميركل لإثبات أن الجزء يتوافق مع الرأس ويتم إنتاجه بواسطة منتج الكتلة المناسب. بمجرد أن يتلقى منتج الكتلة كتلة السلسلة الرئيسية، فإنه يتحقق أولاً مما إذا كان ذلك صحيحًا أم لا تحتوي على رسائل مكونة من جزء واحد لكل قطعة مضمنة في الكتلة. إذا لم يكن كذلك، الكتلة لا تتم معالجة حتى يتم استرداد الرسائل المفقودة. بمجرد استلام كافة الرسائل المكونة من جزء واحد، يقوم منتج الكتلة بإحضار الملف الأجزاء المتبقية من أقرانه ويعيد بناء القطع التي يحتفظون بها الدولة. لا يقوم منتج الكتلة بمعالجة كتلة السلسلة الرئيسية إذا كانت لواحدة على الأقل القطعة المضمنة في الكتلة لا تحتوي على الرسالة المقابلة من جزء واحد، أو إذا كانت القطعة واحدة على الأقل تحافظ على الحالة التي لا يمكنها ذلك إعادة بناء القطعة بأكملها. لكي تكون قطعة معينة متاحة، يكفي أن يكون ⌊w/6⌋+1 من الكتلة المنتجون لديهم أجزائهم ويخدمونها. وهكذا، طالما أن عدد لا تتجاوز الجهات الفاعلة الضارة ⌊w/3⌋لا توجد سلسلة تحتوي على أكثر من نصف الكتلة يمكن أن يحتوي المنتجون الذين يقومون ببنائه على قطع غير متوفرة.الشكل 17: تحتوي كل كتلة على قطعة واحدة أو صفر قطعة لكل قطعة، وكل قطعة هو محو مشفرة. يتم إرسال كل جزء من قطعة المحو المشفرة إلى جهة معينة منتج الكتلة عبر رسالة خاصة من جزء واحد 3.4.1 التعامل مع منتجي الكتل الكسالى إذا كان لدى منتج الكتلة كتلة تفتقد رسالة مكونة من جزء واحد، فسيقومون بذلك قد يختار الاستمرار في التوقيع عليها، لأنه إذا انتهى الأمر بربط الكتلة بالسلسلة سيزيد من مكافأة منتج الكتلة. لا يوجد خطر على الكتلة المنتج لأنه من المستحيل إثبات لاحقًا أن منتج الكتلة لم يكن لديه الرسالة ذات الجزء الواحد. لمعالجة هذه المشكلة، نجعل كل قطعة منتجة عند إنشاء القطعة اختر لونًا (أحمر أو أزرق) لكل جزء من القطعة المشفرة المستقبلية، وقم بتخزينها القناع البتي للون المخصص في القطعة قبل تشفيرها. كل جزء تحتوي الرسالة بعد ذلك على اللون المخصص للجزء، ويتم استخدام اللون متى حساب جذر ميركل للأجزاء المشفرة. إذا انحرف منتج القطعة من البروتوكول، يمكن إثبات ذلك بسهولة، حيث لن يتم إثبات جذر Merkle تتوافق مع الرسائل ذات الجزء الواحد، أو الألوان الموجودة في الرسائل ذات الجزء الواحد تتوافق مع جذر Merkle ولن تتطابق مع القناع الموجود في القطعة. عندما يقوم منتج الكتلة بالتوقيع على الكتلة، فإنه يتضمن قناعًا نقطيًا لجميع العناصر الأجزاء الحمراء التي تلقوها مقابل القطع الموجودة في الكتلة. نشر ان قناع البت غير الصحيح هو سلوك قابل للقطع. إذا لم يتلق منتج الكتلة أ رسالة مكونة من جزء واحد، ليس لديهم طريقة لمعرفة لون الرسالة، و وبالتالي لديهم فرصة بنسبة 50٪ للتعرض للقطع إذا حاولوا التوقيع بشكل أعمى على كتلة. 3.5 تطبيق انتقال الدولة يختار منتجو القطعة فقط المعاملات التي سيتم تضمينها في القطعة ولكن لا تطبق انتقال الحالة عندما تنتج قطعة. في المقابل،

يحتوي رأس القطعة على جذر Merkle لحالة Merkelized كما كان من قبل يتم تطبيق المعاملات في القطعة. يتم تطبيق المعاملات فقط عندما تكون الكتلة كاملة تتضمن القطعة تتم معالجتها. يقوم المشارك بمعالجة الكتلة فقط إذا 1. تم استلام الكتلة السابقة ومعالجتها؛ 2. بالنسبة لكل قطعة، لا يحتفظ المشارك بالحالة التي يمتلكها رأيت الرسالة المكونة من جزء واحد؛ 3. بالنسبة لكل قطعة، يحافظ المشارك على الحالة لأنه يمتلك قطعة كاملة. بمجرد معالجة الكتلة، لكل قطعة يشارك فيها المشارك يحافظ على الحالة، ويقوم بتطبيق المعاملات وحساب الحالة الجديدة اعتبارًا من بعد تطبيق المعاملات، وبعد ذلك تصبح جاهزة للإنتاج قطع الكتلة التالية، إذا تم تخصيصها لأي قطعة، نظرًا لوجودها جذر ميركل للدولة المركلية الجديدة. 3.6 المعاملات والإيصالات عبر القطع إذا كانت المعاملة تحتاج إلى أن تؤثر على أكثر من جزء واحد، فيجب أن تكون متتالية يتم تنفيذها في كل قطعة على حدة. يتم إرسال المعاملة الكاملة إلى الجزء الأول متأثرة، وبمجرد تضمين المعاملة في قطعة هذه القطعة، و يتم تطبيقه بعد تضمين القطعة في كتلة، فإنه يولد ما يسمى بالإيصال المعاملة، التي يتم توجيهها إلى الجزء التالي الذي تحتاج المعاملة إليه يتم إعدامه. إذا كانت هناك حاجة لمزيد من الخطوات، تنفيذ معاملة الاستلام ينشئ معاملة استلام جديدة وما إلى ذلك. 3.6.1 استلام المعاملة مدى الحياة من المستحسن أن يتم تطبيق معاملة الاستلام في الكتلة التي تتبع الكتلة التي تم إنشاؤها فيها مباشرة. معاملة الاستلام فقط تم إنشاؤها بعد استلام الكتلة السابقة وتطبيقها من قبل منتجي الكتلة التي تحافظ على القطعة الأصلية، ويجب أن تكون معروفة بحلول الوقت الذي يتم إنتاج قطعة الكتلة التالية بواسطة منتجي الكتلة للوجهة شظية. وبالتالي، يجب إرسال الإيصال من الجزء المصدر إلى جزء الوجهة في الإطار الزمني القصير بين هذين الحدثين. دع A يكون آخر كتلة تم إنتاجها والتي تحتوي على معاملة t التي تولد إيصالًا r. دع B يكون الكتلة المنتجة التالية (أي الكتلة التي تحتوي على A كـ كتلته السابقة) التي نريد أن تحتوي على r. دع t يكون في الكسرة a و r يكون في القشرة ب. عمر الإيصال، الموضح أيضًا في الشكل 18، هو كما يلي: إنتاج وتخزين الإيصالات. منتج القطعة CPA للقطعة يتلقى a الكتلة A، ويطبق المعاملة t وينشئ الإيصال r. اتفاق السلام الشامل ثم يقوم بتخزين جميع هذه الإيصالات المنتجة في وحدة التخزين الداخلية الدائمة المفهرسة بواسطة معرف القطعة المصدر.توزيع الإيصالات. بمجرد أن يصبح CPA جاهزًا لإنتاج القطعة الجزء "أ" للكتلة "ب"، يقومون بإحضار جميع الإيصالات التي تم إنشاؤها عن طريق تطبيق المعاملات من الكتلة "أ" للجزء "أ"، وإدراجها في القطعة للجزء "شراد" a في الكتلة B. بمجرد إنشاء هذه القطعة، ينتج cpa تشفيرًا للمسح الخاص بها الإصدار وجميع رسائل onepart المقابلة. يعرف CPA منتجي الكتل الذين يحتفظون بالحالة الكاملة لأي شظايا. لمنتج كتلة معينة تتضمن bp cpa الإيصالات الناتجة عن تطبيق المعاملات في الكتلة A بالنسبة للقطعة a التي تحتوي على أي من القطع التي تهتم بها شركة bp كوجهة لها في الرسالة المكونة من جزء واحد عندما قاموا بتوزيع القطعة الخاصة بالجزء "أ" في الكتلة "ب". (انظر الشكل 17، الذي يوضح الإيصالات المضمنة في الرسالة المكونة من جزء واحد). استلام الإيصالات. تذكر أن المشاركين (منتجي الكتل وvalidators) لا يقومون بمعالجة الكتل حتى يكون لديهم رسائل مكونة من جزء واحد لكل قطعة مدرجة في الكتلة. وبالتالي، بحلول الوقت الذي يقوم فيه أي مشارك معين بتطبيق المجموعة B، يكون لديه جميع الرسائل ذات الجزء الواحد التي تتوافق معها قطع في B، وبالتالي لديهم جميع الإيصالات الواردة التي تحتوي على القطع يحتفظ المشارك بالحالة كوجهة له. عند تطبيق انتقال الحالة لجزء معين، يقوم المشارك بتطبيق كلا الإيصالات التي جمعوها للكسرة في الرسائل الواحدة، فضلا عن الجميع المعاملات المدرجة في القطعة نفسها. الشكل 18: عمر معاملة الاستلام 3.6.2 التعامل مع عدد كبير جدًا من الإيصالات من الممكن أن يكون عدد الإيصالات التي تستهدف جزءًا معينًا في ملف كتلة معينة كبيرة جدًا بحيث لا يمكن معالجتها. على سبيل المثال، تأمل الشكل 19، في حيث تقوم كل معاملة في كل جزء بإنشاء إيصال يستهدف الجزء 1. بحلول الكتلة التالية، يكون عدد الإيصالات التي تحتاج القطعة 1 إلى معالجتها هو يمكن مقارنته بالحمل الذي تمت معالجته لجميع القطع مجتمعة أثناء التعامل معها الكتلة السابقة.

الشكل 19: إذا كانت كافة الإيصالات تستهدف نفس الجزء، فقد لا يكون لدى الجزء نفس الشيء القدرة على معالجتها ولمعالجتها نستخدم تقنية مشابهة لتلك المستخدمة في QuarkChain 9. على وجه التحديد، بالنسبة لكل جزء، توجد الكتلة الأخيرة B وآخر جزء داخل ذلك يتم تسجيل الكتلة التي تم تطبيق الإيصالات منها. عندما تكون القشرة الجديدة تم إنشاؤه، ويتم تطبيق الإيصال بالترتيب أولاً من الأجزاء المتبقية في B، ثم في الكتل التي تتبع B، حتى تمتلئ القطعة الجديدة. تحت العادي الظروف مع حمولة متوازنة ستؤدي بشكل عام إلى جميع الإيصالات يتم تطبيقها (وبالتالي سيتم تسجيل الجزء الأخير من الكتلة الأخيرة كل قطعة)، ولكن في الأوقات التي يكون فيها الحمل غير متوازن، وخاصة تتلقى Shard العديد من الإيصالات بشكل غير متناسب، وهذا الأسلوب يسمح لهم بذلك تتم معالجتها مع احترام الحدود المفروضة على عدد المعاملات المدرجة. لاحظ أنه إذا ظل هذا الحمل غير المتوازن لفترة طويلة، فإن التأخير من إنشاء الإيصال حتى يتمكن التطبيق من الاستمرار في النمو إلى أجل غير مسمى. واحد طريقة معالجتها هي إسقاط أي معاملة تؤدي إلى إنشاء إيصال يستهدف أ جزء يحتوي على تأخير معالجة يتجاوز بعض الثوابت (على سبيل المثال، عصر واحد). خذ بعين الاعتبار الشكل 20. حسب الكتلة B، لا يمكن للجزء 4 معالجة جميع الإيصالات، لذلك فهو يعالج فقط إنشاء الإيصالات من الجزء 3 حتى الجزء A، و يسجل ذلك. في الكتلة C، يتم تضمين الإيصالات حتى الجزء 5 في الكتلة B، و ثم عن طريق الكتلة D، يتم اللحاق بالجزء، ومعالجة جميع الإيصالات المتبقية الكتلة B وجميع الإيصالات من الكتلة C. 3.7 التحقق من صحة القطع لا يمكن التحقق من صحة القطعة التي تم إنتاجها لجزء معين (أو كتلة جزء تم إنتاجها لسلسلة جزء معينة في النموذج الذي يحتوي على سلاسل جزء) فقط من خلال 9شاهد حلقة السبورة البيضاء مع QuarkChain هنا: https://www.youtube.com/watch? v=opEtG6NM4x4، حيث تتم مناقشة أسلوب المعاملات المتقاطعة، من بين أمور أخرى الأشياءالشكل 20: تأخر معالجة الإيصالات المشاركين الذين يحافظون على الدولة. يمكن أن يكونوا منتجي كتل، validators، أو مجرد شهود خارجيين قاموا بتنزيل الحالة والتحقق من صحة الجزء فيها التي يقومون بتخزين الأصول. في هذه الوثيقة نفترض أن غالبية المشاركين لا يستطيعون التخزين الدولة لجزء كبير من القطع. ومن الجدير بالذكر، مع ذلك، أن هناك blockchains مقسمة تم تصميمها مع افتراض ذلك يتمتع معظم المشاركين بالقدرة على تخزين الحالة والتحقق من صحتها الشظايا، مثل QuarkChain. نظرًا لأن جزءًا صغيرًا فقط من المشاركين لديهم الحالة اللازمة للتحقق من صحة القطعة قطع، فمن الممكن أن التكيف الفاسدة فقط المشاركين الذين لديهم الحالة، وتطبيق انتقال حالة غير صالح. تم اقتراح تصميمات تقسيم متعددة لأخذ عينات من validators كل بضعة أيام أيام، وخلال يوم أي كتلة في سلسلة الكسرة تحتوي على أكثر من 2/3 يتم النظر على الفور في توقيعات validators المخصصة لهذه القطعة نهائي. مع مثل هذا النهج، يحتاج الخصم المتكيف فقط إلى إفساد 2n/3+1 من validators في سلسلة الجزء لتطبيق انتقال حالة غير صالح، والذي، ورغم أنه من الصعب تحقيق ذلك على الأرجح، إلا أنه ليس مستوى من الأمان كافيًا للجمهور blockchain. كما تمت مناقشته في القسم 2.3، فإن النهج الشائع هو السماح بفترة زمنية معينة بعد إنشاء الكتلة لأي مشارك لديه حالة (سواء كانت إنه منتج كتلة، validator، أو مراقب خارجي) للطعن في صحته. ويطلق على هؤلاء المشاركين اسم الصيادين. لكي يتمكن الصياد من ذلك تحدي كتلة غير صالحة، يجب التأكد من أن هذه الكتلة متاحة ل لهم. تمت مناقشة توفر البيانات في Nightshade في القسم 3.4. في Nightshade، بمجرد إنتاج كتلة، لا يتم التحقق من صحة القطع من قبل أي شخص باستثناء منتج القطعة الفعلي. على وجه الخصوص، منتج الكتلة ذلك اقترح أن الكتلة بطبيعة الحال لا تحتوي على الحالة لمعظم القطع، ولم يكن قادرا على التحقق من صحة القطع. عندما يتم إنتاج الكتلة التالية، فإنها تحتوي على شهادات (انظر القسم 3.2) من منتجي الكتل المتعددين وvalidators، ولكن بما أن غالبية منتجي الكتل وvalidators لا يحافظون على الحالة بالنسبة لمعظم القطع أيضًا، فإن الكتلة التي تحتوي على قطعة واحدة غير صالحة ستجمع أكثر من نصف الشهادات بشكل ملحوظ وستظل على الأثقل سلسلة. لمعالجة هذه المشكلة، نسمح لأي مشارك يحافظ على حالة قطعة لإرسال تحدي على السلسلة لأي قطعة غير صالحة تم إنتاجها في ذلك شظية. 3.7.1 تحدي صلاحية الدولة بمجرد اكتشاف أحد المشاركين أن مجموعة معينة غير صالحة، فإنه يحتاج إلى تقديم دليل على أن المجموعة غير صالحة. نظرًا لأن غالبية المشاركين في الشبكة لا يحافظون على حالة القطعة التي توجد بها القطعة غير الصالحة يجب أن يحتوي الدليل على معلومات كافية لتأكيد الكتلة باطل دون وجود الدولة. قمنا بتعيين حد Ls لمقدار الحالة (بالبايت) لمعاملة واحدة يمكن القراءة أو الكتابة بشكل تراكمي. أي معاملة تمس أكثر من Ls تعتبر الدولة غير صالحة. تذكر من القسم 3.5 أن القطعة في كتلة معينة B تحتوي فقط على المعاملات التي سيتم تطبيقها، ولكن لا جذر الدولة الجديدة. جذر الحالة المتضمن في القطعة في الكتلة B هو الحالة root قبل تطبيق مثل هذه المعاملات، ولكن بعد تطبيق المعاملات من القطعة الأخيرة في نفس الكسرة قبل الكتلة B. ممثل خبيث قد تتضمن الرغبة في تطبيق انتقال حالة غير صالح جذر حالة غير صحيح في الكتلة B التي لا تتوافق مع جذر الحالة الناتج عن التقديم المعاملات في القطعة السابقة. نقوم بتوسيع المعلومات التي يتضمنها منتج القطعة في القطعة. بدلاً من مجرد تضمين الحالة بعد تطبيق كافة المعاملات، يتم بدلاً من ذلك يتضمن جذر الحالة بعد تطبيق كل مجموعة متجاورة من المعاملات قراءة وكتابة بايتات Ls من الحالة بشكل جماعي. بهذه المعلومات ل صياد لخلق التحدي المتمثل في تطبيق انتقال الدولة بشكل غير صحيح عليه يكفي العثور على أول جذر حالة غير صالح، ويتضمن فقط Ls بايت من الحالة التي تتأثر بالمعاملات بين جذر الحالة الأخير (والذي كان صالح) وجذر الحالة الحالية مع أدلة ميركل. ثم أي مشارك يمكن التحقق من صحة المعاملات في المقطع والتأكد من أن القطعة موجودة غير صالح. وبالمثل، إذا حاول منتج القطعة تضمين المعاملات التي تقرأ واكتب أكثر من Ls بايت من الحالة، فالتحدي يكفي أن تشمله البايتات الأولى التي يلامسها باستخدام أدلة ميركل، والتي ستكون كافية للقيام بذلك قم بتطبيق المعاملات والتأكد من أن هناك لحظة يتم فيها المحاولة قراءة أو كتابة محتوى يتجاوز بايت Ls.

3.7.2 الصيادون والمعاملات السريعة المتقاطعة كما تمت مناقشته في القسم 2.3، بمجرد أن نفترض أن قطع الكسر (أو الكسر يمكن أن تكون الكتل الموجودة في النموذج ذات سلاسل الأجزاء) غير صالحة وتشكل تحديًا خلال هذه الفترة، فإنه يؤثر سلبًا على النهاية، وبالتالي على التواصل عبر الأجزاء. في على وجه الخصوص، لا يمكن التأكد من جزء الوجهة لأي عملية نقل متقاطعة تعتبر قطعة أو كتلة القطعة الأصلية نهائية حتى تنتهي فترة التحدي (انظر الشكل 21). الشكل 21: انتظار فترة التحدي قبل تقديم الإيصال وطريقة معالجتها بطريقة تجعل المعاملات متقاطعة اللحظية هي أن لا تنتظر قطعة الوجهة فترة التحدي بعد نشر معاملة الجزء المصدر، وتطبيق معاملة الاستلام على الفور، ولكن بعد ذلك قم باستعادة جزء الوجهة مع المصدر shard إذا تبين لاحقًا أن القطعة أو الكتلة الأصلية غير صالحة (انظر الشكل 1). 22). وهذا ينطبق بشكل طبيعي جدًا على تصميم Nightshade الذي توجد فيه القشرة السلاسل ليست مستقلة، ولكن بدلًا من ذلك يتم نشر جميع أجزاء الكسر معًا في نفس كتلة السلسلة الرئيسية. إذا تم العثور على أي قطعة غير صالحة، تعتبر الكتلة بأكملها التي تحتوي على تلك القطعة غير صالحة، وجميع الكتل المبنية عليها أعلى منه. انظر الشكل 23. يوفر كلا النهجين المذكورين أعلاه الذرية على افتراض أن التحدي الفترة طويلة بما فيه الكفاية. نحن نستخدم النهج الأخير نظرًا لأن توفير معاملات متقاطعة سريعة في ظل الظروف العادية يفوق الإزعاج تم التراجع عن جزء الوجهة بسبب انتقال حالة غير صالح في أحد شظايا المصدر، وهو حدث نادر للغاية. 3.7.3 إخفاء validators إن وجود التحديات يقلل بالفعل بشكل كبير من احتمالية حدوث ذلك الفساد التكيفي، منذ الانتهاء من قطعة مع منشور انتقال حالة غير صالحالشكل 22: تطبيق الإيصالات على الفور وإرجاع الوجهة chain إذا كانت السلسلة المصدر تحتوي على كتلة غير صالحة الشكل 23: تحدي الصياد في الباذنجان فترة التحدي التي يحتاجها الخصم المتكيف لإفساد جميع المشاركين التي تحافظ على حالة الجزء، بما في ذلك كافة validators. إن تقدير احتمالية حدوث مثل هذا الحدث أمر معقد للغاية، حيث لا تم نشر blockchain لفترة كافية لمحاولة أي هجوم من هذا القبيل. ونحن نرى أن الاحتمال، على الرغم من كونه منخفضا للغاية، لا يزال كافيا كبير بالنسبة لنظام من المتوقع أن ينفذ عدة ملايين من المعاملات و إدارة العمليات المالية في جميع أنحاء العالم. هناك سببان رئيسيان لهذا الاعتقاد: 1. معظم validators من سلاسل إثبات الملكية والقائمين بالتعدين في

يتم تحفيز سلاسل إثبات العمل في المقام الأول من خلال الاتجاه الصعودي المالي. إذا فالخصم المتكيف يقدم لهم أموالاً أكثر من العائد المتوقع من العمل بأمانة، فمن المعقول أن نتوقع أن العديد من validators سوف يقبل العرض. 2. تقوم العديد من الكيانات بالتحقق من صحة سلاسل إثبات الملكية بشكل احترافي ومن المتوقع أن تكون هناك نسبة كبيرة من الحصة في أي سلسلة من مثل هذه الجهات. عدد هذه الكيانات صغير بما يكفي ل الخصم المتكيف للتعرف على معظمهم شخصيًا والحصول على وحسن فهم ميلهم إلى الفساد. نحن نخطو خطوة أخرى نحو تقليل احتمالية الفساد التكيفي عن طريق إخفاء validators المخصصة لأي جزء. الفكرة هي تشبه عن بعد طريقة Algorand [5] لإخفاء validators. من المهم ملاحظة أنه حتى لو تم إخفاء validator، كما في Algorand أو كما هو موضح أدناه، لا يزال الفساد التكيفي ممكنًا من الناحية النظرية. بينما الخصم المتكيف لا يعرف المشاركين الذين سيقومون بالإنشاء أو التحقق من صحتهم كتلة أو قطعة، يعرف المشاركون أنفسهم أنهم سيؤدونها مثل هذه المهمة ويكون لديك دليل التشفير على ذلك. وهكذا يستطيع العدو يبثون نيتهم في الفساد، ويدفعون لأي مشارك سيقدم ذلك مثل هذا الدليل التشفير. ومع ذلك، نلاحظ أنه بما أن الخصم لا يفعل ذلك تعرف على validators المخصصة للجزء الذي يريدون إفساده، فهم ليس لديهم خيار آخر سوى الإعلان عن نيتهم في إفساد جزء معين المجتمع بأكمله. عند هذه النقطة يكون الأمر مفيدًا اقتصاديًا لأي شخص صادق يقوم المشارك بتدوير عقدة كاملة تتحقق من صحة تلك القطعة، نظرًا لوجود ارتفاع فرصة ظهور كتلة غير صالحة في تلك القطعة، وهي فرصة لذلك قم بإنشاء تحدي وجمع المكافأة المرتبطة به. لكي لا نكشف عن validators المخصصة لجزء معين، فإننا نفعل ذلك ما يلي (انظر الشكل 24): استخدام VRF للحصول على المهمة. في بداية كل عصر لكل منهما يستخدم validator VRF للحصول على قناع نقطي للأجزاء التي تم تعيين validator لها. سيحتوي قناع البت لكل validator على بتات Sw (راجع القسم 3.3 للتعرف على من سو). يقوم validator بعد ذلك بجلب حالة الأجزاء المقابلة، و خلال فترة كل كتلة مستلمة، يتم التحقق من صحة القطع المقابلة إلى الأجزاء التي تم تعيين validator لها. قم بالتسجيل على الكتل بدلاً من القطع. نظرًا لأن تعيين الأجزاء مخفي، لا يمكن لـ validator تسجيل الدخول على القطع. بدلا من ذلك فإنه يوقع دائما على كامل block، وبالتالي لا يكشف عن الأجزاء التي يتحقق من صحتها. على وجه التحديد، عندما يتلقى validator كتلة ويتحقق من صحة جميع المقاطع، فإنه إما يقوم بإنشاء رسالة يشهد أن جميع القطع الموجودة في جميع الأجزاء التي تم تعيين validator لها هي صالحة (دون الإشارة بأي شكل من الأشكال إلى ماهية تلك الأجزاء)، أو رسالة مفادها يحتوي على دليل على انتقال حالة غير صالح إذا كان أي جزء غير صالح. انظر القسم 3.8 للحصول على تفاصيل حول كيفية تجميع هذه الرسائل، القسم 3.7.4 لـ التفاصيل حول كيفية منع validators من النسخ الاحتياطي على الرسائل الواردة من validators الأخرى، والقسم 3.7.5 للحصول على تفاصيل حول كيفية المكافأة والمعاقبة validators في حالة حدوث اختبار ناجح لنقل الحالة غير الصالحة بالفعل.الشكل 24: إخفاء validators في الباذنجان 3.7.4 الالتزام وكشف إحدى المشكلات الشائعة في validators هي أن validator يمكنه تخطي تنزيل الحالة والتحقق فعليًا من صحة المقاطع والكتل، وبدلاً من ذلك راقب الشبكة، وشاهد ما يرسله validators الآخرون ويكررونه الرسائل. validator الذي يتبع مثل هذه الإستراتيجية لا يوفر أي شيء إضافي الأمن للشبكة، ولكن يجمع المكافآت. الحل الشائع لهذه المشكلة هو أن يقدم كل validator دليلاً أنهم قاموا بالفعل بالتحقق من صحة الكتلة، على سبيل المثال من خلال توفير تتبع فريد من تطبيق انتقال الدولة، ولكن مثل هذه البراهين تزيد التكلفة بشكل كبير من التحقق من الصحة. الشكل 25: كشف الالتزام

وبدلاً من ذلك، نجعل validators يلتزم أولاً بنتيجة التحقق (إما الرسالة التي تشهد بصحة القطع، أو إثبات بطلانها انتقال الحالة)، انتظر فترة معينة، وعندها فقط تكشف عن نتيجة التحقق الفعلية، كما هو موضح في الشكل 25. لا تتقاطع فترة الالتزام مع فترة الكشف، وبالتالي لا يستطيع validator الكسول تقليد validators الصادق. علاوة على ذلك، إذا كان validator غير أمين ملتزمًا برسالة تشهد على ذلك صلاحية القطع المخصصة، وكانت قطعة واحدة على الأقل غير صالحة، بمجرد أن تكون كذلك تبين أن القطعة غير صالحة ولا يمكن لـ validator تجنب التقطيع، نظرًا لأن، كما نبين في القسم 3.7.5، الطريقة الوحيدة لعدم التعرض للخسارة في مثل هذه الحالة هو تقديم رسالة تحتوي على دليل على أن الحالة الانتقالية غير صالحة يطابق الالتزام. 3.7.5 التعامل مع التحديات كما تمت مناقشته أعلاه، بمجرد أن يتلقى validator كتلة تحتوي على مقطع غير صالح، يقومون أولاً بإعداد دليل على انتقال الحالة غير الصالح (انظر القسم 3.7.1)، ثم التزم بمثل هذا الدليل (انظر 3.7.4)، وبعد فترة اكشف عن التحدي. بمجرد تضمين التحدي الذي تم الكشف عنه في الكتلة، يحدث ما يلي: 1. جميع انتقالات الحالة التي حدثت من الكتلة التي تحتوي على قطعة غير صالحة حتى يتم الحصول على الكتلة التي تم تضمين التحدي المكشوف فيها باطل. الحالة قبل الكتلة التي تتضمن التحدي المكشوف تعتبر نفس الحالة قبل الكتلة التي تحتوي عليها القطعة غير الصالحة 2. خلال فترة زمنية معينة، يجب على كل validator أن يكشف عن قناعه النقطي من القطع التي التحقق من صحتها. نظرًا لأنه يتم إنشاء قناع البت عبر VRF، إذا تم تعيينهم إلى الجزء الذي كان به انتقال حالة غير صالح، هم لا يمكن تجنب الكشف عنها. أي validator يفشل في الكشف عن قناع البت من المفترض أن يتم تعيينها للقطعة. 3. كل validator يتم العثور عليه بعد هذه الفترة مخصصًا للكسر، التي التزمت ببعض نتائج التحقق من الصحة للكتلة التي تحتوي على ملف قطعة غير صالحة والتي لم تكشف عن دليل على انتقال الحالة غير الصالحة الذي يتوافق مع التزامهم مقطوع. 4. يحصل كل validator على مهمة أجزاء جديدة، ويتم جدولة حقبة جديدة للبدء بعد مرور بعض الوقت الكافي لجميع validators لتنزيل الملف الحالة، كما هو موضح في الشكل 26. لاحظ أنه منذ اللحظة التي تكشف فيها validators عن الأجزاء المخصصة لها حتى يبدأ العصر الجديد، يتم تقليل أمان النظام منذ ذلك الحين تم الكشف عن مهمة القطع. يحتاج المشاركون في الشبكة إلى الاحتفاظ بها في الاعتبار أثناء استخدام الشبكة خلال هذه الفترة. 3.8 تجميع التوقيع لكي يعمل نظام يحتوي على مئات القطع بشكل آمن، نريد أن يكون لدينا طلب 10000 أو أكثر validators. كما تمت مناقشته في القسم 3.7، نريد كلًا منهماالشكل 26: التعامل مع التحدي validator لنشر التزام برسالة معينة وتوقيع في المتوسط مرة واحدة لكل كتلة. حتى لو كانت رسائل الالتزام هي نفسها، فإن تجميع مثل هذا كان من الممكن أن يكون توقيع BLS والتحقق من صحته مكلفًا للغاية. لكن من الطبيعي أن رسائل الالتزام والكشف ليست هي نفسها عبر validators، وبالتالي نحتاج إلى طريقة ما لتجميع هذه الرسائل والتوقيعات في ملف واحد الطريقة التي تسمح للتحقق السريع في وقت لاحق. النهج المحدد الذي نستخدمه هو ما يلي: ينضم المدققون إلى منتجي الكتل. منتجو الكتلة معروفون بعض الوقت قبل بدء العصر، حيث أنهم يحتاجون إلى بعض الوقت لتنزيل الملف الحالة قبل بدء العصر، وعلى عكس validators فإن منتجي الكتل هم غير مخفي. كل منتج كتلة لديه فتحات v validator. يقدم المصادقون يتم إدراج المقترحات خارج السلسلة لمنتجي الكتل كواحدة من مشاريعهم v validators. إذا رغب منتج الكتلة في تضمين validator، فعليه إرسال أ المعاملة التي تحتوي على الطلب الأولي خارج السلسلة من validator، و توقيع منتج الكتلة الذي يجعل validator ينضم إلى منتج الكتلة. لاحظ أن validators المخصصة لمنتجي الكتل ليس بالضرورة التحقق من صحة نفس القطع التي ينتجها منتج الكتلة. إذا أ تم تقديم validator للانضمام إلى العديد من منتجي الكتل، فقط المعاملة من سوف ينجح منتج الكتلة الأول. يقوم منتجو الكتل بجمع الالتزامات. يقوم منتج الكتلة باستمرار بجمع رسائل الالتزام والكشف من validators. بمجرد تجميع عدد معين من هذه الرسائل، يقوم منتج الكتلة بحساب Merkle شجرة هذه الرسائل، ويرسل إلى كل validator جذر Merkle و مسار ميركل إلى رسالتهم. يقوم validator بالتحقق من صحة المسار وتسجيل الدخول جذر ميركل. يقوم منتج الكتلة بعد ذلك بتجميع توقيع BLS على ملف جذر Merkle من validators، وينشر فقط جذر Merkle و التوقيع المتراكم يوقع منتج الكتلة أيضًا على صلاحية التوقيع المتعدد باستخدام توقيع ECDSA الرخيص. إذا لم يكن التوقيع المتعدد كذلك مطابقة جذر Merkle الذي تم إرساله أو قناع البت الخاص بـ validators المشاركة، فهو سلوك قابل للتقطيع. عند مزامنة السلسلة، أحد المشاركين يمكن اختيار التحقق من صحة جميع توقيعات BLS من validators (وهو أمر مكلف للغاية لأنه يتضمن تجميع مفاتيح validators العامة)، أو فقطتوقيعات ECDMA من منتجي الكتل وتعتمد على حقيقة أن لم يتم تحدي منتج الكتلة أو قطعه. استخدام المعاملات عبر السلسلة وإثباتات ميركل للتحديات. ذلك يمكن ملاحظة أنه لا قيمة لكشف الرسائل من validators إذا كان الجواب لا تم اكتشاف انتقال حالة غير صالح. فقط الرسائل التي تحتوي على الفعلي يجب الكشف عن إثباتات انتقال الحالة غير الصالحة، وذلك بالنسبة لمثل هذه الرسائل فقط يجب أن يُظهر أنها تتطابق مع الالتزام السابق. الرسالة تحتاج إلى يتم الكشف عنها لغرضين: 1. للبدء فعليًا في التراجع عن السلسلة إلى اللحظة التي سبقت انتقال الحالة غير صالح (انظر القسم 3.7.5). 2. لإثبات أن validator لم يحاول إثبات صحة قطعة غير صالحة وفي كلتا الحالتين لا بد من معالجة مسألتين: 1. لم يتم تضمين الالتزام الفعلي في السلسلة، بل تم تضمين جذر Merkle فقط الالتزام مجمعة مع رسائل أخرى. يحتاج validator إلى استخدام مسار Merkle المقدم من منتج الكتلة والتزامه الأصلي به إثبات أنهم ملتزمون بالتحدي. 2. من الممكن أن تكون جميع validators المخصصة للجزء غير صالحة يحدث أن يتم تعيين انتقال الحالة إلى منتجي الكتل الفاسدين يقومون بمراقبةهم. للتغلب على ذلك، نسمح لهم بتقديم كشفهم كمعاملة منتظمة على السلسلة وتجاوز التجميع. هذا الأخير مسموح به فقط لإثباتات انتقال الحالة غير الصالحة، وهي نادر للغاية، وبالتالي لا ينبغي أن يؤدي إلى إرسال بريد عشوائي إلى الكتل. والمسألة الأخيرة التي تحتاج إلى معالجة هي أن منتجي الكتل قادرون على ذلك اختر عدم المشاركة في تجميع الرسائل أو فرض رقابة متعمدة على validators. نحن نجعلها غير مواتية اقتصاديًا، من خلال صنع الكتلة مكافأة المنتج تتناسب مع عدد validators المخصص لهم. نحن لاحظ أيضًا أنه نظرًا لأن منتجي الكتل بين العصور يتقاطعون إلى حد كبير (منذ ذلك الحين إنه دائمًا أعلى المشاركين ذوي أعلى حصة)، يمكن لـ validators التمسك إلى حد كبير بالعمل مع نفس منتجي الكتل، وبالتالي تقليل المخاطر من التعيين إلى منتج الكتل الذي فرض رقابة عليهم في الماضي. 3.9 سلسلة اللقطات نظرًا لأنه يتم إنتاج الكتل الموجودة على السلسلة الرئيسية بشكل متكرر جدًا، فقد تم تنزيلها قد يصبح التاريخ الكامل باهظ الثمن بسرعة كبيرة. علاوة على ذلك، منذ كل تحتوي الكتلة على توقيع BLS لعدد كبير من المشاركين، وقد يصبح مجرد تجميع المفاتيح العامة للتحقق من التوقيع أمرًا محظورًا مكلفة كذلك. أخيرًا، نظرًا لأنه في المستقبل المنظور، من المحتمل أن يظل Ethereum 1.0 واحدًا من أكثر blockchains استخدامًا، والتي تتمتع بطريقة مفيدة لنقل الأصول منها

يعد القرب من Ethereum أحد المتطلبات، واليوم يتم التحقق من توقيعات BLS لضمان ذلك صلاحية الكتل القريبة من جانب Ethereum غير ممكنة. يمكن أن تحتوي كل كتلة في سلسلة Nightshade الرئيسية بشكل اختياري على Schnorr التوقيع المتعدد على رأس الكتلة الأخيرة التي تضمنت مثل شنور التوقيع المتعدد. نحن نسمي هذه الكتل كتل لقطة. الكتلة الأولى من يجب أن يكون كل عصر عبارة عن كتلة لقطة. أثناء العمل على مثل هذا التوقيع المتعدد، يجب على منتجي الكتل أيضًا تجميع توقيعات BLS الخاصة بـ validators في كتلة اللقطة الأخيرة، وقم بتجميعها بنفس الطريقة الموضحة في القسم 3.8. نظرًا لأن مجموعة منتجي الكتل ثابتة طوال العصر، يتم التحقق من صحتها تكفي فقط مجموعات اللقطات الأولى في كل عصر على افتراض عدم وجود ذلك تشير نسبة كبيرة من منتجي الكتل وvalidator إلى تواطؤهم وإنشاءهم شوكة. يجب أن تحتوي الكتلة الأولى من العصر على معلومات كافية للحساب منتجو الكتل و validators لهذا العصر. نطلق على السلسلة الفرعية للسلسلة الرئيسية التي تحتوي على اللقطة فقط كتل سلسلة لقطة. يعد إنشاء توقيع متعدد لشنور عملية تفاعلية، ولكن بما أننا تحتاج فقط إلى تنفيذها بشكل غير متكرر، بغض النظر عن مدى عدم فعاليتها سوف يكفي. يمكن التحقق من صحة التوقيعات المتعددة لشنور بسهولة على Ethereum، وبالتالي توفير الأساسيات الحاسمة لطريقة آمنة لأداء cross-blockchain الاتصالات. للمزامنة مع السلسلة القريبة، يحتاج المرء فقط إلى تنزيل جميع اللقطات الكتل والتأكد من صحة توقيعات شنور (اختياريًا أيضًا التحقق من توقيعات BLS الفردية الخاصة بـ validators)، ثم المزامنة فقط كتل السلسلة الرئيسية من كتلة اللقطة الأخيرة.

Kesimpulan

Dalam dokumen ini kita membahas pendekatan untuk membangun blockchains dan mencakup dua tantangan besar dengan pendekatan yang ada, yaitu validitas negara dan ketersediaan data. Kami kemudian menghadirkan Nightshade, desain sharding itu kekuasaan NEAR Protokol. Desain sedang dalam proses, jika Anda memiliki komentar, pertanyaan, atau masukan pada dokumen ini, silakan buka https://near.chat.

خاتمة

ناقشنا في هذه الوثيقة أساليب بناء blockchains و غطت تحديين رئيسيين مع النهج الحالي، وهما صلاحية الدولة وتوافر البيانات. ثم قدمنا ​​Nightshade، وهو تصميم مقسم صلاحيات NEAR البروتوكول. التصميم قيد التنفيذ، إذا كان لديك تعليقات أو أسئلة أو ملاحظات في هذا المستند، يرجى الانتقال إلى https://near.chat.