- Bitcoin Replace-By-Fee guide: fix stuck transactions, do doublespends
- Now let’s try to do an RBF with doublespend.
- Как ускорить транзакцию в биткоинах с функцией Replace-By-Fee
- «Вес» транзакции
- Mempool и скорость транзакции
- Как определить оптимальный размер комиссии
- Варианты событий при «зависании» транзакции
- Как использовать функцию Replace By Fee
- Как ускорить транзакцию биткоина. Функция Replace-By-Fee
- Факторы, которые влияют на скорость биткоин-транзакции
- Как определить оптимальный размер комиссии
- Как использовать функцию Replace By Fee
Bitcoin Replace-By-Fee guide: fix stuck transactions, do doublespends
Oct 25, 2017 · 6 min read
In this article we will study what is Replace-By-Fee transactions and how to use them. Surprise, with RBF you can try to do doublespends!
Imagine situation when Alice sends coins to Bob. She creates and signs the t r ansaction, and broadcasts it to the network for confirmation. Unfortunately, the transaction hangs unconfirmed for a long time, as it has low fee (or an ok fee under other circumstances, but at this point of time unconfirmed transactions queue is too big and miners prefer transactions with higher fees). What can Alice do? Her options: a) wait for a confirmation (might take a while) b) wait till transaction gets cancelled (most miners will exclude it from mempool) and freed coins would be spendable again (i.e. create transactions using those coins and most pools won’t reject it as doublespend, as old transaction got cleared from mempool) c) replace transaction, increasing the fee (RBF).
Thus, RBF — replace of existing transaction with a new one, increasing the fee. “Replace” means that new transaction will use same inputs (i.e. coins) as old one, and this would not be considered as doublespend (i.e. cheating). As result, only one transaction will be confirmed, mined and added to blockchain (most probably the one with higher fee).
RBF was introduced in BIP-0125
But kind of transaction is potentially replaceable? Good question. Transaction replacement was introduced by the Bitcoin designer himself Satoshi Nakamoto, but disabled at some point. It was then improved/upgraded to RBF and shipped in Bitcoin Core 0.12+. For replaceability, there’s a designated int field called nSequence, which signals which transaction is an older version and which one is younger. So, for the transaction to be replaceable nSequence should be lower than MAX (0xffffffff — 1). By default, most wallets set nSequence to maximum and you have to manually enable transactions replacement ability in settings. Here’s how it looks in Electrum:
An example of decoded transaction:
Sequence is indicated for each transaction input.
In Electrum after you enable RBF you’ll be able to increase transaction fee right in GUI. Right click the transaction and you’ll see it. But now we are going to manually create RBF transaction. Why? First of all, to better understand what’s going on. Second, for more versatility. In case of manual RBF we can specify totally different destination addresses, which can be considered a doublespend.
This is how it works. Alice wants to pay Bob for goods. Alice creates, signs and broadcasts transaction (which transfers coins to Bob), but intentionally sets low (or zero) fee. If Bob is not cautious enough he accepts unconfirmed transaction as payment and sends goods to Alice. After that Alice replaces the transaction with output addresses which Alice controls. Basically, Alice returns her funds. Bob got scammed. How can Bob avoid that? First, if Bob wants to accept unconfirmed transactions (for speed), don’t accept replaceable transactions (where nSequence is lower than MAX). Of course, ideal case when Bob waits for enough confirmations.
Now let’s try to do an RBF with doublespend.
This is a real live example that can be verified on blockchain.
We shall use neat opensource tool github.com/OutCast3k/coinbin which can create transactions with arbitrary inputs and outputs. It works almost completely inside browser tab without server interaction. Live version is available on coinb.in but you are encouraged to download it and run from localhost.
Let’s create New → Transaction. Get a private key in WIF format and load unspent outs for that key. In Outputs tab set destination address, set amount. In Advanced Options dont forget to tick “Make this a RBF transaction” — in that case, nSequence won’t be set to MAX. Click Submit.
Transaction is created. Note the Transaction Fee — it’s the difference between sum of available coins (inputs) and sum of all sent coins (outputs). This difference is a miner fee, and it’s set to zero in this example. Click Sign, copypaste the transaction hex, same private key and finally sign the transaction:
Источник
Как ускорить транзакцию в биткоинах с функцией Replace-By-Fee
Если в период зарождения биткоина почти любая транзакция проходила в рамках 10 минут, а комиссия сети отсутствовала, то теперь подтверждения иногда приходится ждать часами или сутками. Надеяться на улучшение ситуации в ближайшем будущем не приходится, так как. спрос на биткоин продолжает расти. Из этой статьи вы узнаете, от чего зависит время проведения транзакции и как можно ускорить зависшую транзакцию в биткоинах.
Ниже описаны факторы, которые влияют на скорость транзакции в BTC.
«Вес» транзакции
Каждая планируемая транзакция в биткоинах имеет определенный «вес» в байтах, что напрямую влияет на величину комиссии, необходимой для быстрого подтверждения.
«Вес» транзакции включает (справа примерное количество байтов):
Каждый из входов (адресов, с которых пришли криптоактивы):
Каждый из выходов (адресов, на которые переводятся криптоактивы):
То есть, если 1 BTC вам пришел с десяти адресов, то количество входов определяется так: Input (в байтах) = 148*10 = 1480 байт.
Количество выходов (output) считается аналогично, также надо помнить про «сдачу». Если вы отправляете часть имеющихся монет на 1 адрес, то в ваш кошелек вернется сдача. Таким образом, количество выходов будет не меньше двух: один для отправки и второй для сдачи. Сдачи не будет, если отправляется сумма в BTC, точно совпадающая с суммой одного или нескольких входов. Сложив все параметры, пользователь может определить количество байтов, то есть «вес» транзакции.
Mempool и скорость транзакции
Каждая транзакция в биткоинах должна быть подтверждена майнерами, которые получают за это комиссию. Пользователь или программа кошелька определяет актуальную стоимость передачи объема данных в сети (сатоши/байт), формирует транзакцию и отправляет ее в сеть, в результате она попадет майнерам в мемпул (mempool).
Далее все транзакции в mempool ранжируются в зависимости от размера выставленной комиссии и формируют очередь на подтверждение. Поэтому скорость подтверждения зависит от общего количества транзакций и размера комиссии: чем выше в очереди она находится, тем быстрее будет включена в блок.
Как определить оптимальный размер комиссии
Из вышеописанного становится ясно, что для быстрой транзакции комиссия, которую устанавливает пользователь (кошелек) при отправке, играет ключевую роль. Общая комиссия за транзакцию будет произведением «веса» транзакции на стоимость передачи объема данных в сети (сатоши за байт). И если «вес» транзакции — величина постоянная, то цена в сатоши за байт динамична и, по большому счету, имеет рыночную природу — чем выше спрос на транзакции, тем выше стоимость подтверждения за байт информации.
Например, транзакция размером в 374 байта при стоимость 138 сатоши/байт будет стоить 374*138=51612 сатоши, или 0.00051612 BTC, или 5.16$ при цене биткоина $10 000.
Актуальную стоимость за байт всегда можно посмотреть в обозревателе блоков, например, в Blockchair. Стоит отметить, что комиссия в сети Биткоина не зависит от суммы отправки, то есть с одинаковой комиссией можно отправить как 0.001 BTC, так и 10 BTC.
Различные сервисы по-разному предлагают оплатить пользователям комиссию сети. Одни сразу ставят фиксированную комиссию, которая зачастую выше актуальной, другие перекладывают решение на пользователя. Например, в Trustee Wallet пользователю предлагается три типа комиссии, а также возможность установить комиссию сети вручную.
При отправке пользователь может выбрать любую из предлагаемых комиссий, естественно это будет напрямую влиять на скорость транзакции — Медленно, Средне, Быстро. В вариантах указана цена за байт, стоимость комиссии в биткоине и фиате($).
Эти варианты автоматически рассчитываются приложением исходя из индивидуальной информации о «весе» транзакции и актуальной загруженности сети, которая берется из публичных источников. В этой же вкладке можно установить комиссию вручную, при этом пользователь может поставить любое значение, как выше рекомендованного так и ниже. После выбора комиссии достаточно нажать кнопку Отправить и транзакция попадет в мемпул.
Стоит заметить, что рекомендованная комиссия рассчитывается приложением в момент создания транзакции, поэтому если за время формирования нового блока в сети произойдет всплеск активности, то транзакция может сдвинуться в очереди — она будет оттеснена более привлекательными для майнеров транзакциями. При небольшой загрузке сети транзакция просто попадет в следующий блок, то есть подтвердится за 5-30 минут, в наихудшем случае за несколько часов. Однако, в моменты резкой активности, при резких изменениях курса биткоина комиссия может вырасти мгновенно в несколько раз и на длительное время. При этом транзакция может зависнуть на несколько часов или суток, что совсем неприятно, так как монеты остаются заблокированными все это время.
Варианты событий при «зависании» транзакции
Существуют следующие варианты:
ждать подтверждения (это может занять дни, недели или даже вечность);
ждать отмены транзакции. Это происходит, когда большинство майнеров решают «выкинуть» транзакцию из мемпула. После этого биткоины становятся свободными и ими снова можно пользоваться (точного времени, когда это произойдет нет, но согласно статистике этот процесс занимает не менее 3-х суток);
увеличить комиссию в уже созданной транзакции, пока она находится в мемпуле (функция Replace-By-Fee).
Итак, Replace-By-Fee (RBF) — это редактирование существующей транзакции, которая находится в мемпуле. Это значит, что в новой транзакции будут использованы те же параметры (входы и выходы), что и в старой, но при этом будет изменена комиссия. Узлы сети Биткоина воспринимают отредактированную транзакцию как старую и она переносится в очереди мемпула на более привлекательные для майнеров позиции.
Таким образом, если транзакция «зависла» из-за небольшой комиссии, то оптимальным способом ускорения транзакции будет использование этой функции.
Как использовать функцию Replace By Fee
На самом деле функция Replace-By-Fee доступна в ограниченном количестве криптовалютных кошельков. Порядок действия у всех практически одинаковый, здесь будет рассмотрен процесс ускорения транзакции на примере кошелька Trustee Wallet.
По умолчанию все исходящие транзакции с BTC в Trustee могут быть ускорены. Однако перед отправкой биткоина лучше проверить эту надстройку. Для этого перейдите в Настройки во вкладке Bitcoin и проверьте, что “Редактирование неподтвержденных транзакций” активно. Также рекомендуется активировать и “Использование неподтвержденных транзакций” — это позволит использовать входящие биткоины, которые еще не подтверждены сетью, а также отправлять очередь исходящих транзакций (одну за другой).
Так как функция RBF сейчас находится в тестовом режиме и еще дорабатывается специалистами Trustee, то ее нужно активировать. Для этого следует выполнить простое действие:
На главном экране нажмите и удерживайте кнопку “Добавить актив” до появления специального уведомления. После чего функция RBF станет активной.
Процесс изменения комиссии:
Вернитесь в историю транзакций (вкладка Bitcoin);
Выберите нужную “зависшую” транзакцию и нажмите “Увеличить комиссию”
В открывшейся вкладке установите актуальную цену за байт вручную либо из предложенных вариантов. Актуальную цену можно проверить на сайте обозревателя.
Нажмите “Отправить”. Уведомление “Ваша транзакция успешно отправлена” означает, что увеличение комиссии прошло успешно.
Теперь в деталях транзакции будет два хэша, один старый (неактивный), а другой актуальный, с увеличенной комиссией. Это еще раз подтверждает факт надежности протокола Биткоина и отсутствие “двойных трат” при увеличении комиссии.
Обратите внимание, что блокчейн — это цепочка данных, и каждая транзакция ссылается на предыдущую. Если у вас несколько “зависших” транзакций, то ускорять нужно последнюю отправленную. При этом комиссию нужно установить с учетом ускорения всех “зависших” транзакций — то есть актуальную цену за байт умножить на количество транзакций.
Также рекомендуется использовать адреса Segwit для получения и отправки биткоина (начинаются на bc1 или 3), таким образом транзакции обойдутся дешевле, чем с Legacy адресами (начинаются на 1).
Автор статьи: Михаил Куценко, заместитель директора по развитию бизнеса в Trustee Wallet.
Источник
Как ускорить транзакцию биткоина. Функция Replace-By-Fee
Количество пользователей биткойна и транзакций постоянно растет, что, наряду с другими факторами, создает дополнительную нагрузку на сеть. В результате, майнеры не успевают обработать все транзакции, они скапливаются в очередь, а время переводов существенно увеличивается.
И если на заре зарождения биткоина любая транзакция проходила в рамках 10 минут, а комиссия сети вовсе отсутствовала, то в наши времена ее подтверждения иногда приходится ждать часами или сутками.
Надеяться на улучшение ситуации в ближайшем будущем не приходится, т.к спрос на биткоин будет только расти.
В данной статье, мы расскажем от чего зависит время проведения транзакции и покажем как можно ускорить зависшую транзакцию биткоина.
Факторы, которые влияют на скорость биткоин-транзакции
Каждая планируемая транзакция в биткоине имеет определенный “вес” в байтах, что напрямую влияет на стоимость, и, как результат, на скорость ее проведения.
“Вес” транзакции включает (напротив указываем примерное количество байтов в цифрах):
- Количество входов (адресов, с которых пришли криптоактивы) –
148 байт
Количество выходов (адресов, на которые перечисляются криптоактивы) –
34 байта
Сама транзакция –
То есть, если 1 BTC вам пришел с десяти адресов, то количество входов определяется так. Input (в байтах) = 148*10 = 1480 байт.
Количество выходов (output) считается аналогично, также надо помнить про “сдачу”. То есть, если вы отправляете часть монеты на 1 адрес, то вам обязательно должна вернуться сдача на ваш же адрес. Таким образом, количество выходов будет равно 2-м – один для отправки плюс один для сдачи. Сложив все параметры пользователь может определить количество байтов, то есть “вес транзакции”.
Каждая транзакция биткоина должна быть подтверждена майнерами, которые получают комиссию за каждую валидацию. Для этого пользователь должен определить актуальную на данный момент стоимость передачи объема данных в сети (сатоши/байт), сформировать транзакцию и отправить ее непосредственно майнерам в Mempool.
Далее все транзакции в Mempool ранжируются в зависимости от размера выставленной комиссии и формируют так называемую “очередь”. Поэтому, скорость подтверждения зависит от общего количества транзакций и размера комиссии: чем выше в очереди она находится, тем быстрее будет включена в блок, читай подтверждена.
Как определить оптимальный размер комиссии
Из выше описанных пунктов становится ясно, что для быстрой транзакции, комиссия, которую устанавливает пользователь при отправке играет ключевую роль. Общая комиссия за транзакцию будет произведением “веса” транзакции на стоимость передачи объема данных в сети (сатоши за байт). И если “вес” транзакции – величина постоянная, то цена в сатоши за байт динамична и, по большому счету, имеет рыночную природу – чем выше спрос на транзакции, тем выше цена за байт информации.
Например, транзакция весом в 374 байта при стоимость 138 сатоши/байт будет стоить 374*138=51612 сатоши, или 0.00051612 BTC, или 5.16$ при цене биткоина в 10 000$.
Актуальную стоимость за байт всегда можно посмотреть в обозревателе блоков, например, в Blockchair. Стоит также отметить, что комиссия в сети биткоин не зависит от суммы отправки, то есть с одинаковой комиссией можно отправить как 0.001 BTC, так и 10 BTC.
Различные сервисы по-разному предлагают оплатить своим пользователям комиссию сети. Одни сразу ставят фиксированную комиссию, которая зачастую выше актуальной, другие полностью перекладывают эту функцию на пользователя. Например, в Trustee Wallet пользователю предлагается три типа комиссии, а также возможность установить комиссию сети вручную.
При отправке пользователь может выбрать любую из предлагаемых комиссий, естественно это будет напрямую влиять на скорость транзакции – Медленно, Средне, Быстро. В вариантах указана цена за байт, стоимость комиссии в биткоине и фиате($).
Эти варианты автоматически рассчитываются приложением исходя из индивидуальной информации о “весе” транзакции и актуальной загруженности сети, которая берется из публичных источников.
В этой же вкладке можно установить комиссию вручную, при этом пользователь может поставить любое значение, как выше рекомендованного так и ниже.
После выбора комиссии достаточно нажать кнопку Отправить и транзакция попадет в Mempool, где ей будет условно присвоен порядковый номер в очереди.
Стоит заметить, что рекомендованная комиссия рассчитывается приложением в момент создания транзакции, поэтому если за время формирования нового блока в сети произойдет всплеск активности, то ваша транзакция может сдвинуться в очереди- будет оттеснена более привлекательными транзакциями для майнеров. При небольшой загрузке сети транзакция просто попадет в следующий блок, а операция затянется на 10-30 минут или несколько часов. Однако, в моменты резкой активности, при резких изменениях курса биткоина комиссия может вырасти мгновенно в несколько раз и на длительное время. При этом транзакция может зависнуть на несколько часов или суток, что совсем неприятно, так как монеты остаются заблокированными все это время на балансе кошелька.
Варианты событий при “зависании” транзакции
Существуют следующие варианты при “зависании” транзакции:
- ждать подтверждения (это может занять дни, неделю или даже вечность);
- ждать отмены транзакции. Это происходит, когда большинство нод решают “выкинуть” транзакцию из мемпула. После этого биткоины становятся свободными и ими снова можно пользоваться (точного времени, когда это произойдет нет, но согласно статистике этот процесс занимает порядка 3х суток);
- увеличить комиссию в уже созданной транзакции пока она находится в мемпуле (функция Replace-By-Fee).
Итак, Replace-By-Fee (RBF) — это редактирование существующей транзакции, которая находится в мемпуле. Это значит, что в новой транзакции будут использованы те же параметры (входы и выходы), что и в старой, но при этом будет изменена комиссия. Ноды сети bitcoin воспринимают отредактированную транзакцию как старую и она переносится в очереди мемпула на более привлекательные для майнеров позиции.
Таким образом, если транзакция “зависла” из-за небольшой комиссии, то оптимальным способом ускорения транзакции будет использование этой функции.
Обратите внимание, что данная функция доступна в ограниченном количестве крипто кошельков. В Trustee Wallet она есть и на данный момент работает в тестовом режиме.
Как использовать функцию Replace By Fee
На самом деле функиция Replace-By-Fee доступна всего в нескольких приложениях-кошельках. Порядок действия у всех практически одинаковый, но мы рассмотрим процесс ускорения транзакции на примере кошелька Trustee Wallet .
На данный момент все исходящие транзакции биткоина в Trustee могут быть ускорены. Однако перед отправкой биткоина лучше проверить эту надстройку. Для этого перейдите в Настройки во вкладке Bitcoin и проверьте, что “Редактирование неподтвержденных транзакций” активно (соответствующий “ползунок”). Также рекомендуем активировать и “Использование неподтвержденных транзакций” – это позволит использовать входящие биткоины, которые еще не подтверждены сетью, а также отправлять очередь исходящих биткоин транзакций (одну за другой).
Так как функция RBF сейчас находится в тестовом режиме и еще дорабатывается специалистами Trustee, то ее нужно активировать. Для этого следует выполнить простое действие:
На главном экране нажмите и удерживайте кнопку “Добавить актив” до появления специального уведомления. После чего функция RBF станет активной .
Начнем процесс изменения комиссии:
- Вернитесь в историю транзакций (вкладка Bitcoin);
- Выберите нужную “зависшую” транзакцию и нажмите “Увеличить комиссию”
- В открывшейся вкладке установите актуальную цену за байт, либо вручную, либо из предложенных вариантов. Ранее мы уже упоминали, что актуальную цену можно проверить на сайте обозревателя.
- Нажмите “Отправить”. Уведомление “Ваша транзакция успешно отправлена” – это значит, что увеличение комиссии прошло успешно.
- Теперь в деталях данной транзакции будет два хеша, один старый – неактивный, а другой актуальный – с увеличенной комиссией. Это еще раз подтверждает факт надежности протокола биткоина и отсутствие “двойных трат” при увеличении комиссии.
Обратите внимание, что блокчейн – это цепочка данных и каждая транзакция ссылается на предыдущую, поэтому если у вас есть несколько “зависших” биткоин транзакций, то ускорять нужно последнюю отправленную. При этом комиссию нужно установить с учетом ускорения всех “зависших” транзакций – то есть актуальную цену за байт умножить на количество транзакций.
Мы также рекомендуем использовать Segwit адреса для получения и отправки биткоина, таким образом транзакции обойдутся дешевле, чем при Legacy адресах..
Если у вас остались вопросы по работе приложения или ускорения транзакций — рекомендуем задать их в Telegram чате Trustee Wallet!
Источник