Модель UTXO против модели счета/баланса

Я понимаю, что Биткойн использует неизрасходованные выходные данные tx и баланс учетной записи Ethereum. Однако в последнее время ведется много дискуссий о том, что база данных биткойнов UTXO стала слишком большой. Означает ли это, что транзакции на основе баланса счета лучше масштабируются, чем на основе UTXO?

Я не так много знаю о том, как работает баланс счета Ethereum. Но набор UTXO в Биткойне можно оптимизировать, например, как описывает Питер Тодд здесь: petertodd.org/2016/delayed-txo-commitments .

Ответы (2)

Выбор между моделью UTXO и моделью баланса — это прежде всего выбор между стимулами к конфиденциальности и очевидной интуитивностью.

Если следовать стандартному совету не использовать повторно адреса/выходные данные/скрипты, чтобы не раскрывать безвозмездно, какие монеты принадлежат отправителю, а какие – получателю, эти две модели фактически эквивалентны. В этом случае балансы в любом случае будут одноразовыми, и будет столько же балансов, сколько в противном случае было бы UTXO, что устранит как очевидное преимущество размера, так и удобство.

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

И хотя балансы более интуитивно понятны, они усложняют рассуждения о безопасности системы. Одной из проблем является проблема повторных атак. Предположим, что X заплатил Y, а Y заплатил Z. Теперь W снова платит Y. В наивной реализации Z может ретранслировать свою более раннюю транзакцию от Y и может взять деньги из платежа W к Y. Одно из решений состоит в том, чтобы проставить порядковые номера на балансах и потребовать от транзакций перечислить порядковый номер транзакций, из которых они получают деньги. . К сожалению, это требует сохранения порядкового номера даже для балансов, ставших равными нулю, а это означает, что база данных балансов должна поддерживать некоторые данные для каждого баланса, который когда-либо был ненулевым; результат, который в первую очередь гораздо менее масштабируем, чем модель UTXO (которая может забыть о выводах, как только они будут потрачены).

Короче говоря, я считаю, что модель баланса снижает взаимозаменяемость валюты в целом ради краткосрочной выгоды, которая исчезает.

Базе данных балансов не нужно поддерживать порядковый номер для балансов, которые обнулились. Среди других решений вы можете присвоить учетной записи псевдослучайный порядковый номер при ее создании, который должен использоваться в каждой транзакции. Есть и другие решения этой проблемы.
Это честно; Я только объяснял, как модель учетной записи вносит дополнительные сложности - для этого возможно несколько решений. Основная проблема, на мой взгляд, заключается в том, что учетные записи по своей сути поощряют раскрытие связи транзакций, что, ИМХО, недопустимо для любой валюты, нацеленной на взаимозаменяемость.
@DavidSchwartz, не могли бы вы подробнее объяснить, как «назначение учетной записи псевдослучайного порядкового номера» предотвратит атаки воспроизведения?
Если учетная запись создается повторно, она будет иметь новый порядковый номер. Это сделает каждую предыдущую транзакцию недействительной для этой учетной записи, поскольку порядковый номер не будет совпадать.
Это очень предвзятый ответ. Не то чтобы это плохо, но я бы посоветовал людям также прочитать, почему Эфириум пошел с их моделью: github.com/ethereum/wiki/wiki/… Они также говорят, что UTXO поддерживают больше парадигм масштабирования, но я еще не нашел ни одной . больше информации об этом.

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

A имеет 2,5 биткойна, т.е. один UTXO на 2,5 биткойна. Желание отправить B 1.0 btc. A использует 2,5 биткойна в качестве входных данных для trxn и отправляет 1,0 биткойна B, 1,5 биткойна отправляются обратно в A как новый UTXO с новым адресом. Таким образом, если у B есть 1 биткойн, то общее количество составляет 2 биткойна (отправлено A) и имеет два UTXO: один уже имеет 1 биткойн, а другой - 1 биткойн от A.

Блокчейн Биткойн использует эту модель, есть еще одна модель, которая используется в блокчейне Ethereum, т.е. Модель учетной записи, которая намного проще, чем предыдущая модель. Давайте посмотрим пример:

У A есть 2 эфира, A хочет отправить B 1 эфир, поэтому сеть уменьшит 1 эфир от A, т.е. A теперь имеет 1 эфир, а сеть добавляет 1 эфир к B. Если у B уже есть 2 эфира, то всего 3 эфира.

Обе модели имеют разные плюсы и минусы.

Каждая транзакция в модели учетной записи делает один вывод, что приводит к экономии места. Любая экономия места – это преимущество. Поскольку полные узлы сети предназначены для эксплуатации отдельными лицами, а не центрами обработки данных, чем ниже требования к данным, тем больше потенциальных участников.

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