​​​​​​​То, что необходимо знать о Replay protection

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

Однако компания объясняет это не желанием разделять сеть, а напротив, стремлением укрепить ее и получить некоторые преимущества над Bitcoin Core. Вследствие того, что данная проблема характерна не только для SegWit мы выделили несколько методов для того, чтобы пользователи могли обезопасить себя от копирования транзакций.

Для того, чтобы понять как работает система дублирования, следует разобраться с тем, как работает биткоин.

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

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

Например, если вам осуществили переводы 1 и 2 BTC, а вы захотели переслать их пользователю X, то у вас в качестве входной информации будут использоваться неистраченные платежи “1 BTC” и “2 BTC”. А у пользователя X появится UTXO “3 BTC”.

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

Имея неистраченные выходы по транзакциям на 10 BTC, при переводе только 2 BTC другому пользователю, вы должны также перевести на другой адрес оставшиеся 8 BTC. Чаще всего, пользователи отправляют оставшеюся по UTXO сумму себе же на счет, за вычетом комиссии. Обычно такие платежи зовутся “сдачей”, после ее получения на вашем счету окажется новый UTXO. Простота кода состоит в том, что биткоины либо тратятся в полном размере, либо пропадают, третьего варианта не существует. Для контроля за транзакциями во избежание их дублирования происходит с помощью глобального набора UTXO или полного набора неистраченных выходов.

Транзакции нулевого уровня

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

UTXO coinbase транзакций также будут иметь, но они будут являться частью нового набора выходов. Поэтому не произойдет сбоя и дублирования в другую цепочку при отправке перевода со входными данными UTXO нулевого уровня, а также с переводами с первого на второй уровни. После хардфорка создается новый третий уровень транзакций, с которым будут работать все пользователи. Все неистраченные выходы уровня X+1 будут защищены сетью от копирования. Кроме того, правило, по которому работает coinbase, не позволяет работать с выходами и тратить биткоины во время добычи ближайших 100 блоков. Как правило, это время сходится примерно к 17 часам, зависит от мощности хэширования.

Когда начинает осуществляться хардфорк, одни и те же UTXO находятся в едином пространстве (общей сети), так называемой идентичной основе, которая образуется в момент раздвоения сетей. Дублирование, как правило, происходит из-за полного соответствия правил первой и второй сетей, в таком случае неистраченные выходы оказываются абсолютно незащищенными, а их уязвимость увеличивается в разы.

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

Сделать это можно отправив выход Х на разные кошельки по двум адресам. Цепочку tx1 на первый, а цепочку tx2 на второй адрес с исходного UTXO. Даже если tx1 будет повторяться во второй цепочке, отправив tx2 на эту же цепочку, вы получите только отклонение от узлов сети, которые воспримут это как повтор. Из-за того, что отправка транзакций осуществлялась в разных цепочках и уже с вычетом комиссии, все неистраченные выходы в ним будут защищены от дублирования и контролироваться только лично вами.

Locktime

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

Однако locktime можно использовать только в том случае, если одна цепочка в разы длиннее другой (минимум на 6 блоков). Например, вы устанавливаете ограничение до 123 569 блока для UTXO, как только транзакция будет включена в этот блок (до 123 569 блока во второй цепочке), вам необходимо будет создать дополнительную транзакцию которая потратить эти выходы только для второй сети и на другой адрес. Если tx2 подтвердится до 123 569 блока во второй цепочке, вы получите неистраченные защищенные выходы в обеих цепочках.

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

Что потом?

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

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

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

Сейчас такие кошельки, как Armory, Bitcoin Core, Electrum, имею функцию “контроля монет”, если другие электронные кошельки также введут ее в действие, конфиденциальность сети наоборот повысится. Помимо этого, у пользователей может появиться возможность самостоятельно создавать защищенные UTXO, если кошелек будет иметь в арсенале функцию locktime.

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


X