Внимательность и терпение: как совершаются транзакции в сети Bitcoin



«Всем привет! С вами снова излюбленные герои всех медийных рассказов о блокчейне и биткоине — Алиса и Боб, которые постоянно хотят передать друг другу криптовалюту и тем самым объяснить функционирование технологии», — вероятно, именно так могло бы начинаться приветствие двух крипто-блогеров. На этот раз на примере двух пользователей мы покажем процесс транзакций, которые совершается в сети, и расскажем обо всех тех нюансах, которые следует знать и понимать для эффективного использования системы.

Боб и Алиса

Еще раз о блокчейне

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

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

Размер блока оказывает непосредственное влияние на размер всего блокчейна. Исходя из первого пункта, получается, что есть логичное обоснование создавать блоки и записывать их в блокчейн как можно меньшего размера, который важен в вопросе его распространения. Блок имеет конкретный максимальный объем и составляет 1 МБ. Каждая транзакция также имеет свой размер, поэтому максимальное количество транзакций в конкретном блоке ограничено суммарным размером транзакций в байтах. Из-за возросшего интереса к биткоину блоки заполняются максимально плотно.

Размер блока в блокчейне биткоина
Размер блока в блокчейне биткоина за всю историю существования растет. Популярность сети будет побуждать на активное использование и продолжение тенденции на увеличение объема. Источник.

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

Транзакции «вход» — «выход»

Все транзакции делятся на два типа: приходящие — «вход» — переведенные на кошелек пользователя монеты (Алиса получила деньги от Боба), исходящие — «выход» — когда пользователь сам отправил со своего кошелька монеты другому пользователю (Алиса отправила деньги Кейт). Последовательность транзакций строго выверена. Первой в перечне идет та, в которой указывается вознаграждение — комиссия за создание нового блока. Чтобы проверить подлинность операций с криптовалютой, транзакции должны быть перенесены, то есть валидированы в блокчейн. Части этой системы хранятся на множестве компьютеров в сети Bitcoin.

Каждая транзакция имеет свой собственный размер в байтах, который зависит от количества входов и выходов, а не от размера переведенной суммы. Так, например, транзакционный вход весит около 148 байтов, один выход — примерно 34 байта, следовательно, суммарный объем полного цикла транзакции составляет около 200 байтов. Поэтому чем больше входов и выходов, тем больше размер транзакций в байтах. Теоретически рассчитать данные об объеме транзакции можно по следующей формуле:

Transaction scale [byte] = Q inp. х 148 + Q out. х 34 + 10 +/- Q inp.

Где:

Transaction scale [byte] — размер транзакции в байтах,

Q inp. — количество входов,

Q out. — количество выходов.

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

После проведения операции с криптовалютой, когда Боб передал монеты Алисе, счета на стороне отправителя (Боба) и получателя (Алисы) обновляются через некоторое время. В традиционных пользовательских приложениях для подтверждения транзакции должно быть найдено шесть блоков, которые доказывают ее валидность, то есть правоту.

При этом пользователь, проводящий операцию (Боб), может уменьшить число проверок. Это имеет смысл делать в том случае, если пользователь оперирует незначительной суммой биткоинов. Данная процедура позволяет упростить и ускорить процесс подтверждения транзакции. Как правило, приблизительное время подтверждения одной транзакции составляет 15−20 минут. Нельзя сказать, что это быстро. Ведь есть сети, которые генерируют блоки в сто раз быстрее. Время выверки транзакции биткоина всегда отличается и зависит от следующих показателей:

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

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

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

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

Среднее время для совершения принятия сделки
Среднее время для совершения принятия сделки на протяжении нескольких лет держится примерно на одном уровне. Источник.

Повышающиеся комиссии

Для защиты от DDoS-атак и спам-рассылок от тех пользователей, которые стремятся загрузить сеть пустыми блоками, за каждую транзакцию назначается комиссия, не привязанная к сумме перевода. Также она служит в качестве бонуса для майнеров, которые занимались подтверждением работы. Чтобы рассчитать размер комиссии, необходимо опираться на два показателя: данные, посылаемые с транзакцией, и частота совершаемых транзакций в сети. То есть, если Боб получает много переводов с незначительными суммами ($0.2, $1, $2) или часто тратит эти же деньги, то рекомендуемая кошельком комиссия за новой платеж для Алисы будет большой. Если Боб изначально кладет в кошелек большую сумму и расходует весомое количество монет, то комиссия за транзакцию Алисе будет несущественной.

Еще два года назад комиссии в крипто-кошельках составляли несколько процентов, пользователи быстро совершали переводы даже при самых низких откорректированных вознаграждениях. Теперь процентная ставка за комиссию выросла в 8−10 раз и более. Если верификации перевода монет не произошла, и Алиса не получила желаемую сумму, то система возвращает средства обратно на кошелек отправителя — Боба.

Комиссия рассчитывается в единицах «сатоши» и равняется 1 сатоши = 1/100 миллионов ВТС. Чтобы вычислить вознаграждение майнерам за перевод биткоинов, необходимо предложенное число сатоши (предложенную комиссию от кошелька) умножить на 1000 (так можно перевести байты в килобайты) и затем разделить на 100 миллионов. Конечная сумма комиссии за транзакцию складывается из двух параметров: размер транзакции в байтах, который зависит от количества входов и выходов (чем их больше, тем больше размер транзакции), и уровень комиссии в сети биткоина, который зависит от нагрузки на сеть (чем больше в листе ожиданий неподтвержденных транзакций, тем выше комиссия за каждый байт). Полученные показатели фиксируются в сети, затем совершается транзакция, на вычисление которой уйдет много времени.

Но что если Боб захочет перевести монеты в максимально короткие сроки?

Существуют способы, которые помогают сократить время подтверждения транзакции:

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

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

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

 Использование биткоин-кошельков с функцией создания мультиподписи — на подобных сервисах для подтверждения операции с криптовалютой от пользователя потребуется лишь указать закрытый ключ. Второй «подписью» выступает ключ сервиса. Так не тратятся средства и время на подтверждение транзакции.

Главная ошибка большинства пользователей заключается в том, что они оценивают размер комиссии в абсолютном выражении и не учитывают размер самой транзакции. Из-за этого возникают моменты, когда платеж подвисает в сети на несколько дней. Крипто-кошельки предоставляют функции установленной комиссии и делают всю работу за пользователей. Зачастую этот размер слишком завышен. Вместо того, чтобы дать пользователям свободу действий, крипто-кошельки просто показывают конечную стоимость, то есть комиссия назначается по умолчанию.

Чтобы сэкономить на комиссиях за транзакции, можно пренебречь всеми перечисленными способами и поставить тот показатель, который пользователю покажется самым оптимальным. В случае, если скорость перевода не важна, Боб может проверить количество неподтвержденных транзакций. Если этот показатель меньше 10,000, то комиссию можно снизить вручную в 8−10 раз.

После утверждения комиссии и проведения самой транзакции отправитель Боб и получатель Алиса должны дождаться не менее шести подтверждений, то есть не менее шести найденных блоков. Это делается для безопасности сети, и количество в 6 блоков выбрано не случайно: с теоретической точки зрения вероятность того, что мошенник накопит более 10% от хэшрейта сети для фальсификации транзакции, невелика, кроме того, незначительный риск, менее 0,1%, допускается в сети и не является критическим.

Заветные шесть подтверждений

Для совершения атаки либо подделки транзакции хакеры должны обладать значительными мощностями, которые во многом превышают мощности отправителя и получателя. Но это фактически невозможно, либо превышает стоимость похищений. Таким образом, 6 подтверждений являются тем непреодолимым барьером, который встает на пути к атаке. По времени и при благоприятных обстоятельствах это занимает около часа из расчета 1 блок = 10 минут. Те пользователи, у которых есть более 10% мощности (то есть инвестиции в вычислительные мощности в миллионы долларов), довольно просто получают шесть подтверждений подряд.

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

Биткоины, которые выдаются сетью за нахождение блока, можно использовать только через 100 подтверждений — 100 найденных блоков. Классический биткоин-пользователь с благими намерениями не отображает полученные за решение блока монеты до тех пор, пока не накопится 120 подтверждений.

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

Многочисленные пользователи на различных форумах и блогах пишут о каких-либо возникающих проблемах в сети биткоина. Эмоциональные сообщения сопровождаются яркими эпитетами и описательными моментами, когда что-то пошло не так и перевод монет с одного кошелька на другой не осуществился. Как правило, после долгих рассуждений о багах биткоина и его несостоятельности участники социальных платформ приходят к выводу, что необходимо досконально изучать функционирование технологии, быть постоянно в курсе всех событий, анализировать их, применять на практике, и тогда каких-либо трудностей можно будет избежать. Если сеть будет перегружена (и долгого перевода из-за этого не избежать), то благодаря научному и новостному бэкграунду пользователь сможет спокойно отреагировать на ситуацию, не поддаться панике и дождаться завершения своей сделки. В итоге Боб перевел биткоины Алисе!




Загрузка комментариев…