| Поле или слой | Что меняется | Что не меняется |
|---|---|---|
| Safe nonce | После execTransaction, который не откатился целиком; возможны ExecutionSuccess и ExecutionFailure | От подписи, delete или внешней транзакции с reverted receipt |
| EOA nonce исполнителя | Когда внешний аккаунт отправляет Ethereum-транзакцию | От места предложения внутри очереди Safe |
| Transaction Service | Предложения, подтверждения и видимость off-chain | Состояние и nonce контракта без on-chain исполнения |
- Поле или слой
- Safe nonce
- Что меняется
- После execTransaction, который не откатился целиком; возможны ExecutionSuccess и ExecutionFailure
- Что не меняется
- От подписи, delete или внешней транзакции с reverted receipt
- Поле или слой
- EOA nonce исполнителя
- Что меняется
- Когда внешний аккаунт отправляет Ethereum-транзакцию
- Что не меняется
- От места предложения внутри очереди Safe
- Поле или слой
- Transaction Service
- Что меняется
- Предложения, подтверждения и видимость off-chain
- Что не меняется
- Состояние и nonce контракта без on-chain исполнения
Safe nonce принадлежит контракту, а не владельцу
В обычном multisig несколько владельцев подтверждают один Safe transaction hash. В этот hash входит Safe nonce — порядковое значение самого смарт-аккаунта. Два предложения с одним Safe nonce конфликтуют: после принятого сетью execTransaction без полного revert текущий nonce контракта увеличится, и второе уже не сможет пройти с прежним значением. Подпись владельца подтверждает конкретный набор полей, но сама по себе очередь не продвигает.
EOA nonce — счётчик внешнего аккаунта, который в итоге отправляет вызов execTransaction и платит network fee. Один владелец может собрать подписи, а другой — отправить on-chain вызов; его EOA nonce не обязан совпадать с Safe nonce. Поэтому ошибка pending или replacement у внешней Ethereum-транзакции диагностируется отдельно как проблема EOA nonce, а не как перестановка очереди Safe.
Удалить предложение и отклонить транзакцию — разные операции
Transaction Service хранит предложенные транзакции и собирает подтверждения off-chain, чтобы владельцы видели общий объект до отправки в сеть. Его delete endpoint удаляет неисполненное предложение при допустимой авторизации proposer или delegate. Это может убрать строку из интерфейса сервиса, но не создаёт Ethereum-транзакцию, не вызывает контракт и не расходует Safe nonce. Копия подписанных данных, сохранённая у другого участника, от этого не становится on-chain недействительной.
On-chain rejection — новая Safe-транзакция для того же nonce. Она проходит обычный порог подписи владельцев и должна быть исполнена в сети. После её исполнения контракт расходует этот nonce, поэтому прежнее предложение с тем же значением больше не соответствует текущей последовательности. Safe SDK называет такой объект rejection transaction; это не мгновенная кнопка и не бесплатное редактирование старой подписи.
Решение зависит от того, где нужно изменить состояние
| Наблюдение | Действие | Ожидаемый результат |
|---|---|---|
| Предложение ошибочно, подписей нет, нужно убрать только из общей ленты | Авторизованному proposer удалить его из Transaction Service | Запись исчезает off-chain; Safe nonce не меняется |
| Подписанное предложение нельзя оставлять исполнимым | Согласовать и исполнить rejection transaction с тем же Safe nonce | Nonce расходуется on-chain; конфликтующее предложение инвалидируется |
| Есть две полезные транзакции с одним nonce | Остановить исполнение и решить, какая должна победить; вторую пересоздать с актуальным nonce | Одна операция исполняется, другая получает новый hash и новые подписи |
| Внешняя транзакция execTransaction pending | Проверить sender EOA, его nonce и replacement-механику сети | После receipt проверить Safe event и перечитать nonce; не судить по внутреннему действию |
- Наблюдение
- Предложение ошибочно, подписей нет, нужно убрать только из общей ленты
- Действие
- Авторизованному proposer удалить его из Transaction Service
- Ожидаемый результат
- Запись исчезает off-chain; Safe nonce не меняется
- Наблюдение
- Подписанное предложение нельзя оставлять исполнимым
- Действие
- Согласовать и исполнить rejection transaction с тем же Safe nonce
- Ожидаемый результат
- Nonce расходуется on-chain; конфликтующее предложение инвалидируется
- Наблюдение
- Есть две полезные транзакции с одним nonce
- Действие
- Остановить исполнение и решить, какая должна победить; вторую пересоздать с актуальным nonce
- Ожидаемый результат
- Одна операция исполняется, другая получает новый hash и новые подписи
- Наблюдение
- Внешняя транзакция execTransaction pending
- Действие
- Проверить sender EOA, его nonce и replacement-механику сети
- Ожидаемый результат
- После receipt проверить Safe event и перечитать nonce; не судить по внутреннему действию
Stop-сигналы
- chain ID, Safe address или Safe nonce не совпадают с согласованным предложением;
- интерфейс показывает delete, но не объясняет, off-chain это действие или on-chain transaction;
- receipt показан как successful, но интерфейс скрывает событие ExecutionFailure и актуальный Safe nonce;
- владельцам предлагают подписать новый hash без показа to, value, data, operation и nonce;
- в очереди есть несколько конфликтующих объектов, а команда не выбрала единственный результат;
- кто-то просит seed-фразу или private key якобы для отмены.
Для восстановления сохраните Safe address, network, текущий nonce из контракта, Safe transaction hash, полный payload, список подтверждений и hash внешней транзакции исполнения. После rejection или обычного execTransaction дождитесь receipt, найдите ExecutionSuccess либо ExecutionFailure и перечитайте on-chain nonce через независимый RPC. Только затем пересоздавайте следующие операции как новые предложения для смарт-аккаунта; старые подписи к другому nonce не переносятся автоматически.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- Safe Help — Reject and Delete Transactions Safe · Проверено 20 августа 2026 г. в 09:24 GMT+5
- Safe Docs — createRejectionTransaction Safe · Проверено 20 августа 2026 г. в 09:24 GMT+5
- Safe Docs — Transaction Service API Safe · Проверено 20 августа 2026 г. в 09:24 GMT+5
- Safe Docs — Delete Queued Multisig Transaction Safe · Проверено 20 августа 2026 г. в 09:24 GMT+5
- Safe Docs — getNonce Safe · Проверено 20 августа 2026 г. в 09:24 GMT+5
- ethereum.org — Transactions ethereum.org · Проверено 20 августа 2026 г. в 09:24 GMT+5
- Safe.sol — execTransaction source Safe · Проверено 20 августа 2026 г. в 10:00 GMT+5
