Мир новых технологий (обзоры, новинки)
Содержание
В Биткойн-сообществе уже долгое время не утихают споры на тему проблемы масштабирования блокчейна Биткойна. Энтузиасты то и дело предлагают новые идеи и решения. В частности, введение платёжных каналов, обещает решение для проблемы масштабирования. В этой статье рассматриваются механизмы работы платёжных каналов в Биткойне и Эфириуме.
Нельзя отрицать, что Биткойн и Эфириум становятся всё более и более популярными. Вот график числа ежемесячных транзакций Биткойна в разные годы:
А вот число ежедневных транзакций Эфириума в разные годы:
Хотя это хороший знак, показывающий, что криптовалюты широко используются и принимаются, но в последнее время обнаружилась большая проблема. Из-за внезапного роста числа транзакций Биткойн и Эфириум столкнулись с серьёзными проблемами масштабируемости.
Проблемы масштабируемости обусловлены тем, как устроена система открытого реестра. Допустим, Алисе нужно отправить Бобу 1 BTC. Как будет происходить этот процесс? Алиса не может передать Бобу деньги в физическом виде, ведь биткойн – цифровая валюта. Транзакция пройдёт следующим образом:
Так где же тут проблема?
Скорость проведения транзакции зависит от майнеров.
Когда число транзакций растёт, майнеры просто не поспевают их все проводить. Вследствие того, что транзакции подтверждаются недостаточно быстро, образуется длинная очередь.
Кроме того, существует также вопрос комиссий за транзакции. Когда майнеры добывают блок, они становятся его временными диктаторами. Это значит, что они могут задать номинальную комиссию за включение данных о транзакции в свои блоки. Однако пользователи могут заплатить более высокую комиссию, чтобы мотивировать майнеров подтвердить их транзакцию быстрее и таким образом перепрыгнуть другие транзакции, стоящие в очереди.
К сожалению, это ведёт к большой проблеме.
Обычным пользователям Биткойна, которые платят нормальную комиссию, часто приходится долго ждать подтверждения своих транзакций. Давайте посмотрим, сколько в среднем пришлось бы ждать, если бы вы заплатили минимальную комиссию.
Среднее время подтверждения (в минутах)
Если вы заплатите минимальную возможную комиссию, то вам придётся в среднем ждать 13 минут, пока ваша транзакция пройдёт. 13 минут! Чаще всего транзакциям приходится ждать, пока будет добыто несколько новых блоков (в Биткойне блок добывается в среднем раз в 10 минут), потому что ближайшие блоки уже заполнены транзакциями.
В случае Биткойна всё выглядит достаточно мрачно. Посмотрим же, как идут дела у Эфириума.
Теоретически, Эфириум должен обрабатывать 1000 транзакций в секунду. Но на практике Эфириум ограничен лимитом газа 6,7 млн на один блок.
График среднего лимита газа Ethereum (в днях)
Так как у каждого блока есть лимит газа, майнеры могут включить в него только те транзакции, чья сумма газа не превышает лимит газа для блока.
Это, опять же, ограничивает число транзакций, которые могут быть включены в блок.
Эфириум обрабатывает только 20 транзакций в секунду, а Биткойн – 7. Если сравнить это с тем фактом, что PayPal обрабатывает 193 транзакции в секунду, а Visa – 1667, то можно увидеть, почему это большая проблема, требующая быстрого решения.
Один способ, каким Биткойн решает проблему масштабирования, – это SegWit и увеличение размера блока. Однако в этой статье мы сосредоточимся на двух очень интересных предложениях, которые могут не только решить проблемы масштабирования, но и позволить проводить тысячи транзакций в секунду. Это:
Прежде чем мы в них углубимся, необходимо объяснить две вещи.
Канал состояния – это двусторонний коммуникационный канал между участниками, позволяющий им проводить вне блокчейна транзакции, которые обычно происходят на блокчейне. Это экспоненциально сокращает время транзакции, так как подтверждение вашей транзакции больше не зависит от третьей стороны, такой как майнер.
Что же требуется для канала состояния вне блокчейна?
Согласно основателю Slock.it Стивену Туалу, каналы состояния могут закрываться в предварительно заданный участниками момент. Это может быть:
Итак, на картинке выше мы видим электромобиль, напрямую взаимодействующий с заправкой и совершающий транзакции на общую сумму $39,19. Наконец, после ряда взаимодействий, вся сумма транзакций добавляется в блокчейн. Представьте, сколько времени понадобилось бы, чтобы проводить каждую отдельную транзакцию через блокчейн!
Платёжный канал – это, по сути, канал состояния, имеющий дело исключительно с платежами и микроплатежами между сторонами. Напомним, все взаимодействия в канале могли бы происходить в блокчейне, но происходят вне его. Существует несколько типов платёжных каналов, так что рассмотрим некоторые из самых популярных.
Один из самых ранних примеров платёжного канала предложил сам Сатоши Сакамото.
Эта система использует некоторые интересные свойства:
nLocktime – это параметр, задающий время, раньше которого транзакция не может быть принята в блок. Концепция достаточно проста. Есть значение UINT_MAX, и nSequence не может превышать это число. Представьте, что есть неподтверждённая транзакция, которую можно изменять, прежде чем она будет включена в блок при достижении времени nLocktime ИЛИ достижении nSequence значения UINT_MAX. При каждой замене порядковый номер увеличивается.
Тем не менее с этим вариантом было связано много проблем безопасности, и он так и не был должным образом реализован.
Прежде чем продолжить, необходимо отметить две вещи.
Во-первых, выражаем благодарность Дэвиду Хардингу за объяснение платёжных каналов версии Шпильмана и CLTV.
Во-вторых, нужно объяснить, что такое адрес с мультиподписью P2SH.
В Биткойне есть два типа адресов:
«Нормальный» адрес Биткойна выглядит так: 15fXdTyFL1p53qQ8NkrjBqPUbPWvWmZ3G9. Это обычный адрес P2PKH. Чтобы потратить биткойны, отправленные на этот адрес, нужно просто произвести дешифровку с помощью соответствующего приватного ключа и получить доступ.
Но в Биткойне можно присваивать более гибкие условия расходования. Можно создавать не только простые транзакции P2PKH. Народ это быстро понял и начал экспериментировать со scriptPubKey в языке сценариев Биткойна (Script).
Вот как выглядит простая транзакция с 1 входом и 1 выходом:
scriptPubKey в выходе (Output) фактически задаёт условия расходования. Можно добавить к scriptPubKey свои строки кода и задать собственные условия расходования. Разработчики предвидели это и, чтобы отправители не могли вставлять в условия длинные строки кода, разрешили вставлять только хеш условий. Эти условия называются redeem script (сценарий погашения). В транзакции P2SH scriptPubKey содержит только хеш redeem script. Сам сценарий раскрывается и проверяется только при транзакции расходования.
С этим связано кое-что очень важное. Так как проверка сценария происходит только при транзакции расходования, ответственность по предоставлению полного redeem script переходит от отправителя к получателю. Это, в свою очередь, даёт ряд преимуществ:
Таково общее объяснение того, что такое адрес с мультиподписью P2SH. Адрес, платящий не на публичный адрес, а на хеш сценария. Теперь вернёмся к примерам платёжных каналов.
Данный тип платёжных каналов был описан в рассылке для разработчиков Биткойна и был реализован в «bitcoinj». Версия Шпильмана использует две разных транзакции: депозит и компенсация. Давайте рассмотрим процесс:
Хотя версия Шпильмана была полезна для создания платёжных каналов, обеспечивающих честность продавцов, она всё же была подвержена пластичности. Когда Боб передаёт транзакцию депозита, она должна быть побайтово идентичной транзакции компенсации. В противном случае транзакция компенсации больше недействительна.
Чтобы решить эту проблему, после BIP 65 были реализованы платёжные каналы версии CLTV. Вот как они работают:
Главное преимущество этого метода над версией Шпильмана – устранение уязвимости к пластичности. В версии Шпильмана Боб был ограничен необходимостью передать депозит, побайтово совпадающий с компенсацией. Теперь же такая необходимость отпала. Эти каналы используют код операции OP_CLTV, активированный благодаря BIP 65.
Хешированные контракты с блокировкой по времени, или HTLC, – одно из самых удобных применений платёжных каналов. Протокол Lightning – это фактически реализация HTLC. Что же такое HTLC? Мы уже встречались с каналами, использующими блокировку по времени. HTLC их «расширяет», добавляя к таймлокам «хешлоки».
HTLC позволяет открывать платёжные каналы, где средства могут переводиться между сторонами до предварительно согласованного срока. Эти платежи подтверждаются с помощью криптографических доказательств. Ещё одно замечательное свойство HTLC в том, что он позволяет стороне отчуждать полученные платежи и возвращать их плательщику. Кроме того, возможны платежи между разными каналами.
Благодаря HTLC также появилось ещё одно удивительное свойство, а именно кроссчейн-транзакции. Это называется атомарным кроссчейн-обменом и позволяет пользователям обменивать криптовалюту в одном блокчейне (например, биткойны в главном блокчейне) на криптовалюту в другом блокчейне (биткойны в сайдчейне).
Представьте, что Алиса отправляет средства Чарли через Боба.
Сеть Lightning – это действующая вне блокчейна микроплатёжная система на основе HTLC, предназначенная для того, чтобы ускорить платежи в блокчейне. Её придумали Джозеф Пун и Таддеус Драйджа в своём whitepaper, где они намеревались решить проблемы лимита размера блока и задержек транзакций. Сеть работает поверх Биткойна, и её часто называют «вторым уровнем».
Как отмечает Джимми Сонг в статье на Medium:
«В сети Lightning создаются транзакции с двойной подписью. То есть, создаётся новый чек, который, чтобы быть действительным, должен быть подписан обеими сторонами. В чеке указывается, сколько одна сторона отправляет другой. По мере того как одна сторона переводит другой новые микроплатежи, сумма в чеке меняется, и обе стороны подписывают результат».
Перечислим некоторые свойства, которые возможны благодаря сети Lightning:
Несмотря на всё её великолепие, перед сетью Lightning стояло одно препятствие, которое нужно было преодолеть. Сеть Lightning, как и все виды платёжных каналов, подвержена пластичности транзакций.
Прежде чем мы поймём, что такое пластичность транзакций, важно вкратце напомнить об одной из важнейших функций криптоэкономической модели – хешировании. Ранее мы написали подробную статью о хешировании. Если кратко, то хеш-функция принимает вход любой длины, но длина выхода всегда фиксирована.
Но для того, чтобы понять «баг пластичности транзакций», как его называют, необходимо знать о ещё одной функции хеширования. Малейшее изменение входа существенно изменит хеш на выходе.
Например, взгляните на этот тест, который мы проделали с используемым в Биткойне алгоритмом хеширования SHA-256:
Видите?
Мы лишь заменили большую букву «T» на маленькую, и посмотрите, что произошло с выходом!
Ещё одно, что вам необходимо понять о блокчейне, – это его неизменяемость, то есть, как только данные добавлены в блок, они не могут быть изменены. Хотя это предоставляет защиту от вмешательства, было одно слабое место, которое никто не предвидел.
Что если данные были изменены ещё до включения в блок? Даже если об этом позже узнают, с этим ничего невозможно поделать, потому что после включения в блок данные нельзя оттуда удалить! Именно поэтому пластичность транзакций представляет проблему.
Каждая транзакция Биткойна имеет данные входа и выхода.
Давайте, в частности, рассмотрим данные входа:
Здесь содержится число принятых входов транзакций и данные о подписи. С данными о подписи связано две проблемы:
По сути, из-за манипуляции данными о подписи может создаться видимость, что транзакция вообще не состоялась. Рассмотрим на примере.
Допустим, Боб хочет, чтобы Алиса отправила ему 3 BTC. Алиса создаёт транзакцию на 3 BTC на публичный адрес Боба, после чего отправляет её майнерам на подтверждение. Пока транзакция ждёт в очереди, Боб использует пластичность транзакции, чтобы изменить подпись Алисы и ID транзакции.
Теперь существует вероятность, что эта изменённая транзакция будет подтверждена раньше транзакции Алисы, а следовательно, заменит её. Когда Боб получит 3 BTC, он может просто сказать Алисе, что не получал их. Алиса увидит, что её транзакция не прошла, и отправит её повторно. Как следствие, Бол получит 6 BTC вместо 3 BTC.
Давайте расставим всё по своим местам. Может ли пластичность окончательно подорвать протоколы Lightning? Нет. Но она может сделать всю процедуру медленной и неприятной. Изменённые транзакции будут застревать в канале на разных шагах. Это можно полностью решить, только введя в систему доверие или задав чрезвычайно неудобные задержки по времени. Это нежелательно по многим причинам:
Таким образом, для того чтобы сеть Lightning смогла массово использоваться, необходимо было решить проблему пластичности, и такое решение предоставил SegWit.
Концепция SegWit (Segregated Witness, «отделённый свидетель») очень проста. Если большинство проблем связаны с данными о подписях в блоках, то почему бы просто не перенести их на параллельный сайдчейн? По сути, все транзакции минус данные о подписях помещаются в главный блокчейн, а все данные о подписях – в сайдчейн.
Вот как выглядит блок после SegWit:Таким образом, изъятие данных о подписях из транзакций позволило убить сразу двух зайцев: в блоке оказалось больше места, и транзакции избавились от пластичности. SegWit одновременно решил проблему пластичности и подготовил почву для беспрепятственной интеграции сети Lightning.
Версия протокола Lightning в Эфириуме называется Raiden. В Эфириуме проходит 20 транзакций в секунду. Чтобы увеличить скорость транзакций с эфиром и токенами ERC20, вводится сеть Raiden, которая будет функционировать подобно протоколу Lightning и сделает возможными быстрые транзакции по приватным каналам.
Хотя полноценная сеть Raiden ещё не совсем готова, многие люди нуждаются в Raiden для объединения множества платежей в один. Поэтому для них была создана сеть µRaiden (микро-Raiden), позволяющая просто и быстро проводить микроплатежи.
Дело в том, что Эфириум очень непрактичен для мгновенных транзакций. Транзакции ожидают добавления в блокчейн в длинной очереди, и чаще всего, чтобы сократить время ожидания, необходимо заплатить высокую комиссию. Сеть Raiden позволит участникам проводить мгновенные платежи по платёжным каналам.
Raiden будет представлять собой сетевую структуру, работающую поверх главного блокчейна Эфириума:
Концепция Raiden разработана компанией Brainbot Technologies. Вот что сказал о Raiden её создатель и CEO Хейко Хис:
«От Raiden выиграют все блокчейн-приложения, нуждающиеся в масштабировании для использования в реальном мире. Она может использоваться для обмена активами в играх и в финансах, розничных платежей, микроплатежей за контент (представьте себе новую версию YouTube или Spotify, где авторы получают деньги непосредственно за каждую секунду просмотра). Но она также подходит в качестве инфраструктуры для более дешёвого, быстрого и безопасного корреспондентского банкинга».
Допустим, Алиса и Боб хотят взаимодействовать посредством Raiden. Вот как они будут это делать:
Для финансирования запуска Raiden будет проведено ICO. Во время ICO инвесторы получат токены Raiden (RDN). Зачем нужны эти токены? Сеть Raiden задумана так, что в ней неизбежно будут комиссии. Участникам необходимо следить за своими каналами, чтобы никто ничего не украл. Но вместо того, чтобы круглосуточно сидеть за компьютером и следить за своими средствами, эту работу можно поручить кому-то другому и заплатить ему в RDN.
Для масштабирования блокчейнам абсолютно необходимы решения, работающие вне блокчейна. Платёжные каналы – один из лучших способов это реализовать. Если Биткойну и Эфириуму удастся внедрить Lightning и Raiden, то это откроет безграничные возможности. Представьте себе, что можно будет проводить тысячи транзакций в секунду с ничтожно малыми комиссиями, а также производить обмен с другими блокчейнами. Всё это – больше не мечты. С нетерпением ждём, чем всё обернётся!
Источник
Примечание от БитНовостей: уважаемые читатели, обратите внимание, что образование платёжного канала в сети Lightning на Биткойне не требует предварительной покупки каких-либо ещё токенов-альткойнов, выпущенных какой-то ещё одной компанией. Только лишь биткойнов — токенов базовой сети сайдчейна Lightning — которые вернутся в соответствии с балансом участников канала при его закрытии.
Categories: Важное, Инфраструктура, Криптография, Криптофилософия, Сервисы, Технологии, Финансы