Расскажу о своей ошибке: когда-то я сам этого не понял.

Биткоин и Ethereum по-разному ведут учет того, «у кого сколько монет»: биткоин учитывает отдельные «неизрасходованные купоны», а Ethereum — баланс каждого аккаунта. Если разобраться в этой разнице, многое из того, что кажется странным, становится понятным.

\u003cc-11/\u003e использует модель UTXO, а отображаемый кошельком баланс — это сумма нескольких неизрасходованных выходов. Текущий показатель: 75,182.06 (за 24 ч. +0.46%).

▍UTXO: неизрасходованные купоны

Биткоин использует модель UTXO (неизрасходованных выходов транзакций). Можно представить каждый UTXO как купон произвольного номинала: каждая транзакция расходует несколько старых купонов и выпускает несколько новых для получателя.

Баланс, отображаемый в кошельке, — это сумма всех принадлежащих вам UTXO. В блокчейне нет отдельного числа под названием «баланс».

▍Сдача и комиссия

UTXO можно потратить только целиком. Например, если у вас есть одна «купюра» номиналом 1, а заплатить нужно 0,3, транзакция создаст два выхода: 0,3 отправятся получателю, а остаток за вычетом комиссии вернётся на ваш адрес в качестве сдачи. Многие кошельки отправляют сдачу на новый адрес, поэтому в обозревателе блоков можно увидеть, что «деньги вернулись к вам».

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

▍Модель аккаунтов: баланс учитывается напрямую

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

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

▍У каждой модели свои компромиссы

В модели UTXO независимые транзакции можно проверять параллельно, а использование новых адресов для сдачи полезно для конфиденциальности. Однако писать сложные смарт-контракты здесь не так удобно. В модели аккаунтов баланс нагляден, а смарт-контракты писать проще, но транзакции с одного аккаунта должны выполняться по очереди. Cardano расширила модель UTXO (eUTXO), добавив возможность включать в выходы логику скриптов.

▍Кратко

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

Если было полезно, сохраните — потом сможете вернуться и перечитать.