Транзакции
Транзакция — это подписанное указание цепочке: заплатить кому-то, выпустить токен, разместить ордер, привязать адрес к группе. В ZooBC нет виртуальной машины для пользовательского кода. Каждая возможность — встроенный тип транзакции с фиксированными правилами, которые каждый узел применяет в точности одинаково, поэтому кошелёк ещё до подписания знает всё, что может сделать транзакция, и какой будет её минимальная комиссия.
Встроенные типы
Начиная с версии 0.5.8 ZooBC определяет 73 номера типов транзакций, включая тип 0, в двенадцати семействах.
Номер типа — это группа плюс 256, умноженное на подтип, поэтому нумерация разрежённая: 2 — это NodeRegistration, а 258 (группа 2, подтип 1) — её обновление. Номер, который цепочка не определяет, отклоняется, а каждый определённый тип принимается с блока 1.
Два номера особые. Тип 0, Empty, ничего не перемещает: он существует, чтобы нести сообщение, всё равно должен платить комиссию больше нуля и не увеличивает nonce отправителя — счётчик, который цепочка ведёт для каждого отправителя. Тип 53, CancelLongevity, выведен из употребления: каждая цепочка его отклоняет, а вместо него используется CloseLongevity (309).
Жизнь транзакции
- Кошелёк собирает конверт, одинаковый для всех типов, и подписывает его для одной цепочки.
- Он отправляет подписанные байты запросом
POST /api/v1/transactions. HTTP 202 означает, что узел принял транзакцию в свой пул, а не что она уже в блоке. Повторная отправка тех же байтов безопасна: копия помечается как дубликат. - Узлы передают транзакцию дальше, и производитель блока включает её. Блок содержит не более 2 000 транзакций и 524 288 байт полезных данных и не более одной транзакции от каждого аккаунта (см. Одна транзакция на аккаунт в блоке и пакеты).
GET /api/v1/transactions/<hash>/statusсообщает о её продвижении: staging, mempool (с позицией), confirmed (с высотой блока), rejected (с причиной) или not_found.
Транзакция, которую ни один блок не включил в пределах её окна, истекает (см. Срок действия и метки времени).
Когда состояние успевает измениться
Между подписанием и включением в блок другие транзакции могут изменить то, от чего зависит транзакция: эскроу завершено, предложение принял кто-то другой, срок токена истёк. Такая транзакция становится оплаченной пустой операцией: она включается в блок, платит свою комиссию и больше ничего не меняет. Блок остаётся действительным на каждом узле, поэтому никто не может застопорить цепочку, отправляя транзакции, которые вот-вот устареют.
Блок недействителен только из-за ошибок, которые каждый узел видит одинаково, например неверной подписи, комиссии ниже минимальной (см. Комиссии) или платежа, превышающего баланс отправителя.
Статьи этого раздела
- Конверт транзакции: поля, которые несёт каждая транзакция, и её комиссия.
- Подписание транзакции: дайджест, привязанный к цепочке, и типы ключей, которые могут подписывать.
- Срок действия и метки времени: как долго подписанная транзакция остаётся действительной.
- Одна транзакция на аккаунт в блоке и пакеты: одна транзакция на аккаунт в блоке и пакеты.
- Эскроу: платежи, которые цепочка удерживает, пока утверждающий не примет решение.
- Мультиподпись: аккаунты, которые тратят средства только с несколькими подписями.
- Ликвидные платежи (потоки): деньги, которые поступают получателю потоком в течение минут.
- Запланированные переводы: серия платежей, подписанная один раз.
- Триггеры и аттестации: деньги, освобождаемые на заданной высоте или после события.
- Группы аккаунтов: много адресов, разделяющих один аккаунт.
См. также
Статьи по этой теме
- Группы аккаунтов
Как группа аккаунтов ZooBC позволяет многим адресам любых типов ключей делить один баланс, а контролёр решает, сколько может тратить каждый участник. - Запланированные переводы
Как одна транзакция ScheduledTransfer в ZooBC задаёт серию платежей в ZBC или токене — с блокировкой заранее или со списанием в срок — и как её можно отменить или перенаправить. - Конверт транзакции
Поля, которые несёт каждая транзакция ZooBC, по порядку: что содержит каждое и чего намеренно нет, например лимита газа или идентификатора цепочки. - Ликвидные платежи (потоки)
Как ликвидный платёж ZooBC передаёт получателю ZBC или токен потоком в течение заданного числа минут и как любая сторона может остановить его со справедливым разделом. - Мультиподпись
Как мультиподписной аккаунт ZooBC тратит средства, только когда их подписало заданное число участников, даже если они пользуются ключами разных цепочек. - Одна транзакция на аккаунт в блоке и пакеты
Почему блок ZooBC может нести только одну транзакцию от каждого аккаунта и как пакет позволяет одному аккаунту сделать несколько платежей или переводов одной транзакцией. - Подписание транзакции
Что охватывает подпись в ZooBC, как выводятся хеш и идентификатор транзакции, какие типы ключей могут подписывать и как чужие кошельки подписывают транзакции своей цепочки. - Срок действия и метки времени
Почему каждая транзакция ZooBC несёт собственное время, как долго она остаётся действительной (по умолчанию час, не более суток) и как время используют блоки и расчёты. - Триггеры и аттестации
Как триггер ZooBC блокирует ZBC до будущей высоты блока или до события во внешнем мире и как зарегистрированные узлы разрешают события аттестацией. - Эскроу
Как цепочка может удерживать платёж ZooBC, пока названный утверждающий не примет решение, четыре возможных исхода, сколько это стоит и запросы эскроу от получателя.