Уроки по гибкости, масштабу и безопасности в проектировании цифровых схем

Уроки по гибкости, масштабу и безопасности в проектировании …

Loading

Автор оригинальной статьи: Трент МакКонаги (Trent McConaghy) является основателем и техническим директором BigchainDB, масштабируемой базы данных blockchain. В прошлом он разрабатывал алгоритмы ИИ для управления законом Мура и исследования отношений творчества человека и машины.

\n\n

Смарт-контракты являются частью технологии blockchain. Они открывают много полезных функций. На самом деле существует два типа интеллектуальных контрактов: смарт-контракты с учетом состояния хранения (stateful) – самые гибкие из всех; смарт-контракты без учета состояния хранения (stateless) – имеют лучший масштаб и безопасность.

\n\n

Схемы

\n\n

Современные компьютерные системы имеют цифровые схемы в своем ядре нескольких видов:

\n\n

  • Цифровая логика без учета хранения. Не имеет внутреннего состояния; хотя может сочетаться с более крупными системами, имеющими внутреннее состояния. Имеет блоки вида если/тогда, и/или и т.д.
  • Цифровая логика с учетом хранения. Имеет внутреннее состояние. В дополнение к блокам если/тогда имеет узлы, возвращающиеся в систему.

\n

\n\n

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

\n\n

Смарт-контракты

\n\n

Системы смарт-контрактов являются блоком децентрализованного стека. Они обрабатывают бизнес-логику децентрализовано, взаимодействуя бок о бок с файловым хранилищем, базами данных и т.д.

\n\n

Подобно цифровой логике, мы имеем два типа смарт-контрактов:

\n\n

  • Stateless (комбинационный) смарт-контракт. Нет внутреннего состояния.
  • Stateful (последовательный) смарт-контракт. Имеет внутреннее состояние, а также узлы и рекурсии.

\n

\n\n

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

\n\n

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

\n\n

Давайте копнем глубже.

\n\n

Цифровые схемы: что на заднем плане

\n\n

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

\n\n

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

\n\n

Цифровые схемы абстрагируют сигналы двумя способами: сигналы являются двоичными, а не непрерывными; время синхронизируется, и тоже не является непрерывным. Это означает, что цифровые схемы выполняют всю логическую обработку.

\n\n

Давайте посмотрим на цифровую схему ниже. Это полусумматор. Он имеет два входа (A, B), два выхода (S, C). Верхняя часть представляет собой инвертированное или (NOR), нижняя часть – простое И (AND, &). S вычисляется как S = A NOR B. C вычисляется как A и B. Более компактно: S=!(A|B); C=A*B.

\n\n

Вы также можете записать данную схему в виде таблицы истинности: для каждой комбинации значений и можно записать соответствующие выходные значения для S и C.

\n\n

\n\n

Ниже схема полного сумматора. Он имеет три входа — (A, B, Cin), и два выхода — (S, Cout). Выходы вычисляются как: S = !( !(A|B) | Cin). Cout = (!(A|B)*C) |(A*B).

\n\n

Две схемы, которые мы только что рассмотрели, являются комбинационными; они не имеют внутреннего состояния. Сигналы просто перемещаются слева направо, от входов до выходов. Существуют также последовательные схемы, где один из проводов петли справа налево обеспечивает также обратную связь; и имеются блоки «флип-флоп» для сохранения состояния.

\n\n

Современные чипы (ASIC) состоят из цифровых, запоминающих, аналоговых/RF блоков. Блоки памяти и аналоговые/RF блоки разработаны с помощью динамических симуляторов систем, являющихся непрерывными по времени и по стоимости (например, SPICE).

\n\n

Сигналы должны быть мелкозернистыми, так как для создания блока прикладываются огромные усилия (некоторые блоки могут иметь от 10 до 100 транзисторов).

\n\n

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

\n\n

Цифровая схема – хорошо зарекомендовавшая себя дисциплина, более 10 лет назад вошедшая в сферу электронной инженерии. Есть десятки тысяч цифровых инженеров, которые проводят свои дни, проектируя следующие поколения цифровых схем для смартфонов, ПК и т.д. Есть пара сотен компаний, создающих инструменты для проектирования схем; эта отрасль (EDA) — многомиллиардная индустрия, которая также простирается на десятилетия назад.

\n\n

Теперь настало время поговорить конкретнее о смарт-контрактах.

\n\n

Stateless (Комбинационные) смарт-контракты

\n\n

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

\n\n

Сама логика может быть представлена в одном из многих канонических фреймах:

  • Произвольная комбинация входов И/ИЛИ/НЕ;
  • Обычные NAND-входы;
  • Операторы ЕСЛИ/ТОГДА/ИНАЧЕ/НЕ;
  • Таблица, имеющая одну строку для каждого уникального входного вектора и соответствующих выходов;
  • И так далее

\n

\n\n

Может быть одна или несколько выходных переменных. Количество возможных выходов можно вычислить, как 2^(количество входных переменных). Существует множество литературы для упрощенного понимания логических схем (например, Карно) и множество инструментов для их проектирования и анализа.

\n\n

\n\n

Мы можем переводить цифровые логические схемы непосредственно в криптосхемы: логические входы могут быть сигнатурой, временем или фактами. Блоки ИЛИ становятся наполовину мультипозиционными, а НЕ блоки остаются инвертированными. НЕ работает только для входов, являющихся временем и фактами, а не для входных данных, которые являются подписями.

\n\n

Протокол Bitcoin поддерживает комбинационную бизнес-логику. А также виртуальная машина Ethereum (подмножество функциональности EVM) и Bitshares.

\n\n

Протокол Interledger (ILP) является протоколом подмножества, называемый крипто-условиями (CC). Он служит для более четкого определения этих комбинационных схем. Знать CC очень полезно, так как он становится интернет-стандартом через IETF. CC имеет автономные реализации в JavaScript, Python и т.д. BigchainDB, Ripple и другие системы напрямую поддерживают крипто-условия и комбинационную бизнес логику с интеллектуальными контрактами в целом.

\n\n

Математические основы и технологическая инфраструктура, разрабатываемые для цифровой логики на протяжении десятилетий, могут использоваться для проектирования криптограмм. В BigchainDB мы помогаем клиентам в использовании логических схем с блоками И/ИЛИ/НЕ. Когда мы разобрались с дизайном, то далее просто реализуем схему в криптосистемах транзакций BigchainDB. Обычно это занимает всего несколько минут.

\n\n

Stateful (Последовательные) смарт-контракты

\n\n

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

\n\n

В более общем плане последовательная бизнес-логика — это машина Тьюринга, которая принимает последовательность входов и возвращает последовательность выходов. Системы, применяемые на практике, называются системами Тьюринга.

\n\n

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

\n\n

Когда у вас есть внутреннее состояние, проверка становится проще. Количество возможных выходов не равно 2^(количество входов), а скорее равно 2^(количество внутренних переменных состояния), при том, что ваши внутренние переменные являются логическими. Например, если у вас есть комбинация с тремя входами, то получится ¾³ = 8 возможных состояний. Но если это последовательная схема с 32-битным регистром, то для полной проверки вам нужно проверить ²³² = 4,2 миллиарда стеков.

\n\n

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

\n\n

Ethereum — самая известная блокчейн система, которая демонстрирует последовательную бизнес-логику/интеллектуальные контракты, работающие непосредственно по цепочке. То же самое с Lisk, Rchain, Tezos и многими другими.

\n\n

Во многих случаях вам необходима только обработка на стороне клиента. Сам клиент, браузер или мобильная ОС, может выполнять вычисления. Все это приводит к очень простым архитектурам. Вы можете просто написать одностраничный webapp (используя, скажем, JavaScript) или мобильное приложение (используя Swift для IoS), и подключиться к децентрализованной базе данных.

\n\n

Инструменты и найм

\n\n

Сейчас мы находимся на раннем этапе проектирования смарт-контрактов. Формальная проверка уже десятилетия развивается в цифровых схемах. Мы только начинаем видеть ее преимущества в разработке смарт-контрактов. Вскоре появится еще больше инструментов для захвата целевого поведения и компиляции смарт-кода контрактов.

\n\n

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

\n\n

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

\n\n

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

\n\n

Мысли на прощание

\n\n

Существует огромная разница между stateless и stateful смарт-контрактами. Если вы знаете, в какое время использовать тот или иной, у вас есть огромный потенциал в правильном выборе гибкости и масштаба.

\n\n

Хотите узнать больше? Возьмите книгу о дизайне цифровой схемы, например, Вакерли и Рабай (Wakerly and Rabaey).

\n\n

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

\n\n

Благодарности

\n\n

Многие из мыслей здесь основаны на разговорах с коллегой Дими де Йонге. Дими руководит практикой умных контрактов на основе EE. Кроме того, благодарим всех профессоров и коллег из мира электротехники за все предоставленные знания и умения.

\n