เอกสารไวท์เปเปอร์ NEAR

Автор Alex Skidanov and Illia Polosukhin · 2019

Обычный режим near.org

Основы шардинга

Начнем с самого простого подхода к шардингу. В этом подходе вместо запустив один blockchain, мы запустим несколько и вызовем каждый такой blockchain a «осколок». Каждый шард будет иметь свой собственный набор validator. Здесь и ниже мы используем общий термин «validator» для обозначения участников, которые проверяют транзакции и производить блоки либо путем майнинга, например, в Proof of Work, либо с помощью голосования на основе голосования. 1Этот раздел ранее был опубликован по адресу https://near.ai/shard1.. Если вы читали его раньше, перейти к следующему разделу.

механизм. А пока давайте предположим, что шарды никогда не общаются друг с другом. другое. Несмотря на свою простоту, эта схема достаточна для того, чтобы обозначить некоторые первоначальные основные проблемы шардинга. 1.1 Разделение валидаторов и цепочки маяков Допустим, система состоит из 10 шардов. Первая проблема заключается в том, что с каждым имеет свои собственные validator, каждый шард теперь в 10 раз менее безопасен, чем вся цепочка. Итак, если несегментированная цепочка с X validators решит провести хард-форк в сегментированную цепочку и разбивает X validator на 10 сегментов, каждый из которых теперь имеет только X/10 validator, и для повреждения одного фрагмента требуется только повреждение 5,1% (51% / 10) от общего количества validators (см. рисунок 1), Рисунок 1: Разделение validator на сегменты что подводит нас ко второму моменту: кто выбирает validators для каждого шарда? Контроль над 5,1% validators наносит ущерб только в том случае, если все эти 5,1% validators находятся в одном шарде. Если validator не могут выбрать, какой осколок они получат для проверки в, участник, контролирующий 5,1% validators, вряд ли получит все их validator в одном шарде, что значительно снижает их способность к компрометации система. Сегодня почти все конструкции шардинга основаны на некотором источнике случайности. назначьте validators осколкам. Случайность на blockchain сама по себе является очень сложной темой и выходит за рамки этого документа. А пока предположим, что есть некоторый источник случайности, который мы можем использовать. Мы рассмотрим задание validators в подробнее в разделе 2.1. Как случайность, так и присвоение validator требуют вычислений, которые не специфичный для любого конкретного шарда. Для этого расчета практически все существующие проекты имеют отдельный blockchain, которому поручено выполнять операции необходимые для обслуживания всей сети. Помимо генерации случайныхномера и присвоение осколкам validator, эти операции часто также включают получение обновлений от шардов и создание их снимков, обработку ставки и сокращение в системах Proof-of-Stake, а также ребалансировку шардов, когда это функция поддерживается. Такая цепочка называется цепочкой маяков в Ethereum, релейной цепочка в PolkaDot и концентратор Cosmos в Cosmos. В этом документе мы будем называть такую ​​цепочку Beacon-цепочкой. Существование цепочки Beacon подводит нас к следующей интересной теме: квадратичный шардинг. 1.2 Квадратичный шардинг Шардинг часто рекламируется как решение, которое бесконечно масштабируется в зависимости от числа узлов, участвующих в работе сети. Хотя теоретически возможно разработайте такое решение для шардинга, любое решение, имеющее концепцию маяка Chain не имеет бесконечной масштабируемости. Чтобы понять почему, обратите внимание, что Маяк цепочка должна выполнить некоторые бухгалтерские вычисления, например назначить validators осколки или блоки цепочки осколков моментальных снимков, пропорциональные количеству шардов в системе. Поскольку цепочка Beacon сама по себе представляет собой единый blockchain, с вычисление ограничено вычислительными возможностями узлов, управляющих им, количество осколков естественно ограничено. Однако структура сегментированной сети действительно обеспечивает мультипликативную влияние на любые улучшения его узлов. Рассмотрим случай, когда произвольный улучшена эффективность узлов в сети, что позволит им более быстрое время обработки транзакций. Если узлы, управляющие сетью, включая узлы в цепочке Beacon, станет в четыре раза быстрее, тогда каждый шард сможет обработать в четыре раза больше транзакций, а цепочка Beacon сможет поддерживать в 4 раза больше шардов. Пропускная способность системы увеличится в 4 × 4 = 16 — отсюда и название квадратичного шардинга. Трудно дать точную оценку количества осколков. жизнеспособна сегодня, но маловероятно, что в обозримом будущем пропускная способность потребности пользователей blockchain перерастут ограничения квадратичного сегментирования. Огромное количество узлов, необходимых для безопасной работы с таким объемом шардов. вероятно, на порядки превышает количество узлов, работающих на всех Сегодня blockchains вместе взятых. 1.3 Государственное шардинг До сих пор мы не очень хорошо определили, что именно является отделенным и неразделенным. когда сеть разделена на сегменты. В частности, узлы в blockchain выполняют три важные задачи: они не только 1) обрабатывают транзакции, но и также 2) ретранслировать проверенные транзакции и завершенные блоки на другие узлы и 3) хранить состояние и историю всей сетевой книги. Каждый из этих трёх задач предъявляет возрастающие требования к узлам, эксплуатирующим сеть:1. Необходимость обработки транзакций требует большей вычислительной мощности с увеличение количества обрабатываемых транзакций; 2. Необходимость ретрансляции транзакций и блоков требует увеличения пропускной способности сети с увеличением количества ретранслируемых транзакций; 3. Необходимость хранения данных требует большего объема памяти по мере роста штата. Важно отметить, что в отличие от вычислительной мощности и сети, требования к хранилищу растут, даже если скорость транзакций (количество обработанных транзакций) в секунду) остается постоянным. Из приведенного выше списка может показаться, что требования к хранению будут самый актуальный, поскольку он единственный, который со временем увеличивается даже если количество транзакций в секунду не изменится, но на практике Самым насущным требованием сегодня является вычислительная мощность. Все состояние Ethereum на момент написания этой статьи имеет размер 100 ГБ, которым легко управляет большинство узлов. Но количество транзакций, которые Ethereum может обработать, составляет около 20, заказы величина меньше, чем это необходимо для многих практических случаев использования. Zilliqa — самый известный проект, который занимается обработкой, а не хранением данных. Разделение обработки является более простой задачей, поскольку каждый узел имеет всю состояние, что означает, что контракты могут свободно вызывать другие контракты и читать любые данные. из blockchain. Для обеспечения обновлений необходимы некоторые тщательные инженерные разработки. из нескольких шардов, обновляющих одни и те же части состояния, не конфликтуют. В В этом отношении Zilliqa придерживается относительно упрощенного подхода2. Хотя было предложено сегментирование хранилища без сегментирования обработки, это крайне редко. Таким образом, на практике шардинг хранилища, или State Sharding, почти всегда подразумевает сегментирование обработки и сегментирование сети. Практически при государственном шардинге узлы в каждом шарде строят свои собственный blockchain, содержащий транзакции, затрагивающие только локальную часть глобальное состояние, назначенное этому осколку. Следовательно, validator в шарду нужно только хранить свою локальную часть глобального состояния и только выполнять, и, как таковые, только ретранслируют транзакции, которые затрагивают их часть состояния. Это раздел линейно снижает требования ко всем вычислительным мощностям, хранилищам и пропускной способности сети, но создает новые проблемы, такие как доступность данных и транзакции между сегментами, обе из которых мы рассмотрим ниже. 1,4 Межсегментные транзакции Модель сегментирования, которую мы описали до сих пор, не очень полезна, потому что, если отдельные осколки не могут общаться друг с другом, они не лучше, чем несколько независимые blockchains. Даже сегодня, когда шардинг недоступен, существует огромный спрос на совместимость между различными blockchain. Давайте пока рассмотрим только простые платежные транзакции, где каждый участник имеет счет ровно на одном шарде. Если вы хотите перевести деньги с 2Наш анализ их подхода можно найти здесь: https://medium.com/nearprotocol/. 8f9efae0ce3bодин аккаунт на другой в пределах одного шарда, транзакция может быть обработана полностью validator в этом осколке. Однако если Алиса, находящаяся на шарде

1 хочет отправить деньги Бобу, который находится на шарде #2, ни validators

на шарде №1 (они не смогут пополнить счет Боба), ни validator на шард №2 (списать со счета Алисы они не смогут) может обработать весь транзакция. Существует два семейства подходов к межсегментным транзакциям: • Синхронный: всякий раз, когда необходимо выполнить транзакцию между сегментами, блоки в нескольких осколках, которые содержат переход состояния, связанный с Все транзакции производятся одновременно, и validator нескольких шардов совместно выполняют такие транзакции.3 • Асинхронный: транзакция между сегментами, которая затрагивает несколько сегментов. выполняется в этих сегментах асинхронно, при этом сегмент «Кредит» выполняется свою половину, как только у него будет достаточно доказательств того, что «Дебетовый» осколок выполнил свою часть. Этот подход имеет тенденцию быть более распространенным из-за его простота и удобство координации. Сегодня эта система предлагается в Cosmos, Ethereum Serenity, Near, Kadena и других. Проблема с этим подход заключается в том, что если блоки создаются независимо, существует ненулевая вероятность того, что один из нескольких блоков окажется осиротевшим, что делает сделка применена лишь частично. Рассмотрим рисунок 2, на котором изображены два шарды, оба из которых столкнулись с форком, и транзакция между шардами что было записано в блоках А и Х’ соответственно. Если цепи A-B и V’-X’-Y’-Z’ становятся каноническими в соответствующих осколках, сделка полностью завершена. Если A’-B’-C’-D’ и V-X станут каноническими, тогда транзакция полностью прекращается, что приемлемо. Но если для Например, A-B и V-X становятся каноническими, затем одна часть транзакции завершается, а другая отменяется, что приводит к сбою атомарности. Мы во второй части будет рассмотрено, как эта проблема решается в предлагаемых протоколах, при освещении изменений в правилах выбора форка и консенсусе. алгоритмы, предложенные для сегментированных протоколов. Обратите внимание, что связь между цепочками полезна за пределами сегментированных blockchains. тоже. Взаимодействие между цепочками — сложная проблема, которую решают многие проекты. пытаются решить. В сегментированных blockchain проблема несколько проще, поскольку структура блоков и консенсус одинаковы во всех шардах, и есть цепочка маяков, которую можно использовать для координации. Однако в сегментированном blockchain все шардчейны одинаковы, тогда как в глобальной экосистеме blockchains есть множество разных blockchain с разными целевыми вариантами использования, децентрализацией и гарантии конфиденциальности. Построение системы, в которой набор цепей имеет разные свойства, но использовать достаточно похожий консенсус и структуру блоков, а также иметь общую цепочку маяков, что может создать экосистему гетерогенных blockchain, которые имеют 3The большинство подробный предложение известный чтобы тот авторы из это документ есть Объединить Блоки, описал здесь: https://ethresear.ch/t/ слияние блоков и синхронное выполнение между состояниями сегментов / 1240Рисунок 2: Асинхронные транзакции между сегментами рабочая подсистема взаимодействия. Такая система вряд ли будет поддерживать ротацию validator, поэтому необходимо принять некоторые дополнительные меры для обеспечения безопасности. оба Cosmos и PolkaDot являются такими системами4. 1,5 Вредоносное поведение В этом разделе мы рассмотрим, какое состязательное поведение может привести к вредоносным validators. упражнения, если им удастся повредить осколок. Мы рассмотрим классические подходы чтобы избежать повреждения осколков в разделе 2.1. 1.5.1 Вредоносные форки Набор вредоносных validator может попытаться создать форк. Обратите внимание, что это не так имеет значение, является ли основной консенсус 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 для подробного сравнения из двух

не является незначительным, мы не можем предполагать, что форков не произойдет, даже если среди шардов validator был достигнут византийский консенсус или было много блоков. производится поверх блока с изменением состояния. Эта проблема имеет несколько решений, наиболее распространенным из которых является случайный перекрестное связывание последнего блока шардчейна с маяковой цепочкой. Вилка правило выбора в цепочках шардов затем изменяется, чтобы всегда отдавать предпочтение той цепочке, которая перекрестными ссылками и применять правило выбора форка, специфичное для сегмента, только для блоков, которые были опубликовано с момента последней перекрестной ссылки. 1.5.2 Утверждение недействительных блоков Набор validator может попытаться создать блок, который неправильно применяет функцию перехода состояния. Например, начиная с состояния, в котором Алиса имеет 10 token, а у Боба 0 token, блок может содержать транзакцию, которая отправляет 10 token от Алисы Бобу, но в конечном итоге оказывается в состоянии, в котором Алиса 0 tokens, а у Боба 1000 tokens, как показано на рисунке 3. Рисунок 3: Пример недопустимого блока В классическом нешардинговом blockchain такая атака невозможна, так как все участник сети проверяет все блоки, а блок с таким недопустимый переход состояния будет отклонен обоими другими производителями блоков, и участники сети, не создающие блоки. Даже если злонамеренный validator продолжают создавать блоки поверх такого недействительного блока быстрее, чем честные validators строят правильную цепочку, таким образом получая цепочку с невалидной если блок длиннее, это не имеет значения, поскольку каждый участник, использующий blockchain для любых целей проверяет все блоки и отбрасывает все блоки. построен поверх недействительного блока. На рисунке 4 показаны пять validator, три из которых вредоносные. Они создал недопустимый блок A’, а затем продолжил создавать новые блоки сверху этого. Два честных validators отбросили A’ как недействительный и начали строить сверхуРисунок 4: Попытка создать недопустимый блок в несегментированном blockchain. последнего известного им действующего блока, создавая форк. Поскольку их меньше validators в честном развилке, их цепочка короче. Однако в классическом несегментированном blockchain каждый участник, использующий blockchain для каких-либо целей, отвечает за проверку всех полученных блоков и пересчет состояния. Таким образом, любой человек, проявляющий интерес к blockchain, заметит, что A’ недействителен, и поэтому также немедленно отбрасываем B’, C’ и D’ как таковые, принимая цепочка A-B как текущая самая длинная действительная цепочка. Однако в сегментированном blockchain ни один участник не может проверить все транзакции на всех сегментах, поэтому у них должен быть какой-то способ подтвердить это ни при каких обстоятельствах. точка в истории любого фрагмента blockchain, ни один недопустимый блок не был включен. Обратите внимание, что в отличие от форков, перекрестная привязка к цепочке Beacon не является достаточным решением, поскольку цепочка Beacon не имеет возможности проверять блоки. Он может только подтвердить, что достаточное количество __PH_0006____ в этом сегменте подписал блок (и тем самым подтвердил его правильность). Мы обсудим решения этой проблемы в разделе 2.2 ниже.

พื้นฐานการแบ่งส่วน

มาเริ่มกันด้วยวิธีที่ง่ายที่สุดในการแบ่งส่วน ในแนวทางนี้แทน เรียกใช้หนึ่ง blockchain เราจะเรียกใช้หลายรายการ และเรียกแต่ละรายการดังกล่าว blockchain a “เศษ” แต่ละชาร์ดจะมีชุด validators ของตัวเอง ที่นี่และด้านล่างเราใช้ คำทั่วไป “validator” เพื่ออ้างถึงผู้เข้าร่วมที่ตรวจสอบธุรกรรมและ ผลิตบล็อกโดยการขุด เช่น ใน Proof of Work หรือผ่านการลงคะแนนเสียง 1ส่วนนี้เผยแพร่ก่อนหน้านี้ที่ https://near.ai/shard1. หากคุณได้อ่านมาก่อน ข้ามไปยังส่วนถัดไป

กลไก. ในตอนนี้ สมมติว่าชิ้นส่วนไม่เคยสื่อสารกับแต่ละส่วน อื่น ๆ การออกแบบนี้แม้ว่าจะเรียบง่าย แต่ก็เพียงพอที่จะสรุปความท้าทายหลักเบื้องต้นบางประการในการแบ่งส่วนได้ 1.1 การแบ่งพาร์ติชันเครื่องมือตรวจสอบและเครือข่ายบีคอน สมมติว่าระบบประกอบด้วย 10 ส่วน ความท้าทายแรกนั้นก็คือแต่ละ ชิ้นส่วนที่มี validators ของตัวเอง แต่ละชิ้นส่วนมีความปลอดภัยน้อยกว่า 10 เท่า ห่วงโซ่ทั้งหมด ดังนั้นหากเชนที่ไม่แบ่งส่วนซึ่งมี X validators ตัดสินใจที่จะฮาร์ดฟอร์ก ออกเป็นห่วงโซ่ที่แยกส่วน และแบ่ง X validators เป็น 10 ส่วน แต่ละส่วนในตอนนี้ มีเพียง X/10 validators และการเสียหายเพียงส่วนเดียวนั้นต้องการการเสียหายเท่านั้น 5.1% (51% / 10) ของจำนวน validators ทั้งหมด (ดูรูปที่ 1) รูปที่ 1: การแยก validators ออกเป็นชาร์ด ซึ่งนำเราไปสู่ประเด็นที่สอง: ใครเลือก validators สำหรับแต่ละส่วน การควบคุม validators 5.1% จะสร้างความเสียหายได้ก็ต่อเมื่อ 5.1% ของ validators ทั้งหมดนั้น อยู่ในส่วนเดียวกัน หาก validators ไม่สามารถเลือกชิ้นส่วนที่จะตรวจสอบได้ ใน ผู้เข้าร่วมที่ควบคุม 5.1% ของ validators นั้นไม่น่าจะได้รับทั้งหมด validators ของพวกเขาอยู่ในชาร์ดเดียวกัน ซึ่งลดความสามารถในการประนีประนอมลงอย่างมาก ระบบ การออกแบบการแบ่งส่วนเกือบทั้งหมดในปัจจุบันอาศัยแหล่งที่มาของการสุ่ม กำหนด validators ให้กับชาร์ด การสุ่มใน blockchain ในตัวมันเองเป็นหัวข้อที่ท้าทายมากและอยู่นอกขอบเขตสำหรับเอกสารนี้ ตอนนี้สมมติว่ามี แหล่งที่มาของการสุ่มที่เราสามารถใช้ได้ เราจะครอบคลุมการมอบหมาย validators ใน รายละเอียดเพิ่มเติมในส่วนที่ 2.1 ทั้งการสุ่มและการมอบหมาย validator จำเป็นต้องมีการคำนวณที่ไม่ใช่ เฉพาะเจาะจงกับส่วนใดส่วนหนึ่งโดยเฉพาะ สำหรับการคำนวณนั้นมีอยู่จริงทั้งหมด การออกแบบมี blockchain แยกต่างหากที่ได้รับมอบหมายให้ดำเนินการ ที่จำเป็นสำหรับการบำรุงรักษาเครือข่ายทั้งหมด นอกจากจะสร้างแบบสุ่มแล้วตัวเลขและการกำหนด validators ให้กับชาร์ด การดำเนินการเหล่านี้ก็มักจะเช่นกัน รวมถึงการรับการอัปเดตจากชาร์ดและการถ่ายภาพสแนปช็อตและการประมวลผล เดิมพันและฟันในระบบ Proof-of-Stake และปรับสมดุลชิ้นส่วนเมื่อเป็นเช่นนั้น รองรับคุณสมบัติแล้ว ห่วงโซ่ดังกล่าวเรียกว่าห่วงโซ่บีคอนใน Ethereum ซึ่งเป็นรีเลย์ chain ใน PolkaDot และ Cosmos Hub ใน Cosmos ตลอดทั้งเอกสารนี้ เราจะอ้างถึงห่วงโซ่ดังกล่าวเป็นห่วงโซ่บีคอน การมีอยู่ของ Beacon chain นำเราไปสู่หัวข้อที่น่าสนใจถัดไป การแบ่งส่วนกำลังสอง 1.2 การแบ่งส่วนกำลังสอง Sharding มักถูกโฆษณาว่าเป็นโซลูชันที่ปรับขนาดได้อย่างไม่สิ้นสุดตามจำนวน ของโหนดที่เข้าร่วมในการดำเนินงานเครือข่าย ในขณะที่ในทางทฤษฎีเป็นไปได้ ออกแบบโซลูชันการแบ่งส่วน ซึ่งเป็นโซลูชันใดๆ ที่มีแนวคิดของบีคอน chain ไม่มีความสามารถในการขยายขนาดได้ไม่จำกัด เพื่อทำความเข้าใจว่าทำไมโปรดทราบว่าบีคอน chain ต้องทำการคำนวณทางบัญชีบางอย่าง เช่น มอบหมาย validators ให้ เศษหรือบล็อกลูกโซ่สแน็ปช็อตที่เป็นสัดส่วนกับจำนวน ของเศษต่างๆ ในระบบ เนื่องจาก Beacon chain นั้นเป็น blockchain ตัวเดียวด้วย การคำนวณที่จำกัดด้วยความสามารถในการคำนวณของโหนดที่ปฏิบัติการ จำนวนชิ้นส่วนนั้นมีจำกัดตามธรรมชาติ อย่างไรก็ตาม โครงสร้างของเครือข่ายแบบแบ่งส่วนทำให้เกิดการคูณ ส่งผลต่อการปรับปรุงโหนดต่างๆ พิจารณากรณีที่เป็นการโดยพลการ มีการปรับปรุงประสิทธิภาพของโหนดในเครือข่ายซึ่งจะช่วยให้ ช่วยให้ประมวลผลธุรกรรมได้เร็วขึ้น หากโหนดปฏิบัติการเครือข่าย รวมถึงโหนดในห่วงโซ่บีคอน เร็วขึ้นสี่เท่า จากนั้นแต่ละส่วนจะสามารถประมวลผลได้มากขึ้นสี่เท่า การทำธุรกรรมและ Beacon chain จะสามารถรักษาส่วนแบ่งได้มากขึ้น 4 เท่า ปริมาณงานทั่วทั้งระบบจะเพิ่มขึ้นตามปัจจัย 4 × 4 = 16 — จึงได้ชื่อว่าการแบ่งส่วนกำลังสอง เป็นการยากที่จะให้การวัดจำนวนชิ้นส่วนที่แม่นยำ เป็นไปได้ในปัจจุบัน แต่ไม่น่าเป็นไปได้ที่ปริมาณงานในอนาคตอันใกล้นี้ ความต้องการของผู้ใช้ blockchain จะเกินขีดจำกัดของการแบ่งส่วนกำลังสอง จำนวนโหนดที่จำเป็นในการใช้งานชิ้นส่วนจำนวนมากอย่างปลอดภัย มีแนวโน้มว่าจะมีขนาดสูงกว่าจำนวนโหนดที่ทำงานทั้งหมด blockchains รวมกันวันนี้ 1.3 การแบ่งส่วนของรัฐ จนถึงขณะนี้เรายังระบุได้ไม่ชัดเจนนักว่าอะไรคืออะไรและไม่ได้แยกจากกัน เมื่อเครือข่ายถูกแบ่งออกเป็นส่วนๆ โดยเฉพาะโหนดใน blockchain ปฏิบัติงานที่สำคัญสามประการ: ไม่เพียงแต่ 1) ประมวลผลธุรกรรมเท่านั้น 2) ถ่ายทอดธุรกรรมที่ได้รับการตรวจสอบและบล็อกที่เสร็จสมบูรณ์ไปยังโหนดอื่นและ 3) เก็บสถานะและประวัติของบัญชีแยกประเภทเครือข่ายทั้งหมด ทั้งสามรายนี้. งานกำหนดข้อกำหนดที่เพิ่มขึ้นบนโหนดที่ทำงานเครือข่าย:1. ความจำเป็นในการประมวลผลธุรกรรมต้องใช้พลังการประมวลผลที่มากขึ้นด้วย จำนวนธุรกรรมที่เพิ่มขึ้นที่กำลังดำเนินการ 2. ความจำเป็นในการถ่ายทอดธุรกรรมและการบล็อกนั้นต้องการแบนด์วิธเครือข่ายมากขึ้นโดยมีจำนวนธุรกรรมที่ถูกถ่ายทอดเพิ่มขึ้น 3. ความจำเป็นในการจัดเก็บข้อมูลต้องใช้พื้นที่จัดเก็บมากขึ้นเมื่อรัฐเติบโตขึ้น ที่สำคัญ ไม่เหมือนกับพลังการประมวลผลและเครือข่าย ความต้องการพื้นที่เก็บข้อมูลจะเพิ่มขึ้นแม้ว่าอัตราธุรกรรม (จำนวนธุรกรรมที่ประมวลผล) ต่อวินาที) คงที่ จากรายการด้านบนอาจปรากฏว่าข้อกำหนดการจัดเก็บน่าจะเป็น เร่งด่วนที่สุดเนื่องจากเป็นสิ่งเดียวที่เพิ่มขึ้นเมื่อเวลาผ่านไป แม้ว่าจำนวนธุรกรรมต่อวินาทีจะไม่เปลี่ยนแปลง แต่ในทางปฏิบัติ ข้อกำหนดเร่งด่วนที่สุดในปัจจุบันคือพลังการประมวลผล รัฐทั้งหมด Ethereum ณ วันที่เขียนนี้คือ 100GB ซึ่งโหนดส่วนใหญ่จัดการได้ง่าย แต่จำนวนธุรกรรม Ethereum ที่สามารถประมวลผลได้คือประมาณ 20 คำสั่งซื้อของ ขนาดน้อยกว่าที่จำเป็นสำหรับกรณีการใช้งานจริงหลายกรณี Zilliqa เป็นโปรเจ็กต์ที่มีชื่อเสียงที่สุดที่ประมวลผลชิ้นส่วน แต่ไม่ใช่พื้นที่เก็บข้อมูล การแบ่งส่วนการประมวลผลเป็นปัญหาที่ง่ายกว่าเนื่องจากแต่ละโหนดมีทั้งหมด สถานะ ซึ่งหมายความว่าสัญญาสามารถเรียกใช้สัญญาอื่นๆ และอ่านข้อมูลใดๆ ได้อย่างอิสระ จาก blockchain จำเป็นต้องมีวิศวกรรมที่ระมัดระวังเพื่อให้แน่ใจว่ามีการอัพเดต จากหลาย ๆ ชาร์ดที่อัปเดตส่วนเดียวกันของรัฐไม่ขัดแย้งกัน ใน สิ่งเหล่านี้ Zilliqa กำลังใช้แนวทางที่ค่อนข้างง่าย2 ในขณะที่มีการเสนอการแบ่งส่วนพื้นที่เก็บข้อมูลโดยไม่มีการแบ่งส่วนการประมวลผล ผิดปกติอย่างยิ่ง ดังนั้นในทางปฏิบัติ การแบ่งส่วนการจัดเก็บหรือการแบ่งส่วนของรัฐ มักจะหมายถึงการแบ่งส่วนการประมวลผลและการแบ่งเครือข่าย ในทางปฏิบัติภายใต้ State Sharding โหนดในแต่ละส่วนกำลังสร้างมันขึ้นมา เป็นเจ้าของ blockchain ที่มีธุรกรรมที่ส่งผลกระทบเฉพาะส่วนท้องถิ่นของ สถานะสากลที่ได้รับมอบหมายให้กับส่วนนั้น ดังนั้น validators ใน shard จำเป็นต้องจัดเก็บส่วนท้องถิ่นของสถานะส่วนกลางและดำเนินการเท่านั้น และมีเพียงการถ่ายทอดธุรกรรมที่ส่งผลกระทบต่อรัฐเท่านั้น นี้ พาร์ติชันจะช่วยลดความต้องการด้านกำลังประมวลผล พื้นที่เก็บข้อมูล และทั้งหมดเป็นเส้นตรง แบนด์วิธเครือข่าย แต่กลับนำมาซึ่งปัญหาใหม่ๆ เช่น ความพร้อมใช้งานของข้อมูลและ ธุรกรรมข้ามส่วน ซึ่งเราจะกล่าวถึงทั้งสองอย่างนี้ด้านล่างนี้ 1.4 การทำธุรกรรมข้ามส่วน โมเดลการแบ่งส่วนที่เราอธิบายไปแล้วนั้นไม่มีประโยชน์มากนัก เพราะหากเป็นรายบุคคล ชิ้นส่วนไม่สามารถสื่อสารถึงกันได้ พวกมันไม่ได้ดีไปกว่าหลาย ๆ อัน อิสระ blockchains แม้กระทั่งทุกวันนี้ เมื่อการแบ่งส่วนไม่พร้อมใช้งาน ก็ยังมี ความต้องการการทำงานร่วมกันอย่างมากระหว่าง blockchains ต่างๆ ตอนนี้มาพิจารณาเฉพาะธุรกรรมการชำระเงินธรรมดาๆ เท่านั้น โดยที่ผู้เข้าร่วมแต่ละคนมีบัญชีอยู่ในส่วนเดียวเท่านั้น หากท่านมีความประสงค์จะโอนเงินจาก 2การวิเคราะห์แนวทางของเราสามารถพบได้ที่นี่: https://medium.com/nearprotocol/ 8f9efae0ce3bบัญชีหนึ่งไปยังอีกบัญชีหนึ่งภายในชาร์ดเดียวกัน ธุรกรรมสามารถดำเนินการได้ ทั้งหมดโดย validators ในชาร์ดนั้น อย่างไรก็ตาม หากอลิซนั้นอาศัยอยู่บนเศษชิ้นส่วน

1 ต้องการส่งเงินให้ Bob ซึ่งอาศัยอยู่บนเศษ #2 ทั้ง validators

บนชาร์ด #1 (พวกเขาจะไม่สามารถให้เครดิตบัญชีของ Bob ได้) หรือ validators บน ชิ้นส่วน #2 (พวกเขาจะไม่สามารถหักเงินจากบัญชีของ Alice ได้) สามารถประมวลผลทั้งหมดได้ การทำธุรกรรม มีสองแนวทางในการทำธุรกรรมข้ามส่วน: • ซิงโครนัส: เมื่อใดก็ตามที่จำเป็นต้องดำเนินการธุรกรรมข้ามส่วน บล็อกในหลายส่วนที่มีการเปลี่ยนสถานะที่เกี่ยวข้องกับ ธุรกรรมได้รับการผลิตทั้งหมดในเวลาเดียวกัน และ validators ของส่วนย่อยหลาย ๆ ร่วมมือกันในการดำเนินการธุรกรรมดังกล่าว3 • อะซิงโครนัส: ธุรกรรมข้ามชาร์ดที่ส่งผลกระทบต่อหลายชาร์ด จะถูกดำเนินการในส่วนแบ่งข้อมูลเหล่านั้นแบบอะซิงโครนัส โดยที่ส่วนแบ่ง "เครดิต" จะดำเนินการ ครึ่งหนึ่งเมื่อมีหลักฐานเพียงพอว่าเศษ "เดบิต" ได้ดำเนินการตามสัดส่วนแล้ว แนวทางนี้มีแนวโน้มที่จะแพร่หลายมากขึ้นเนื่องจากมี ความเรียบง่ายและความสะดวกในการประสานงาน วันนี้ระบบนี้เสนอใน Cosmos, Ethereum Serenity, Near, Kadena และอื่นๆ มีปัญหากับสิ่งนี้ วิธีการอยู่ที่ว่าถ้าบล็อกถูกสร้างแยกกัน มีโอกาสไม่เป็นศูนย์ที่หนึ่งในหลายๆ บล็อกจะถูกละเลย ดังนั้นจึงทำให้ การทำธุรกรรมมีผลเพียงบางส่วนเท่านั้น พิจารณารูปที่ 2 ที่แสดงถึงสอง ชาร์ดซึ่งทั้งคู่พบกับทางแยกและธุรกรรมข้ามชาร์ด ที่ถูกบันทึกไว้ในบล็อก A และ X' ตามลำดับ ถ้าโซ่ A-B และ V'-X'-Y'-Z' กลายเป็น Canonical ในชาร์ดที่สอดคล้องกัน การทำธุรกรรมเสร็จสมบูรณ์แล้ว หาก A'-B'-C'-D' และ V-X กลายเป็นมาตรฐาน จากนั้นธุรกรรมจะถูกยกเลิกโดยสิ้นเชิงซึ่งเป็นที่ยอมรับ แต่ถ้าเพื่อ ตัวอย่างเช่น A-B และ V-X กลายเป็น Canonical จากนั้นส่วนหนึ่งของธุรกรรมจะถูกสรุปและอีกส่วนหนึ่งถูกละทิ้ง ทำให้เกิดความล้มเหลวของอะตอมมิก เรา จะกล่าวถึงวิธีแก้ปัญหานี้ในโปรโตคอลที่เสนอในส่วนที่สอง เมื่อครอบคลุมการเปลี่ยนแปลงกฎและมติของทางเลือกทางแยก อัลกอริธึมที่เสนอสำหรับโปรโตคอลแบบแบ่งส่วน โปรดทราบว่าการสื่อสารระหว่างเครือข่ายจะมีประโยชน์นอกการแบ่งส่วน 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อ้างอิงถึงบทความนี้โดย Zaki Manian จาก Cosmos: https://forum.cosmos.network/ t/polkadot-vs-cosmos/1397/2 และทวีตพายุนี้โดยผู้เขียนคนแรกของเอกสารนี้: https://twitter.com/AlexSkidanov/status/1129511266660126720 สำหรับการเปรียบเทียบโดยละเอียด ของทั้งสอง

ไม่ได้ละเลย เราไม่สามารถสรุปได้ว่าการ forks จะไม่เกิดขึ้นแม้ว่าจะมีการบรรลุฉันทามติแบบไบแซนไทน์ในกลุ่มชาร์ด validators หรือหลายบล็อกก็ตาม ผลิตที่ด้านบนของบล็อกพร้อมกับการเปลี่ยนแปลงสถานะ ปัญหานี้มีวิธีแก้ไขหลายวิธี โดยวิธีที่พบบ่อยที่สุดเกิดขึ้นเป็นครั้งคราว การเชื่อมโยงข้ามของบล็อกลูกโซ่ชิ้นส่วนล่าสุดกับลูกโซ่บีคอน ส้อม กฎการเลือกในชาร์ดเชนจะเปลี่ยนไปใช้เชนที่เป็นแบบนั้นเสมอ เชื่อมโยงข้าม และใช้เฉพาะกฎการเลือกแยกส่วนเฉพาะสำหรับบล็อกที่เป็นเช่นนั้น เผยแพร่ตั้งแต่การเชื่อมโยงข้ามครั้งล่าสุด 1.5.2 การอนุมัติการบล็อกที่ไม่ถูกต้อง ชุด validators อาจพยายามสร้างบล็อกที่ใช้ฟังก์ชันการเปลี่ยนสถานะไม่ถูกต้อง เช่น เริ่มจากรัฐที่อลิซ มี 10 tokens และ Bob มี 0 tokens บล็อกอาจมีธุรกรรมที่ ส่ง 10 tokens จาก Alice ไปยัง Bob แต่จบลงด้วยสถานะที่ Alice มี 0 tokens และ Bob มี 1,000 tokens ดังแสดงในรูป 3 รูปที่ 3: ตัวอย่างการบล็อกที่ไม่ถูกต้อง ใน blockchain แบบ non-sharded แบบคลาสสิก การโจมตีดังกล่าวเป็นไปไม่ได้ เนื่องจากทั้งหมด ผู้เข้าร่วมในเครือข่ายตรวจสอบบล็อกทั้งหมดและบล็อกด้วย การเปลี่ยนสถานะที่ไม่ถูกต้องจะถูกปฏิเสธโดยผู้ผลิตบล็อกรายอื่นและ ผู้เข้าร่วมเครือข่ายที่ไม่ได้สร้างบล็อก ถึงแม้จะเป็นคนใจร้ายก็ตาม validators สร้างบล็อกต่อจากบล็อกที่ไม่ถูกต้องดังกล่าวได้เร็วกว่า validators ที่ซื่อสัตย์สร้างเชนที่ถูกต้อง ดังนั้นการมีเชนที่ไม่ถูกต้อง บล็อกจะยาวขึ้นก็ไม่สำคัญ เนื่องจากผู้เข้าร่วมทุกคนที่ใช้ blockchain เพื่อวัตถุประสงค์ใดๆ ก็ตามจะตรวจสอบบล็อกทั้งหมด และละทิ้งบล็อกทั้งหมด สร้างขึ้นบนบล็อกที่ไม่ถูกต้อง ในรูปที่ 4 มี validator ห้ารายการ โดยสามรายการเป็นอันตราย พวกเขา สร้างบล็อก A' ที่ไม่ถูกต้อง จากนั้นจึงสร้างบล็อกใหม่ต่อจากด้านบน ของมัน validators ที่ซื่อสัตย์สองคนละทิ้ง A' เนื่องจากไม่ถูกต้องและกำลังสร้างอยู่ด้านบนรูปที่ 4: พยายามสร้างบล็อกที่ไม่ถูกต้องใน blockchain ที่ไม่ใช่การแบ่งส่วน ของบล็อกที่ถูกต้องสุดท้ายที่พวกเขารู้จัก ทำให้เกิดทางแยก เนื่องจากมีน้อย validators เมื่ออยู่ในทางแยกที่เที่ยงตรง โซ่ของมันสั้นกว่า อย่างไรก็ตาม ใน blockchain แบบ nonsharded แบบคลาสสิก ผู้เข้าร่วมทุกคนที่ใช้ blockchain เพื่อวัตถุประสงค์ใดๆ ก็ตาม รับผิดชอบในการตรวจสอบบล็อกทั้งหมดที่พวกเขาได้รับและคำนวณสถานะใหม่ ดังนั้นบุคคลใดก็ตามที่มีความสนใจใน blockchain จะสังเกตเห็นว่า A' ไม่ถูกต้องและจึงละทิ้ง B', C' และ D' ทันทีเช่นการสละ chain A-B เป็น chain ที่ยาวที่สุดในปัจจุบัน อย่างไรก็ตาม ในชาร์ด blockchain ไม่มีผู้เข้าร่วมคนใดสามารถตรวจสอบธุรกรรมทั้งหมดบนชาร์ดทั้งหมดได้ ดังนั้นพวกเขาจึงต้องมีวิธีใดที่จะยืนยันได้ว่าไม่ จุดในประวัติของส่วนใดๆ ของ blockchain ไม่มีการบล็อกที่ไม่ถูกต้อง โปรดทราบว่าการเชื่อมโยงข้ามไปยัง Beacon chain นั้นต่างจาก forks ไม่ใช่วิธีแก้ปัญหาที่เพียงพอ เนื่องจาก Beacon chain ไม่มีความสามารถในการตรวจสอบความถูกต้องของ บล็อก สามารถตรวจสอบว่ามีจำนวน validators เพียงพอในส่วนนั้นเท่านั้น ลงนามในบล็อก (และด้วยเหตุนี้จึงได้รับรองความถูกต้อง) เราจะหารือเกี่ยวกับวิธีแก้ไขปัญหานี้ในส่วน 2.2 ด้านล่าง

Государственная достоверность и доступность данных

Основная идея сегментированных blockchain заключается в том, что большинство участников, работающих или использование сети не может проверить блоки во всех сегментах. Таким образом, всякий раз, когда любому участнику необходимо взаимодействовать с конкретным шардом, который он обычно не может загрузите и проверьте всю историю осколка. Однако аспект секционирования при шардинге открывает значительный потенциал. проблема: без скачивания и проверки всей истории конкретного шард участник не обязательно может быть уверен, что состояние, с которым 5Данный раздел, за исключением подраздела 2.5.3, ранее был опубликован по адресу https://near.ai/. осколок2. Если вы читали это раньше, перейдите к следующему разделу.

они взаимодействуют, является результатом некоторой допустимой последовательности блоков, и эта последовательность блоков действительно является канонической цепочкой в шарде. Проблема, которой нет существуют в несегментированном blockchain. Сначала мы представим простое решение этой проблемы, которое было предложено по множеству протоколов, а затем проанализировать, как это решение может сломаться и что были предприняты попытки решить эту проблему. 2.1 Ротация валидаторов Наивное решение проблемы валидности состояния показано на рисунке 5: скажем, мы предположим, что что вся система имеет порядка тысяч validator, из которых не более 20% являются вредоносными или потерпят неудачу по другим причинам (например, из-за невозможности онлайн для создания блока). Тогда, если мы выберем 200 validators, вероятность более 1 3 для практических целей можно принять равным нулю. Рисунок 5: Выборка validators 1 3 – важный порог. Существует семейство консенсусных протоколов, называемое BFT протоколы консенсуса, которые гарантируют, что до тех пор, пока меньше 1 3 из участники терпят неудачу либо из-за сбоя, либо из-за действий, нарушающих правила. протокол, консенсус будет достигнут. При этом предположении о честном validator проценте, если текущий набор validators в шарде предоставляют нам некоторый блок, предполагает наивное решение что блок действителен и что он построен на основе того, что считали validators каноническую цепочку для этого шарда, когда они начали проверять. validators изучил каноническую цепочку из предыдущего набора validators, которые тем же предположение, построенное на вершине блока, который был главой канонической цепочки до этого. По индукции вся цепочка действительна, и поскольку ни один набор validators в любой момент создаются вилки, наивное решение также уверено, что текущий Chain — единственная цепочка в шарде. См. рисунок 6 для визуализации.

Рисунок 6: blockchain, где каждый блок завершается консенсусом BFT. Это простое решение не сработает, если мы предположим, что validators могут быть повреждаются адаптивно, что не является необоснованным предположением6. Адаптивно повреждение одного шарда в системе с 1000 шардами обходится значительно дешевле. чем развращать всю систему. Таким образом, безопасность протокола снижается линейно с увеличением количества шардов. Чтобы быть уверенным в достоверности блок, мы должны знать, что в любой момент истории ни один шард в системе не большинство validator в сговоре; с адаптивными противниками у нас больше нет такая уверенность. Как мы обсуждали в разделе 1.5, вступившие в сговор validator могут осуществлять два основных вредоносных действия: создание разветвлений и создание недействительных блоков. Вредоносные форки могут быть устранены путем присоединения блоков к цепочке Beacon, которая обычно спроектирована так, чтобы обеспечить значительно более высокий уровень безопасности, чем цепочки осколков. Однако создание недействительных блоков является значительно более сложной задачей. сложная проблема, требующая решения. 2.2 Государственная действительность Рассмотрим рисунок 7, на котором шард №1 поврежден и злоумышленник создает недействительный блок B. Предположим, в этом блоке B было отчеканено 1000 token из тонких air за счет Алисы. Затем злоумышленник создает действительный блок C (в ощущение, что транзакции в C применяются правильно) поверх B, что запутывает недействительный блок B и инициирует межшардовую транзакцию с шардом №2, которая переводит эти 1000 __PH_0006__s на счет Боба. С этого момента неправильно созданные token находятся на полностью допустимом в остальном blockchain в осколке №2. Вот несколько простых способов решения этой проблемы: 6Читать это статья для детали на как адаптивный коррупция может быть нес выход: https://medium.com/nearprotocol/d859adb464c8. Для больше детали на адаптивный коррупция, читать https://github.com/ethereum/wiki/wiki/Sharding-FAQ# какие-модели-безопасности-мы-действуемРисунок 7: Межшардовая транзакция из цепочки с недействительным блоком 1. Для validator шарда №2 для проверки блока, из которого была выполнена транзакция. инициируется. Это не сработает даже в примере выше, так как блок C представляется вполне верным. 2. Для validator в шарде №2 для проверки большого количества блоков, предшествующих блоку, из которого инициируется транзакция. Естественно, для любое количество блоков N, проверенное принимающим шардом, вредоносный validators могут создавать N+1 действительных блоков поверх недействительного блока, который они произведено. Многообещающей идеей решения этой проблемы было бы объединение шардов в неориентированный граф, в котором каждый шард связан с несколькими другими шардами, и разрешать только межшардовые транзакции между соседними шардами (например, так Шардинг Влада Замфира по существу работает7, и аналогичная идея используется в методе Кадены. Цепная паутина [1]). Если необходима межшардовая транзакция между шардами, которые не соседи, такая транзакция маршрутизируется через несколько сегментов. В этом дизайне Ожидается, что validator в каждом сегменте будет проверять оба блока в их сегменте. а также все блоки во всех соседних шардах. Рассмотрим рисунок ниже с 10 шардами, каждый из которых имеет по четыре соседа, и никакие два шарда не требуют больше чем два прыжка для связи между сегментами, показанной на рисунке 8. Шард №2 проверяет не только свой собственный blockchain, но и blockchain все соседи, включая Осколок №1. Итак, если злоумышленник на Осколке №1 пытается создать недопустимый блок B, а затем построить блок C поверх него и инициировать межшардовую транзакцию, такая межшардовая транзакция не пройдет поскольку Шард №2 подтвердит всю историю Шарда №1, которая заставит его идентифицировать недействительный блок B. 7Подробнее о дизайне читайте здесь: https://medium.com/nearprotocol/37e538177ed9

Рисунок 8: Недействительная межсегментная транзакция в системе, похожей на цепную сеть, которая будет быть обнаруженным Хотя повреждение одного осколка больше не является жизнеспособной атакой, повреждение несколько осколков остаются проблемой. На рисунке 9 противник портит оба Шарда №1 и шард №2 успешно выполняют межсегментную транзакцию с шардом №3. со средствами из невалидного блока Б: Рисунок 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-SNARK специально для того, чтобы доказать, что все блоки в blockchain действительны, сказано в одном интервью, что для создания доказательства может потребоваться 30 секунд на одну транзакцию (сейчас это число, вероятно, меньше). Интересно, что доказательство не обязательно должно быть вычислено доверенной стороной, поскольку доказательство не только подтверждает достоверность вычислений, для которых оно построено, но и достоверность самого доказательства. Таким образом, вычисление таких доказательств можно разделить среди набора участников со значительно меньшей избыточностью, чем было бы необходимо выполнить некоторые ненадежные вычисления. Это также позволяет участникам которые вычисляют zk-SNARK для работы на специальном оборудовании без снижения децентрализация системы. Проблемы zk-SNARK, помимо производительности, заключаются в следующем: 1. Зависимость от менее исследованных и менее проверенных временем криптографических примитивов; 2. «Токсичные отходы» — zk-SNARK зависят от доверенной установки, в которой группа людей выполняет некоторые вычисления, а затем отбрасывает промежуточные значения этого вычисления. Если все участники процедуры вступили в сговор и сохраняйте промежуточные значения, могут быть созданы фальшивые доказательства; 3. Дополнительная сложность, вносимая в конструкцию системы; 4. zk-SNARK работают только для подмножества возможных вычислений, поэтому протокол с полным по Тьюрингу языком smart contract невозможно было бы использовать SNARK для подтверждения достоверности цепочки. 2,5 Доступность данных Вторая проблема, которую мы затронем, — доступность данных. Обычно узлы эксплуатирующие конкретный blockchain, разделены на две группы: полные узлы, те, которые загружают каждый полный блок и проверяют каждую транзакцию, и Light Узлы, которые загружают только заголовки блоков и используют доказательства Меркла для частей. состояния и транзакций, в которых они заинтересованы, как показано на рисунке 11.

Рисунок 11: Дерево Меркла Теперь, если большинство полных узлов вступают в сговор, они могут создать блок, действительный или недействителен и отправляет его hash на легкие узлы, но никогда не раскрывает полное содержимое блока. Есть разные способы, которыми они могут извлечь из этого выгоду. Например, рассмотрим рисунок 12: Рисунок 12: Проблема с доступностью данных Есть три блока: предыдущий, A, создан честными validators; текущий B имеет в сговоре validators; и следующий, C, также будет произведен честными validators (blockchain изображен в правом нижнем углу). Вы торговец. validator текущего блока (B) получил блок A из предыдущих validators вычислил блок, в котором вы получаете деньги,и отправил вам заголовок этого блока с доказательством Меркла о состоянии, в котором у вас есть деньги (или подтверждение Merkle о действительной транзакции, которая отправляет деньги тебе). Уверенные, что транзакция завершена, вы предоставляете услугу. Однако validator никогда не передают полное содержимое блока B кто угодно. Таким образом, честные validator блока C не могут получить блок и вынуждены либо останавливать систему, либо строить на вершине А, лишая вас как торговец деньгами. Когда мы применяем тот же сценарий к сегментированию, определения полного и Легкий узел обычно применяется к каждому сегменту: validators в каждом сегменте загружается каждые блокировать в этом сегменте и проверять каждую транзакцию в этом сегменте, но другие узлы в системе, включая те, которые сохраняют состояние цепочек осколков моментальных снимков в цепочка маяков, загружайте только заголовки. Таким образом, validator в осколке фактически полные узлы для этого шарда, в то время как другие участники системы включая маяковую цепь, работают как легкие узлы. Чтобы подход рыбака, который мы обсуждали выше, работал, честные validators необходимо иметь возможность загружать блоки, связанные с цепочкой маяков. Если злонамеренные validators связали заголовок недопустимого блока (или использовали его для инициировать транзакцию между шардами), но никогда не распределял блок, честный validator не имеют возможности придумать испытание. Мы рассмотрим три подхода к решению этой проблемы, которые дополняют друг друга. 2.5.1 Доказательства содержания под стражей Самая неотложная проблема, которую необходимо решить, — доступен ли блок один раз. оно опубликовано. Одна из предложенных идей заключается в том, чтобы иметь так называемых нотариусов, которые чередуются. между шардами чаще, чем validators, единственная задача которых — загрузить заблокировать и подтвердить, что они смогли его скачать. Они могут быть ротируются чаще, потому что им не нужно загружать все состояние осколка, в отличие от validator, которых нельзя часто менять, поскольку они должен загружать состояние шардов каждый раз, когда они вращаются, как показано на рисунке 13. Проблема с этим наивным подходом в том, что позже невозможно доказать смог или не смог нотариус загрузить блок, поэтому нотариус могут всегда подтверждать, что они смогли загрузить блок без даже пытаясь его вернуть. Одним из решений этой проблемы является предоставление нотариусам некоторые доказательства или поставить некоторое количество tokens, подтверждающих, что блок был скачал. Одно из таких решений обсуждается здесь: https://ethresear.ch/t/. 1-битные депозитарные облигации, благоприятные для агрегации/2236. 2.5.2 Коды стирания Когда конкретный легкий узел получает hash блока, чтобы увеличить будучи уверенным в том, что блок доступен, он может попытаться загрузить несколько случайных кусочки блока. Это не полное решение, так как разве что легкие узлы коллективно загрузить весь блок, который могут выбрать производители вредоносных блоков

Рисунок 13: Валидаторам необходимо загрузить состояние, и поэтому их нельзя менять. часто удерживать части блока, которые не были загружены каким-либо легким узлом, тем самым делая блок недоступным. Одним из решений является использование конструкции под названием «Коды стирания», позволяющей восстановить весь блок, даже если доступна только некоторая часть блока, как показано на рисунке 14. Рисунок 14: Merkle tree построен на основе данных стирающего кодирования И Polkadot, и Ethereum Serenity используют эту идею, предоставить легким узлам возможность быть достаточно уверенными в доступности блоков. Подход Ethereum Serenity подробно описан в [2].2.5.3 Подход Polkadot к доступности данных В Polkadot, как и в большинстве сегментированных решений, каждый сегмент (называемый парачейном) передает свои блоки в цепочку маяков (называемую цепочкой реле). Скажем, есть 2f + 1. validators в цепи реле. Производители блоков парачейна, называемые средства сортировки, как только блок парачейна создан, вычисляют версию блока со стирающим кодом, состоящую из 2f +1 частей, так что любых f частей достаточно. реконструировать блок. Затем они раздают по одной части каждому validator на релейная цепь. Определенная цепочка ретрансляции validator будет только подписываться на цепочку ретрансляции. блокировать, если у них есть своя часть для каждого блока парачейна, снимок которого сделан в такой блок релейной цепи. Таким образом, если блок релейной цепи имеет сигнатуры от 2f + 1 validators, и до тех пор, пока не более f из них нарушили протокол, каждый Блок парачейна можно реконструировать, извлекая части из validators которые следуют протоколу. См. рисунок 15. Рисунок 15: Доступность данных Polkadot 2.5.4 Долгосрочная доступность данных Заметим, что все рассмотренные выше подходы свидетельствуют лишь о том, что блок вообще был опубликован и доступен сейчас. Блоки могут позже стать недоступными. по разным причинам: узлы отключаются от сети, узлы намеренно стирают историю данные и другие. Стоит упомянуть технический документ, посвященный этой проблеме, — Polyshard [3], который использует коды стирания, чтобы сделать блоки доступными для всех осколков, даже если их несколько. осколки полностью теряют свои данные. К сожалению, их специфический подход требует все шарды для скачивания блоков со всех остальных шардов, что непомерно дорого. Долгосрочная доступность не является столь острой проблемой: поскольку ни один участник Ожидается, что система будет способна проверять все цепочки во всех

сегментов, безопасность сегментированного протокола должна быть спроектирована таким образом, способ обеспечить безопасность системы, даже если некоторые старые блоки в некоторых шардах станут совершенно недоступен.

ความถูกต้องของรัฐและความพร้อมใช้งานของข้อมูล

แนวคิดหลักใน 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: A blockchain กับแต่ละบล็อกสรุปผ่าน BFT ฉันทามติ วิธีแก้ปัญหาง่ายๆ นี้ใช้ไม่ได้หากเราถือว่า validators สามารถเป็นได้ เสียหายในการปรับตัว ซึ่งไม่ใช่สมมติฐานที่ไม่สมเหตุสมผล6 ปรับตัวได้ การทำลายชิ้นส่วนเดียวในระบบที่มี 1,000 ชิ้นส่วนนั้นถูกกว่าอย่างเห็นได้ชัด มากกว่าที่จะเสียหายทั้งระบบ ดังนั้นความปลอดภัยของโปรโตคอลจึงลดลงเชิงเส้นตามจำนวนชาร์ด เพื่อให้เกิดความแน่นอนในความถูกต้องของ บล็อก เราต้องรู้ว่า ณ จุดใด ๆ ในประวัติศาสตร์ไม่มีชิ้นส่วนในระบบ validators ส่วนใหญ่สมรู้ร่วมคิด; เมื่อมีศัตรูที่ปรับตัว เราก็ไม่มีอีกต่อไป ความแน่นอนดังกล่าว ดังที่เราได้พูดคุยกันในหัวข้อ 1.5 การสมรู้ร่วมคิด validators สามารถออกกำลังกายได้ พฤติกรรมที่เป็นอันตรายพื้นฐานสองประการ: สร้างทางแยก และสร้างบล็อกที่ไม่ถูกต้อง ส้อมที่เป็นอันตรายสามารถแก้ไขได้โดยบล็อกที่เชื่อมโยงข้ามกับลูกโซ่บีคอนซึ่งโดยทั่วไปได้รับการออกแบบให้มีความปลอดภัยสูงกว่าอย่างมีนัยสำคัญ โซ่เศษ อย่างไรก็ตาม การสร้างบล็อกที่ไม่ถูกต้องนั้นมีความสำคัญมากกว่านั้น ปัญหาที่ท้าทายในการแก้ไข 2.2 ความถูกต้องของรัฐ พิจารณารูปที่ 7 ซึ่ง Shard #1 เสียหายและนักแสดงที่เป็นอันตรายสร้างขึ้น บล็อก B ไม่ถูกต้อง สมมติว่าในบล็อกนี้ B 1,000 tokens ถูกสร้างเสร็จเรียบร้อยแล้ว ออกอากาศในบัญชีของอลิซ ผู้ที่เป็นอันตรายจะสร้างบล็อก C ที่ถูกต้อง (ใน a รู้สึกว่าธุรกรรมใน C ถูกนำไปใช้อย่างถูกต้อง) ที่ด้านบนของ B ซึ่งทำให้สับสน บล็อก B ที่ไม่ถูกต้อง และเริ่มธุรกรรมข้ามชาร์ดไปยัง Shard #2 นั้น โอน 1,000 tokens เหล่านั้นไปยังบัญชีของ Bob ตั้งแต่บัดนี้เป็นต้นไปอย่างไม่เหมาะสม tokens ที่สร้างขึ้นนั้นอยู่บน blockchain ที่ถูกต้องโดยสมบูรณ์ใน Shard #2 แนวทางง่ายๆ ในการแก้ไขปัญหานี้คือ: 6อ่าน นี้ บทความ สำหรับ รายละเอียด บน อย่างไร ปรับตัวได้ การทุจริต สามารถ เป็น ดำเนินการ ออก: https://medium.com/nearprotocol/d859adb464c8. สำหรับ มากขึ้น รายละเอียด บน ปรับตัวได้ การทุจริต อ่าน https://github.com/ethereum/wiki/wiki/Sharding-FAQ# โมเดลการรักษาความปลอดภัยที่เรากำลังดำเนินการอยู่คืออะไรรูปที่ 7: ธุรกรรมข้ามส่วนจากเครือข่ายที่มีบล็อกที่ไม่ถูกต้อง 1. สำหรับ validators ของ Shard #2 เพื่อตรวจสอบความถูกต้องของบล็อกที่ธุรกรรม กำลังเริ่มต้น สิ่งนี้จะไม่ทำงานแม้ในตัวอย่างนี้ เนื่องจากบล็อก C ดูเหมือนจะถูกต้องสมบูรณ์ 2. สำหรับ validators ใน Shard #2 เพื่อตรวจสอบบล็อกจำนวนมากที่อยู่ก่อนหน้าบล็อกที่ธุรกรรมเริ่มต้นขึ้น โดยธรรมชาติแล้วสำหรับ จำนวนบล็อก N ใด ๆ ที่ได้รับการตรวจสอบโดยส่วนที่รับที่เป็นอันตราย validators สามารถสร้างบล็อกที่ถูกต้อง N+1 ที่ด้านบนของบล็อกที่ไม่ถูกต้องได้ ผลิต แนวคิดที่มีแนวโน้มในการแก้ไขปัญหานี้คือการจัดชิ้นส่วนให้เป็น กราฟที่ไม่มีทิศทางซึ่งแต่ละส่วนเชื่อมต่อกับส่วนอื่น ๆ อีกหลายส่วนและ อนุญาตให้ทำธุรกรรมข้ามส่วนระหว่างส่วนใกล้เคียงเท่านั้น (เช่น เป็นเช่นนี้) การแบ่งส่วนย่อยของวลาด ซัมเฟอร์ใช้งานได้จริง7 และแนวคิดที่คล้ายกันนี้ถูกนำมาใช้ในผลงานของคาเดนา เชนเว็บ [1]) หากจำเป็นต้องมีการทำธุรกรรมข้ามส่วนระหว่างส่วนย่อยนั้น ไม่ใช่เพื่อนบ้าน ธุรกรรมดังกล่าวจะถูกส่งผ่านหลายส่วน ในการออกแบบครั้งนี้ validator ในแต่ละชาร์ดนั้นคาดว่าจะตรวจสอบทั้งสองบล็อกทั้งหมดในชาร์ดของพวกเขา เช่นเดียวกับบล็อกทั้งหมดในเศษใกล้เคียงทั้งหมด พิจารณารูปด้านล่าง มีชิ้นส่วน 10 ชิ้น แต่ละชิ้นมีเพื่อนบ้าน 4 ชิ้น และไม่มีชิ้นส่วนใดที่ต้องการเพิ่มอีก มากกว่าสองครั้งสำหรับการสื่อสารแบบ cross-shard ที่แสดงในรูปที่ 8 Shard #2 ไม่เพียงแต่ตรวจสอบความถูกต้อง blockchain ของตัวเองเท่านั้น แต่ยังรวมถึง blockchains ของ เพื่อนบ้านทั้งหมด รวมถึง Shard #1 ดังนั้นหากนักแสดงที่เป็นอันตรายใน Shard #1 กำลังพยายามสร้างบล็อก B ที่ไม่ถูกต้อง จากนั้นสร้างบล็อก C ด้านบน และเริ่มต้นธุรกรรมแบบ cross-shard ธุรกรรมแบบ cross-shard ดังกล่าวจะไม่เกิดขึ้น นับตั้งแต่ Shard #2 จะมีการตรวจสอบประวัติทั้งหมดของ Shard #1 ซึ่ง จะทำให้ระบุบล็อก B ที่ไม่ถูกต้อง 7อ่านเพิ่มเติมเกี่ยวกับการออกแบบได้ที่นี่: https://medium.com/nearprotocol/37e538177ed9

รูปที่ 8: ธุรกรรมข้ามส่วนไม่ถูกต้องในระบบที่คล้ายกับเว็บลูกโซ่ที่จะเกิด ได้รับการตรวจพบ แม้ว่าการทำให้ชิ้นส่วนเสียหายเพียงชิ้นเดียวจะไม่ใช่การโจมตีอีกต่อไป แต่การทำให้เสียหาย เศษชิ้นส่วนบางส่วนยังคงเป็นปัญหาอยู่ รูปที่ 9 ศัตรูที่ทำลายทั้ง Shard

1 และ Shard #2 ดำเนินธุรกรรมข้ามชาร์ดไปยัง Shard #3 ได้สำเร็จ

ด้วยเงินทุนจากบล็อก B ที่ไม่ถูกต้อง: รูปที่ 9: ธุรกรรมข้ามส่วนไม่ถูกต้องในระบบที่คล้ายกับเว็บลูกโซ่ที่จะเกิด ไม่ถูกตรวจพบ Shard #3 ตรวจสอบบล็อกทั้งหมดใน Shard #2 แต่ไม่ใช่ใน Shard #1 และ ไม่มีวิธีตรวจจับบล็อกที่เป็นอันตราย มีสองแนวทางหลักในการแก้ปัญหาความถูกต้องของรัฐอย่างเหมาะสม: ชาวประมง

และการพิสูจน์การเข้ารหัสของการคำนวณ 2.3 ชาวประมง แนวคิดเบื้องหลังแนวทางแรกมีดังต่อไปนี้: เมื่อใดก็ตามที่มีส่วนหัวของบล็อก มีการสื่อสารระหว่างเครือข่ายเพื่อวัตถุประสงค์ใดๆ (เช่น การเชื่อมโยงข้ามไปยัง บีคอนเชนหรือธุรกรรมข้ามส่วน) จะมีช่วงระยะเวลาหนึ่งในระหว่างนั้น ซึ่ง validator ที่ซื่อสัตย์คนใดสามารถพิสูจน์ได้ว่าบล็อกนั้นไม่ถูกต้อง นั่น. เป็นสิ่งก่อสร้างต่าง ๆ ที่ช่วยให้สามารถพิสูจน์ได้ชัดเจนว่าบล็อกนั้นเป็นอย่างไร ไม่ถูกต้อง ดังนั้นค่าใช้จ่ายในการสื่อสารสำหรับโหนดรับจึงน้อยกว่ามาก มากกว่าการรับบล็อกเต็ม ด้วยแนวทางนี้ตราบใดที่มี validator ที่ซื่อสัตย์อย่างน้อยหนึ่งรายการใน ชาร์ด ระบบมีความปลอดภัย รูปที่ 10: ชาวประมง นี่เป็นแนวทางที่โดดเด่น (นอกเหนือจากการแสร้งทำเป็นว่าไม่มีปัญหา) ในบรรดาโปรโตคอลที่เสนอในปัจจุบัน อย่างไรก็ตาม แนวทางนี้มีอยู่สองประการ ข้อเสียเปรียบที่สำคัญ: 1. ช่วงเวลาท้าทายต้องยาวนานเพียงพอสำหรับผู้ซื่อสัตย์ validator เพื่อรับรู้ว่ามีการสร้างบล็อก ให้ดาวน์โหลด ตรวจสอบบล็อกให้ครบถ้วน และเตรียมพร้อม ความท้าทายหากบล็อกไม่ถูกต้อง การแนะนำช่วงเวลาดังกล่าวจะ ทำให้การทำธุรกรรมข้ามส่วนช้าลงอย่างมาก 2. การมีอยู่ของโปรโตคอลการท้าทายจะสร้างเวกเตอร์ใหม่ของการโจมตี เมื่อโหนดที่เป็นอันตรายส่งสแปมพร้อมกับความท้าทายที่ไม่ถูกต้อง ทางออกที่ชัดเจน สำหรับปัญหานี้คือการทำให้ผู้ท้าชิงฝากเงินจำนวน tokens ไว้ จะถูกส่งกลับหากการท้าทายนั้นถูกต้อง นี่เป็นเพียงวิธีแก้ปัญหาบางส่วนเท่านั้น อาจยังเป็นประโยชน์สำหรับฝ่ายตรงข้ามที่จะสแปมระบบ (และเผา เงินฝาก) ด้วยความท้าทายที่ไม่ถูกต้อง เช่น เพื่อป้องกันความถูกต้องความท้าทายจาก validator ผู้ซื่อสัตย์จากการผ่าน การโจมตีเหล่านี้คือ เรียกว่าการโจมตีด้วยความโศกเศร้า ดูหัวข้อ 3.7.2 สำหรับวิธีแก้ไขจุดหลัง 2.4 ข้อโต้แย้งความรู้ที่ไม่โต้ตอบโดยย่อ วิธีแก้ปัญหาที่สองสำหรับความเสียหายหลายส่วนคือการใช้โครงสร้างการเข้ารหัสบางประเภทที่ช่วยให้สามารถพิสูจน์ได้ว่าการคำนวณบางอย่าง (เช่น เนื่องจากการคำนวณบล็อกจากชุดธุรกรรม) ดำเนินการอย่างถูกต้อง การก่อสร้างดังกล่าวก็มีอยู่จริง เช่น zk-SNARKs, zk-STARKs และอีกสองสามอย่าง และบางส่วนมีการใช้งานอย่างแข็งขันในโปรโตคอล blockchain ในปัจจุบันสำหรับการชำระเงินส่วนตัว ZCash ที่สะดุดตาที่สุด ปัญหาหลักของสิ่งดึกดำบรรพ์ดังกล่าวก็คือพวกเขา ถือว่าช้ามากในการคำนวณ เช่น Coda Protocol ที่ใช้ zk-SNARK โดยเฉพาะเพื่อพิสูจน์ว่าบล็อกทั้งหมดใน blockchain นั้นถูกต้อง กล่าวในที่เดียว ของการสัมภาษณ์ว่าอาจใช้เวลา 30 วินาทีต่อรายการในการพิสูจน์ (จำนวนนี้น่าจะน้อยกว่านี้ในตอนนี้) ที่น่าสนใจคือ ฝ่ายที่เชื่อถือได้ไม่จำเป็นต้องคำนวณหลักฐานเนื่องจาก การพิสูจน์ไม่เพียงแต่พิสูจน์ถึงความถูกต้องของการคำนวณที่สร้างขึ้นเท่านั้น แต่ยังพิสูจน์ถึงความถูกต้องของการคำนวณด้วย ความถูกต้องของหลักฐานนั้นเอง ดังนั้นจึงสามารถแยกการคำนวณการพิสูจน์ดังกล่าวได้ ในกลุ่มผู้เข้าร่วมที่มีความซ้ำซ้อนน้อยกว่าที่ควรจะเป็นอย่างมาก จำเป็นต้องทำการคำนวณที่ไม่น่าเชื่อถือ อีกทั้งยังเปิดโอกาสให้ผู้เข้าร่วม ผู้คำนวณ zk-SNARK ให้ทำงานบนฮาร์ดแวร์พิเศษโดยไม่ลดขนาด การกระจายอำนาจของระบบ ความท้าทายของ zk-SNARK นอกเหนือจากประสิทธิภาพแล้วคือ: 1. การพึ่งพาการเข้ารหัสแบบดั้งเดิมที่มีการวิจัยน้อยและทดสอบน้อย 2. ”ขยะพิษ” — zk-SNARK ขึ้นอยู่กับการตั้งค่าที่เชื่อถือได้ซึ่งกลุ่ม ของคนทำการคำนวณบางอย่างแล้วทิ้งตัวกลางไป ค่าของการคำนวณนั้น หากผู้เข้าร่วมขั้นตอนทั้งหมดมารวมตัวกัน และเก็บค่ากลางไว้สร้างหลักฐานปลอมได้ 3. ความซับซ้อนพิเศษที่นำมาใช้ในการออกแบบระบบ 4. zk-SNARK ใช้ได้กับชุดย่อยของการคำนวณที่เป็นไปได้เท่านั้น ดังนั้นโปรโตคอล ด้วยภาษา smart contract ที่สมบูรณ์ของทัวริงจะไม่สามารถใช้งานได้ SNARK เพื่อพิสูจน์ความถูกต้องของห่วงโซ่ 2.5 ความพร้อมใช้งานของข้อมูล ปัญหาที่สองที่เราจะพูดถึงคือความพร้อมใช้งานของข้อมูล โดยทั่วไปโหนด ปฏิบัติการเฉพาะ blockchain ถูกแบ่งออกเป็นสองกลุ่ม: โหนดเต็ม ผู้ที่ดาวน์โหลดทุกบล็อกเต็มและตรวจสอบทุกธุรกรรมและ Light โหนดที่ดาวน์โหลดเฉพาะส่วนหัวของบล็อก และใช้การพิสูจน์ Merkle สำหรับชิ้นส่วน ของรัฐและธุรกรรมที่พวกเขาสนใจ ดังแสดงในรูปที่ 11

รูปที่ 11: ต้นไม้เมิร์เคิล ตอนนี้ถ้าโหนดเต็มส่วนใหญ่ชนกัน พวกเขาก็สามารถสร้างบล็อก ถูกต้อง หรือ ไม่ถูกต้อง และส่ง hash ไปยัง light nodes แต่อย่าเปิดเผยเนื้อหาทั้งหมด ของบล็อก มีหลายวิธีที่พวกเขาสามารถได้รับประโยชน์จากมัน ตัวอย่างเช่น พิจารณารูปที่ 12: รูปที่ 12: ปัญหาความพร้อมใช้งานของข้อมูล มีสามช่วงตึก: ก่อนหน้านี้ A ผลิตโดยซื่อสัตย์ validators; ปัจจุบัน B มีการสมรู้ร่วมคิด validators; และตัวถัดไป C ก็จะถูกผลิตขึ้นมาด้วย โดยสุจริต validators (blockchain ปรากฏที่มุมขวาล่าง) คุณเป็นพ่อค้า validators ของบล็อกปัจจุบัน (B) ที่ได้รับบล็อก A จาก validators ก่อนหน้า คำนวณบล็อกที่คุณได้รับเงินและส่งส่วนหัวของบล็อกนั้นไปให้คุณพร้อมหลักฐาน Merkle ของรัฐนั้น คุณมีเงิน (หรือหลักฐาน Merkle ของธุรกรรมที่ถูกต้องที่ส่งเงิน) กับคุณ) มั่นใจว่าธุรกรรมได้รับการสรุปแล้ว คุณจึงให้บริการได้ อย่างไรก็ตาม validators จะไม่แจกจ่ายเนื้อหาทั้งหมดของบล็อก B ไปให้ ใครก็ได้ ด้วยเหตุนี้ validators ที่ซื่อสัตย์ของบล็อก C จึงไม่สามารถเรียกคืนบล็อกได้ และ ถูกบังคับให้หยุดระบบหรือสร้างบน A ทำให้คุณถูกลิดรอน พ่อค้าเงิน เมื่อเราใช้สถานการณ์เดียวกันกับการแบ่งส่วน คำจำกัดความของ full และ โดยทั่วไปแล้ว light node จะใช้ต่อชาร์ด: validators ในแต่ละชาร์ด ดาวน์โหลดทุกครั้ง บล็อกในชาร์ดนั้นและตรวจสอบทุกธุรกรรมในชาร์ดนั้น ยกเว้นอย่างอื่น โหนดในระบบ รวมถึงโหนดที่สแนปชอตชาร์ดเชนระบุสถานะไว้ใน บีคอนเชน ดาวน์โหลดเฉพาะส่วนหัวเท่านั้น ดังนั้น validators ในชาร์ดจึงเป็นเช่นนั้น โหนดเต็มประสิทธิภาพสำหรับชาร์ดนั้น ในขณะที่ผู้เข้าร่วมคนอื่นๆ ในระบบ รวมทั้งสายบีคอนทำงานเป็นโหนดไฟ สำหรับแนวทางชาวประมงที่เรากล่าวถึงข้างต้นในการทำงาน ตรงไปตรงมา validators จะต้องสามารถดาวน์โหลดบล็อกที่เชื่อมโยงข้ามกับลูกโซ่บีคอนได้ หาก validators ที่เป็นอันตรายเชื่อมโยงข้ามส่วนหัวของบล็อกที่ไม่ถูกต้อง (หรือใช้เพื่อ เริ่มต้นการทำธุรกรรมข้ามส่วน) แต่ไม่เคยกระจายบล็อกเลย validators ไม่มีทางสร้างความท้าทายได้ เราจะกล่าวถึงแนวทางสามประการในการแก้ไขปัญหานี้ที่เสริมกัน กันและกัน 2.5.1 หลักฐานการควบคุมตัว ปัญหาเร่งด่วนที่สุดที่ต้องแก้ไขคือบล็อกนั้นพร้อมใช้งานเพียงครั้งเดียวหรือไม่ มันถูกตีพิมพ์ แนวคิดหนึ่งที่เสนอคือการมีสิ่งที่เรียกว่า Notaries ที่หมุนเวียน ระหว่างชาร์ดบ่อยกว่า 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 วิธีการ Serenity มีคำอธิบายโดยละเอียดใน [2]2.5.3 แนวทางของ Polkadot ในด้านความพร้อมใช้งานของข้อมูล ใน Polkadot เช่นเดียวกับในโซลูชันการแบ่งส่วนส่วนใหญ่ แต่ละส่วน (เรียกว่า parachain) จะสแน็ปช็อตบล็อกของตนไปยังสายสัญญาณบีคอน (เรียกว่าสายโซ่รีเลย์) บอกว่ามี 2f + 1 validators บนห่วงโซ่รีเลย์ ผู้ผลิตบล็อกของบล็อกพาราเชนเรียกว่า collators เมื่อสร้างบล็อก parachain ให้คำนวณเวอร์ชันการลบรหัสของบล็อกที่ประกอบด้วย 2f +1 ส่วนเพื่อให้ส่วน f ใด ๆ เพียงพอ เพื่อสร้างบล็อกขึ้นใหม่ จากนั้นพวกเขาจะแจกจ่ายหนึ่งส่วนให้กับแต่ละ validator บน โซ่รีเลย์ ห่วงโซ่รีเลย์เฉพาะ validator จะลงนามในห่วงโซ่รีเลย์เท่านั้น บล็อกหากมีส่วนสำหรับบล็อกพาราเชนแต่ละบล็อกที่ถูกสแน็ปช็อต บล็อกลูกโซ่รีเลย์ดังกล่าว ดังนั้นหากบล็อกลูกโซ่รีเลย์มีลายเซ็นจาก 2f + 1 validators และตราบเท่าที่ไม่เกิน f ละเมิดโปรโตคอล แต่ละรายการ บล็อกพาราเชนสามารถสร้างขึ้นใหม่ได้โดยการดึงชิ้นส่วนจาก validators ที่เป็นไปตามระเบียบการ ดูรูปที่ 15 รูปที่ 15: ความพร้อมใช้งานของข้อมูล Polkadot 2.5.4 ความพร้อมใช้งานของข้อมูลในระยะยาว โปรดทราบว่าวิธีการทั้งหมดที่กล่าวถึงข้างต้นเพียงยืนยันถึงความจริงที่ว่าบล็อก ได้รับการเผยแพร่เลยและสามารถใช้ได้ในขณะนี้ การบล็อกอาจไม่สามารถใช้งานได้ในภายหลัง ด้วยเหตุผลหลายประการ: โหนดไม่ทำงาน โหนดจงใจลบข้อมูลประวัติศาสตร์ ข้อมูลและอื่น ๆ เอกสารไวท์เปเปอร์ที่ควรกล่าวถึงซึ่งแก้ไขปัญหานี้คือ Polyshard [3], ซึ่งใช้รหัสการลบเพื่อทำให้บล็อกพร้อมใช้งานข้ามเศษแม้ว่าจะมีหลายส่วนก็ตาม ชาร์ดจะสูญเสียข้อมูลไปโดยสิ้นเชิง น่าเสียดายที่ต้องใช้แนวทางเฉพาะของพวกเขา ชิ้นส่วนทั้งหมดเพื่อดาวน์โหลดบล็อกจากชิ้นส่วนอื่น ๆ ทั้งหมดซึ่งเป็นสิ่งต้องห้าม ราคาแพง ความพร้อมใช้งานในระยะยาวไม่ได้เป็นปัญหาเร่งด่วน เนื่องจากไม่มีผู้เข้าร่วม ในระบบคาดว่าจะสามารถตรวจสอบความถูกต้องของลูกโซ่ทั้งหมดได้ทั้งหมด

ชาร์ด ความปลอดภัยของโปรโตคอลชาร์ดนั้นจำเป็นต้องได้รับการออกแบบในลักษณะนี้ วิธีที่ระบบมีความปลอดภัยแม้ว่าจะมีบล็อกเก่าในเศษบางส่วนก็ตาม ไม่สามารถใช้งานได้อย่างสมบูรณ์

Nightshade

3.1 От цепочек осколков к чанкам осколков Модель шардинга с цепочками шардов и цепочкой маяков очень мощная, но имеет определенные сложности. В частности, необходимо выполнить правило выбора вилки. в каждой цепочке отдельно правило выбора форка в шардчейнах и маяке цепочка должна быть построена по-другому и протестирована отдельно. В Nightshade мы моделируем систему как единый blockchain, в котором каждый блок логически содержит все транзакции для всех шардов и изменяет целое состояние всех осколков. Однако физически ни один участник не загружает полное состояние или полный логический блок. Вместо этого каждый участник сети только поддерживает состояние, соответствующее шардам, для которых они проверяют транзакции, а список всех транзакций в блоке разбивается на физические куски, по одному куску на осколок. В идеальных условиях каждый блок содержит ровно один чанк на каждый шард. блок, что примерно соответствует модели с шардчейнами, в которых Цепочки осколков производят блоки с той же скоростью, что и цепочка маяков. Однако, из-за задержек в сети некоторые фрагменты могут отсутствовать, поэтому на практике каждый блок содержит один или ноль фрагментов на каждый сегмент. Подробную информацию о том, как производятся блоки. Рисунок 16: Модель с цепочками шардов слева и с одной цепочкой, имеющей блоки разделены на куски справа

3.2 Консенсус Сегодня в blockchains преобладают два подхода к консенсусу: самая длинная (или самая тяжелая) цепочка, в которой цепочка с наибольшим количеством работы или доли используемый для его построения, считается каноническим, а BFT, в котором для каждого блока несколько набор validator достигает консенсуса 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) и ДЕДУШКА (см. https:// medium.com/polkadot-network/d08a24a021b5), используемый в Polkadot. Nightshade использует консенсус самой тяжелой цепи. В частности, когда блок производитель производит блок (см. раздел 3.3), он может собирать подписи от другие производители блоков и validator, подтверждающие предыдущий блок. См. раздел 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. Система Proof-of-Stake, это означает, что и производители блоков, и validator имеют некоторое количество внутренних валюта (именуемая «tokens») заблокирована на период времени, намного превышающий время, которое они тратят на выполнение своих обязанностей по построению и проверке цепочки. Как и во всех системах Proof of Stake, не все производители блоков и не все wv validator являются разными объектами, поскольку это невозможно обеспечить. Каждый однако производители блоков w и wv validator имеют отдельные ставка. Система содержит n шардов, в нашей модели n = 1000. Как упоминалось в раздел 3.1, в Nightshade нет цепочек сегментов, вместо этого все производители блоков и validator создают единый blockchain, который мы называем основная цепь. Состояние основной цепи разбито на n шардов, и каждый блок продюсер и validator в любой момент загрузили локально только часть состояние, которое соответствует некоторому подмножеству шардов, и только процесс и проверять транзакции, которые влияют на эти части состояния. Чтобы стать производителем блоков, участник сети блокирует какие-то крупные сумма tokens (ставка). Обслуживание сети осуществляется в эпохи, где эпоха – это период времени порядка дней. Участники с самыми большими ставками в начале определенной эпохи являются блоком продюсеры той эпохи. Каждый производитель блоков назначается шардам SW (скажем, sw = 40, что означает, что sww/n = 4 производителя блоков на шард). Блок продюсер загружает состояние шарда, которому он назначен, до начала эпохи запускается и на протяжении всей эпохи собирает транзакции, влияющие на этот шард, и применяет их к государству. Для каждого блока b в основной цепочке и для каждого шарда s существует один из назначил производителей блоков s, который отвечает за производство части b, связанной с к осколку. Часть b, связанная с шардом s, называется чанком и содержит список транзакций для шарда, которые будут включены в b, а также merkleкорень результирующего состояния. b в конечном итоге будет содержать только очень маленький заголовок чанк, а именно корень Меркла всех примененных транзакций (см. раздел 3.7.1 для получения точных деталей) и корень Меркле конечного состояния. В оставшейся части документа мы часто ссылаемся на производителя блоков. который отвечает за создание чанка в определенное время для определенного шарда в качестве производителя чанка. Производитель чанка всегда является одним из производителей блоков. Производители блоков и производители фрагментов вращают каждый блок в соответствии с по фиксированному графику. Производители блоков имеют заказ и неоднократно производят блоки в таком порядке. Например. если имеется 100 производителей блоков, первый блок производители отвечают за производство блоков 1, 101, 201 и т. д., второй — ответственный за производство 2, 102, 202 и т. д.). Поскольку производство кусков, в отличие от производства блоков, требует поддержания состояние, и для каждого шарда только производители блоков sww/n поддерживают состояние на каждый шард, соответственно, только те производители блоков sww/n вращаются для создания куски. Например. с константами, указанными выше, с четырьмя производителями блоков, назначенными каждый осколок, каждый производитель блоков будет создавать чанки каждые четыре блока. 3.4 Обеспечение доступности данных Чтобы обеспечить доступность данных, мы используем подход, аналогичный подходу Polkadot. описано в разделе 2.5.3. Как только производитель блоков создает чанк, он создает его версия со стирающим кодом с оптимальным (w, ⌊w/6 + 1⌋) блочным кодом кусок. Затем они отправляют один фрагмент фрагмента стирающего кода (мы называем такие фрагменты части фрагмента или только части) каждому производителю блока. Мы вычисляем дерево Меркла, которое содержит все части в виде листьев и заголовок каждого чанка содержит корень Меркла такого дерева. Детали отправляются на validator через сообщения onepart. Каждое такое сообщение содержит заголовок чанка, порядковый номер части и содержимое части. сообщение также содержит подпись производителя блока, создавшего чанк и путь Меркла, чтобы доказать, что часть соответствует заголовку и производится соответствующим производителем блоков. Как только производитель блоков получает блок основной цепи, он сначала проверяет, иметь одночастные сообщения для каждого фрагмента, включенного в блок. Если нет, то блок не обрабатывается до тех пор, пока не будут получены недостающие одночастные сообщения. Как только все одночастные сообщения получены, производитель блока извлекает оставшиеся части от одноранговых узлов и реконструирует фрагменты, для которых они хранятся государство. Производитель блока не обрабатывает блок основной цепи, если хотя бы один раз чанк, включенный в блок, у них нет соответствующего одночастного сообщения, или если хотя бы для одного шарда, для которого они поддерживают состояние, они не могут реконструировать весь кусок. Для того, чтобы конкретный чанк был доступен, достаточно, чтобы ⌊w/6⌋+1 блока продюсеры имеют свои роли и обслуживают их. Таким образом, до тех пор, пока количество злоумышленники не превышают ⌊w/3⌋нет цепочки, имеющей более половины блока производители, создающие его, могут иметь недоступные фрагменты.Рисунок 17: Каждый блок содержит один или ноль фрагментов на каждый сегмент, и каждый блок имеет стирающий код. Каждая часть фрагмента стирающего кода отправляется назначенному заблокировать производителя через специальное одночастное сообщение 3.4.1 Работа с ленивыми производителями блоков Если у производителя блока есть блок, для которого отсутствует одночастное сообщение, он может решить подписаться на него, потому что, если блок окажется в цепочке, он максимизирует вознаграждение для производителя блока. Риска для блока нет. производителя, так как впоследствии невозможно доказать, что у производителя блока не было одночастное сообщение. Чтобы решить эту проблему, мы заставляем каждого производителя чанка при создании чанка выберите цвет (красный или синий) для каждой части будущего закодированного фрагмента и сохраните битовая маска назначенного цвета в фрагменте перед его кодированием. Каждая часть сообщение затем содержит цвет, назначенный детали, и этот цвет используется, когда вычисление корня Меркле закодированных частей. Если производитель чанка отклоняется из протокола это легко доказывается, так как либо корень Меркле не будет соответствуют одночастным сообщениям или цветам одночастных сообщений, которые соответствующие корню Меркла, не будут соответствовать маске в чанк. Когда производитель блока подписывает блок, он включает битовую маску всех красные части они получили за чанки, включенные в блок. Публикация неправильная битовая маска — это поведение, допускающее косую черту. Если производитель блока не получил одночастное сообщение, у них нет возможности узнать цвет сообщения, и таким образом, они имеют 50% шанс быть порезанными, если попытаются вслепую подписать документ. блок. 3,5 Заявление о переходе состояния Производители чанка только выбирают, какие транзакции включать в чанк, но не применяйте переход состояния при создании фрагмента. Соответственно,

заголовок чанка содержит корень Меркла Меркелизованного состояния, как было раньше применяются транзакции в чане. Транзакции применяются только тогда, когда полный блок, включающий фрагмент, обрабатывается. Участник обрабатывает блок только в том случае, если 1. Предыдущий блок получен и обработан; 2. Для каждого фрагмента участник не поддерживает состояние, поскольку у него есть видел одночастное сообщение; 3. Для каждого фрагмента участник сохраняет состояние, поскольку у него есть полный кусок. После обработки блока для каждого шарда, по которому участник поддерживает состояние, они применяют транзакции и вычисляют новое состояние на момент применения транзакций, после чего они готовы производить чанки для следующего блока, если они назначены какому-либо шарду, поскольку у них есть Меркельский корень нового меркелизованного государства. 3.6 Межшардовые транзакции и квитанции Если транзакция должна затронуть более одного шарда, ее необходимо выполнить последовательно. выполняется в каждом шарде отдельно. Полная транзакция отправляется в первый шард затронуты, и как только транзакция будет включена в чанк такого шарда, и применяется после того, как чанк включен в блок, он генерирует так называемую квитанцию транзакция, которая направляется на следующий сегмент, в котором транзакция должна быть быть казнён. Если требуется больше шагов, выполнение транзакции поступления генерирует новую транзакцию получения и так далее. 3.6.1 Срок действия транзакции квитанции Желательно, чтобы транзакция получения применялась в блоке, который следует сразу за блоком, в котором она была сгенерирована. Операция прихода осуществляется только генерируется после того, как предыдущий блок был получен и применен производителями блоков которые поддерживают исходный шард, и должны быть известны к моменту создания чанк для следующего блока создается производителями блоков пункта назначения осколок. Таким образом, квитанция должна быть передана от исходного шарда к целевой осколок за короткий промежуток времени между этими двумя событиями. Пусть A — последний произведенный блок, содержащий транзакцию t, генерирующую квитанцию ​​r. Пусть B будет следующим созданным блоком (т.е. блоком, в котором A является его предыдущий блок), который мы хотим содержать r. Пусть t будет в шарде a, а r будет в осколок б. Срок действия квитанции, также изображенной на рисунке 18, следующий: Изготовление и хранение чеков. Цена за конверсию производителя чанка для шарда a получает блок A, применяет транзакцию t и генерирует квитанцию r. цена за конверсию затем сохраняет все такие полученные квитанции в своем внутреннем постоянном хранилище, проиндексированном по идентификатору исходного шарда.Раздача квитанций. Как только cpa будет готов создать чанк для шард a для блока B, они извлекают все квитанции, сгенерированные применением транзакций из блока A для шарда a, и включают их в чанк для фрагмента a в блоке B. Как только такой фрагмент сгенерирован, cpa создает его код стирания version и все соответствующие одночастные сообщения. cpa знает, какие производители блоков поддерживают полное состояние тех или иных шардов. Для конкретного производителя блоков bp cpa включает поступления, возникшие в результате применения транзакций в блоке А. для шарда a, в котором есть любой из шардов, которые bp считает местом назначения в одночастном сообщении, когда раздавали чанк для шарда a в блоке B (см. рисунок 17, на котором показаны квитанции, включенные в одночастное сообщение). Получение квитанций. Помните, что участники (как производители блоков, так и validators) не обрабатывают блоки, пока не получат одночастные сообщения. для каждого фрагмента, включенного в блок. Таким образом, к тому моменту, когда какой-либо конкретный участник применит блок B, у него будут все одночастные сообщения, соответствующие куски в B, и, таким образом, у них есть все входящие квитанции, содержащие фрагменты участник сохраняет состояние в качестве пункта назначения. При применении переход состояния для конкретного шарда, участник применяет обе расписки которые они собрали для шарда в onepart сообщениях, а также все транзакции, включенные в сам чанк. Рисунок 18: Срок действия транзакции получения 3.6.2 Обработка слишком большого количества квитанций Возможно, что количество квитанций, нацеленных на конкретный шард в конкретный блок слишком велик для обработки. Например, рассмотрим рисунок 19, каждая транзакция в каждом сегменте генерирует квитанцию, предназначенную для сегмента 1. К следующему блоку количество квитанций, которые должен обработать шард 1, равно сопоставимо с нагрузкой, которую все шарды вместе обрабатывали при обработке предыдущий блок.

Рисунок 19: Если все квитанции нацелены на один и тот же сегмент, этот сегмент может не иметь способность их обрабатывать Чтобы решить эту проблему, мы используем технику, аналогичную той, которая использовалась в QuarkChain 9. В частности, для каждого шарда последний блок B и последний шард внутри него блок, из которого были применены поступления, фиксируется. Когда новый осколок созданы, квитанция применяется в порядке очереди от оставшихся осколков в B, а затем в блоках, следующих за B, пока новый чанк не заполнится. В норме обстоятельствах при сбалансированной нагрузке это вообще приведет ко всем поступлениям применяется (и, таким образом, последний осколок последнего блока будет записан для каждый фрагмент), но в периоды, когда нагрузка не сбалансирована и определенный шард получает непропорционально много квитанций, эта техника позволяет им обрабатываться с соблюдением ограничений на количество включенных транзакций. Обратите внимание, что если такая несбалансированная нагрузка сохраняется в течение длительного времени, задержка от создание квитанции до тех пор, пока приложение не сможет продолжать расти бесконечно. Один способ решить эту проблему — отменить любую транзакцию, которая создает квитанцию, нацеленную на осколок, задержка обработки которого превышает некоторую константу (например, одну эпоху). Рассмотрим рисунок 20. К блоку B шард 4 не может обработать все поступления, поэтому он обрабатывает только получение квитанций до сегмента 3 в блоке A, и записывает это. В блок C включены поступления до 5-го шарда в блоке B, и затем к блоку D шард догоняет его, обрабатывая все оставшиеся поступления в блок Б и все поступления из блока С. 3,7 Проверка кусков Чанк, созданный для конкретного шарда (или блок шарда, созданный для конкретной цепочки шардов в модели с цепочками шардов), может быть проверен только 9См. эпизод с доской с QuarkChain здесь: https://www.youtube.com/watch?. v=opEtG6NM4x4, в котором, среди прочего, обсуждается подход к межшардовым транзакциям. вещиРисунок 20: Задержка обработки чеков участники, поддерживающие государство. Это могут быть производители блоков, validators, или просто внешние свидетели, которые загрузили состояние и проверили осколок в где они хранят активы. В этом документе мы предполагаем, что большинство участников не могут хранить состояние для значительной части осколков. Однако стоит упомянуть, что существуют сегментированные blockchain, разработанные с учетом предположения, что большинство участников имеют возможность хранить состояние и проверять большую часть осколки, такие как QuarkChain. Поскольку только часть участников имеет состояние для проверки шарда куски, можно адаптивно испортить только тех участников, у которых есть состояние и применить недопустимый переход между состояниями. Было предложено несколько схем шардинга, в которых каждые несколько раз отбирались validators. дней, а в течение суток любой блок в цепочке шардов, имеющий более 2/3 подписей validators, присвоенных такому шарду, учитывается немедленно окончательный. При таком подходе адаптивному противнику достаточно испортить только 2n/3+1. validator в цепочке сегментов, чтобы применить недопустимый переход состояния, который, хотя это, вероятно, трудно осуществить, уровень безопасности не является достаточным для общественного blockchain. Как обсуждалось в разделе 2.3, общий подход заключается в том, чтобы предоставить определенное окно времени после создания блока для любого участника, у которого есть состояние (независимо от того, является ли он это производитель блока, validator или внешний наблюдатель), чтобы оспорить его достоверность. Таких участников называют Рыбаками. Чтобы рыбак мог оспорить недействительный блок, необходимо убедиться, что такой блок доступен для их. Доступность данных в Nightshade обсуждается в разделе 3.4. В Nightshade после создания блока фрагменты не проверялись кто угодно, кроме фактического производителя фрагментов. В частности, производитель блоков, который предположил, что блок, естественно, не имеет состояния большинства осколков, ине смог проверить фрагменты. Когда создается следующий блок, он содержит подтверждения (см. раздел 3.2) нескольких производителей блоков и validator, но поскольку большинство производителей блоков и validator не поддерживают состояние для большинства шардов блок всего с одним недействительным чанком соберет значительно больше половины аттестаций и продолжит находиться в самом тяжелом состоянии. цепь. Для решения этой проблемы мы разрешаем любому участнику, поддерживающему состояние осколок для отправки запроса в цепочке для любого недопустимого фрагмента, созданного в этом осколок. 3.7.1 Проблема государственной действительности Как только участник обнаруживает, что конкретный фрагмент недействителен, ему необходимо предоставить доказательство того, что этот фрагмент недействителен. Поскольку большинство участников сети не поддерживают состояние шарда, в котором находится недействительный чанк доказательство должно содержать достаточную информацию, чтобы подтвердить, что блок недействителен без наличия гос. Мы устанавливаем ограничение Ls на количество состояний (в байтах), которое может хранить одна транзакция. может кумулятивно читать или писать. Любая транзакция, которая касается более Ls состояние считается недействительным. Помните из раздела 3.5, что чанк в конкретном блоке B содержатся только транзакции, которые необходимо применить, но не новый корень государства. Корнем состояния, включенным в фрагмент блока B, является состояние root перед применением таких транзакций, но после применения транзакций из последний фрагмент того же шарда перед блоком B. Злоумышленник, который желает применить недопустимый переход состояния, будет включать неправильный корень состояния в блоке B, который не соответствует корню состояния, полученному в результате применения транзакции в предыдущем фрагменте. Мы расширяем информацию, которую производитель чанка включает в чанк. Вместо того, чтобы просто включать состояние после применения всех транзакций, вместо этого включает корень состояния после применения каждого непрерывного набора транзакций, которые коллективно читать и записывать Ls байтов состояния. Благодаря этой информации для рыбаку, чтобы создать проблему, что переход между состояниями применяется неправильно. достаточно найти первый такой недопустимый корень состояния и включить только Ls байтов состояния, на которые влияют транзакции между последним корнем состояния (который был действительный) и текущий корень состояния с доказательствами Меркла. Тогда любой участник может проверить транзакции в сегменте и подтвердить, что чанк недействителен. Аналогично, если производитель чанка попытается включить транзакции, которые читают и записать более Ls байт состояния, для вызова достаточно включить первые Ls байтов, которых он касается с помощью доказательств Меркла, которых будет достаточно, чтобы применить транзакции и убедиться, что наступает момент, когда попытка производится чтение или запись содержимого за пределами Ls байт.

3.7.2 Рыбаки и быстрые транзакции между шардами Как обсуждалось в разделе 2.3, если мы предположим, что фрагменты шарда (или шард блоки в модели с цепочками осколков) могут быть недействительными и создавать проблемы период, это отрицательно влияет на завершенность и, следовательно, на межсегментную коммуникацию. В в частности, не может быть определен целевой сегмент любой межсегментной транзакции. исходный фрагмент или блок является окончательным до тех пор, пока период вызова не закончится (см. рисунок 21). Рисунок 21: Ожидание периода вызова перед применением квитанции Способ решения этой проблемы таким образом, чтобы транзакции между сегментами Instantenious означает, что осколок назначения не должен ждать периода вызова. после публикации транзакции исходного сегмента и примените транзакцию получения немедленно, но затем откатите целевой сегмент вместе с исходным шард, если позже исходный чанк или блок оказался недействительным (см. рис. 22). Это очень естественно относится к дизайну Nightshade, в котором осколок цепочки не являются независимыми, вместо этого все фрагменты шардов публикуются. вместе в одном блоке основной цепи. Если какой-либо фрагмент окажется недействительным, весь блок с этим чанком считается недействительным, а все блоки, построенные на самое верхнее. См. рисунок 23. Оба вышеупомянутых подхода обеспечивают атомарность, предполагая, что задача период достаточно длительный. Мы используем последний подход, поскольку обеспечение быстрых перекрестных транзакций в обычных обстоятельствах перевешивает неудобства целевой сегмент откатывается из-за недопустимого перехода состояния в одном из исходные осколки, что является крайне редким событием. 3.7.3 Скрытие validators Наличие проблем уже существенно снижает вероятность адаптивное повреждение, поскольку для завершения фрагмента с недопустимым постом перехода состоянияРисунок 22: Немедленное применение квитанций и откат пункта назначения цепочка, если в исходной цепочке был недопустимый блок Рисунок 23: Испытание рыбака в Nightshade период испытания, который необходим адаптивному противнику, чтобы развратить всех участников которые поддерживают состояние шарда, включая все validator. Оценить вероятность такого события чрезвычайно сложно, поскольку нет sharded blockchain существует достаточно долго, чтобы можно было предпринять попытку такой атаки. Мы утверждаем, что вероятность, хотя и чрезвычайно мала, все же достаточно велика. большой для системы, которая, как ожидается, будет выполнять многомиллионные транзакции и управлять финансовыми операциями по всему миру. Есть две основные причины такого убеждения: 1. Большинство validator цепей Proof-of-Stake и майнеров

Цепочки Proof-of-Work в первую очередь стимулируются финансовым потенциалом. Если адаптивный противник предлагает им больше денег, чем ожидаемая прибыль от честной работы, разумно ожидать, что многие validators примет предложение. 2. Многие организации профессионально проводят проверку цепочек Proof-of-Stake, и ожидается, что большой процент акций в любой цепочке будет от таких субъектов. Число таких объектов достаточно мало для адаптивного противника, чтобы узнать большинство из них лично и получить хорошее понимание своей склонности к развращению. Мы делаем еще один шаг вперед в снижении вероятности адаптивного повреждения, скрывая, какие validator назначены какому шарду. Идея в том, отдаленно похоже на то, как Algorand [5] скрывает validators. Очень важно отметить, что даже если validator скрыты, как в Algorand, или, как описано ниже, адаптивное повреждение теоретически все еще возможно. Пока адаптивный противник не знает участников, которые будут создавать или проверять блок или чанк, участники сами знают, что будут выполнять такую задачу и иметь криптографическое доказательство этого. Таким образом, противник может сообщать о своем намерении совершить коррупцию и платить любому участнику, который предоставит такое криптографическое доказательство. Однако отметим, что, поскольку противник не знать validator, которые назначены на шард, который они хотят повредить, они не имеют другого выбора, кроме как передать свое намерение испортить конкретный осколок все сообщество. В этот момент это экономически выгодно для любого честного участнику развернуть полный узел, который проверяет этот шард, поскольку существует высокая вероятность появления недействительного блока в этом осколке, что дает возможность создайте испытание и получите соответствующую награду. Чтобы не раскрывать validator, назначенные конкретному шарду, мы делаем следующее (см. рисунок 24): Использование VRF для получения задания. В начале каждой эпохи каждый validator использует VRF для получения битовой маски сегментов, которым назначен validator. Битовая маска каждого validator будет иметь биты Sw (определение см. в разделе 3.3). Sw). Затем validator извлекает состояние соответствующих фрагментов и в течение эпохи для каждого полученного блока проверяет соответствующие фрагменты к шардам, которым назначен validator. Подписывайтесь на блоки, а не на куски. Поскольку назначение сегментов скрыто, validator не может подписывать фрагменты. Вместо этого он всегда подписывает всю блокировать, таким образом не раскрывая, какие шарды он проверяет. В частности, когда validator получает блок и проверяет все фрагменты, он либо создает сообщение это свидетельствует о том, что все чанки во всех шардах, которым назначен validator, являются действительным (без указания каким-либо образом, что это за осколки), или сообщение, которое содержит доказательство недопустимого перехода состояния, если какой-либо фрагмент недействителен. См. раздел 3.8 содержит подробную информацию о том, как агрегируются такие сообщения, раздел 3.7.4 — подробности о том, как предотвратить использование validators в сообщениях от другие validator и раздел 3.7.5, где подробно описано, как вознаграждать и наказывать. validators, если действительно произойдет успешный вызов недопустимого перехода состояния.Рисунок 24: Сокрытие validator в Nightshade 3.7.4 Фиксация-Раскрытие Одна из распространенных проблем с validator заключается в том, что validator может пропустить загрузку состояния и фактическую проверку фрагментов и блоков, а вместо этого понаблюдайте за сетью, посмотрите, что отправляют другие validator, и повторите свои сообщения. validator, следующий такой стратегии, не дает никаких дополнительных безопасность сети, но получает вознаграждение. Обычное решение этой проблемы состоит в том, чтобы каждый validator предоставил доказательство. что они действительно проверили блок, например, предоставив уникальную трассировку применения перехода состояний, но такие доказательства значительно увеличивают стоимость проверки. Рисунок 25: Фиксация-раскрытие

Вместо этого мы сначала делаем validator фиксацией результата проверки (либо сообщение, подтверждающее достоверность фрагментов или доказательство недействительности перехода состояния), подождите определенный период и только потом покажите фактический результат проверки, как показано на рисунке 25. Период фиксации не пересекается с период раскрытия, и поэтому ленивый validator не может подражать честным validator. Более того, если нечестный 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. Обратите внимание, что с того момента, как validator раскрывают назначенные им шарды до тех пор, пока не начнется новая эпоха, безопасность системы снижается, поскольку Назначение осколков раскрыто. Участникам сети необходимо его сохранить иметь в виду при использовании сети в течение такого периода. 3,8 Агрегация подписей Чтобы система с сотнями шардов работала безопасно, мы хотим иметь порядка 10 000 или более validators. Как обсуждалось в разделе 3.7, мы хотим, чтобы каждыйРисунок 26: Решение проблемы validator для публикации коммита к определенному сообщению и подписи в среднем один раз за блок. Даже если сообщения о фиксации были одинаковыми, объединение таких BLS-подпись и ее проверка были бы непомерно дорогими. Но естественно, сообщения фиксации и раскрытия не одинаковы для validator, и поэтому нам нужен какой-то способ агрегировать такие сообщения и подписи в способ, позволяющий провести быструю проверку позже. Конкретный подход, который мы используем, заключается в следующем: Валидаторы присоединяются к производителям блоков. Известны производители блоков за некоторое время до начала эпохи, так как им нужно некоторое время, чтобы загрузить состояние до начала эпохи, и в отличие от validators производители блоков не скрыто. Каждый производитель блоков имеет v validator слотов. Валидаторы отправляют оффчейн предложения производителям блоков, чтобы они были включены в качестве одного из их v validatorс. Если производитель блока желает включить validator, он отправляет транзакция, которая содержит первоначальный запрос вне цепочки от validator и подпись производителя блока, которая заставляет validator присоединиться к производителю блока. Обратите внимание, что validator, назначенные производителям блоков, не обязательно проверять те же фрагменты, для которых производитель блоков создает фрагменты. Если validator применяется для объединения нескольких производителей блоков, только транзакция из первый производитель блоков добьется успеха. Производители блоков собирают коммиты. Производитель блоков постоянно собирает сообщения о фиксации и раскрытии от validator. Как только накапливается определенное количество таких сообщений, производитель блока вычисляет коэффициент Меркла. дерево этих сообщений и отправляет каждому validator корень Меркла и merkle путь к их сообщению. validator проверяет путь и регистрируется. корень Меркеля. Затем производитель блока накапливает подпись BLS на корень Меркла из validators и публикует только корень Меркла и накопленная подпись. Производитель блока также подписывает действительность мультиподпись с использованием дешевой подписи ECDSA. Если мультиподпись не соответствует отправленному корню Меркла или битовой маске участвующих validator, это поведение, допускающее косую черту. При синхронизации цепочки участник может выбрать проверку всех подписей BLS из validator (что чрезвычайно дорого, поскольку включает в себя агрегирование открытых ключей validator) или толькоподписи ECDMA от производителей блоков и полагаются на тот факт, что Продюсер блока не подвергся сомнению и не был порезан. Использование внутрисетевых транзакций и доказательств Меркла для решения проблем. Это можно отметить, что нет смысла раскрывать сообщения от validators, если нет Обнаружен недопустимый переход состояния. Только те сообщения, которые содержат реальные доказательства недопустимого перехода состояния должны быть выявлены, и только для таких сообщений необходимо показать, что они соответствуют предыдущему коммиту. Сообщение должно раскрываться с двумя целями: 1. Фактически инициировать откат цепочки к моменту перед недопустимый переход состояния (см. раздел 3.7.5). 2. Чтобы доказать, что validator не пытался подтвердить действительность недействительный фрагмент. В любом случае нам необходимо решить две проблемы: 1. Фактический коммит не был включен в цепочку, только корень Меркла commit в совокупности с другими сообщениями. validator необходимо использовать путь Меркла, предоставленный производителем блока, и их первоначальная фиксация доказать, что они приняли вызов. 2. Возможно, что все validator, назначенные шарду с невалидным переход состояния назначается поврежденным производителям блоков, которые подвергают их цензуре. Чтобы обойти это, мы позволяем им отправлять свои откровения. как обычная транзакция в цепочке и в обход агрегации. Последнее допускается только для доказательств недопустимого перехода состояния, которые крайне редко и, следовательно, не должно приводить к спаму блоков. Последний вопрос, который необходимо решить, заключается в том, что производители блоков могут отказаться от участия в агрегировании сообщений или намеренно подвергать цензуре отдельные validator. Мы делаем это экономически невыгодным, делая блок вознаграждение производителя, пропорциональное количеству назначенных ему validators. Мы также обратите внимание, что поскольку производители блоков между эпохами во многом пересекаются (поскольку это всегда лучшие участники с самой высокой ставкой), validators могут в основном придерживаться работы с одними и теми же производителями блоков и тем самым снизить риск о том, что их назначили производителю блоков, который подвергал их цензуре в прошлом. 3,9 Цепочка снимков Поскольку блоки в основной цепочке производятся очень часто, загрузка полная история может очень быстро стать дорогой. Более того, поскольку каждый блок содержит BLS-подпись большого количества участников, просто агрегирование открытых ключей для проверки подписи может стать непомерно высоким к тому же дорого. Наконец, поскольку в обозримом будущем Ethereum 1.0, скорее всего, так и останется из наиболее часто используемых blockchain, имеющих смысловой способ передачи активов из

Требуется близко к Ethereum, и сегодня проверка подписей BLS для обеспечения Действие ближних блоков на стороне Ethereum невозможно. Каждый блок в основной цепочке Nightshade может опционально содержать блок Шнорра. мультиподпись в заголовке последнего блока, в котором был такой Шнорр мультиподпись. Мы называем такие блоки блоками моментальных снимков. Самый первый блок каждая эпоха должна быть блоком моментального снимка. Работая над такой мультиподписью, производители блоков также должны накопить подписи BLS validator. в последнем блоке моментальных снимков и агрегируем их так же, как описано в разделе раздел 3.8. Поскольку набор производителей блоков постоянен на протяжении всей эпохи, проверка достаточно только первых блоков снимков в каждой эпохе, предполагая, что ни в одном случае указывает на то, что большой процент производителей блоков и validators вступили в сговор и создали вилка. Первый блок эпохи должен содержать информацию, достаточную для вычисления производители блоков и validators для эпохи. Мы вызываем подцепь основной цепочки, которая содержит только снимок. блокирует цепочку снимков. Создание мультиподписи Шнорра — интерактивный процесс, но поскольку мы только нужно выполнять его нечасто, любой, даже самый неэффективный процесс будет достаточно. Мультиподписи Шнорра можно легко проверить на Ethereum, тем самым предоставляя важные примитивы для безопасного выполнения перекрестного blockchain общение. Для синхронизации с цепочкой Near достаточно скачать весь снимок блоков и подтвердите правильность подписей Шнорра (при необходимости также проверьте отдельные подписи BLS validator), а затем только синхронизируйте блоки основной цепочки из последнего блока моментального снимка.

Nightshade

3.1 จากเศษโซ่เป็นเศษชิ้นส่วน รูปแบบการแบ่งส่วนที่มีการแบ่งส่วนและห่วงโซ่บีคอนนั้นทรงพลังมาก มีความซับซ้อนบางอย่าง โดยเฉพาะอย่างยิ่ง กฎการเลือกทางแยกจำเป็นต้องได้รับการดำเนินการ ในแต่ละโซ่แยกกัน กฎการเลือกส้อมในโซ่ชิ้นส่วนและบีคอน โซ่จะต้องสร้างต่างกันและทดสอบแยกกัน ใน Nightshade เราจำลองระบบเป็น blockchain เดียว ซึ่งแต่ละอัน block มีธุรกรรมทั้งหมดสำหรับ shards ทั้งหมดอย่างมีเหตุผล และทำการเปลี่ยนแปลง สภาพสมบูรณ์ของเศษทั้งหมด อย่างไรก็ตาม โดยทางกายภาพแล้ว ไม่มีผู้เข้าร่วมดาวน์โหลดไฟล์ สถานะเต็มหรือบล็อกลอจิคัลเต็ม แทนผู้เข้าร่วมแต่ละคนในเครือข่ายเท่านั้น รักษาสถานะที่สอดคล้องกับส่วนย่อยที่พวกเขาตรวจสอบธุรกรรม และรายการธุรกรรมทั้งหมดในบล็อกจะถูกแบ่งออกเป็นทางกายภาพ ชิ้นละหนึ่งชิ้น ภายใต้สภาวะที่เหมาะสม แต่ละบล็อกจะมีหนึ่งชิ้นต่อส่วนต่อชิ้น บล็อกซึ่งสอดคล้องกับโมเดลที่มีโซ่ชาร์ดโดยประมาณซึ่ง โซ่ชิ้นส่วนสร้างบล็อกด้วยความเร็วเท่ากับห่วงโซ่บีคอน อย่างไรก็ตาม เนื่องจากความล่าช้าของเครือข่าย ชิ้นส่วนบางส่วนอาจหายไป ดังนั้นในทางปฏิบัติแต่ละบล็อก มีหนึ่งหรือเป็นศูนย์ชิ้นต่อชาร์ด ดูหัวข้อ 3.3 สำหรับรายละเอียดเกี่ยวกับวิธีการ มีการผลิตบล็อก รูปที่ 16: โมเดลที่มีโซ่ชิ้นส่วนอยู่ทางด้านซ้ายและมีโซ่เส้นเดียว บล็อกแบ่งออกเป็นชิ้นทางด้านขวา

3.2 ฉันทามติ แนวทางที่โดดเด่นสองประการต่อฉันทามติใน blockchains ในปัจจุบันคือ โซ่ที่ยาวที่สุด (หรือหนักที่สุด) ซึ่งเป็นโซ่ที่มีงานหรือเดิมพันมากที่สุด ใช้ในการสร้างจะถือว่าเป็นที่ยอมรับและ BFT ซึ่งในบางบล็อกสำหรับแต่ละบล็อก ชุดของ validators บรรลุความเห็นพ้องต้องกันของ BFT ในระเบียบการที่เสนอเมื่อเร็วๆ นี้ วิธีหลังเป็นแนวทางที่โดดเด่นกว่า เนื่องจากมันให้ผลลัพธ์ทันที ในขณะที่ห่วงโซ่ที่ยาวที่สุดจำเป็นต้องมีบล็อคมากขึ้น ที่จะสร้างขึ้นบนบล็อกเพื่อให้แน่ใจว่าขั้นสุดท้าย มักจะมีความหมาย การรักษาความปลอดภัยคือเวลาที่ต้องใช้ในการสร้างบล็อกให้เพียงพอ ลำดับชั่วโมง การใช้ BFT ฉันทามติในแต่ละบล็อกก็มีข้อเสียเช่นกัน เช่น: 1. BFT ฉันทามติเกี่ยวข้องกับการสื่อสารในปริมาณมาก ในขณะที่ ความก้าวหน้าล่าสุดทำให้สามารถบรรลุฉันทามติได้ในเวลาเชิงเส้นเป็นจำนวน ของผู้เข้าร่วม (ดูเช่น [4]) ยังคงมองเห็นค่าใช้จ่ายต่อบล็อกได้ชัดเจน 2. เป็นไปไม่ได้ที่ผู้เข้าร่วมเครือข่ายทั้งหมดจะเข้าร่วมใน BFT ฉันทามติต่อบล็อก ดังนั้นโดยปกติแล้วมีเพียงกลุ่มย่อยที่สุ่มตัวอย่างเท่านั้นถึงฉันทามติ โดยหลักการแล้ว ชุดสุ่มตัวอย่างสามารถ เสียหายแบบปรับตัวได้ และในทางทฤษฎีก็สามารถสร้างทางแยกได้ ระบบ จำเป็นต้องมีการสร้างแบบจำลองเพื่อให้พร้อมสำหรับเหตุการณ์ดังกล่าวและยังคงเป็นเช่นนั้น มีกฎ fork-choice นอกเหนือจากมติ BFT หรือได้รับการออกแบบให้ปิด ลงในเหตุการณ์ดังกล่าว เป็นมูลค่าการกล่าวขวัญว่าการออกแบบบางอย่างเช่น Algorand [5] ลดความน่าจะเป็นของความเสียหายแบบปรับตัวได้อย่างมาก 3. ที่สำคัญที่สุด ระบบจะหยุดทำงานหาก 1 3 คนขึ้นไปจากผู้เข้าร่วมทั้งหมด ออฟไลน์ ดังนั้นความผิดพลาดของเครือข่ายชั่วคราวหรือการแยกเครือข่ายอาจทำให้ระบบหยุดชะงักได้อย่างสมบูรณ์ ตามหลักการแล้วระบบจะต้องสามารถดำเนินการต่อไปได้ ดำเนินการตราบเท่าที่ผู้เข้าร่วมอย่างน้อยครึ่งหนึ่งออนไลน์อยู่ (หนักที่สุด โปรโตคอลแบบลูกโซ่ยังคงทำงานต่อไปแม้ว่าผู้เข้าร่วมน้อยกว่าครึ่งหนึ่งจะออนไลน์ แต่ความปรารถนาของคุณสมบัตินี้เป็นที่ถกเถียงกันมากกว่า ภายในชุมชน) โมเดลไฮบริดที่ใช้ฉันทามติถือเป็นรุ่นที่หนักที่สุด แต่บางบล็อกจะได้รับการสรุปเป็นระยะโดยใช้อุปกรณ์ BFT finality โดยจะรักษาข้อดีของทั้งสองรุ่นไว้ 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ดูเซสชันไวท์บอร์ดกับ Justin Drake เพื่อรับทราบภาพรวมเชิงลึกของ Casper FFG และวิธีรวมเข้ากับฉันทามติของ GHOST chain ที่หนักที่สุดที่นี่: 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 ระบบนี้เป็น Proof-of-Stake หมายความว่าทั้งผู้ผลิตบล็อกและ validators มีจำนวนภายในจำนวนหนึ่ง สกุลเงิน (เรียกว่า ”tokens”) ถูกล็อคเป็นระยะเวลาเกินกว่า เวลาที่พวกเขาใช้ในการปฏิบัติหน้าที่ในการสร้างและตรวจสอบห่วงโซ่ เช่นเดียวกับระบบ Proof of Stake ทั้งหมด ไม่ใช่ทุก w ที่บล็อกผู้ผลิตและไม่ใช่ wv validators ทั้งหมดเป็นเอนทิตีที่แตกต่างกัน เนื่องจากไม่สามารถบังคับใช้ได้ แต่ละ ของ w บล็อกโปรดิวเซอร์และ wv validators มีการแยกกัน สัดส่วนการถือหุ้น ระบบมี n ชาร์ด n = 1,000 ในโมเดลของเรา ดังที่กล่าวไว้ใน ส่วนที่ 3.1 ใน Nightshade นั้นไม่มี shard chains แต่ผู้สร้างบล็อกทั้งหมดและ validators กำลังสร้าง blockchain เดียว ที่เราเรียกว่า ห่วงโซ่หลัก สถานะของห่วงโซ่หลักแบ่งออกเป็น n ส่วนและแต่ละบล็อก โปรดิวเซอร์และ validator ดาวน์โหลดเฉพาะชุดย่อยในเครื่องเท่านั้น สถานะที่สอดคล้องกับเซตย่อยบางส่วนของชาร์ด และประมวลผลและเท่านั้น ตรวจสอบธุรกรรมที่ส่งผลกระทบต่อส่วนเหล่านั้นของรัฐ ในการเป็นผู้ผลิตบล็อก ผู้เข้าร่วมเครือข่ายจะต้องล็อกกลุ่มใหญ่ไว้บางส่วน จำนวน tokens (เงินเดิมพัน) การบำรุงรักษาเครือข่ายเสร็จสิ้นในยุค โดยที่ยุคคือช่วงเวลาหนึ่งตามลำดับวัน ผู้เข้าร่วม โดยเดิมพันที่ใหญ่ที่สุดในช่วงเริ่มต้นของยุคหนึ่งๆ ก็คือบล็อก ผู้ผลิตในยุคนั้น ผู้ผลิตบล็อกแต่ละคนถูกกำหนดให้ sw shards (เช่น sw = 40 ซึ่งจะทำให้ sww/n = 4 ผู้ผลิตบล็อกต่อชาร์ด) บล็อก โปรดิวเซอร์จะดาวน์โหลดสถานะของส่วนแบ่งข้อมูลที่ได้รับมอบหมายก่อนยุคสมัย เริ่มต้นและตลอดยุคสมัยจะรวบรวมธุรกรรมที่ส่งผลกระทบต่อชิ้นส่วนนั้น และนำไปประยุกต์ใช้กับรัฐ สำหรับแต่ละบล็อก b บนเชนหลัก และสำหรับทุก ๆ เศษ จะมีหนึ่งในนั้น มอบหมายให้ผู้ผลิตบล็อกเป็นผู้รับผิดชอบในการผลิตชิ้นส่วนที่เกี่ยวข้องกับข ไปที่เศษ ส่วนของ b ที่เกี่ยวข้องกับชาร์ด s เรียกว่า chunk และมี รายการธุรกรรมสำหรับชาร์ดที่จะรวมอยู่ใน b เช่นเดียวกับ merkleรากของสถานะผลลัพธ์ b ในที่สุดจะมีส่วนหัวที่เล็กมากเท่านั้น ส่วนนั้นคือราก Merkle ของธุรกรรมที่ใช้ทั้งหมด (ดูหัวข้อ 3.7.1 สำหรับรายละเอียดที่แน่นอน) และรากเหง้าของสภาวะสุดท้าย ตลอดส่วนที่เหลือของเอกสาร เรามักจะอ้างถึงผู้สร้างบล็อก ที่รับผิดชอบในการผลิตชิ้นส่วนในช่วงเวลาหนึ่งสำหรับชิ้นส่วนเฉพาะ ในฐานะผู้ผลิตก้อน ผู้ผลิตก้อนมักจะเป็นหนึ่งในผู้ผลิตบล็อกเสมอ ผู้ผลิตบล็อกและผู้ผลิตก้อนจะหมุนเวียนแต่ละบล็อกตาม ให้มีกำหนดเวลาที่แน่นอน ผู้ผลิตบล็อกมีการสั่งซื้อและผลิตซ้ำหลายครั้ง บล็อกตามลำดับนั้น เช่น หากมีผู้ผลิตบล็อก 100 ราย บล็อกแรก ผู้ผลิตมีหน้าที่ผลิตบล็อก 1, 101, 201 ฯลฯ ประการที่สองคือ รับผิดชอบในการผลิต 2, 102, 202 ฯลฯ) เนื่องจากการผลิตแบบก้อนนั้นต่างจากการผลิตแบบบล็อกซึ่งต้องมีการบำรุงรักษา สถานะและสำหรับแต่ละส่วนเฉพาะผู้ผลิตบล็อก sww/n เท่านั้นที่จะรักษาสถานะ ต่อชิ้นส่วน เฉพาะผู้ผลิตบล็อก sw/n เหล่านั้นเท่านั้นที่หมุนเพื่อสร้าง ชิ้น เช่น ด้วยค่าคงที่ข้างต้นโดยมีผู้ผลิตบล็อกสี่รายที่ได้รับมอบหมายให้ แต่ละชิ้นส่วน ผู้ผลิตบล็อกแต่ละรายจะสร้างชิ้นส่วนทุกๆ สี่บล็อก 3.4 รับรองความพร้อมใช้งานของข้อมูล เพื่อให้แน่ใจว่าข้อมูลมีความพร้อมใช้งาน เราใช้วิธีการที่คล้ายคลึงกับ Polkadot อธิบายไว้ในส่วน 2.5.3 เมื่อผู้ผลิตบล็อกสร้างชิ้นส่วนขึ้นมา พวกเขาก็จะสร้าง เวอร์ชันที่เข้ารหัสการลบด้วยโค้ดบล็อกที่เหมาะสมที่สุด (w, ⌊w/6 + 1⌋) ของ ก้อน จากนั้นพวกเขาก็ส่งชิ้นส่วนที่มีรหัสการลบออกหนึ่งชิ้น (เราเรียกว่าชิ้นส่วนดังกล่าว ชิ้นหรือเพียงบางส่วน) ให้กับผู้ผลิตบล็อกแต่ละราย เราคำนวณต้นไม้เมอร์เคิลที่มีส่วนต่างๆ ทั้งหมดเป็นใบ และ ส่วนหัวของแต่ละชิ้นมีราก Merkle ของต้นไม้ดังกล่าว ชิ้นส่วนจะถูกส่งไปยัง validators ผ่านข้อความส่วนหนึ่ง แต่ละข้อความดังกล่าว ประกอบด้วยส่วนหัวของชิ้นส่วน ลำดับของชิ้นส่วน และเนื้อหาชิ้นส่วน ที่ ข้อความยังมีลายเซ็นของผู้ผลิตบล็อกที่ผลิต chunk และเส้นทาง Merkle เพื่อพิสูจน์ว่าส่วนนั้นสอดคล้องกับส่วนหัว และผลิตโดยผู้ผลิตบล็อกที่เหมาะสม เมื่อผู้ผลิตบล็อกได้รับบล็อกลูกโซ่หลักแล้ว พวกเขาจะต้องตรวจสอบก่อนว่าตนได้รับหรือไม่ มีข้อความส่วนหนึ่งสำหรับแต่ละอันที่รวมอยู่ในบล็อก ถ้าไม่ใช่ก็บล็อก จะไม่ถูกประมวลผลจนกว่าจะเรียกค้นข้อความส่วนหนึ่งที่หายไป เมื่อได้รับข้อความทั้งหมดแล้ว ผู้ผลิตบล็อกจะดึงข้อมูล ส่วนที่เหลือจากเพื่อนและสร้างชิ้นส่วนที่พวกเขาถือไว้ใหม่ รัฐ ผู้ผลิตบล็อกไม่ประมวลผลบล็อกลูกโซ่หลักหากมีอย่างน้อยหนึ่งรายการ chunk ที่รวมอยู่ในบล็อกนั้นไม่มีข้อความส่วนหนึ่งที่สอดคล้องกัน หรือหากอย่างน้อยหนึ่งส่วนที่พวกเขารักษาสถานะไว้ก็ไม่สามารถทำได้ สร้างชิ้นส่วนทั้งหมดขึ้นมาใหม่ เพื่อให้ก้อนใดก้อนหนึ่งพร้อมใช้งาน มันก็เพียงพอแล้วที่ ⌊w/6⌋+1 ของบล็อก ผู้ผลิตมีส่วนของตนและให้บริการ ดังนั้นตราบเท่าที่จำนวน นักแสดงที่เป็นอันตรายไม่เกิน ⌊w/3⌋no chain ที่มีมากกว่าครึ่งบล็อก ผู้ผลิตที่สร้างมันขึ้นมาอาจมีชิ้นส่วนที่ไม่พร้อมใช้งานได้รูปที่ 17: แต่ละบล็อกประกอบด้วยหนึ่งหรือศูนย์ชิ้นต่อชิ้นส่วน และแต่ละชิ้น มีการเข้ารหัสการลบข้อมูล แต่ละส่วนของชิ้นส่วนที่มีรหัสการลบจะถูกส่งไปยังสถานที่ที่กำหนด ผู้ผลิตบล็อกผ่านข้อความพิเศษ onepart 3.4.1 การจัดการกับผู้ผลิตบล็อกขี้เกียจ หากผู้ผลิตบล็อกมีบล็อกที่ข้อความส่วนหนึ่งหายไป อาจเลือกที่จะยังคงลงชื่อเข้าใช้อยู่ เพราะหากบล็อกจบลงด้วยการถูกลูกโซ่ จะเพิ่มรางวัลสูงสุดให้กับผู้ผลิตบล็อก ไม่มีความเสี่ยงสำหรับการบล็อก ผู้ผลิตเนื่องจากเป็นไปไม่ได้ที่จะพิสูจน์ในภายหลังว่าผู้ผลิตบล็อกไม่มี ข้อความส่วนหนึ่ง เพื่อแก้ไขปัญหาดังกล่าว เราจึงสร้างผู้สร้างแต่ละชิ้นเมื่อสร้างชิ้นส่วนนั้น เลือกสี (สีแดงหรือสีน้ำเงิน) สำหรับแต่ละส่วนของชิ้นส่วนที่เข้ารหัสในอนาคต และจัดเก็บ บิตมาสก์ของสีที่กำหนดในกลุ่มก่อนที่จะเข้ารหัส แต่ละอัน ข้อความจะมีสีที่กำหนดให้กับชิ้นส่วน และใช้สีเมื่อใด คำนวณราก Merkle ของส่วนที่เข้ารหัส หากผู้ผลิตก้อนเบี่ยงเบน จากโปรโตคอล มันสามารถพิสูจน์ได้อย่างง่ายดาย เนื่องจากราก Merkle ทั้งสองจะไม่ทำเช่นนั้น ตรงกับข้อความส่วนหนึ่งหรือสีในข้อความส่วนหนึ่งนั้น ตรงกับรากเมิร์เคิลจะไม่ตรงกับมาส์กในก้อน เมื่อผู้ผลิตบล็อกลงนามในบล็อก พวกเขารวมบิตมาสก์ของทั้งหมดด้วย ชิ้นส่วนสีแดงที่พวกเขาได้รับสำหรับชิ้นส่วนที่รวมอยู่ในบล็อก การเผยแพร่ บิตมาสก์ที่ไม่ถูกต้องเป็นพฤติกรรมที่เฉือนได้ หากผู้ผลิตบล็อกไม่ได้รับ ข้อความเพียงส่วนเดียว พวกเขาไม่มีทางรู้สีของข้อความได้ และ จึงมีโอกาส 50% ที่จะถูกเฉือนหากพวกเขาพยายามเซ็นชื่อโดยไม่ตั้งใจ บล็อก 3.5 ใบสมัครเปลี่ยนสถานะ ผู้ผลิตก้อนจะเลือกเฉพาะธุรกรรมที่จะรวมไว้ในก้อนเท่านั้น อย่าใช้การเปลี่ยนสถานะเมื่อมันสร้างก้อน ตามลำดับ

ส่วนหัวของก้อนประกอบด้วยรากแบบ Merkle ของสถานะแบบ Merkelized เมื่อก่อน ธุรกรรมในกลุ่มจะถูกนำไปใช้ ธุรกรรมจะถูกใช้เฉพาะเมื่อบล็อกเต็มที่มีส่วนรวมอยู่ด้วย ได้รับการประมวลผล ผู้เข้าร่วมจะประมวลผลบล็อกก็ต่อเมื่อ 1. ได้รับและประมวลผลบล็อกก่อนหน้าแล้ว 2. สำหรับแต่ละกลุ่ม ผู้เข้าร่วมจะไม่รักษาสถานะตามที่ตนมีอยู่ เห็นข้อความส่วนหนึ่ง 3. สำหรับแต่ละชิ้นส่วน ผู้เข้าร่วมจะคงสถานะตามที่พวกเขามีอยู่ เต็มชิ้น เมื่อบล็อกได้รับการประมวลผล สำหรับแต่ละชิ้นส่วนที่ผู้เข้าร่วมได้รับ รักษาสถานะไว้เพื่อใช้ธุรกรรมและคำนวณสถานะใหม่ หลังจากทำรายการแล้วจึงพร้อมดำเนินการ ชิ้นส่วนสำหรับบล็อกถัดไป หากถูกกำหนดให้กับชิ้นส่วนใดๆ เนื่องจากพวกเขามี รากเมิร์เคิลของสภาวะเมอร์เคิลไลซ์ใหม่ 3.6 ธุรกรรมและใบเสร็จรับเงินข้ามส่วน หากธุรกรรมจำเป็นต้องส่งผลกระทบมากกว่าหนึ่งส่วน จะต้องต่อเนื่องกัน ดำเนินการในแต่ละส่วนแยกกัน ธุรกรรมทั้งหมดจะถูกส่งไปยังชาร์ดแรก ได้รับผลกระทบ และเมื่อธุรกรรมถูกรวมไว้ในส่วนของชิ้นส่วนดังกล่าว และ ถูกใช้หลังจากที่รวมชิ้นส่วนไว้ในบล็อกแล้ว มันจะสร้างสิ่งที่เรียกว่าใบเสร็จรับเงิน ธุรกรรมที่ถูกส่งไปยังส่วนถัดไปที่ธุรกรรมจำเป็นต้องทำ ถูกประหารชีวิต หากต้องการขั้นตอนเพิ่มเติม การดำเนินการธุรกรรมการรับสินค้า สร้างธุรกรรมการรับสินค้าใหม่เป็นต้น 3.6.1 อายุการใช้งานธุรกรรมการรับ เป็นที่พึงประสงค์ว่ามีการใช้ธุรกรรมการรับสินค้าในบล็อกที่ตามหลังบล็อกที่สร้างขึ้นทันที การทำรายการรับเงินเท่านั้น สร้างขึ้นหลังจากได้รับบล็อกก่อนหน้าและนำไปใช้โดยผู้ผลิตบล็อก ที่รักษาชิ้นส่วนต้นกำเนิดไว้ และจำเป็นต้องทราบเมื่อถึงเวลานั้น ชิ้นสำหรับบล็อกถัดไปผลิตโดยผู้ผลิตบล็อกของปลายทาง เศษ ดังนั้นใบเสร็จรับเงินจะต้องได้รับการสื่อสารจากชาร์ดต้นทางไปยัง ชิ้นส่วนปลายทางในช่วงเวลาอันสั้นระหว่างทั้งสองเหตุการณ์ ให้ A เป็นบล็อกที่ผลิตครั้งสุดท้ายซึ่งมีธุรกรรม t ที่สร้างใบเสร็จรับเงิน r ให้ B เป็นบล็อกที่ผลิตถัดไป (เช่น บล็อกที่มี A เป็น บล็อกก่อนหน้า) ที่เราต้องการมี r อย่าให้อยู่ในชาร์ด a และ r เลย ในเศษข อายุการใช้งานของใบเสร็จรับเงิน ซึ่งแสดงไว้ในรูปที่ 18 ก็มีดังต่อไปนี้: จัดทำและจัดเก็บใบเสร็จรับเงิน CPA ของผู้ผลิตก้อนสำหรับชาร์ด a รับบล็อก A ใช้ธุรกรรม t และสร้างใบเสร็จรับเงิน r ผู้สอบบัญชีรับอนุญาต จากนั้นจัดเก็บใบเสร็จรับเงินที่ผลิตดังกล่าวทั้งหมดไว้ในที่เก็บข้อมูลถาวรภายในที่จัดทำดัชนีไว้ ตามรหัสชาร์ดแหล่งที่มาแจกจ่ายใบเสร็จรับเงิน เมื่อ cpa พร้อมที่จะผลิตก้อนสำหรับ shard a สำหรับบล็อก B พวกเขาดึงข้อมูลใบเสร็จรับเงินทั้งหมดที่สร้างขึ้นโดยการใช้ธุรกรรมจากบล็อก A สำหรับ shard a และรวมไว้ใน chunk สำหรับ shrad a ในบล็อก B เมื่อสร้างชิ้นส่วนดังกล่าวแล้ว cpa จะสร้างรหัสการลบข้อมูล เวอร์ชันและข้อความส่วนหนึ่งที่เกี่ยวข้องทั้งหมด cpa รู้ว่าผู้ผลิตบล็อกรายใดรักษาสถานะเต็มสำหรับชิ้นส่วนใด สำหรับผู้ผลิตบล็อกโดยเฉพาะ bp cpa รวมใบเสร็จรับเงินที่เกิดจากการใช้ธุรกรรมในบล็อก A สำหรับชาร์ด a ที่มีชาร์ดใดๆ ที่ bp ใส่ใจเป็นจุดหมายปลายทาง ในข้อความส่วนหนึ่งเมื่อพวกเขาแจกจ่ายชิ้นส่วน A ในบล็อก B (ดูรูปที่ 17 ซึ่งแสดงใบเสร็จรับเงินที่รวมอยู่ในข้อความส่วนหนึ่ง) การรับใบเสร็จรับเงิน โปรดจำไว้ว่าผู้เข้าร่วม (ทั้งผู้สร้างบล็อกและ validators) จะไม่ประมวลผลบล็อกจนกว่าพวกเขาจะมีข้อความเพียงส่วนเดียว สำหรับแต่ละชิ้นที่รวมอยู่ในบล็อก ดังนั้น เมื่อถึงเวลาที่ผู้เข้าร่วมคนใดคนหนึ่งใช้บล็อก B พวกเขาก็จะมีข้อความส่วนหนึ่งทั้งหมดที่ตรงกัน ชิ้นใน B และด้วยเหตุนี้พวกมันจึงมีใบเสร็จรับเงินขาเข้าทั้งหมดที่มีเศษชิ้นส่วน ผู้เข้าร่วมรักษาสถานะไว้เป็นจุดหมายปลายทาง เมื่อสมัคร การเปลี่ยนสถานะสำหรับชิ้นส่วนเฉพาะ ผู้เข้าร่วมจะใช้ทั้งใบเสร็จรับเงิน ที่พวกเขารวบรวมไว้เป็นเศษข้อความในข้อความเดียวและทั้งหมด ธุรกรรมที่รวมอยู่ในก้อนนั้นเอง รูปที่ 18: อายุของธุรกรรมการรับสินค้า 3.6.2 การจัดการใบเสร็จรับเงินมากเกินไป เป็นไปได้ว่าจำนวนใบเสร็จรับเงินที่กำหนดเป้าหมายไปยังส่วนข้อมูลเฉพาะใน บล็อกใดบล็อกหนึ่งมีขนาดใหญ่เกินกว่าจะประมวลผลได้ ตัวอย่างเช่น ลองพิจารณารูปที่ 19 ใน ซึ่งแต่ละธุรกรรมในแต่ละชาร์ดจะสร้างใบเสร็จรับเงินที่กำหนดเป้าหมายชาร์ด 1 ในบล็อกถัดไป จำนวนใบเสร็จรับเงินที่ชาร์ด 1 ต้องดำเนินการคือ เทียบได้กับโหลดที่ชิ้นส่วนทั้งหมดรวมกันในการประมวลผลขณะจัดการ บล็อกก่อนหน้า

รูปที่ 19: หากใบเสร็จรับเงินทั้งหมดมุ่งเป้าไปที่ชาร์ดเดียวกัน ชาร์ดนั้นอาจไม่มี ความสามารถในการประมวลผล เพื่อแก้ไขปัญหานี้ เราใช้เทคนิคที่คล้ายกับที่ใช้ใน QuarkChain 9 โดยเฉพาะสำหรับแต่ละชิ้นส่วน บล็อก B สุดท้ายและชิ้นส่วนสุดท้ายภายในนั้น บล็อกที่ใช้ใบเสร็จรับเงินจะถูกบันทึก เมื่อเศษใหม่เป็น สร้างขึ้น ใบเสร็จรับเงินจะถูกนำไปใช้ตามลำดับแรกจากเศษที่เหลือใน B จากนั้นในบล็อกที่ตาม B จนกว่าก้อนใหม่จะเต็ม ภายใต้สภาวะปกติ สถานการณ์ที่มีภาระสมดุล โดยทั่วไปจะส่งผลให้ใบเสร็จรับเงินทั้งหมด ถูกนำมาใช้ (และดังนั้นชิ้นส่วนสุดท้ายของบล็อกสุดท้ายจะถูกบันทึกไว้ แต่ละชิ้น) แต่ในช่วงเวลาที่ภาระไม่สมดุลและเป็นช่วงเฉพาะ เศษได้รับใบเสร็จรับเงินจำนวนมากอย่างไม่เป็นสัดส่วน เทคนิคนี้ช่วยให้สามารถรับได้ ได้รับการประมวลผลโดยคำนึงถึงขีดจำกัดของจำนวนธุรกรรมที่รวมอยู่ โปรดทราบว่าหากโหลดที่ไม่สมดุลดังกล่าวคงอยู่เป็นเวลานาน ความล่าช้าจะเกิดขึ้นจาก การสร้างใบเสร็จรับเงินจนกว่าใบสมัครจะเติบโตต่อไปอย่างไม่มีกำหนด หนึ่ง วิธีแก้ไขคือยกเลิกธุรกรรมใดๆ ที่สร้างใบเสร็จรับเงินที่กำหนดเป้าหมาย ชิ้นส่วนที่มีความล่าช้าในการประมวลผลซึ่งเกินค่าคงที่บางอย่าง (เช่น หนึ่งยุค) พิจารณารูปที่ 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 ที่ไม่ตรงกับสถานะรากที่เป็นผลมาจากการสมัคร ธุรกรรมในส่วนก่อนหน้า เราขยายข้อมูลที่ผู้ผลิตก้อนรวมไว้ในก้อนนั้น แทนที่จะรวมสถานะหลังจากใช้ธุรกรรมทั้งหมดแทน รวมสถานะรูทหลังจากใช้ชุดธุรกรรมที่ต่อเนื่องกันแต่ละชุด อ่านและเขียน Ls ไบต์ของรัฐร่วมกัน ด้วยข้อมูลนี้สำหรับ ชาวประมงสร้างความท้าทายว่าการเปลี่ยนสถานะถูกนำไปใช้อย่างไม่ถูกต้องนั่นเอง เพียงพอที่จะค้นหารากสถานะที่ไม่ถูกต้องตัวแรกและรวมเพียง Ls ไบต์ของ สถานะที่ได้รับผลกระทบจากธุรกรรมระหว่างรูตสถานะสุดท้าย (ซึ่งก็คือ ถูกต้อง) และรูตสถานะปัจจุบันพร้อมหลักฐาน Merkle แล้วผู้เข้าร่วมคนใด สามารถตรวจสอบการทำธุรกรรมในส่วนและยืนยันว่าเป็นก้อน ไม่ถูกต้อง ในทำนองเดียวกัน หาก chunk โปรดิวเซอร์พยายามรวมธุรกรรมที่อ่านไว้ และเขียนมากกว่า Ls ไบต์ของ state สำหรับความท้าทายก็เพียงพอแล้วที่จะรวมไว้ ไบต์ Ls แรกที่สัมผัสกับ Merkle Proofs ซึ่งจะเพียงพอแล้ว ใช้ธุรกรรมและยืนยันว่ามีช่วงเวลาที่พยายามจะทำ อ่านหรือเขียนเนื้อหาเกิน Ls ไบต์

3.7.2 ชาวประมงและการทำธุรกรรมข้ามส่วนที่รวดเร็ว ตามที่กล่าวไว้ในหัวข้อ 2.3 เมื่อเราถือว่าชิ้นส่วนนั้น (หรือ shard บล็อกในโมเดลที่มีชาร์ดเชน) อาจไม่ถูกต้องและทำให้เกิดความท้าทายได้ มันจะส่งผลเสียต่อจุดสิ้นสุดและทำให้เกิดการสื่อสารข้ามส่วน ใน โดยเฉพาะอย่างยิ่ง ชิ้นส่วนปลายทางของการทำธุรกรรมข้ามส่วนใดๆ ไม่สามารถแน่นอนได้ ชิ้นส่วนหรือบล็อกต้นกำเนิดจะถือเป็นที่สิ้นสุดจนกว่าระยะเวลาการท้าทายจะสิ้นสุดลง (ดูรูปที่ 21) รูปที่ 21: รอช่วงท้าทายก่อนที่จะสมัครใบเสร็จ วิธีการจัดการในลักษณะที่ทำธุรกรรมข้ามส่วน ทันทีคือการที่ชิ้นส่วนปลายทางไม่ต้องรอช่วงท้าทาย หลังจากเผยแพร่ธุรกรรมส่วนแบ่งข้อมูลต้นทางแล้ว และใช้ธุรกรรมการรับสินค้า ทันทีแต่แล้วย้อนกลับชาร์ดปลายทางพร้อมกับต้นทาง shard หากต่อมาพบว่าก้อนหรือบล็อกต้นกำเนิดไม่ถูกต้อง (ดูรูปที่ 22) สิ่งนี้ใช้ได้กับการออกแบบ Nightshade ที่ชิ้นส่วนนั้นอย่างเป็นธรรมชาติมาก เชนไม่เป็นอิสระ แต่มีการเผยแพร่เศษชิ้นส่วนทั้งหมดแทน รวมกันอยู่ในบล็อกลูกโซ่หลักเดียวกัน หากพบว่าส่วนใดส่วนหนึ่งไม่ถูกต้อง บล็อกทั้งหมดที่มีอันนั้นถือว่าไม่ถูกต้อง และบล็อกทั้งหมดที่สร้างขึ้น ด้านบนของมัน ดูรูปที่ 23 ทั้งสองวิธีข้างต้นให้ความเป็นอะตอมมิกโดยสมมติว่าเป็นความท้าทาย ระยะเวลายาวนานพอควร เราใช้แนวทางหลังเนื่องจากการทำธุรกรรมข้ามส่วนที่รวดเร็วภายใต้สถานการณ์ปกติมีน้ำหนักมากกว่าความไม่สะดวก ชิ้นส่วนปลายทางย้อนกลับเนื่องจากการเปลี่ยนสถานะที่ไม่ถูกต้องในหนึ่งในนั้น ชิ้นส่วนแหล่งที่มาซึ่งเป็นเหตุการณ์ที่หายากมาก 3.7.3 กำลังซ่อน validators การมีอยู่ของความท้าทายลดความน่าจะเป็นลงอย่างมาก การคอร์รัปชั่นแบบปรับตัว เนื่องจากเพื่อสรุปส่วนที่มีการโพสต์การเปลี่ยนสถานะที่ไม่ถูกต้องรูปที่ 22: ใช้ใบเสร็จรับเงินทันทีและย้อนกลับปลายทาง chain หากเชนต้นทางมีบล็อกที่ไม่ถูกต้อง รูปที่ 23: ความท้าทายของชาวประมงใน Nightshade ช่วงเวลาแห่งความท้าทายที่ศัตรูที่ปรับตัวได้จำเป็นต้องทำให้ผู้เข้าร่วมทั้งหมดเสียหาย ที่รักษาสถานะของชาร์ด รวมถึง validators ทั้งหมด การประมาณความน่าจะเป็นของเหตุการณ์ดังกล่าวนั้นซับซ้อนมาก เนื่องจากไม่ Sharded blockchain ใช้งานได้นานเพียงพอสำหรับการพยายามโจมตีดังกล่าว เรายืนยันว่าความน่าจะเป็นแม้จะต่ำมาก แต่ก็ยังเพียงพอ ขนาดใหญ่สำหรับระบบที่คาดว่าจะทำธุรกรรมหลายล้านรายการและ ดำเนินการทางการเงินทั่วโลก มีสองเหตุผลหลักสำหรับความเชื่อนี้: 1. validators ส่วนใหญ่ของเครือข่าย Proof-of-Stake และนักขุดของ

เครือข่าย Proof-of-Work ได้รับการจูงใจจากส่วนต่างทางการเงินเป็นหลัก ถ้า ศัตรูที่ปรับตัวได้จะให้เงินแก่พวกเขามากกว่าผลตอบแทนที่คาดหวัง จากการดำเนินงานโดยสุจริต ก็สมเหตุสมผลที่จะคาดหวังว่าจะมี validators มากมาย จะยอมรับข้อเสนอ 2. หน่วยงานหลายแห่งทำการตรวจสอบความถูกต้องของเครือข่าย Proof-of-Stake อย่างมืออาชีพ และ คาดว่าจะมีสัดส่วนการถือหุ้นจำนวนมากในห่วงโซ่ใดๆ จากหน่วยงานดังกล่าว จำนวนเอนทิตีดังกล่าวมีน้อยเพียงพอสำหรับ ศัตรูที่ปรับตัวได้เพื่อทำความรู้จักกับพวกเขาส่วนใหญ่เป็นการส่วนตัวและมี มีความเข้าใจดีถึงความอวดดีของตนที่จะเสื่อมทราม เราก้าวไปอีกขั้นหนึ่งในการลดความน่าจะเป็นของความเสียหายแบบปรับตัวได้โดยการซ่อนว่า validators ใดถูกกำหนดให้กับชาร์ดใด ความคิดก็คือ คล้ายกับวิธีที่ Algorand [5] ปกปิด validators จากระยะไกล เป็นสิ่งสำคัญที่จะต้องทราบว่าแม้ว่า validators จะถูกปกปิด เช่นเดียวกับใน Algorand หรือตามที่อธิบายไว้ด้านล่าง การทุจริตแบบปรับตัวยังคงเป็นไปได้ในทางทฤษฎี ในขณะที่ ฝ่ายตรงข้ามที่ปรับตัวไม่รู้จักผู้เข้าร่วมที่จะสร้างหรือตรวจสอบ บล็อกหรือชิ้นเดียว ผู้เข้าร่วมเองก็รู้ว่าตนจะต้องแสดง งานดังกล่าวและมีหลักฐานการเข้ารหัส ดังนั้นฝ่ายตรงข้ามจึงสามารถ เผยแพร่เจตนาที่จะคอร์รัปชั่นและจ่ายเงินให้กับผู้เข้าร่วมที่จะจัดหา เป็นการพิสูจน์การเข้ารหัส อย่างไรก็ตาม เราทราบว่าเนื่องจากฝ่ายตรงข้ามไม่ได้ทำ รู้จัก validators ที่ได้รับมอบหมายให้กับชาร์ดที่พวกเขาต้องการทำให้เสียหาย ไม่มีทางเลือกอื่นนอกจากต้องถ่ายทอดเจตนารมณ์ที่จะทำลายชิ้นส่วนเฉพาะให้เสียหาย ชุมชนทั้งหมด เมื่อถึงจุดนั้น จะเป็นประโยชน์เชิงเศรษฐกิจสำหรับผู้ซื่อสัตย์ทุกคน ผู้เข้าร่วมจะหมุนโหนดเต็มเพื่อตรวจสอบความถูกต้องของส่วนนั้น เนื่องจากมีระดับสูง โอกาสที่บล็อกที่ไม่ถูกต้องจะปรากฏในส่วนนั้นซึ่งเป็นโอกาสที่จะ สร้างความท้าทายและสะสมรางวัลที่เกี่ยวข้อง เพื่อไม่ให้เปิดเผย validators ที่ได้รับมอบหมายให้กับส่วนข้อมูลเฉพาะ เราทำอย่างนั้น ต่อไปนี้ (ดูรูปที่ 24): การใช้ VRF เพื่อรับงาน ในตอนต้นของแต่ละยุคแต่ละสมัย validator ใช้ VRF เพื่อรับบิตมาสก์ของชาร์ดที่ validator ถูกกำหนดให้ บิตมาสก์ของ validator แต่ละตัวจะมีบิต Sw (ดูคำจำกัดความที่ 3.3 หัวข้อ ของ SW) จากนั้น validator จะดึงข้อมูลสถานะของส่วนที่เกี่ยวข้อง และ ในช่วงยุคสำหรับแต่ละบล็อกที่ได้รับจะตรวจสอบชิ้นส่วนที่เกี่ยวข้อง ไปยังชิ้นส่วนที่ validator ถูกกำหนดให้ ลงชื่อเข้าใช้บล็อกแทนที่จะเป็นชิ้นๆ เนื่องจากการกำหนดส่วนแบ่งข้อมูลถูกปกปิด validator จึงไม่สามารถลงนามในชิ้นส่วนได้ แต่มันจะส่งสัญญาณทั้งหมดแทนเสมอ บล็อก จึงไม่เปิดเผยว่าชิ้นส่วนใดที่ตรวจสอบได้ โดยเฉพาะอย่างยิ่ง เมื่อ validator ได้รับบล็อกและตรวจสอบความถูกต้องของชิ้นส่วนทั้งหมด มันก็จะสร้างข้อความขึ้นมา ที่พิสูจน์ว่าชิ้นส่วนทั้งหมดในชิ้นส่วนทั้งหมดที่ validator ได้รับมอบหมายให้เป็น ถูกต้อง (โดยไม่ได้ระบุว่าชิ้นส่วนเหล่านั้นคืออะไร) หรือข้อความนั้น มีหลักฐานการเปลี่ยนสถานะที่ไม่ถูกต้องหากส่วนใดส่วนหนึ่งไม่ถูกต้อง ดู ส่วนที่ 3.8 สำหรับรายละเอียดเกี่ยวกับวิธีการรวบรวมข้อความดังกล่าว ส่วนที่ 3.7.4 สำหรับ รายละเอียดเกี่ยวกับวิธีป้องกัน validators จากการสนับสนุนแบบหมูในข้อความ validators อื่นๆ และส่วนที่ 3.7.5 สำหรับรายละเอียดวิธีการให้รางวัลและการลงโทษ validators ควรประสบความสำเร็จในการท้าทายการเปลี่ยนสถานะที่ไม่ถูกต้องเกิดขึ้นจริงรูปที่ 24: ซ่อน validators ใน Nightshade 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 การรวมลายเซ็น เพื่อให้ระบบที่มีชาร์ดจำนวนมากทำงานอย่างปลอดภัย เราต้องการให้มี คำสั่งซื้อ 10, 000 หรือมากกว่า validators ตามที่กล่าวไว้ในหัวข้อ 3.7 เราต้องการแต่ละอย่างรูปที่ 26: จัดการกับความท้าทาย validator เพื่อเผยแพร่การกระทำต่อข้อความบางอย่างและลายเซ็นโดยเฉลี่ย หนึ่งครั้งต่อบล็อก แม้ว่าข้อความการคอมมิตจะเหมือนกันก็ตาม แต่โดยรวมแล้ว การลงนาม BLS และการตรวจสอบความถูกต้องจะมีราคาแพงมาก แต่ โดยธรรมชาติแล้วข้อความที่ส่งและเปิดเผยจะไม่เหมือนกันใน validators และด้วยเหตุนี้เราจึงจำเป็นต้องมีวิธีที่จะรวมข้อความดังกล่าวและลายเซ็นไว้ใน วิธีที่ช่วยให้สามารถตรวจสอบความถูกต้องได้อย่างรวดเร็วในภายหลัง แนวทางเฉพาะที่เราใช้มีดังต่อไปนี้: ผู้ตรวจสอบความถูกต้องเข้าร่วมกับผู้ผลิตบล็อก ผู้ผลิตบล็อกเป็นที่รู้จัก ก่อนที่ยุคจะเริ่มต้น เนื่องจากต้องใช้เวลาในการดาวน์โหลด ระบุก่อนที่ยุคจะเริ่มต้น และไม่เหมือนกับ validators ที่ผู้สร้างบล็อกเป็น ไม่ได้ปกปิด ผู้ผลิตบล็อกแต่ละรายมีช่อง v validator ผู้ตรวจสอบส่ง ข้อเสนอของ off-chain ให้กับผู้ผลิตบล็อกเพื่อรวมเป็นหนึ่งใน v validatorส. หากผู้ผลิตบล็อกต้องการรวม validator พวกเขาจะส่งข้อมูล ธุรกรรมที่มีคำขอ of-chain เริ่มต้นจาก validator และ ลายเซ็นของผู้ผลิตบล็อกที่ทำให้ validator เข้าร่วมกับผู้ผลิตบล็อก โปรดทราบว่า validators ที่กำหนดให้กับผู้สร้างบล็อกนั้นไม่จำเป็นเสมอไป ตรวจสอบชิ้นส่วนเดียวกันกับที่ผู้สร้างบล็อกสร้างชิ้นส่วนให้ ถ้าก validator นำไปใช้กับผู้ผลิตบล็อกหลายราย เฉพาะธุรกรรมจากเท่านั้น ผู้ผลิตบล็อกแรกจะประสบความสำเร็จ ผู้ผลิตบล็อกรวบรวมคอมมิต ผู้ผลิตบล็อกรวบรวมคอมมิตและเปิดเผยข้อความจาก validators อย่างต่อเนื่อง เมื่อสะสมข้อความดังกล่าวครบจำนวนหนึ่งแล้ว ผู้ผลิตบล็อกจะคำนวณ Merkle แผนผังของข้อความเหล่านี้ และส่งไปยังแต่ละ validator ราก Merkle และ เส้นทาง Merkle ไปยังข้อความของพวกเขา validator ตรวจสอบเส้นทางและลงชื่อเข้าใช้ รากเมิร์เคิล ผู้ผลิตบล็อกจะสะสมลายเซ็น BLS บน merkle root จาก validators และเผยแพร่เฉพาะ merkle root และ ลายเซ็นสะสม ผู้ผลิตบล็อกยังลงนามในความถูกต้องของ ลายเซ็นหลายลายเซ็นโดยใช้ลายเซ็น ECDSA ราคาถูก หากลายเซ็นหลายฉบับไม่เป็นเช่นนั้น ตรงกับราก Merkle ที่ส่งมาหรือบิตมาสก์ของ validators ที่เข้าร่วม ซึ่งเป็นพฤติกรรมที่สามารถเฉือนได้ เมื่อซิงโครไนซ์ห่วงโซ่ผู้เข้าร่วม สามารถเลือกตรวจสอบความถูกต้องของลายเซ็น BLS ทั้งหมดจาก validators (ซึ่งมีราคาแพงมากเนื่องจากเกี่ยวข้องกับการรวมกุญแจสาธารณะ validators) หรือเท่านั้นลายเซ็น ECDMA จากผู้ผลิตบล็อกและอาศัยข้อเท็จจริงที่ว่า ผู้ผลิตบล็อกไม่ถูกท้าทายและเฉือน การใช้ธุรกรรมออนไลน์และการพิสูจน์ Merkle เพื่อความท้าทาย มัน สามารถสังเกตได้ว่าไม่มีประโยชน์ในการเปิดเผยข้อความจาก validators หากไม่มี ตรวจพบการเปลี่ยนสถานะที่ไม่ถูกต้อง เฉพาะข้อความที่มีเนื้อหาจริงเท่านั้น จำเป็นต้องเปิดเผยหลักฐานการเปลี่ยนสถานะที่ไม่ถูกต้อง และสำหรับข้อความดังกล่าวเท่านั้น จะต้องแสดงให้เห็นว่าตรงกับการกระทำก่อนหน้า ข้อความที่ต้องการ เปิดเผยเพื่อวัตถุประสงค์สองประการ: 1. เพื่อเริ่มต้นการย้อนกลับของห่วงโซ่จนถึงช่วงเวลาก่อนหน้า การเปลี่ยนสถานะไม่ถูกต้อง (ดูหัวข้อ 3.7.5) 2. เพื่อพิสูจน์ว่า validator ไม่ได้พยายามยืนยันถึงความถูกต้องของ ชิ้นที่ไม่ถูกต้อง ไม่ว่าในกรณีใด เราจำเป็นต้องแก้ไขปัญหาสองประเด็น: 1. การคอมมิตจริงไม่ได้รวมอยู่ใน chain มีเพียง merkle root ของ the เท่านั้น กระทำรวมกับข้อความอื่น ๆ validator จำเป็นต้องใช้ เส้นทาง Merkle จัดทำโดยผู้สร้างบล็อกและการกระทำดั้งเดิมของพวกเขา พิสูจน์ว่าพวกเขามุ่งมั่นที่จะท้าทาย 2. เป็นไปได้ที่ validators ทั้งหมดที่กำหนดให้กับส่วนแบ่งที่ไม่ถูกต้อง การเปลี่ยนแปลงสถานะถูกกำหนดให้กับผู้ผลิตบล็อกที่เสียหาย กำลังเซ็นเซอร์พวกเขา เพื่อแก้ไขปัญหานี้ เราอนุญาตให้พวกเขาส่งการเปิดเผยของพวกเขา เป็นธุรกรรมออนไลน์ปกติและข้ามการรวมกลุ่ม ส่วนหลังได้รับอนุญาตเฉพาะสำหรับการพิสูจน์การเปลี่ยนสถานะที่ไม่ถูกต้องเท่านั้น ซึ่งได้แก่ หายากมาก และไม่ควรส่งผลให้เกิดการส่งสแปมบล็อก ปัญหาสุดท้ายที่ต้องแก้ไขคือผู้ผลิตบล็อกสามารถทำได้ เลือกที่จะไม่มีส่วนร่วมในการรวบรวมข้อความหรือจงใจเซ็นเซอร์ validators โดยเฉพาะ เราทำให้มันเสียเปรียบทางเศรษฐกิจโดยการสร้างบล็อก รางวัลผู้ผลิตตามสัดส่วนของจำนวน validators ที่ได้รับมอบหมาย เรา โปรดทราบว่าเนื่องจากผู้ผลิตบล็อกระหว่างยุคส่วนใหญ่ตัดกัน (since จะเป็นผู้เข้าร่วมอันดับต้นๆ ที่มีเดิมพันสูงสุดเสมอ) validators สามารถทำได้ ส่วนใหญ่ยึดติดกับการทำงานร่วมกับผู้ผลิตบล็อกรายเดียวกัน จึงช่วยลดความเสี่ยงได้ ของการได้รับมอบหมายให้เป็นผู้ผลิตบล็อกที่เคยเซ็นเซอร์พวกเขาในอดีต 3.9 ห่วงโซ่ภาพรวม เนื่องจากบล็อกบนเชนหลักมีการผลิตบ่อยมาก จึงทำการดาวน์โหลด ประวัติทั้งหมดอาจมีราคาแพงอย่างรวดเร็ว นอกจากนี้เนื่องจากทุกๆ บล็อกมีลายเซ็น BLS ของผู้เข้าร่วมจำนวนมาก เพียงการรวมคีย์สาธารณะเพื่อตรวจสอบลายเซ็นอาจกลายเป็นสิ่งต้องห้าม แพงเช่นกัน ในที่สุด เนื่องจากในอนาคตอันใกล้นี้ Ethereum 1.0 จะยังคงเป็นหนึ่งเดียว ของ blockchains ที่ใช้มากที่สุด ซึ่งมีวิธีการถ่ายโอนเนื้อหาที่มีความหมาย

ใกล้ Ethereum เป็นข้อกำหนด และในปัจจุบันมีการตรวจสอบลายเซ็น BLS เพื่อให้มั่นใจ ความถูกต้องของ Near Block บนฝั่งของ Ethereum นั้นเป็นไปไม่ได้ แต่ละบล็อกในสายโซ่หลักของ Nightshade สามารถมี Schnorr ได้หรือไม่ multisignature บนส่วนหัวของบล็อกสุดท้ายที่มี Schnorr ดังกล่าว หลายลายเซ็น เราเรียกบล็อกดังกล่าวว่าบล็อกสแน็ปช็อต บล็อกแรกของ ทุกยุคจะต้องเป็นบล็อกสแน็ปช็อต ในขณะที่ทำงานเกี่ยวกับลายเซ็นหลายใบดังกล่าว ผู้ผลิตบล็อกจะต้องสะสมลายเซ็น BLS ของ validators ด้วย ในบล็อกสแน็ปช็อตสุดท้าย และรวมเข้าด้วยกันในลักษณะเดียวกับที่อธิบายไว้ใน มาตรา 3.8 เนื่องจากชุดตัวสร้างบล็อกมีค่าคงที่ตลอดยุค จึงมีการตรวจสอบความถูกต้อง เฉพาะบล็อกสแน็ปช็อตแรกในแต่ละยุคเท่านั้นที่เพียงพอหากถือว่าไม่ใช่ ชี้ให้เห็นถึงผู้ผลิตบล็อกจำนวนมากและ validators สมรู้ร่วมคิดและสร้าง ส้อม บล็อกแรกของยุคจะต้องมีข้อมูลที่เพียงพอในการคำนวณ ผู้ผลิตบล็อกและ validators สำหรับยุค เราเรียกห่วงโซ่ย่อยของห่วงโซ่หลักที่มีเฉพาะสแน็ปช็อตเท่านั้น บล็อกลูกโซ่สแน็ปช็อต การสร้างลายเซ็นหลายลายเซ็นของ Schnorr นั้นเป็นกระบวนการเชิงโต้ตอบ แต่เนื่องจากเรา จำเป็นต้องดำเนินการไม่บ่อยนัก ไม่ว่าจะดำเนินการจะด้อยแค่ไหนก็ตาม จะประสบความสำเร็จ ลายเซ็นหลายลายเซ็นของ Schnorr สามารถตรวจสอบได้อย่างง่ายดายบน Ethereum, จึงให้พื้นฐานที่สำคัญสำหรับวิธีการที่ปลอดภัยในการดำเนินการ cross-blockchain การสื่อสาร หากต้องการซิงค์กับ Near chain จะต้องดาวน์โหลดสแนปช็อตทั้งหมดเท่านั้น บล็อกและยืนยันว่าลายเซ็น Schnorr นั้นถูกต้อง (หรืออาจเลือกตรวจสอบลายเซ็น BLS แต่ละรายการของ validators) จากนั้นจึงทำการซิงค์เท่านั้น บล็อกลูกโซ่หลักจากบล็อกสแน็ปช็อตสุดท้าย

Заключение

В этом документе мы обсудили подходы к созданию сегментированных blockchain и охватили две основные проблемы существующих подходов, а именно валидность состояния и доступность данных. Затем мы представили Nightshade, дизайн шардинга, который полномочия NEAR Протокола. Дизайн находится в стадии разработки, если у вас есть комментарии, вопросы или отзывы. в этом документе перейдите по адресу https://near.chat.

บทสรุป

ในเอกสารนี้ เราได้กล่าวถึงแนวทางในการสร้างการแบ่งส่วน blockchains และ ครอบคลุมความท้าทายหลักสองประการด้วยแนวทางที่มีอยู่ ได้แก่ ความถูกต้องของรัฐ และความพร้อมของข้อมูล จากนั้นเราก็นำเสนอ Nightshade ซึ่งเป็นการออกแบบการแบ่งส่วนนั้น อำนาจ NEAR โปรโตคอล การออกแบบอยู่ในระหว่างดำเนินการ หากคุณมีความคิดเห็น คำถาม หรือข้อเสนอแนะ ในเอกสารนี้ โปรดไปที่ https://near.chat.