Шардинг и масштабирование блокчейна

Теория шардинга больше всего ассоциируется с Эфириумом, и чтоб осознать, почему общество разрабов этого блокчейна желает ввести шардинг, принципиально разобраться, что же все-таки это такое и что в этом решении такового симпатичного.

Согласно ETH Gas Station, на добавление транзакции в блокчейн Эфириума требуется приблизительно 1,78 минутки, причём новейшие блоки создаются любые 32 секунды и в среднем за секунду обрабатывается 15-20 транзакций. В таковых критериях майнеры имеют преимущество над ординарными юзерами, поэтому что когда юзер желает повысить ценность собственной транзакции, он должен поднять стоимость газа (комиссию).

Низкая пропускная способность вместе с большенный задержкой и высочайшей комиссией ограничивают сеть, из-за чего же она ужаснее подступает для сервисов и приложений, нуждающихся в масштабировании. Основная причина низкой пропускной возможности Эфириума в том, что любой узел сети должен обрабатывать все транзакции.

Что такое шардинг?

Если в 2-ух словах, то шардинг – это метод распределения вычислительной и накопительной перегрузки в пиринговой сети так, чтоб любой узел не отвечал за обработку всех сетевых транзакций, а лишь хранил информацию о собственной доле (шарде).

Можно обрисовать простой пример шардинга. Создатель Эфириума Виталик Бутерин именует это «масштабированием на 1000 альткойнов».

В этом случае заместо 1-го блокчейна употребляется несколько, и любой из их именуется «шард». В свою очередь, любой шард имеет свою сеть валидаторов, либо узлов, которые или майнят блоки при помощи метода подтверждения выполнения работы (PoW), или голосуют на базе толики владения (PoS).

Вызовы шардинга

1-ая неувязка шардинга в том, что, так как у всякого шарда своя сеть узлов, он наименее неопасен, чем один большенный блокчейн вроде Эфириума. Потому, если некое число узлов Эфириума решат провести хард-форк и образовать блокчейн с 10 шардами, любой шард будет иметь только 10% сохранности изначального блокчейна. Другими словами любой шард можно скомпрометировать либо исказить, контролируя не 51% узлов изначального блокчейна, а 5,1%.

2-ая неувязка в том, как будут выбираться узлы, выполняющие валидацию в любом шарде. Для злодея контроль 5,1% сетевых узлов представляет делему, лишь если они все делают валидацию в одном и том же шарде. Если дозволить узлам выбирать, в котором шарде они будут делать валидацию, это может вызвать нередкие сетевые атаки, так что наилучший метод минимизировать опасности – не предоставлять узлам таковой выбор.

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

Этот блокчейн, который в Эфириуме именуют «маяком», отвечает за генерирование случайных чисел, распределение узлов меж шардами, отслеживание состояния шардов, обработку толикой владения и остальные функции.

Блокчейны-маяки имеют ряд недочетов. Так как они отвечают за вышеупомянутые вычисления, чем больше шардов в сети, тем больше работы придётся делать маяку, что ведёт к той же дилемме, с которой может столкнуться сеть без шардинга, – низкой пропускной возможности и большенный задержке, – так что масштабируемость шардинговой сети имеет естественные ограничения.

Но шардинговая сеть имеет мультипликативные характеристики, так что если эффективность сети улучшится и узлы сумеют обрабатывать транзакции в 4 раза резвее, то блокчейн-маяк сумеет управлять в 4 раза огромным количеством шардов, что прирастит сетевую скорость в 16 раз.

Как можно разбить данные на шарды?

Для начала разглядим, какие функции обычно делают узлы в блокчейне:

  • Обрабатывают/валидируют транзакции.
  • Передают эти транзакции и намайненные блоки остальным узлам сети.
  • Хранят историю всех транзакций.
  • Узлам необходимо поспевать за ростом сети:

  • При увеличении числа обрабатываемых транзакций любому узлу необходимо больше вычислительной мощности.
  • При увеличении числа передаваемых транзакций любому узлу нужна большая пропускная способность на выходе.
  • Для хранения всех данных блокчейна узлу также равномерно необходимо всё больше места.
  • Смотря на эти три параметра, можно увидеть, что объём хранимых данных будет расти независимо от того, возрастет ли число обрабатываемых либо передаваемых транзакций.

    Некие проекты предложили шардинг хранения, но не транзакций, остальные – напротив, но больше всего разработок соединено с так именуемым «шардингом состояния», где узлы всякого шарда делают свой блокчейн, содержащий транзакции, действующие лишь на их часть общей сети, другими словами узлам необходимо хранить лишь историю транзакций собственного шарда, обрабатывать транзакции, касающиеся их шарда, и передавать эти транзакции в границах собственного шарда.

    Дальше давайте разглядим кросс-шардовые транзакции, недействительные транзакции и нечестное поведение. Базисный тип шардинга, описанный чуть повыше, не очень полезен на практике, поэтому что такие шарды не могут вести взаимодействие вместе и, как следствие, это всё равно что отдельные блокчейны.

    Разглядим пример обычного платежа. Если юзер A и юзер B находятся в одном шарде, валидаторы этого шарда сумеют без заморочек обработать транзакцию. Но что, если их счета находятся в различных шардах?

    Юзер A относится к шарду №1, а юзер B – к шарду №2. Валидаторы всякого из этих шардов не сумеют списать либо зачислить средства, поэтому что они не имеют возможностей в другом шарде.

    Но эта неувязка имеет решения, так что давайте подробнее разглядим некие из их:

    Синхронные (одновременные) кросс-шардовые транзакции

    В данном случае, когда юзеру A с шарда №1 необходимо выслать средства юзеру B с шарда №2, блоки в любом шарде, содержащие изменение состояния, связанное с транзакцией, создаются сразу, и валидаторы в любом шарде совместно работают над доказательством транзакции. Виталик Бутерин предложил соединять воединыжды блоки, используя это решение, ещё сначала 2018 г.

    Асинхронные кросс-шардовые транзакции

    Эту операцию несколько проще выполнить и намного легче координировать, потому она наиболее популярна, чем синхронные транзакции.

    Снова же, будем применять пример юзера A с шарда №1, который желает переслать средства юзеру B с шарда №2.

    В этом сценарии шард, который отвечает за зачисление средств на счёт юзера B, подтвердит свою часть транзакции лишь опосля того, как получит довольно доказательств, что шард, отвечающий за списание средств со счёта юзера A, сделал это.

    Но таковой подход не безупречен, потому что есть ненулевая возможность, что блок 1-го из шардов окажется «осиротевшим». А ненулевая, хоть и низкая возможность – это всё равно уязвимость, которую недозволено игнорировать.

    Объяснить можно на последующем рисунке.

    В этом блокчейне два шарда, и по незапятанной случайности в обоих происходит форк как раз в момент включения транзакции в блок A в шарде №1 и блок X’ в шарде №2.

    Когда случается таковой форк, шард должен отклонить одну цепочку и принять другую. В этом случае, если шард №1 воспримет цепочку A, B и т. д., а шард №2 – цепочку W’, X’ и т. д., то транзакция будет доказана и всё будет в порядке.

    Если же шард №1 воспримет цепочку A’, B’ и т. д., а шард №2 – цепочку W, X и т. д., то транзакция будет отклонена, что также приемлемый финал, потому что её можно выслать повторно.

    Но что будет, если шард №1 воспримет цепочку A, B и т. д., а шард №2 – цепочку W, X и т. д.? Одна часть транзакции будет доказана (A, B и т. д.), а иная – нет (W, X и т. д.).

    И это всё?

    Сейчас вы лучше осознаете, что такое шардинг и как он работает, но как минимум ещё один вопросец заслуживает внимания: нечестные участники.

    Нечестные узлы

    Нередко бывает (в любом сценарии), что, когда есть возможность крупно заработать, найдутся люди, ищущие методы перехитрить систему, какой бы она ни была.

    Одобрение недействительных блоков

    Нечестные узлы могут решить выполнить атаку, создав блоки, пытающиеся поменять сеть. Представим, у юзера №1 есть 10 монет, а у юзера №2 – ни одной. Нечестный узел может попробовать сделать блок, в каком юзер №1 пересылает свои 10 монет юзеру №2 так, чтоб у юзера №1 было 0 монет, а у юзера №2 – 1000.

    В обыкновенном блокчейне без шардинга таковая атака невозможна, так как любой блок проверяется всеми узлами и, если найден недействительный блок, все узлы (будь то майнеры либо нет) его отклоняют.

    В традиционном блокчейне не имеет значения, сколько блоков создаст нечестный узел либо как стремительно он будет их создавать. Добросовестные участники сети постоянно будут игнорировать эти блоки и продолжать строить добросовестную цепочку.

    Разглядим блокчейн, который раскалывается надвое, поэтому что нечестные узлы желают создавать недействительные блоки, чтоб восполнить свои счета огромным количеством монет. Может быть даже, что нечестных узлов больше, чем добросовестных. Добросовестная цепочка короче, а недействительная – длиннее. В обыкновенном блокчейне без шардинга любой участник отвечает за проверку всех получаемых блоков и доказательство состояния, потому любой, кто лично заинтересован в блокчейне (и, как следствие, его безупречности), сходу признает недействительную цепочку и отклонит её в пользу (в этом случае) наиболее недлинной.

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

    Так как блокчейн-маяк (обсуждавшийся в первой части) обычно не имеет способности инспектировать все блоки всякого шарда, необходимо другое решение, чтоб удостовериться в безупречности каждой цепочки.

    Если сеть и, соответственно, любой шард решают задачку византийских генералов и нечестные узлы в любом шарде контролируют меньше 66,667%, можно выстроить механизм, предупреждающий систему о попытках сгенерировать недействительные блоки, где один либо больше добросовестных узлов могут подтвердить реальность либо недействительность блоков. Если нечестные узлы контролируют больше 66,667% шарда, они на теоретическом уровне могут подтверждать блоки, но если в шарде есть хотя бы один добросовестный узел, быть может построен механизм, позволяющий добросовестным узлам оговаривать деяния нечестных.

    1, 2

    Author: Anonim