Протокол Coda - Сжатый Блокчейн!

7 minute read

Можете считать что кода Coda - это кошелек в вашем кармане.

  • Первая криптовалюта со сжатым блокчейном.
  • Блокчейн размером в 100Гб (что мы видим в существующих блокчейнах) сжимается в килобайты.
  • Масштабируемый, безопасный и децентрализованный.
  • Позволяет верифицировать блокчейн на мобильном телефоне.

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

Видео: hack.summit(“blockchain”) 2018 — Izaak Meckler — соучредитель и CTO, Coda Protocol

hack.summit(“blockchain”) 2018 — Izaak Meckler — co-founder and CTO, Coda Protocol

В “криптосфере” нас часто призывают следовать девизу «Не доверяй, а проверяй», и несмотря на понимание необходимости быть активным пользователем сети, сегодня конечные пользователи блокчейнов с неохотой запускают полные ноды из-за постоянно возрастающих требований к оборудованию.

Bitcoin Blockchain size

Темпы роста блокчейна Bitcoin в мегабайтах с сентября 2018 года.

Предисловие.

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

  • Требования к ресурсам и сложность работы с полной нодой отбивают желание у конечных пользователей заниматься этим.
  • Полная нода требует много вычислительных ресурсов и ее невозможно запустить на мобильном телефоне.
  • Намного проще доверить валидацию третьим лицам.

Cryptocurrency

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


Как мы можем быть уверены в текущем состоянии блокчейна, не видя всей истории этого состояния?


Введение в Coda

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

Видео: #243 Izaak Meckler & Evan Shapiro: Coda — A Succinct Blockchain — Epicenter

#243 Izaak Meckler & Evan Shapiro: Coda — A Succinct Blockchain — Epicenter

O(1) Labs разрабатывает протокол Coda для решения проблемы размера блокчейна путем создания первого сжатого блокчейна размером в несколько твитов. Это обеспечивает конечным пользователям более доступный способ проверки транзакций.

Как это вообще возможно?

  • Использование zk-SNARKs - эффективное сжатие блоков в единое доказательство или сертификат.
  • Конечные пользователи проверяют это доказательство вместо проверки всей истории транзакций блока.
  • Рекурсивная композиция SNARKs/сертификатов, позволяющая блокчейну быть постоянного размера.

zk-SNARKs - это итерация доказательств с нулевым знанием, а точнее криптографическая схема, в которой нулевое знание передается верификатору при предоставлении их с доказательством вычисления.


Как работает Coda

zk-SNARKs в Coda

В основе протокола Coda лежат zk-SNARKs (zk снарки), которые можно использовать для заверения(сертификации) любых вычислений.

zk-SNARKs функционируют как не подделываемые сертификаты, чтобы доказать, что вычисление было выполнено правильно, без проверки всего вычисления. Как уже упоминалось, мы можем взять любое вычисление, например можно взять любой блок и проверить все транзакции в нем, просто создав из него SNARK. Этот SNARK доказывает точность истории транзакций блока без необходимости показывать все транзакции. Это эффективно уменьшает размер блока до одного SNARK (~ 1 Кб).

SNARK проверяет ВСЕ правила для консенсуса.

Это обеспечивает:

  • Транзакции подписаны.
  • Они действительны.
  • Правила консенсуса (общая хэш мощность + сложность сети для PoW и переменная случайная функция/другие правила для PoS).

Если SNARK сгенерирован не честно, он недействителен. Любой участник сети сможет увидеть это почти мгновенно даже на таких “легких” устройствах как Raspberry Pi или смартфон.


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

image

процессор SNARK, создающий SNARK/сертификат действительности для блока, который может быть передан в качестве доказательства, без учета всех транзакций

Реальный разговор между процессором Coda (производитель zk-SNARKs) и конечным пользователем:

“Привет, верификатор/конечный пользователь! Я создал сертификат, чтобы вы могли легко проверить историю транзакций блока. Этот процесс потребовал больших вычислительных мощностей, поэтому я был вознагражден за это. Вы можете проверить точность этого доказательства, проверив SNARK, который займет всего несколько миллисекунд и несколько килобайт свободного места на диске. Таким образом, вам не нужно загружать сотни гигабайт для проверки блокчейна!” - процессор SNARK.

“Большое спасибо, процессор. Я проверю этот сертификат! Поскольку он настолько мал, мне не нужно доверять кому-то еще, чтобы проверить блокчейн для меня, и я, наконец, могу запустить проверяющий узел и кошелек на чем-то вроде моего смартфона. Спасибо! Жизнь так прекрасна”. - Конечный пользователь.


Замена каждого блока на SNARK не является полным решением.

Изначально мы думали что будет достаточно просто создать SNARK для каждого блока, сжимая каждый блок примерно до килобайта. Однако это все равно приведет к линейному росту(размера) с течением времени, поскольку SNARK’и накапливаются, хотя и в гораздо меньшей степени, чем существующие блокчейны.

Как мы можем это исправить?

Хорошо, мы знаем, что SNARK может использоваться для сертификации(заверения) любых вычислений. Создание SNARK само по себе является вычислением. Что если мы создадим SNARK из нескольких SNARK’ков?

image

Несколько сертификатов/SNARK’ков, каждый из которых проверяется конечным пользователем.

Рекурсивная композиция SNARK’ков в Coda

Как упоминалось ранее, мы можем объединить эти сертификаты в рекурсивную композицию и позволить блокчейну сохранять постоянный размер ~ 20 кБ (SNARK + конечный хвост пути Merkle).

Каждый раз когда создается новый блок, создается новый SNARK/сертификат. Создав один SNARK, состоящий из предыдущих сертификатов, вы можете создать, грубо говоря, один “мега” SNARK, который доказывает всю историю транзакций блокчейна, позволяя вам переходить от генезис блока к текущему состоянию, сохраняя при этом размер всего одного SNARK/сертификата.

image

Несколько сертификатов/SNARK’ков помещены в один сертификат/SNARK.

Чтобы упростить понимание этой идеи, представьте что у вас есть:

  • Один сертификат о том, что вы можете перейти от блока 0 к блоку 2.
  • Дополнительный сертификат о том, что вы можете перейти от блока 2 к блоку 4.

Затем вы можете объединить эти SNARK’и в один SNARK, в котором говорится, что вы можете перейти из блока 0 в блок 4.

Новый SNARK/сертификат будет размером ~ 1Кб. Если мыслить глобально, вы можете создать сертификат для всей истории транзакций блокчейна, у которого будет постоянный размер, несмотря на количество сертификатов, “сжатых” в самом последнем SNARK.

Проверяющий узел в Coda будет состоять из:

Рекурсивно составленный zk-SNARK (1 Кб), который подтверждает достоверность всей прошлой истории блокчейна и корневого пути merkle текущего состояния (20 Кб), вместе они доказывают действительность баланса пользователя. Все это занимает всего миллисекунды для синхронизации.

image

Конечный пользователь проверяет SNARK текущего состояния, которое включает в себя все прошлые сертификаты, а также путь Merkle. Все это в совокупности позволяет пользователю проверить свой баланс.

Приложения, децентрализация и масштабируемость

Приложения

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

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

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

Децентрализация

Как уже упоминалось, конечные пользователи в существующих криптовалютных протоколах в конечном итоге делегируют доверие таким сервисам, как онлайн-кошельки(web кошельки) или легкие клиенты в случае майнинга. Это может стать проблемой в случае атаки 51% на сеть, поскольку обязанность проверки транзакций часто сосредоточена в руках этих поставщиков услуг.

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

Масштабируемость

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

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


Подведем итоги

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

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

  • Получите безопасность на уровне полной ноды практически на любом устройстве, загрузив всего один SNARK, который действует как сертификат для всего блокчейна и конечного хвоста пути Merkle.

  • Используя рекурсивную композицию SNARK’ков, размер блокчейна может оставаться ~20 Кб.

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

Бонус

Вы можете думать о Coda как о блокчейне, сжатом в Покебол. Вместо того, чтобы втиснуть Снорлакса в Покебол, Coda сжимает блокчейн в SNARK.