Сайдчейн-элементы: технические подробности
Сайдчейн-элементы: технические подробности
Sidechain Elements — это открытый исследовательский проект, имеющий целью подстегнуть экспериментирование с инновационными биткойн-технологиями и ускорить их внедрение. “Элементы” — это функции, исследуемые и разрабатываемые сообществом криптовалютных экспертов. Удачные разработки можно будет реализовать в виде сайдчейнов.
Разрабатываемые элементы
Конфиденциальные транзакции
Главный исследователь: Грег Максвелл [технические подробности]
Конфиденциальные транзакции — одна из самых мощных и востребованных функций, исследуемых в рамках проекта. Это такие транзакции, которые скрывают информацию о переводимых суммах от всех, кроме участников транзакции (и указанных ими сторон), но при этом криптографически гарантируют, что потратить можно будет только переведенные монеты.
Это укрепляет конфиденциальность блокчейна Биткойна, который предоставляет исчерпывающую информацию о совершенных транзакциях, хоть и псевдонимных. Нарушение финансовой конфиденциальности может иметь плачевные последствия для бизнеса и личной жизни. Например, без адекватной защиты воры и мошенники могут сосредоточить свои усилия на богатых пользователях, а непорядочные коммерсанты могут узнать детали бизнеса конкурентов, чтобы получить преимущества на переговорах.
Конфиденциальные транзакции требуют введения адресов нового типа (“конфиденциальных адресов”). Они длиннее обычных, потому что включают также “ослепляющий” ключ (blinding key). В альфа-сайдчейне такие адреса используются по умолчанию.
Отделенные свидетели
Главный исследователь: Питер Вуйль
В альфа-сайдчейне спецификация результатов транзакции, фиксируемых в сайдчейне, отделена от данных, подтверждающих ее действительность (в криптографии такие данные называют “свидетелем” [“witness”]). Это устраняет все известные формы изменчивости транзакций и позволяет существенно оптимизировать блокчейн за счет удаления ненужных данных.
Биткойн-транзакции содержат как информацию о влиянии транзакции на блокчейн (тратимые UTXO, адреса и суммы), так и данные, подтверждающие, что транзакция действительна (входные подписи). С отделенными свидетелями идентификаторы транзакций переопределяются так, чтобы они зависели только от информации, добавляемой в блокчейн, а подтверждение блоков осуществляется отдельно согласно “показаниям свидетелей”. Это обеспечивает несколько преимуществ:
- Для Биткойна уже выдвигались некоторые предложения по “нормализации идентификаторов транзакций”, но все они обобщены в отделенных свидетелях, которые более эффективны и удобны в использовании, потому что предложенные нормализованные идентификаторы транзакций все же требуют перезаписи зависимых транзакций после изменения входов. Нормализация необходима для протоколов более высокого уровня, таких как Lightning.
- Поскольку идентификаторы транзакций больше не охватывают подписи, они полностью устраняют изменчивость транзакций — на гораздо более фундаментальном уровне, чем предложено в BIP62. Это позволяет безопасно использовать дополнительные блоки контрактов.
- Открывается потенциал для более эффективного подтверждения создания выходов при упрощенном подтверждении платежей (которое используется в облегченных клиентах), потому что подписи можно удалить из транзакций без нарушения структуры дерева Меркла. Узлы, которые не хотят хранить или проверять подписи старых транзакций, могут удалить данные свидетелей с диска или даже вообще не использовать их, что позволяет значительно сэкономить место на диске для хранения блокчейна и пропускную способность для его передачи.
Относительное время блокировки
Главный исследователь: Марк Фриденбах
В альфа-сайдчейне подписанный вход транзакции может оставаться недействительным в течение определенного интервала времени после подтверждения соответствующего выхода. Это необходимо, чтобы можно было заменять транзакции по согласию.
У каждой монеты, которая тратится в ходе биткойн-транзакции, есть порядковый номер. Вероятно, первоначальная идея состояла в том, что майнеры должны предпочитать наибольший порядковый номер меньшим номерам. Это никогда не было реализовано, но в частично написанном коде, похоже, предполагается, что майнеры будут честно предпочитать наибольшие порядковые номера, даже если меньшие гораздо более прибыльны. Это опасное предположение, и большинство считало такую замену по порядковому номеру бесполезной, потому что гарантировать “честное” поведение никак нельзя, поскольку даже несколько рациональных (максимизирующих прибыль) майнеров полностью нарушили бы эту схему. Разрабатываемый элемент заполняет этот пробел, позволяя отказаться от каких-либо предположений в отношении майнеров. Новый опкод CHECKSEQUENCEVERIFY позволит проверять эти ограничения в биткойн-сценариях.
Относительное время блокировки можно использовать с теми же целями, что и абсолютное (например, в эскроу-сервисах), но оно особенно интересно в приложениях, где блокчейн используется в качестве коммуникационной среды. Например, время согласования двунаправленной привязки сайдчейна наиболее естественно выражается с помощью относительной временной блокировки, которая начинается с транзакции, подтверждающей вывод средств из главного блокчейна.
Проверка подписей по схеме Шнорра
Главный исследователь: Патрик Стрейтмен
Вместо подписей ECDSA поверх кривой secp256k1 с DER-кодированием оператор CHECKSIG и связанные с ним операторы теперь используют плотно упакованные подписи Шнорра поверх той же кривой. Это обеспечивает указанные ниже преимущества.
- Эффективные пороговые подписи “n из n”. Из нескольких подписей Шнорра можно создать подпись, действительную для суммы открытых ключей. Это позволяет использовать произвольно большую мультиподпись “n из n”, указав лишь одну суммарную подпись, которую можно проверить с помощью единственной операции CHECKSIG.
- Меньшие подписи (64 байта вместо 71-72) без проблем, связанных с использованием кодировки DER. Потенциальная подержка пакетной проверки (до двукратного ускорения при одновременной проверке групп из 32 подписей). Для этого требуется знание координаты R.y (в ECDSA она игнорируется), а на уровне сценария — гарантия того, что любая неудачная проверка подписи приведет к сбою сценария (т. е. все операторы CHECKSIG должны работать как CHECKSIGVERIFY).
- Доказуемая невозможность изменчивости подписей, тогда как в ECDSA подписи изменчивы. Обратите внимание, что благодаря отделенным свидетелям изменчивость подписей не приводит к изменчивости транзакций.
- Ускорение подписания и проверки подписей в сравнении с ECDSA.
- Новые опкоды
Главный исследователь: Патрик Стрейтмен
В альфа-сайдчейнах доступны несколько новых опкодов.
- Отключенные опкоды. Когда-то Биткойн поддерживал больше опкодов Script, чем доступно сейчас. Многие из них были отключены в 2010 году из соображений безопасности, и чтобы снова включить их, требуется хард-форк. Некоторые из них (но не все) связаны со значительным риском, таким как неограниченное использование памяти. В альфа-сайдчейнах заново задействуются безопасные отключенные опкоды таких команд, как конкатенация строк, выделение подстрок, сдвиг целых чисел и несколько побитовых операций.
- Реализована новая операция DETERMINISTICRANDOM, которая генерирует случайное число в указанном диапазоне по начальному значению.
- Реализована новая операция CHECKSIGFROMSTACK, которая проверяет подпись по сообщению в стеке, а не по самой транзакции траты средств.
Новые опкоды можно использовать для решения таких задач, как создание долговых обязательств с защитой от двойной траты, проведение лотерей, конструирование деревьев Меркла для мультиподписей “1 из N” с большими значениями N (до нескольких тысяч) и вероятностные платежи.
Подпись, охватывающая значение
Главный исследователь: Гленн Виллен
Подписи, проверяемые с помощью оператора CHECKSIG, теперь охватывают выходы потраченных входов. Благодаря этому устройствам для подписания транзакций не нужно знать полные предыдущие транзакции, выходы которых тратятся; в случае мошенничества итоговая подпись в любом случае будет недействительна.
Побочный эффект этого изменения заключается в том, что для подписания транзакций теперь должны быть известны значения, полученные входами транзакции.
Детерминистические привязки
Главный исследователь: Мэтт Коралло
Детерминистические привязки позволяют переводить в сайдчейн Elements Alpha монеты из тестовой сети. Эти переводы проверяются всеми полными узлами — возможно, с помощью RPC-вызова узла тестовой сети. Вывод средств из сайдчейна выполняется федерацией пользователей, которым доверено хранение монет для Alpha.
Как и другие альтернативные блокчейны, сайдчейны также можно защищать с помощью совместного майнинга. Однако во время развертывания нового сайдчейна без точной синхронизации совместного майнинга будет наблюдаться период сниженного хешрейта. Из-за этого на ранних этапах развертывания сайдчейна он может оказаться уязвимым даже для злоумышленника с не очень большой вычислительной мощностью. Поскольку синхронизировать децентрализованный биткойн-майнинг проблематично, нам нужен безопасный механизм развертывания сайдчейнов. В этом релизе используется федерация доверенных пользователей, а в более поздней версии мы собираемся перейти на совместный майнинг.
Подписанные блоки
Главвный исследователь: Хорхе Тимон
Подтверждение работы SHA256d заменено системой сценариев, которая подписывает только блоки, но не транзакции. Иначе говоря, подпись DMMS (Dynamic Membership Multi-party Signature) заменена подписью SMMS (Static Membership Multi-party Signature). В прошлом это решение описывали как “частные блокчейны”.
В Elements Alpha для перевода средств в сайдчейн и подписания блоков транзакций требуется помощь доверенных пользователей. В будущем релизе мы планируем заменить подписание блоков совместным майнингом, хотя переводить транзакции в главный блокчейн по-прежнему будут доверенные лица. Подписанные блоки обеспечивают обработку транзакций до реализации совместного майнинга. Позднее доверенные пользователи будут заменены полностью децентрализованным механизмом двунаправленных привязок.
Предлагаемые элементы
Выпуск активов
Главный исследователь: Хорхе Тимон
Пользователи могут выпускать собственные активы, которые теоретически могут представлять ваучеры, купоны, валюты, депозиты, облигации, акции и т. д. (согласно регуляторным требованиям в соответствующей юрисдикции).
Это открывает возможности для создания бирж “без доверия”, опционов и других смарт-контрактов, работающих с произвольными активами и “базовой монетой” (базовый актив, идентификатор которого равен хешу генезис-блока или идентификатору цепи; в случае альфа-сайдчейнов это монета с федеративной привязкой, обеспеченная монетами тестовой сети, см. раздел “Детерминистическая привязка”).
Все выходы помечаются идентификатором актива. Правила консенсуса изменяются так, чтобы общее количество входов и выходов транзакции проверялось по отдельности для каждого актива. Добавляется новый тип транзакций для создания активов (транзакции определения активов). Как и coinbase-транзакции, транзакции определения активов имеют вход null, но, в отличие от них, еще и дополнительные входы. Это не только помогает различать транзакции разных типов, но и предоставляет источник энтропии для создания идентификатора актива (который представляет собой sha256d-хеш транзакции). Транзакция определения актива может включать любое количество выходов с нулевым идентификатором актива — они интерпретируются как первоначальные непотраченные выходы нового актива.
Эта технология во многих отношениях похожа на цветные монеты, но явная пометка монет на основе консенсуса обеспечивает ряд преимуществ:
- Это обеспечивает более эффективную поддержку кошельков с упрощенной проверкой платежей.
- Это делает возможными более сложные контракты, исполняемые согласно консенсусу.
- Это позволяет задействовать другие расширения, основанные на консенсусе (например, цветные монеты не были бы совместимы с конфиденциальными транзакциями в альфа-сайдчейне).
- Это открывает возможности для разработки других основанных на консенсусе расширений, способных работать с разными активами.
В настоящее время для выплаты комиссий можно использовать только базовую монету, но в будущем их можно будет платить для активов разных типов. В первой версии все активы конкретного типа необходимо выпускать в транзакции определения актива. В будущих версиях можно будет определять активы с динамическим предложением, увеличивающимся после определения, чтобы эмитент мог создавать новые экземпляры актива. Кроме того, в будущих версиях может быть реализована процентная ставка, интересная в контексте пирингового кредитования и выпуска активов со встроенным демерреджем (отрицательным процентом).
Битовые маски
Главный исследователь: Гленн Виллен
Новый оператор CHECKSIG2 позволяет использовать произвольные битовые маски входов и выходов, которые могут быть перезаписаны майнерами. Это обеспечивает поддержку блее сложных договорных схем предварительных обязательств, таких как подписанные предложения на распределенных биржах активов.
Тестовая сеть для разработчиков
Чтобы сообществу было легче протестировать новейшие Элементы, мы объединили их в сайдчейнах для разработчиков. Первый релиз, Elements Alpha, включает сеть и сайдчейн, прикрепленные к тестовой сети Биткойна. Как и у Биткойна, весь исходный код проекта открыт, и мы приглашаем других участников внести свой вклад в развитие проекта. Elements Alpha задумывается как демонстрация технологии и тестовая среда. По мере развития технологии этот тестовый сайдчейн можно будет легко заменить. Привязка Elements Alpha к тестовой биткойн-сети в настоящее время выполняется с помощью централизованного адаптера протокола (см. приложение А в официальной статье о сайдчейнах). Перевод монет из тестовой сети в сайдчейн (см. раздел “Детерминистические привязки”) и генерирование блоков (см. раздел “Подписанные блоки”) осуществляются с помощью проверяемой федерации подписантов. Это позволяет немедленно приступить к исследованию возможностей сайдчейна, но снижает безопасность. В будущем релизе мы планируем обновить адаптер протокола, чтобы обеспечить поддержку полностью децентрализованного совместного майнинга сайдчейна, а в конечном итоге реализуем полный механизм двунаправленной привязки сайдчейнов.
Источник: elementsproject.org