Приветствуем! Впервые на сайте Zcash?
The Zcash network is young, but evolving quickly! Sign up and we'll be in touch with monthly highlights on ecosystem growth, network development and how to get started with Zcash!

Язык

Метаморфозы гибких транзакций

Simon Liu | Aug 31, 2016

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

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

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

Так каким образом решить проблему гибкости транзакций? Одним из решений, предложенных нам, было обратное портирование Segregated Witness (segwit), что справляется со множеством проблем, включая гибкость. Тем не менее, через несколько месяцев было решено , что связать segwit с проектом Zcash невозможно, особенно принимая во внимание тот факт, что segwit был в стадии разработки на тот момент. На сегодняшний день развитие segwit практически завершено, однако ему еще требуется интеграция и активация в сети Биткоина.

Наша собственная попытка, менее масштабная, но более целенаправленная, была выпущена несколько недель назад как часть z8 alpha release, и встроена в тестовую сеть. Хотя ни одна проблема не выносится на повестку дня постоянно, мы всегда осознавали, что могут возникнуть исключительные случаи угрозы безопасности, которые мы еще не обнаружили. На самом деле, существует баг, при котором только что обнаруженный блок может быть изменен, создавая риск отказа от обслуживания. К счастью, он был обнаружен нашими аудиторами как часть аудита безопасности Zcash. Несмотря на то, что проблема легко решается сама по себе, вытекающая дискуссия подняла ряд вопросов для оценки командой, чтобы она разработала верное решение.

После рассмотрения, приняв во внимание доступные ресурсы и график проекта, команда решила откатить сделанные изменения. Мы считаем, что будем разумно начать с чего-то известного, чем представить что-то новое и неизвестное. Наше исследование гибкости транзакций показывает важность независимого обзора процесса разработки третьей стороной, в особенности по отношению к протоколу согласия, где даже малейшие изменения могут повлечь за собой непредсказуемые побочные бессмысленные эффекты. Мы благодарны нашему аудитору Coinspect за помощь в поимке нескольких «бабочек»!

Просим Вас помочь нам, запустив последний z9 альфа релиз и дав нам знать о любых багах, недочетах и проблемах в использовании, которые вы встретите. Вы можете присоединиться к команде, заполнив форму на GitHub или посетив канал Zcash Community Slack . Благодарим Вас!