В блокчейнах используют разные модели для ведения учёта, записи и представления транзакций. Две самые популярные из них - это UTXO(Unspent Transaction Outputs) модель или модель не потраченных выходов и Account Based model или модель на базе аккаунтов.
UTXO модель или модель не потраченных выходов.
Применение UTXO модели имеет много общего с использованием бумажных купюр. Представьте, что у вас есть банкнота номиналом в 1000 руб. и вы хотите купить пиццу, которая стоит 600 руб. Естественно, для покупки вы отдадите вашу банкноту продавцу, а тот взамен отдаст вам пиццу и сдачу одной или большим количеством купюр, общий номинал которых будет равен 400 руб. То есть вы потратили свою купюру в 1000 руб. и получили сдачу в виде новых купюр в результате покупки пиццы.
UTXO действует аналогичным образом, за исключением того факта, что во время транзакции(в нашем примере покупки пиццы) старый не потраченный выход(купюра номиналом в 1000 руб.) тратится в ходе транзакции и не передается вся продавцу. Вместо неё в ходе транзакции появляются два или более новых не потраченных выхода(купюр), один из которых имеет номинал в 600 руб. и передается продавцу пиццы, а оставшиеся выходы возвращаются вам в качестве сдачи.
Более формально UTXO модель работает по следующим принципам:
- Каждый не потраченный выход имеет свой номинал.
- Транзакции совершаются за счёт “потребления”(траты) существующих не потраченных выходов и создания новых на их месте.
- Новые UTXO можно создать только путём совершения транзакций.
- Каждый UTXO может быть потрачен лишь раз. После траты UTXO в транзакции выходы становятся потраченными и не могут быть использованы второй раз.
- Состояние всего блокчейна в момент времени описывается всем набором существующих в блокчейне не потраченных выходов (UTXOs).
На основе данной модели, в частности, работает Биткоин. Каждая транзакция Биткоина имеет входы, которые являлись до выполнения этой транзакции не потраченными выходами. Единственный тип транзакций в Биткоине, не имеющий входов, это Coinbase транзакции, которые генерируют новые монеты. Эти новые монеты являются наградой для майнера, добавившего новый блок в цепочку.
Также транзакции генерируют новые выходы, которые будут не потраченными до их использования в следующей транзакции. Ниже на схеме красным обозначены потраченные выходы, зелёным - не потраченные выходы.
Отметим также, что в Биткоине в каждой транзакции отправитель платит часть суммы в качестве комиссии. Но для простоты в схеме выше мы пренебрегли этим фактом.
Преимущества UTXO модели:
- Масштабируемость: возможность использования в транзакции большого количества не потраченных выходов, уменьшает количество транзакций необходимых для перевода. Если у вас есть два не потраченных выхода на 2 BTC и 3 BTC, то для того, чтобы перевести 5 BTC другому пользователю, вам понадобится одна транзакция, в которой вы задействуете оба не потраченных выхода.
- Анонимность: UTXO модель даёт больший уровень анонимности из-за того, что пользователи часто создают новые адреса для новых транзакций, что усложняет отслеживание и формирование паттерна активности пользователя для его деанонимизации.
Недостатки UTXO модели:
- UTXO модель требует больше места для хранения транзакций, чем модель на основе аккаунтов, так как каждый отдельный выход должен хранится отдельно.
- Переводы в рамках UTXO модели могут быть дороже. К примеру, в Биткоине комиссия вычисляется исходя из веса транзакции и цены за единицу веса, которую платит пользователь за перевод. Поэтому возможность собирать “тяжёлые” транзакции за счёт большого количества входов и выходов, приводит к тому, что данные транзакции будут стоить дороже, чем транзакции с меньшим количеством входов и выходов. Однако стоит заметить, что в отдельных случаях может быть дешевле использовать одну “тяжёлую” транзакцию, чем большое количество отдельных более “лёгких” транзакций(с меньшим количеством входов и выходов). Например, когда вам нужно перевести средства одновременно нескольким получателям, Поэтому данный минус модели UTXO является весьма относительным.
- Генерация “пыли”. Под пылью понимают очень маленькие не потраченные выходы, которые по номиналу меньше, чем комиссия за их трату. В отдельной статье мы ещё вернёмся к вопросам, связанным с пылью, и поговорим об опасности, которую она может представлять с точки зрения анонимности пользователя.
Модель на базе аккаунтов(account-based model).
Если UTXO модель сравнима с использованием бумажных банкнот, то модель на базе аккаунтов, можно сравнить с использованием банковских счетов. У клиентов банка есть свои счета(аккаунты), где состояние аккаунта характеризуется его балансом(количеством средств на счету аккаунта). При проведении операции, например, при переводе средств от одного клиента банка другому, балансы аккаунтов меняются. С баланса отправителя списывается сумма перевода, а баланс получателя увеличивается на ту же сумму минус комиссия за перевод, но её мы опять пока опустим. В примере ниже Алиса переводит Бобу 600 руб., что приводит к изменению состояний аккаунтов, посредством изменения балансов соответствующих пользователь.
В случае с криптовалютами, построенными на базе аккаунтной модели, всё работает похожим образом. Ярким примером использование данной модели является Ethereum. При переводе с одного аккаунта на другой 1 ETH, происходит списание 1 ETH с первого аккаунта и добавление 1 ETH на второй.
Преимущества модели на базе аккаунтов:
- Хранение транзакций требует меньше места.
- Простота. Модель на базе аккаунтов интуитивно более понятна, чем UTXO модель. Это помогает как пользователям, так и разработчикам смарт-контрактов, которым необходимо отслеживать состояния и балансы аккаунта.
- Лучшая взаимозаменяемость токенов. В случае с UTXO моделью есть четкая связка между транзакциями: вход в новую транзакцию - это выход из предыдущей транзакции. Таким образом, мы можем связать две транзакции и отследить источник средств. В случае модели на базе аккаунтов при попадании новых монет на аккаунт они как бы растворяются в монетах, которые были на его балансе до транзакции. Таким образом, намного сложнее определить источник средств, которые будут переводится в дальнейшем с этого аккаунта.
Недостатки модели на базе аккаунтов:
- Масштабируемость. Например, если у вас есть два аккаунта с балансами 2 ETH и 3 ETH, то для того, чтобы перевести 5 ETH другому пользователю вам понадобится две транзакции: либо с обоих аккаунтов перевести двумя транзакциями 2 ETH и 3 ETH соответственно на аккаунт второго пользователя, либо сначала с одного из своих аккаунтов перевести все средства на второй, тем самым агрегировав все средства на одном аккаунте, и затем второй транзакцией перевести 5 ETH второму пользователю.
- Приватность. Данная модель поощряет повторное использование адресов, что приводит к снижению уровня анонимности, из-за того, что появляется возможность точнее определить паттерн поведения пользователя и использовать его для деанонимизации.