Заполните паспорт операции перед новым подтверждением
В модуле `pallet-multisig` незавершённая операция определяется не подписью и не текстом из кошелька. Нужно одновременно сверить сеть, аккаунт мультиподписи, порог, участников, `call_hash` и `Timepoint`. Если отличается хотя бы одна строка, участники работают с разными операциями.
`SCALE` — формат байтового кодирования вызова для сети. Поэтому участникам нужны одинаковые байты вызова, а не только совпадающее описание в кошельке.
| Строка | Что записать | Где сверить |
|---|---|---|
| Сеть и версия исполнения | идентификатор цепи, `specVersion`, `transactionVersion`, хеш метаданных | RPC и метаданные, которыми кодировали вызов |
| Аккаунт мультиподписи | адрес, полученный из полного набора участников и порога | хранилище операции и кошелёк каждого участника |
| Участники | полный набор; в `other_signatories` — остальные адреса без вызывающего | одинаковый порядок аккаунтов во всех клиентах |
| Вызов | одни SCALE-байты, их расшифровка и `call_hash` | сохранённый файл, а не заново собранная форма |
| `Timepoint` | номер блока и индекс первой внешней операции | поле `when` в хранилище и событие `NewMultisig` |
| Текущий ход | `depositor`, список `approvals`, зарезервированный депозит | запись `Multisig` в актуальном состоянии сети |
- Строка
- Сеть и версия исполнения
- Что записать
- идентификатор цепи, `specVersion`, `transactionVersion`, хеш метаданных
- Где сверить
- RPC и метаданные, которыми кодировали вызов
- Строка
- Аккаунт мультиподписи
- Что записать
- адрес, полученный из полного набора участников и порога
- Где сверить
- хранилище операции и кошелёк каждого участника
- Строка
- Участники
- Что записать
- полный набор; в `other_signatories` — остальные адреса без вызывающего
- Где сверить
- одинаковый порядок аккаунтов во всех клиентах
- Строка
- Вызов
- Что записать
- одни SCALE-байты, их расшифровка и `call_hash`
- Где сверить
- сохранённый файл, а не заново собранная форма
- Строка
- `Timepoint`
- Что записать
- номер блока и индекс первой внешней операции
- Где сверить
- поле `when` в хранилище и событие `NewMultisig`
- Строка
- Текущий ход
- Что записать
- `depositor`, список `approvals`, зарезервированный депозит
- Где сверить
- запись `Multisig` в актуальном состоянии сети
При первом `approve_as_multi` или `as_multi` поле `maybe_timepoint` пустое. Модуль создаёт запись и сохраняет координату в `when`. Все следующие подтверждения передают её как `Some(timepoint)`. Текущее время, номер события и сегодняшний блок для этого не подходят.
Найдите окончательную первую внешнюю операцию, событие `NewMultisig` и её позицию в блоке. Если кошелёк показывает ещё не окончательный блок, сверяйте его с разбором подтверждений и реорганизаций.
Хеш вызова сверяет байты, а не описание на экране
До первого подтверждения сохраните название модуля, метод, параметры, SCALE-байты и `call_hash`. Передайте участникам и байты, и их понятную расшифровку. После обновления версии исполнения похожий перевод может кодироваться иначе. Другой хеш означает другую операцию.
Перед подтверждением участник проверяет получателя, актив, сумму, вложенный `batch`- или `proxy`-вызов и ограничения. Материал о том, что именно подписывает кошелёк, помогает прочитать смысл. Техническим основанием остаются сохранённые SCALE-байты, декодированные по закреплённой версии метаданных.
Ошибка указывает, какую строку паспорта исправить
| Ошибка | Что не совпало | Что исправить |
|---|---|---|
| `NoTimepoint` | Операция уже существует, а следующая заявка не передала `when` | Взять `Timepoint` из хранилища или первого события |
| `WrongTimepoint` | Передана другая координата | Сверить номер блока и индекс внешней операции |
| `UnexpectedTimepoint` | По этому multisig и `call_hash` записи нет | Проверить сеть, участников, порог и хеш; не угадывать координату |
| `AlreadyApproved` | Этот участник уже есть в `approvals` | Не платить комиссию повторно; определить недостающего участника |
| `SignatoriesOutOfOrder` / `SenderInSignatories` | Неверно собрано `other_signatories` | Убрать вызывающего и отсортировать остальные аккаунты |
| `MaxWeightTooLow` | Лимита веса не хватает для внутреннего вызова | Пересчитать `max_weight` по текущей версии исполнения |
| `NotOwner` при отмене | Отправитель отмены не совпал с `depositor` | Отменяет первоначальный владелец депозита |
- Ошибка
- `NoTimepoint`
- Что не совпало
- Операция уже существует, а следующая заявка не передала `when`
- Что исправить
- Взять `Timepoint` из хранилища или первого события
- Ошибка
- `WrongTimepoint`
- Что не совпало
- Передана другая координата
- Что исправить
- Сверить номер блока и индекс внешней операции
- Ошибка
- `UnexpectedTimepoint`
- Что не совпало
- По этому multisig и `call_hash` записи нет
- Что исправить
- Проверить сеть, участников, порог и хеш; не угадывать координату
- Ошибка
- `AlreadyApproved`
- Что не совпало
- Этот участник уже есть в `approvals`
- Что исправить
- Не платить комиссию повторно; определить недостающего участника
- Ошибка
- `SignatoriesOutOfOrder` / `SenderInSignatories`
- Что не совпало
- Неверно собрано `other_signatories`
- Что исправить
- Убрать вызывающего и отсортировать остальные аккаунты
- Ошибка
- `MaxWeightTooLow`
- Что не совпало
- Лимита веса не хватает для внутреннего вызова
- Что исправить
- Пересчитать `max_weight` по текущей версии исполнения
- Ошибка
- `NotOwner` при отмене
- Что не совпало
- Отправитель отмены не совпал с `depositor`
- Что исправить
- Отменяет первоначальный владелец депозита
Собранный порог ещё не исполняет вызов
Остановите новые подтверждения, пока паспорт не совпал у всех. Затем недостающие участники используют `approve_as_multi` с теми же параметрами и `Timepoint`. Этот метод никогда не исполняет внутренний вызов, даже если порог уже достигнут.
Для завершения любой участник отправляет `as_multi`. Он передаёт полный исходный вызов, тот же порог, тот же список и сохранённый `Timepoint`. Лимит `max_weight` рассчитывают по текущей версии исполнения, не меняя сами байты вызова.
Итог читают во внутреннем результате
Событие `MultisigExecuted` содержит внутреннее поле `result`. Значение `Err` означает, что операция дошла до исполнения, но сам вызов завершился ошибкой. Значение `Ok` подтверждает выполнение вызова. После него проверьте ожидаемое изменение баланса, записи хранилища или событие целевого модуля.
Внешний успех заявки такого вывода не даёт. Сохраните окончательный блок, внешнюю операцию, `MultisigExecuted`, расшифрованный внутренний результат и целевое изменение. Распределить роли поможет статья о multisig для малого бизнеса, но она не заменит эти доказательства.
Изменившийся вызов начинают заново
Если получатель, сумма, метод или SCALE-байты изменились, старые подтверждения переносить нельзя. Первоначальный `depositor` может отменить точную старую запись через `cancel_as_multi`. Для отмены нужны тот же `Timepoint` и `call_hash`; после неё зарезервированный депозит освобождается.
Поставьте согласование на паузу, если
- участникам прислали только `call_hash`, без байтов и понятной расшифровки;
- `Timepoint` взят из текущего блока, времени на часах или номера события;
- кошельки показывают разные пороги или наборы участников;
- версия исполнения обновилась, а байты декодируют по старым метаданным;
- `approve_as_multi` считают доказательством исполнения без `MultisigExecuted`;
- для синхронизации просят сид-фразу, закрытый ключ или экспорт аккаунта.
Отсутствующая история требует архивного узла
Если RPC не отдаёт старые метаданные или тело блока, обратитесь к архивному узлу. Отсутствующий ответ не доказывает исчезновение операции. Эту границу объясняет устройство блокчейн-узла; материал поможет выбрать подходящий источник истории.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- Polkadot SDK — pallet-multisig overview Parity Technologies / Polkadot SDK · Проверено 25 августа 2026 г. в 00:00 GMT+5
- Polkadot SDK — pallet-multisig dispatch methods Parity Technologies / Polkadot SDK · Проверено 25 августа 2026 г. в 00:00 GMT+5
- Polkadot SDK — open Multisig state Parity Technologies / Polkadot SDK · Проверено 25 августа 2026 г. в 00:00 GMT+5
- Polkadot SDK — multisig errors Parity Technologies / Polkadot SDK · Проверено 25 августа 2026 г. в 00:00 GMT+5
- Polkadot SDK — multisig events Parity Technologies / Polkadot SDK · Проверено 25 августа 2026 г. в 00:00 GMT+5
- Polkadot public RPC Polkadot · Проверено 25 августа 2026 г. в 00:00 GMT+5
