
Монеты, балансы и счета: почему у вопроса «сколько у меня» три разных ответа
Откройте кошелёк, поддерживающий несколько сетей, и, если приглядеться, заметите странность. Баланс биткоина и баланс Ethereum — оба просто числа на экране, но под ними они вычисляются совершенно по-разному, а в Solana устроен и вовсе третий вариант.
Это не мелочь для любознательных. Именно этим объясняется, почему комиссии биткоина зависят от вашей истории транзакций, почему транзакция Ethereum может провалиться и всё равно стоить денег и почему счёт в Solana нельзя просто опустошить до нуля.
Модель UTXO: вы владеете монетами, а не балансом
У биткоина нет счетов и он не хранит балансов. Он хранит множество непотраченных выходов транзакций — UTXO, — каждый из которых представляет собой отдельный кусок стоимости, запертый некоторым условием траты.
Подумайте о наличных. У вас в кармане не «47 рублей»; у вас купюра в 20, две по 10, одна в 5 и две монеты по 1. Чтобы заплатить 23, вы отдаёте двадцатку и пятёрку и получаете 2 сдачи. Разорвать купюру пополам нельзя.
UTXO работают ровно так же. Каждый должен быть потрачен целиком. Чтобы заплатить 0,3 BTC из выхода в 1 BTC, кошелёк расходует целый BTC и создаёт два новых выхода: 0,3 получателю и около 0,7 обратно вам в качестве сдачи. UTXO на 1 BTC перестаёт существовать.
Ваш «баланс» — величина производная: кошелёк просматривает цепь в поисках выходов, запертых условиями, которые вы можете выполнить, и складывает их. Нигде в блокчейне биткоина нет записи о том, что у вас есть какая-то конкретная сумма.
Отсюда следуют три вещи, и все три практические:
Комиссии зависят от вашей истории, а не только от суммы. Их берут за байт, а каждый потраченный вход добавляет байты. Заплатить 50 из одного большого UTXO дёшево; заплатить те же 50, собрав их из тридцати крошечных, дорого, потому что транзакция физически больше. Поэтому объединять UTXO, когда комиссии низкие, имеет смысл.
Сдача — это настоящий выход, которому надо куда-то уйти. Любой кошелёк делает это автоматически, но именно на этом механизме держатся эвристики адреса сдачи, которыми аналитики связывают ваши адреса между собой.
Трата естественным образом параллельна. Разные UTXO независимы, поэтому ничто не выстраивает ваши транзакции в строгий порядок.
Биткоин, Litecoin, Dogecoin, Bitcoin Cash, Zcash, Ravencoin и Flux работают именно так. Это более старая модель и та, в которой «не ваши ключи — не ваши монеты» верно наиболее буквально: счёта нет, есть только монеты с прикреплёнными условиями.
Модель счетов: вы владеете балансом и счётчиком
Ethereum от этого отказался и взял нечто ближе к банковской книге. Цепь хранит состояние: огромное отображение адресов в балансы (а для контрактов — в сохранённые данные). Отправка 0,3 ETH вычитает 0,3 из одного числа и прибавляет к другому. Ни входов, ни выходов, ни сдачи.
Это проще, и именно это делает умные контракты осуществимыми: контракту нужно постоянное хранилище, которое он может читать и писать, а это неудобно, когда мир состоит из отдельных монет.
Но модель счетов приносит проблему, которой у UTXO нет. Если транзакция — это просто «вычесть у Алисы 0,3», то любой, кто её увидит, мог бы рассылать её снова и снова и опустошить счёт. Лекарство — nonce: счётчик на каждый счёт, включаемый в каждую транзакцию и обязанный увеличиваться ровно на единицу. Транзакцию номер 7 можно намайнить только после номера 6 и только один раз.
Именно nonce объясняет поведение EVM-сетей:
Ваши транзакции строго упорядочены. Одна застрявшая транзакция блокирует все последующие с того же адреса, потому что их нельзя обработать вне очереди.
Комиссии платятся, даже когда транзакция проваливается. Газ оплачивает предпринятые вычисления, а не удавшиеся. Откатившийся вызов контракта всё равно израсходовал работу валидаторов, значит, всё равно стоит денег. Это постоянно застаёт людей врасплох и является настоящим отличием от мира UTXO, где недействительная транзакция просто никогда не подтверждается и ничего не стоит.
Управление nonce — это настоящая инфраструктура. Для обычного кошелька оно невидимо. Для мультиподписи, где два устройства должны договориться до рассылки, nonce нужно зарезервировать, отслеживать и освободить — поэтому обращение с nonce в двухустройственной подписи возвращается снова и снова, а не остаётся деталью реализации.
Ethereum, Polygon, BSC, Avalanche, Base и XDC используют эту модель.
Solana: счета, которые платят ренту
Solana тоже основана на счетах, но с поворотом, который застаёт людей врасплох.
В Solana счётом является практически всё — ваш кошелёк, каждый токен, который вы держите, данные каждой программы. И поскольку эти счета занимают память валидаторов, они обязаны держать минимальный баланс, чтобы оставаться живыми. Это освобождение от ренты: положите достаточно — и счёт существует бессрочно; опуститесь ниже — и его могут забрать.
Практическое следствие: чтобы держать SPL-токен, нужен отдельный токен-счёт, наполненный небольшим количеством SOL, ещё до того, как кто-либо сможет вам этот токен прислать. Получение не бесплатно. Это необычно и стоит понять заранее, до того как понадобится, потому что «я отправил тебе токены, а ничего не пришло» часто означает всего лишь отсутствующий токен-счёт.
Почему мультичейновому кошельку приходится моделировать все три
Кошелёк, поддерживающий эти сети, не может иметь одно внутреннее понятие «баланса». Ему нужны:
- Для UTXO-сетей: множество выходов, у каждого сумма и скрипт, плюс логика выбора монет, решающая, какие тратить.
- Для EVM-сетей: единственное число баланса плюс nonce и очередь, соблюдающая порядок.
- Для Solana: баланс, набор связанных токен-счетов и понимание минимумов ренты.
Архитектура безопасности тоже вынуждена подстраиваться. В UTXO-сетях два из двух в SSP — это скрипт: выход P2WSH, требующий для разблокировки двух подписей, что обеспечивают собственные правила скриптинга цепи. В EVM-сетях для обычных счетов эквивалентной системы скриптов нет, поэтому мультиподпись реализуется через абстракцию счёта — счёт-смарт-контракт, чья логика проверки требует обеих подписей. В Solana это адрес, производный от программы, управляемый программой в сети.
Три совершенно разных механизма и одна обращённая к пользователю идея: ничто не движется без двух устройств. То, что лежащие в основе реализации ничем не похожи друг на друга, и есть причина, по которой гарантию приходится устанавливать и заново проверять на каждой сети, а не считать унаследованной.
Что это значит для вас
Если комиссия биткоина кажется высокой для небольшого платежа, посмотрите на входы. Сумма важна меньше, чем то, из скольких кусков она состоит.
Если транзакция Ethereum застряла, все последующие с того же адреса застряли за ней. Это nonce, а не сбой. Разберитесь с первой — и очередь пойдёт.
Если провалившаяся EVM-транзакция всё равно списала комиссию, модель работает как задумано. Симуляция помогает этого избежать — поэтому симулировать перед подписью на сетях со счетами полезнее, чем на UTXO.
Если перевод токена Solana «пропал», поищите токен-счёт. Ничего не потеряно; возможно, получателя просто ещё не существовало.
Ничто из этого не причуда конкретного кошелька. Это следствия проектного решения, которое каждая сеть приняла годы назад, и, как только вы видите, в какой модели находитесь, множество иначе необъяснимых поведений становится предсказуемым.


