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

safe-global / safe-client-gateway / 27557496345 / 2
88%
main: 88%

Build:
DEFAULT BRANCH: main
Ran 15 Jun 2026 03:39PM UTC
Files 2371
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

15 Jun 2026 03:33PM UTC coverage: 77.908% (+0.02%) from 77.893%
27557496345.2

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)

3296 of 5730 branches covered (57.52%)

Branch coverage included in aggregate %.

29649 of 36557 relevant lines covered (81.1%)

243.56 hits per line

Source Files on job run-integration-tests - 27557496345.2
  • Tree
  • List 2371
  • Changed 338
  • Source Changed 2
  • Coverage Changed 338
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Build 27557496345
  • be22925a on github
  • Prev Job for on main (#27552102879.1)
  • Next Job for on main (#27617758257.1)
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