Транзакция в блокчейне — это запись об изменении состояния реестра: переводе монет с одного адреса на другой, вызове смарт-контракта или выполнении другого действия по правилам протокола.
В сетях вроде Bitcoin (BTC) транзакция фиксирует перевод определённого количества монет от отправителя к получателю и подписывается его приватным ключом. В платформах для смарт-контрактов, таких как Ethereum, транзакции дополнительно определяют лимит вычислений (gas) и могут содержать произвольные данные для вызова контрактов.
От того, как вы создаёте и отправляете транзакции, зависит не только скорость перевода, но и безопасность ваших средств.
Основная идея транзакции
В упрощённом виде транзакция отвечает на три вопроса:
- кто отправляет — владелец средств, подтверждающий свои права цифровой подписью;
- кому отправляет — один или несколько адресов получателей;
- что именно меняется — сумма, набор «входов» и «выходов», дополнительные данные для протокола или смарт-контрактов.
Чтобы сеть приняла транзакцию:
- она должна соответствовать формату и правилам конкретного блокчейна;
- у отправителя должно быть достаточно средств (монет, токенов, газа);
- цифровая подпись должна быть корректной;
- транзакция не должна нарушать запреты вроде «двойной траты».
После включения в блок транзакция становится частью общей истории блокчейна (blockchain). Изменить её задним числом практически нереально: пришлось бы переписать цепочку блоков и убедить большинство узлов принять такую версию.
Из чего состоит транзакция
Структура транзакции зависит от типа блокчейна (UTXO-модель, аккаунтная модель, наличие смарт-контрактов), но в общем случае можно выделить несколько элементов.
- Идентификатор и заголовок.
Версия формата, уникальный ID (обычно хеш содержимого), служебные поля для порядка обработки.
- Входы (inputs) — чаще в UTXO-модели.
Указывают, какие ранее полученные и ещё не потраченные «монеты» (UTXO) мы тратим в этой транзакции. См. UTXO.
- Выходы (outputs).
Описывают, кому и сколько монет отправляется. Каждый выход содержит сумму и «скрипт блокировки» — условие, при котором средства можно будет потратить (подпись владельца, мультиподпись и т.п.).
- Адреса и суммы (в аккаунтной модели).
В сетях вроде Ethereum достаточно указать адрес получателя, сумму и дополнительные данные; баланс адреса перерасчитывается по итогам выполнения.
- Подписи и данные авторизации.
Доказывают, что отправитель вправе распоряжаться средствами. Включают подпись приватным ключом и, при необходимости, скрипты/данные разблокировки.
- Комиссия (fee).
В UTXO-сетях часто задаётся как разница между суммой входов и суммой выходов. В аккаунтных моделях, как в Ethereum, указывается явно через параметры газа (gas limit, gas price) и влияет на приоритет обработки.
- Дополнительные данные.
Поле данных (data, memo, payload) может использоваться для сообщений, вызова функций смарт-контрактов, указания ID цепочки и т.п.
Пример транзакции Bitcoin
В Bitcoin используется модель UTXO. Упрощённо структура транзакции может выглядеть так:
{
"version": 2,
"vin": [
{
"txid": "идентификатор_предыдущей_транзакции",
"vout": 0,
"scriptSig": "данные_разблокировки",
"sequence": 4294967295
}
],
"vout": [
{
"value": 0.01000000,
"scriptPubKey": "скрипт_блокировки_получателя"
},
{
"value": 0.08900000,
"scriptPubKey": "скрипт_блокировки_сдачи"
}
],
"locktime": 0
}
Ключевые поля:
- version — версия формата транзакции.
- vin — список входов: какие UTXO тратим и как их разблокируем.
- vout — список выходов: кому и сколько отправляем (включая «сдачу» обратно отправителю).
- locktime — момент, до которого транзакция не может быть включена в блок (0 означает отсутствие задержки).
На практике кошелёк формирует такие структуры автоматически, но понимание общей схемы помогает лучше оценивать риски и поведение сети.
Транзакции в Ethereum и на L2
В Ethereum и совместимых сетях (включая L2-решения) используется аккаунтная модель. Базовые поля транзакции:
- from — адрес отправителя;
- to — адрес получателя (кошелёк или смарт-контракт); может быть пустым при развёртывании нового контракта;
- value — сумма в нативной монете (ETH или токене газа конкретной сети);
- nonce — порядковый номер транзакции с этого адреса, защищающий от повторной отправки;
- gas limit — максимальное количество gas, которое готов потратить отправитель;
- gas price / maxFeePerGas / maxPriorityFeePerGas — настройки комиссии за единицу газа (с учётом EIP-1559);
- data / input — данные для вызова смарт-контракта (код функции и аргументы), либо пусто для простого перевода.
Особенности:
- транзакция может быть простым переводом ETH между адресами или вызовом контракта (swap на DEX, минт NFT, участие в DeFi и т.д.);
- часть транзакций в L2 служит для мостов: депозиты и выводы между L1 и L2, взаимодействие с мостами и прокси-контрактами.
Подробнее о модели Ethereum и комиссии см.:
Жизненный цикл транзакции
- Создание.
В кошельке или приложении формируется черновик: указываются адрес получателя, сумма, сеть и (при необходимости) данные для контракта.
- Подписание.
Транзакция подписывается приватным ключом или через смарт-кошелёк с account abstraction. Подпись доказывает, что операцию инициировал владелец.
- Отправка в сеть.
Подписанная транзакция отправляется на узел (node) или провайдера (RPC/API), который проверяет формат, подпись и базовые правила.
- Попадание в мемпул.
Валидные транзакции попадают в очередь (мемпул). Транзакции с более высокой комиссией получают больший приоритет (как в Bitcoin, так и в Ethereum/L2).
- Включение в блок.
Майнеры или валидаторы выбирают набор транзакций и формируют блок. После добавления блока в цепочку транзакции в нём считаются подтверждёнными.
- Нарастание подтверждений.
Каждый следующий блок поверх того, где находится транзакция, увеличивает её безопасность: откат истории становится дороже. Для крупных сумм обычно ждут больше подтверждений.
Время от отправки до первого подтверждения может варьироваться от секунд до часов в зависимости от сети, нагрузки и выставленной комиссии.
Комиссии и приоритет транзакций
Блокчейны ограничены по количеству данных и вычислений в блоке, поэтому:
- при низкой нагрузке транзакции с минимальной комиссией попадают в блок быстро;
- при высокой нагрузке пользователи конкурируют за место в блоке и повышают fee.
Особенности:
- в UTXO-сетях (Bitcoin) комиссия часто измеряется в sat/vbyte и задаётся как разница между суммой входов и выходов;
- в Ethereum и L2 комиссия считается как gas_used × gas price, где gas price обычно указывается в gwei; после EIP-1559 часть комиссии сжигается, часть идёт валидатору;
- кошельки обычно предлагают несколько профилей: «быстро», «средне», «экономно» с учётом текущего состояния мемпула.
Если выставить слишком низкую комиссию:
- транзакция может надолго «застрять» в мемпуле;
- узлы могут со временем перестать ретранслировать её;
- в некоторых сетях её можно заменить новой транзакцией с более высокой fee (механизмы вроде RBF или «speed up» в интерфейсе кошелька).
Подробнее о комиссионной модели см. Комиссии (fee).
Риски и типичные ошибки с транзакциями
- Неверный адрес получателя.
Отправка на некорректный или чужой адрес почти всегда необратима. В блокчейне нет «кнопки отмены» и службы поддержки, которая сможет отменить запись в реестре. Проверяйте адрес вручную или через QR, делайте тестовый перевод малой суммы.
- Неправильный выбор сети или токена.
Один и тот же интерфейс кошелька может работать с разными сетями: Bitcoin, Ethereum, L2, EVM-чейнами и т.п. Перевод токена ERC-20 на адрес в другой сети (или на адрес монеты с тем же тикером, но в другом блокчейне) может привести к потере доступа к средствам.
- Отправка напрямую на адрес смарт-контракта.
В сетях со смарт-контрактами пользователи иногда отправляют монеты на адрес контракта, который не предусмотрен для прямых переводов. Если логика контракта не обрабатывает такие поступления, вывести эти средства может быть невозможно.
- Недостаточная комиссия.
Заниженная fee ведёт к долгому ожиданию. В некоторых случаях кошелёк позволяет «ускорить» или «заменить» транзакцию новой с более высокой комиссией, но это зависит от протокола.
- Компрометация ключей.
Если злоумышленник получает ваш приватный ключ или seed-фразу, он может подписывать транзакции от вашего имени. Подробнее о хранении — в статьях Криптокошелёк и Хранение на бирже и self-custody.
- Ошибки с мемо/тегами.
В некоторых сетях и на биржах нужно указывать дополнительное поле (memo, destination tag). Ошибка или пустое мемо могут привести к тому, что сервис не зачислит перевод автоматически.
Транзакции в UTXO- и аккаунтных моделях
| Критерий | UTXO-модель | Аккаунтная модель |
|---|---|---|
| Представление баланса | Набор непотраченных выходов (UTXO). | Числовой баланс на адресе. |
| Структура транзакции | Входы ссылаются на старые UTXO, выходы создают новые; есть «сдача». | Адрес отправителя → адрес получателя, баланс пересчитывается; часто есть поле данных. |
| Гибкость скриптов | Мощные скрипты блокировки/разблокировки, но без полноценной виртуальной машины. | В сетях со смарт-контрактами (Ethereum и EVM-совместимые) допускаются произвольные программы (контракты). |
| Аналитика и трекинг | Сложнее однозначно привязать UTXO к одному владельцу; выше вариативность схем. | Проще отслеживать потоки по адресу, что облегчает аналитику, но снижает приватность. |
| Примеры сетей | Bitcoin, Litecoin, Bitcoin Cash и др. | Ethereum, EVM-чейны и L2, аккаунтные L1 (например, Solana — с отличиями в модели). |
Частые вопросы
Можно ли отменить транзакцию после отправки? После включения транзакции в блок и появления подтверждений отменить её нельзя. Пока транзакция в мемпуле, некоторые сети и кошельки позволяют заменить её новой версией (например, с большей комиссией), но это не гарантия «отмены» — нужно смотреть правила конкретной сети.
Почему моя транзакция долго висит без подтверждений? Чаще всего — из-за слишком низкой комиссии на фоне текущей нагрузки. Также возможны локальные проблемы у кошелька или сервиса. Проверить статус можно через блокчейн-обозреватель (explorer) и сравнить комиссию вашей транзакции с рыночными значениями.
Что такое RBF и CPFP? RBF (Replace-By-Fee) — замена неподтверждённой транзакции новой с более высокой fee (там, где протокол и кошелёк это поддерживают). CPFP (Child Pays For Parent) — создание зависимой транзакции-«ребёнка» с высокой комиссией, чтобы майнеру было выгодно взять в блок и её, и «родителя».
Что такое мемпул? Мемпул — это «буфер ожидания» транзакций, которые уже прошли базовую проверку, но ещё не попали в блок. У каждого узла может быть свой набор транзакций и свои правила очистки мемпула.
Чем отличается перевод монет от взаимодействия со смарт-контрактом? Простой перевод меняет лишь балансы двух адресов. Вызов смарт-контракта может менять состояние множества адресов и таблиц, запускать сложную логику и создавать новые токены. Такие транзакции обычно занимают больше газа и дороже по комиссии.
