Spacechains: как работает это новое предложение сайдчейна Биткойн

Исходный узел: 1544330

Spacechains — это предлагаемая боковая цепь Биткойна, которая предлагает односторонний механизм привязки, использующий конструкцию «слепого слияния».

Идея сайдчейнов как механизма масштабирования и расширения возможностей Биткойна — очень старая концепция. Своего рода базовая идея «предка» сайдчейнов, объединить добытые цепочки, даже восходит к тому времени, когда Сатоши исчез.

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

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

Однако люди продолжают работать над другими конструкциями привязок сайдчейна, которые не являются федеративными. Здесь я собираюсь рассмотреть предложение Рубена Сомсена Spacechain в качестве одного из примеров. Это односторонний механизм привязки, использующий конструкцию шахты со слепым слиянием, аналогичную Пол Шторкх. Это означает, что монеты могут попадать только в сайдчейн и никогда не покидать его, и что майнерам не нужно запускать новое программное обеспечение, чтобы получить компенсацию за майнинг сайдчейна (однако, как я расскажу позже, от этого они могут получить больше выгоды).

Предложение Spacechain

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

Предложенный Сомсеном механизм для этого может использовать ЛЮБОЙ ПРЕДЫДУЩИЙ (APO), чтобы разрешить открытую конкуренцию каждому, кто сможет конкурировать за создание следующего блока боковой цепи, гарантируя, что только один блок может быть зафиксирован на блок основной цепи Биткойна. Еще одним преимуществом предложения Рубена является то, что оно не требует специального софт-форка для возможности развертывания космических цепей. Eltoo/ANYPREVOUT предлагается для преимуществ сети Lightning, обеспечивая гибкие цепочки состояний, а также фабрики каналов. Пространственные цепи — это просто еще одна возможность многих вещей, для которых включение NYPREVOUT проложит путь.

Общая идея его предложения по слепому слиянию майнинга заключается в том, что, используя APO, вы можете заранее определить длинный набор транзакций, которые используют один и тот же исходный UTXO, введенный в них, и обязуются всегда его воссоздавать. Итак, представьте себе один сатоши UTXO, где каждая предварительно созданная транзакция гарантирует, что тот же самый UTXO будет воссоздан в качестве вывода при подтверждении. Думайте об этом как о своего рода маркере: этот специальный UTXO — это идентификатор, который позволяет любому, кто смотрит на основной блокчейн Биткойна, знать: «Здесь я нахожу приверженность блокам боковой цепи X». Однако это оставляет открытой одну проблему: комиссию майнерам. Если этот UTXO необходимо воссоздать с той же суммой, средств для оплаты комиссий не будет.

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

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

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

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

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

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

Чтобы решить эту проблему, в скрипт маркера UTXO можно вставить блокировку относительного времени CHECKSEQUENCEVERIFY (CSV), чтобы гарантировать, что только одна транзакция с использованием маркера UTXO может быть подтверждена внутри одного заданного блока основной цепи.

В целом это выглядит так: 

Источник

Также стоит отметить, что два варианта этого дизайна могут быть реализованы с CHECKTEMPLATEVERIFY (CTV) или вообще без каких-либо изменений. Эти два варианта дизайна просто имеют субоптимальные компромиссы.

Вариант CTV будет использовать эту функциональность для фиксации цепочки транзакций с использованием CTV вместо APO с хаком, включающим подпись внутри скрипта блокировки UTXO. CTV фиксирует все выходные данные транзакции, расходующие CTV UTXO, но не фиксирует никаких входных данных, кроме себя.

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

Итак, здесь нам нужно создать транзакцию полностью вне цепочки транзакций CTV для обязательства боковой цепи по созданию UTXO, которого достаточно для оплаты комиссии за транзакцию CTV (поскольку вы не можете создать новый вывод изменения в в этой транзакции 100% добавляемых вами входных данных идет на комиссию), а внутри транзакции, готовящей комиссию, в UTXO мы фиксируем заголовок блока боковой цепи. Итак, первый шаг: транзакция, создающая вывод с уплатой комиссии и обязательство по заголовку блока боковой цепи. Второй шаг: мы берем выходные данные комиссии и добавляем их в качестве входных данных в транзакцию CTV, которая при подтверждении «майнит» наш конкретный блок сайдчейна. Этот вариант выглядит следующим образом:

Источник

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

Цепочка транзакций начинается с одного UTXO и в цепочке создает два выхода. Первый выход — это маркер UTXO, который сигнализирует о том, что цепочка транзакций связана с конкретной спейсчейном, второй — это UTXO небольшого значения, которое может открыто тратить любой, допускающий присоединение к нему другого входа/выхода. Эта вторая транзакция — это то, где любой может открыто зафиксировать, чтобы быть первым, кто потратит этот второй вывод из цепочки транзакций spacechain и использует его для фиксации заголовка своего блока боковой цепи.

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

Источник

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

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

Эта статья является первой в серии, посвященной основным предложениям по дизайну сайдчейнов, которые были опубликованы для Биткойна с момента первоначального дизайна в 2014 году. Следите за остальным.

Это гостевой пост Шиноби. Высказанные мнения являются полностью их собственными и не обязательно отражают точку зрения BTC Inc или Bitcoin Magazine.

Отметка времени:

Больше от Биткойн-журнал