• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

safe-global / safe-queue-service / 42022170419
94%

Build:
DEFAULT BRANCH: main
Ran 05 Nov 2026 11:55AM UTC
Jobs 1
Files 88
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

05 Nov 2026 11:50AM UTC coverage: 93.855% (+0.06%) from 93.793%
42022170419

push

github

web-flow
Set executions dropped by a reorg back to pending (#329)

* Set executions dropped by a reorg back to pending

On a reorg the Transaction Service sets the dropped executions back to
pending with no event per transaction. It only publishes REORG_DETECTED.
When the Ethereum transaction is mined again it publishes
EXECUTED_MULTISIG_TRANSACTION again, which this service already handles.
When it is not mined again, this service kept the transaction executed
for ever: out of /queue, and it could not be deleted or proposed again.

On REORG_DETECTED the worker reads the executed transactions of that
chain with modified in the last REORG_EXECUTIONS_MAX_AGE_SECONDS (30 min
by default) and reads their receipts. An execution with no receipt goes
back to pending. A receipt that cannot be read keeps the execution.

- modified is the time the execution was stored, as confirmations are
  not added to executed transactions. No new column and no index:
  reorgs are rare, so the scan is accepted.
- The revert matches modified too, so a transaction modified after the
  read is kept.
- Receipts are read at most REORG_RECEIPTS_MAX_CONCURRENCY at a time.

* Anchor the reorg check to the reorg block

The window was based on the processing time, so a backlog longer than
REORG_EXECUTIONS_MAX_AGE_SECONDS made the check find nothing. The RPC of
this service can also be behind the node of the Transaction Service, and
then it answers no receipt for canonical transactions too.

The check now reads block blockNumber on this service's node:
- If the node does not have it yet, nothing is reverted and a warning is
  logged.
- If it has it, the executions modified after its timestamp, minus one
  minute of clock skew, are checked. REORG_EXECUTIONS_MAX_AGE_SECONDS is
  removed.

* Wait for earlier events before checking a reorg

With the prefetch, events are processed at the same time. An
EXECUTED_MULTISIG_TRANSACTION of a dropped block received before
REORG_DETECTED could still be waiti... (continued)

3635 of 3873 relevant lines covered (93.85%)

0.94 hits per line

Coverage Regressions

Lines Coverage ∆ File
21
88.94
0.23% app/services/event_service.py
7
96.6
0.17% app/datasources/db/repositories/multisig_transaction_repository.py
5
85.71
0.0% app/datasources/queue/rabbitmq_subscriber.py
Jobs
ID Job ID Ran Files Coverage
1 42022170419.1 05 Nov 2026 11:55AM UTC 88
93.85
GitHub Action Run
Source Files on build 42022170419
  • Tree
  • List 88
  • Changed 7
  • Source Changed 0
  • Coverage Changed 7
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • 62ba1646 on github
  • Prev Build on main (#41857888046)
  • Next Build on main (#42056588493)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc