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

safe-global / safe-client-gateway / 27557496345
90%

Build:
DEFAULT BRANCH: main
Ran 15 Jun 2026 03:37PM UTC
Jobs 2
Files 1234
Run time 5min
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

15 Jun 2026 03:33PM UTC coverage: 90.306% (-0.009%) from 90.315%
27557496345

push

github

web-flow
fix(hooks): invalidate nested Safe tx cache on parent approveHash execution (#3114)

* fix(hooks): invalidate nested Safe tx cache on parent approveHash execution

In nested-Safe setups a child transaction is confirmed/executed when a parent
Safe executes approveHash(childSafeTxHash) on the child Safe. The tx-service
emits EXECUTED_MULTISIG_TRANSACTION for the parent's approveHash tx, but the
handler only invalidated the parent caches, leaving the child tx and the child
Safe's queue stale until TTL.

Decode the executed tx's calldata with SafeDecoder and, when it is an
approveHash (directly or wrapped in a multiSend), also clear the referenced
child transaction and its Safe's transaction list. The child Safe address is
the approveHash call's `to`.

Resolves WA-2032.

Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* test(hooks): recurse nested multiSends; cover undefined/mixed/recursive cases

Address review feedback on the nested-Safe approveHash invalidation:

- Make approveHash detection recursive over multiSend, via a new private
  collectApprovedHashes(data, callee) walker. This handles arbitrary-depth
  multiSend nesting (e.g. multiSend([multiSend([approveHash(...)])])), which
  rare relayer wrappers can produce.
- Add tests for:
  - executed events with no `data` (early-return path),
  - multiSend that mixes approveHash with other calls — asserts only the
    approveHash child is cleared and an unrelated Safe queue is untouched,
  - nested multiSend batches.
- Document that we invalidate regardless of `event.failed` (intentional:
  cheap and always-correct).
- Document the selector-only `isApproveHash` trust boundary: the
  decodeFunctionData try/catch is what makes malformed/colliding input safe.
- Slim the inline comment block to one line; the JSDoc on the helper carries
  the long-form rationale.

Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude... (continued)

4621 of 5493 branches covered (84.13%)

Branch coverage included in aggregate %.

25 of 26 new or added lines in 2 files covered. (96.15%)

2 existing lines in 2 files now uncovered.

17103 of 18563 relevant lines covered (92.13%)

611.54 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
93.41
0.39% src/modules/hooks/domain/helpers/event-cache.helper.ts

Coverage Regressions

Lines Coverage ∆ File
1
93.75
-3.13% src/modules/notifications/routes/v1/entities/__tests__/create-registration-v2.dto.builder.ts
1
89.87
-3.8% src/modules/notifications/routes/v1/notifications.controller.ts
Jobs
ID Job ID Ran Files Coverage
1 run-unit-tests - 27557496345.1 15 Jun 2026 03:37PM UTC 2152
58.59
GitHub Action Run
2 run-integration-tests - 27557496345.2 15 Jun 2026 03:39PM UTC 2371
77.91
GitHub Action Run
Source Files on build 27557496345
  • Tree
  • List 1234
  • Changed 346
  • Source Changed 2
  • Coverage Changed 346
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #27557496345
  • be22925a on github
  • Prev Build on main (#27552102879)
  • Next Build on main (#27617758257)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc