Что такое Mimble Wimble?

Реализация протокола под названием Mimblewimble, который представляет собой иной способ разработки блокчейна, анонимно представленный в июле 2016 года.

Но чем он отличается от всех других дизайнов блокчейнов? Блокчейн MWC на самом деле представляет собой одну большую транзакцию. Это звучит нелепо и кажется невероятным, но это правда. Мы исследуем мир транзакций MWC и то, как они объединяются, чтобы сформировать блокчейн.

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

Введение в конфиденциальные транзакции

MWC основывается на множестве предыдущих исследований, проведенных в области Bitcoin. В основе его дизайна лежат конфиденциальные транзакции, что означает, что все суммы скрыты. Но он не использует эту идею в том виде, в каком она была изначально описана в документе, а улучшает её. Выход в конфиденциальной транзакции описывается как набор случайных символов и чисел для любого наблюдателя, например, 09fe4d4d2aa97ba9c52ea494c967bddb12d1e394bbe91692e53.

Что делает Mimblewimble иначе, так это то, что эта случайная последовательность содержит информацию как о сумме, так и о владельце, но не раскрывает ни то, ни другое - в оригинальном документе она содержит только информацию о суммах. В Mimblewimble нет понятия скрипта или адреса, выход - это просто случайная последовательность символов. Основная идея конфиденциальных транзакций заключается в том, что они доказывают, что сумма входных сумм минус сумма выходных сумм равна нулю, но делают это так, чтобы не раскрывать суммы. Этот баланс между суммами также должен соблюдаться для каждой транзакции Bitcoin (мы игнорируем комиссии для простоты). Bitcoin доказывает это, делая суммы публичными, чтобы любой мог проверить, что транзакция сбалансирована и не созданы новые деньги. Мы не будем углубляться в криптографию конфиденциальных транзакций, важно знать, что она доказывает баланс транзакции без раскрытия сумм. Теперь, когда мы знаем, как выглядят выходы, давайте посмотрим, как выглядит транзакция MWC.

Есть некоторая сложность в доказательстве того, что Σinput.amount - Σoutput.amount = 0 без раскрытия сумм, потому что возможно, что кто-то попробует закодировать в этой случайной последовательности отрицательную сумму, что позволит создать монеты из воздуха. Чтобы предотвратить это, нужно доказать, что сумма, скрытая выходом, находится в определенном диапазоне неотрицательных чисел, но сделать это так, чтобы не раскрывать саму сумму. Это достигается с помощью того, что называется доказательством диапазона без раскрытия (zero knowledge rangeproof), и каждый выход сопровождается таким доказательством диапазона. Мы не будем говорить о доказательствах диапазона в этом посте, потому что они не помогают понять Mimblewimble, достаточно знать, что они должны быть включены из-за некоторых деталей.

Транзакция MWC

Транзакция в MWC состоит из 3 наборов. Набор входов, набор выходов и набор ядер. Мы уже знакомы с идеей выхода из Bitcoin - его можно представить как кучу денег, которая видна публично и имеет владельца. Вход на самом деле представляет собой расходуемый выход, представление одинаковое. Как упоминалось в предыдущем разделе, выходы (а следовательно и входы) не показывают свои суммы, поэтому их можно представить как мешки с деньгами, где сумма никому не видна. Ядра - это нечто, что было введено в белую книгу Mimblewimble, но автор назвал это Избытком в документе. Нам не обязательно знать, как выглядит ядро, достаточно знать, что оно служит доказательством того, что транзакция действительна. Ядро транзакции:

  • доказывает, что транзакция не теряет монет и не создает новые из воздуха - Σinput.amount - Σoutput.amount = 0
  • доказывает подлинность транзакции, то есть все владельцы входов и выходов согласились с этой транзакцией

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

Ядро - это очень маленький кусочек данных ~100 байт, содержащий только случайную точку кривой и подпись. Нам не нужно знать эти детали, чтобы понять основную идею Mimblewimble и MWC, поэтому мы пропустили внутренние детали, но эти 100 байт данных доказывают как отсутствие инфляции, так и подлинность транзакции!

images/qr_code_anatomy.png

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

Агрегация транзакций

MWC позволяет нам объединить две транзакции в одну. Мы называем это агрегацией транзакций, но в пространстве Bitcoin это известно как CoinJoin. Этот CoinJoin более мощный, чем в сети Bitcoin, потому что вам не нужно подбирать суммы, так как они не видны, и это не требует от владельцев транзакций собираться вместе и выполнять CoinJoin интерактивно. Это означает, что любой, кто видит две транзакции MWC, может просто объединить их в одну транзакцию. Транзакция, после объединения, не может быть разделена обратно никем, кто не видел транзакции до их агрегации.

Предположим, у нас есть следующие две транзакции

images/qr_code_anatomy.png

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

images/qr_code_anatomy.png

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

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

Упрощение транзакций

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

Предположим, у нас есть следующая транзакция

images/qr_code_anatomy.png

Теперь рассмотрим другую транзакцию, которая тратит одну из выходов первой транзакции

images/qr_code_anatomy.png

Теперь мы объединяем