Truebit Protocol (TRU) - масштабируемое вычисление без доверия

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

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

Но на пути есть препятствия.

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

Проблема: децентрализованные вычисления

Напишите код в Solidity, скомпилируйте его в байт-код EVM (виртуальная машина Ethereum) и отправьте в блокчейн. С этого момента код выполняется каждый раз, когда транзакция отправляется на адрес. Механизм консенсуса блокчейн является избыточным по своей конструкции: все майнеры выполняют вычисления и приходят к соглашению о результатах.

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

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

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

Таким образом, вычисления дороги и ограничены.

Truebit решает эту проблему.

Он делает это, перемещая вычисления вне сети; и проверка его правильности с помощью интерактивного криптоэкономического протокола.

Решение: вычисление, поддающееся проверке вне сети

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

Контракты Truebit

API для взаимодействия с протоколом Truebit прост: единственная функция в смарт-контракте Truebit, называемая createTask.

Dapp вызывает функцию createTask , передавая следующее:

  • программа: программный код. Truebit использует виртуальную машину WebAssembly; dapp может передавать байт-код напрямую - или, что более вероятно, включать хэш IPFS или другое адресное место для кода.
  • входы: входы в программу. Приложение может предоставить их напрямую или указать их адресное местоположение.
    вознаграждение: вознаграждение, выплачиваемое тому, кто запускает эту программу.

Dapp создает задачу Truebit

Для наглядности рассмотрим два тематических исследования.

Livepeer, платформа для децентрализованных вычислений, хочет проверить правильность работы транскодера. Они вызывают функцию Truebit createTask , передавая FFmpeg в качестве программы и фрагмент видео в качестве входных данных.

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

Эта функция создает новую задачу в контракте Truebit.

Сеть Truebit

Truebit - это вычислительная площадка.

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

Майнеры Truebit слушают задачи

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

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

Solver отправляет решение

Таймер запускается. В течение этого параметра challengeTimeout любой Truebit Verifier может отправить вызов предлагаемому решению вместе со своим собственным депозитом.

Кейс №1: никаких проблем.

Это ожидаемый случай. Решатель правильно запустил программу. Решение остается неизменным в течение времени ChallengeTimeout и поэтому считается правильным.

Контракт Truebit выполняет обратный вызов приложения с решением.

TaskGiver получает обратный вызов с результатом

Кейс №2: подана заявка.

Проверяющий отправляет вызов вместе с депозитом. Сейчас спор.

В контракте есть первоначальный платеж, предоставленный TaskGiver , депозит от Solver и депозит от Challenger.

Проверяющий отправляет запрос.

Начинается интерактивная проверочная игра между Решателем и Претендентом.

Проверочная игра

Обратите внимание, что задача Truebit - это программа WebAssembly, набор инструкций, которые выполняются одна за другой.

Простая программа на C (слева) и ее скомпилированный текстовый формат WebAssembly (справа).

Претендент начинает игру.

И у Решателя, и у Претендента была одна и та же начальная точка - в состоянии 0 они загружали пустую виртуальную машину, имели одну и ту же программу и одинаковые входные данные (как диктуется описанием задачи в цепочке). В состоянии 0 они согласились.

В конце программы, допустим, у нее 14 инструкций, они получили разные результаты. Таким образом, в состоянии 14 они не согласились.

Решатель и Претендент соглашаются с состоянием 0 и не соглашаются с состоянием 14.

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

Претендент запрашивает состояние Решателя.

Используя виртуальную машину Truebit WebAssembly, Solver вычисляет хэш их состояния. Это корень Меркла, полученный из стеков, памяти и всего состояния виртуальной машины WebAssembly Solver. Решатель отправляет этот корень в контракт в ответном сообщении.

Решатель и Претендент играют в проверочную игру.

Теперь Challenger вычисляет собственное состояние Merkle Root локально и сравнивает со значением, предоставленным Решателем.

Если два значения совпадают, они делают вывод, что расхождение произошло во второй половине вычислений. Если эти два значения различаются, они делают вывод, что разногласия возникли в первой половине.

Для иллюстрации давайте представим, что два корня состояний одинаковы.

Претендент имеет тот же корень состояния, что и Решатель в состоянии 7.

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

Претендент запрашивает следующую середину.

Решатель отвечает.

Претендент замечает, что у них один и тот же корень в состоянии 10. Затем они запрашивают правую среднюю точку; т.е. для состояния 12.

Претендент запрашивает следующую середину.

Интерактивная игра продолжается.

Претендент подталкивает Решателя к первой точке разногласий, используя двоичный поиск. Игра занимает O (log (n)) шагов, где n - общее количество инструкций в программе.

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

Спор: инструкция переходит из состояния 12 в состояние 13.

На этом этапе вычисление достаточно мало, чтобы контракт Truebit инициализировал виртуальную машину с предварительным состоянием и запускал оспариваемую инструкцию в цепочке.

Сетевой интерпретатор WebAssembly выполняет оспариваемую инструкцию.

Рассчитывается корень Меркла состояния, и если он отличается от предоставленного Решателем, их депозит сокращается.

Вот и все!

Мы переносим все вычисления в автономный режим и используем Ethereum для выполнения одной инструкции в случае возникновения спора.

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

Модульная архитектура:

Truebit - это модульная система, которую можно разделить на три уровня:

Модульная архитектура Truebit.

  • Уровень вычислений: это виртуальная машина WebAssembly (или более ограниченный конечный автомат, например, в нашей интерактивной конструкции скрипта для моста Doge-Etheruem). Это требует реализации вне цепочки и в цепочке. Интерпретатор Truebit WebAssembly является детерминированным, измеряемым и имеет возможность создавать деревья Меркла своего внутреннего состояния.
  • Уровень разрешения споров: это интерактивная игра между двумя сторонами; игра проверки, включающая множественные вызовы запроса-ответа между Решателем и Верификатором.
  • Слой поощрения: он включает в себя награды, депозиты, выбор решателя и претендента, а также механику токенов.

Уровни будут взаимодействовать через четко определенные интерфейсы.