Почему Bitcoin и Ethereum по-разному считают деньги на балансе

Сети биткоин и эфириум показывают пользователю баланс, но рассчитывают его по-разному. В Bitcoin кошелек складывает неизрасходованные части прошлых транзакций. В Ethereum сеть хранит текущий баланс аккаунта
Почему Bitcoin и Ethereum по-разному считают деньги на балансе
Источник: РБК Крипто

Удивительно, но две самых популярных сети в мире криптовалюты — биткоин и эфириум, показывают пользователю балансы, основываясь на разных алгоритмах. И от этой разницы зависят комиссии, сдача, порядок обработки операций и приватность.

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

Как биткоин учитывает средства

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

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

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

Допустим, пользователь получил одним переводом 0,8 BTC и теперь хочет отправить 0,3 BTC. Взять только часть исходного выхода нельзя. Кошелек расходует все 0,8 BTC и создает несколько новых выходов.

Один выход на 0,3 BTC получает адресат. Второй возвращает остаток отправителю. Из исходной суммы также вычитается комиссия. Возвращенный остаток, как и в обычной жизни, называется сдача.

Сдача не имеет отдельной отметки в блокчейне. Для сети это такой же выход, как перевод получателю. Обычно кошелек направляет остаток на новый адрес, который принадлежит тому же владельцу.

Зачем кошелек объединяет UTXO

Одного выхода может не хватить для перевода. Тогда кошелек использует несколько UTXO одновременно. Например, для отправки 0,7 BTC можно взять выходы на 0,4 и 0,5 BTC.

Общая сумма входов составит 0,9 BTC. Из нее 0,7 BTC получит адресат, часть уйдет на комиссию, а остаток вернется отправителю в виде нового выхода.

Процесс выбора подходящих выходов называют выбором монет, или — «coin selection». Кошелек должен набрать нужную сумму, рассчитать комиссию и определить размер сдачи.

Одну сумму можно собрать разными способами. Кошелек может потратить один крупный UTXO или несколько мелких. Получатель в обоих случаях получит одинаковое количество BTC, но размер транзакции и комиссия будут различаться.

Некоторые кошельки позволяют выбирать выходы вручную. Функция «coin control» помогает не смешивать средства из разных источников, оставить отдельные UTXO нетронутыми или подготовить их объединение.

Почему небольшой перевод может стоить дорого

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

Поэтому перевод 1 BTC из одного крупного UTXO может стоить дешевле, чем отправка 0,01 BTC, собранных из нескольких десятков мелких выходов. Во втором случае транзакция занимает больше места.

Комиссия не записывается отдельным платежом. Она равна разнице между суммой входов и суммой новых выходов. Если транзакция расходует 1 BTC, а получателю и на сдачу направлено 0,9999 BTC, оставшиеся 0,0001 BTC становятся комиссией майнера.

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

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

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

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

Как Ethereum хранит баланс

Ethereum использует модель аккаунтов. Сеть хранит текущее состояние каждого адреса. Для обычного пользовательского аккаунта оно включает баланс ETH и nonce — счетчик отправленных транзакций.

При переводе сеть проверяет подпись, nonce и наличие средств. Затем уменьшает баланс отправителя на сумму операции и комиссию, а баланс получателя увеличивает на полученную сумму.

Если на адресе находится 0,8 ETH и пользователь отправляет 0,3 ETH, оставшиеся средства продолжают храниться на том же аккаунте. Отдельный выход со сдачей не создается.

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

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

Зачем Ethereum нужен nonce

Каждая исходящая транзакция аккаунта получает порядковый номер — nonce. Сеть исполняет операции одного адреса в этой последовательности.

Если текущий nonce равен 20, следующая транзакция должна получить номер 20. После ее подтверждения сеть перейдет к номеру 21.

Один и тот же nonce нельзя использовать для двух подтвержденных операций. Это защищает уже выполненную транзакцию от повторного исполнения и задает порядок действий аккаунта.

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

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

Где хранятся токены Ethereum

Баланс ETH хранится на уровне самой сети. USDT, USDC и другие токены учитывают смарт-контракты, которые их выпустили.

Стандарт ERC-20 определяет общий набор функций для таких контрактов. Функция «balanceOf» сообщает, сколько токенов принадлежит адресу, а «transfer» меняет записи об отправителе и получателе.

Один адрес может одновременно иметь баланс ETH и отдельные балансы в десятках токенов. Кошелек запрашивает данные у разных контрактов и показывает их в одном интерфейсе.

При переводе токена контракт уменьшает баланс отправителя и увеличивает баланс получателя. Количество ETH на адресе снижается только на сумму комиссии за выполнение операции.

Поэтому ETH и токены могут выглядеть в кошельке одинаково, хотя учитываются по-разному. ETH входит в состояние аккаунта, а данные о токенах хранят отдельные контракты.

От чего зависит комиссия Ethereum

Эфириум берет плату за вычисления, которые выполняет сеть. Их объем измеряется в газе. Простой перевод ETH требует меньше газа, чем обмен токенов или работа с кредитным протоколом.

Сумма операции напрямую не определяет расход газа. Переводы 0,01 и 100 ETH между обычными аккаунтами имеют одинаковую структуру и обычно требуют одинакового количества газа.

Операция со смарт-контрактом на небольшую сумму может стоить дороже крупного перевода ETH. Цена зависит от количества команд и изменений, которые должна выполнить сеть.

В Bitcoin комиссия растет вместе с размером транзакции. В Ethereum она зависит от использованного газа и его цены. Поэтому причины высокой комиссии в двух сетях различаются.

Как сети предотвращают двойную трату

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

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

В эфириуме сеть проверяет баланс аккаунта и nonce. Две транзакции с одним порядковым номером одновременно исполнить нельзя.

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

Как модели влияют на приватность

Все транзакции Bitcoin и Ethereum публичны. Любой пользователь может увидеть адреса, суммы и историю переводов. Различаются способы, которыми аналитики связывают операции.

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

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

Это предположение не всегда верно. Некоторые совместные транзакции объединяют средства нескольких пользователей. Поэтому вывод о принадлежности адресов остается вероятностным.

Аналитические сервисы также пытаются определить, какой выход получил адресат, а какой является сдачей. Для этого они сравнивают типы адресов, суммы и дальнейшее движение средств.

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

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

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

Что меняется для разработчиков

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

По такому принципу работают токены, децентрализованные биржи и кредитные протоколы Ethereum. Контракт получает команду, проверяет условия и меняет данные.

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

Операции с разными UTXO проще отделить друг от друга. Они не меняют одну общую запись баланса и не конфликтуют на уровне входов.

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

Что важно знать пользователю

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

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

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

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

Универсально лучшей модели нет. UTXO дает точный учет отдельных частей средств и позволяет независимо расходовать разные выходы. Модель аккаунтов упрощает работу с общим балансом и приложениями со сложным состоянием.

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

Узнать больше по теме
Деньги: постигаем основы финансовой грамотности
Мы используем деньги в повседневной жизни каждый день, редко задумываясь о них как о сложной системе. Если вы хотите больше узнать об этом финансовом инструменте и его функциях, читайте наш материал.
Читать дальше