MtGox выступил с заявлением, что в связи с «проблемой» в протоколе Bitcoin, у них были задержки с выводом BTC и поэтому им пришлось прекратить все выплаты, пока причина не будет устранена. www.mtgox.com/press_release_20140210.html
Если вам нужен быстрый ответ — нет ошибки в самом Bitcoin. Вы можете пойти на Bitstamp / Coinbase / btc-e и купить больше BTC с огромной скидкой, прежде чем курс вернется к $800 — $900…
Длинный ответ:
Неподтвержденные транзакции Bitcoin всегда были malleable (тягучими), то есть вы можете немного изменить транзакцию, которая «в подвешенном состоянии » (еще не в blockchain), и вы не нарушите свои подписи. Однако, невозможно изменить какие-то важные данные, такие как исходные операции, суммы, порядок входов и выходов, а также какие-то другие метаданные. То, что вы можете сделать, это добавить некоторые фиктивные данные, что не меняет сути сделки, но меняет ее содержание.
Что это означает? Вы можете отправить ABC123 транзакцию, а кто-то может увидеть ее в сети и по тихому изменить, в результате чего ее вид будет — ABC124. Если ему повезет, то ABC124 будут включена первой, а исходная ABC123 никогда не будет включена (для предотвращения даблспендинга). Нет никаких проблем для получателя сделки — он все равно получат все свои деньги на адрес, на который он запросил вывод. Но если он будут наблюдать за транзакцией через blockchain специально, то ABC123, он никогда там уже не обнаружит.
MtGox объясняет, как они были обмануты:
1). Пользователь делает запрос на вывод из MtGox некоторое количество BTC на свой адрес.
2). MtGox принимает некоторые из его собственных «неизрасходованных выходов» и составляет транзакцию, которая посылает средства на адрес пользователя.
3). MtGox помнит хэш этой транзакции и смотрит появилась ли она в blockchain.
4). Пользователь (злоумышленник) или кто-то еще, видит неподтвержденную транзакцию MtGox в p2p сети и создает транзакцию, состоящую из тех же данных что и оригинальная, в следствии чего ему не требуется подписывать ее элементы (т.е. он не меняет суммы, входы или выходы), но добавляет в нее незначительные данные (лишние байты например), в итоге хеш этой транзакции отличается от исходной но она остается валидной для сети (прим. переводчика).
5). Новая, измененная, транзакция включается в blockchain. MtGox послал деньги, но еще не знает об этом. Запросивший вывод, к тому времени уже получил средства на кошелек и уже видит их.
6). Затем пользователь(злоумышленник) идет в поддержку MtGox и жалуется, что деньги не поступили. Или, MtGox сам видит, что средства не поступают слишком долго, и может автоматически, повторно, отправить другую транзакцию, которая посылает некоторые другие «неизрасходованные TX выходы» на тот же адрес (повторяет отправку). Так или иначе, он создает много путаницы для MtGox и первоначально может даже привести к отправке одной и той же сумы много раз.
Является ли это проблемой самого Bitcoin, который позволяет проводить такие изменения в транзакциях? Да, вероятно, так. Но не совсем ясно, как это можно предотвратить вообще.
MtGox наткнулись на эту проблему, потому что они не знали, об этом свойстве Bitcoin.
MtGox могло бы решить проблему следующим образом: вместо того, чтобы использовать blockchain для наблюдения за появлением хэша конкретной транзакции, следует смотреть, если адрес X ( задается пользователем ) получил сумму N ( указанную пользователем ) с выходами Y, Z и W (используется MtGox ). Это гарантировало бы, что даже если сделка будет изменена, они наверняка это увидят и узнают, получил ли пользователь деньги, предназначенные для него или нет.
P.S. Материал размещен с разрешения автора oleganza, который тут бывает редко и сейчас высказывается на Reddit.
Если вам нужен быстрый ответ — нет ошибки в самом Bitcoin. Вы можете пойти на Bitstamp / Coinbase / btc-e и купить больше BTC с огромной скидкой, прежде чем курс вернется к $800 — $900…
Длинный ответ:
Неподтвержденные транзакции Bitcoin всегда были malleable (тягучими), то есть вы можете немного изменить транзакцию, которая «в подвешенном состоянии » (еще не в blockchain), и вы не нарушите свои подписи. Однако, невозможно изменить какие-то важные данные, такие как исходные операции, суммы, порядок входов и выходов, а также какие-то другие метаданные. То, что вы можете сделать, это добавить некоторые фиктивные данные, что не меняет сути сделки, но меняет ее содержание.
Что это означает? Вы можете отправить ABC123 транзакцию, а кто-то может увидеть ее в сети и по тихому изменить, в результате чего ее вид будет — ABC124. Если ему повезет, то ABC124 будут включена первой, а исходная ABC123 никогда не будет включена (для предотвращения даблспендинга). Нет никаких проблем для получателя сделки — он все равно получат все свои деньги на адрес, на который он запросил вывод. Но если он будут наблюдать за транзакцией через blockchain специально, то ABC123, он никогда там уже не обнаружит.
MtGox объясняет, как они были обмануты:
1). Пользователь делает запрос на вывод из MtGox некоторое количество BTC на свой адрес.
2). MtGox принимает некоторые из его собственных «неизрасходованных выходов» и составляет транзакцию, которая посылает средства на адрес пользователя.
3). MtGox помнит хэш этой транзакции и смотрит появилась ли она в blockchain.
4). Пользователь (злоумышленник) или кто-то еще, видит неподтвержденную транзакцию MtGox в p2p сети и создает транзакцию, состоящую из тех же данных что и оригинальная, в следствии чего ему не требуется подписывать ее элементы (т.е. он не меняет суммы, входы или выходы), но добавляет в нее незначительные данные (лишние байты например), в итоге хеш этой транзакции отличается от исходной но она остается валидной для сети (прим. переводчика).
5). Новая, измененная, транзакция включается в blockchain. MtGox послал деньги, но еще не знает об этом. Запросивший вывод, к тому времени уже получил средства на кошелек и уже видит их.
6). Затем пользователь(злоумышленник) идет в поддержку MtGox и жалуется, что деньги не поступили. Или, MtGox сам видит, что средства не поступают слишком долго, и может автоматически, повторно, отправить другую транзакцию, которая посылает некоторые другие «неизрасходованные TX выходы» на тот же адрес (повторяет отправку). Так или иначе, он создает много путаницы для MtGox и первоначально может даже привести к отправке одной и той же сумы много раз.
Является ли это проблемой самого Bitcoin, который позволяет проводить такие изменения в транзакциях? Да, вероятно, так. Но не совсем ясно, как это можно предотвратить вообще.
MtGox наткнулись на эту проблему, потому что они не знали, об этом свойстве Bitcoin.
MtGox могло бы решить проблему следующим образом: вместо того, чтобы использовать blockchain для наблюдения за появлением хэша конкретной транзакции, следует смотреть, если адрес X ( задается пользователем ) получил сумму N ( указанную пользователем ) с выходами Y, Z и W (используется MtGox ). Это гарантировало бы, что даже если сделка будет изменена, они наверняка это увидят и узнают, получил ли пользователь деньги, предназначенные для него или нет.
P.S. Материал размещен с разрешения автора oleganza, который тут бывает редко и сейчас высказывается на Reddit.