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

safe-global / safe-client-gateway / 40549279600
91%

Build:
DEFAULT BRANCH: main
Ran 27 Oct 2026 05:19PM UTC
Jobs 4
Files 1080
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

27 Oct 2026 05:18PM UTC coverage: 90.494% (-0.004%) from 90.498%
40549279600

push

github

web-flow
perf(transactions): decode each transaction once per request (#3703)

The transaction history, the Safe queue and the multisig transaction list decoded every transaction twice per request. `MultisigTransactionMapper.prefetchAddressInfos` decoded each transaction to collect the decoded `from`/`to` addresses for the token/contract prefetch, then threw the result away, and the mapper decoded the same transaction again to build `txInfo`. Successful decodes are not cached (`getDecodedData` sets no `expireTimeSeconds`, so only 404s are stored), so both calls reached the Decoder service.

Each call site now decodes its transactions once and passes the result to both the prefetch and the mapper. The set of transactions decoded is unchanged, and so is the response.

Decoder `POST /api/v1/data-decoder` calls per page at the default `limit=20`, counting only transactions with calldata:

| Endpoint | Before | After |
|---|---|---|
| History, first page | 40 | 20 |
| History, later pages (+1 earlier tx) | 42 | 21 |
| Safe queue, first page | 40 | 20 |
| Safe queue, later pages (+1 tx from the previous page) | 42 | 21 |
| Multisig transaction list | 2 per tx | 1 per tx |

The prefetch's decodes used to run one at a time; they now run in parallel with the rest of the page's decodes, as the mapping step already did.

`TransactionsHistoryMapper.prefetchAddressInfos` filtered with `isMultisigTransaction || isModuleTransaction`, which evaluates to `isMultisigTransaction`. It now calls `isMultisigTransaction` directly, so behaviour is the same: module transactions are still not prefetched. Including them would be a separate change.

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

4985 of 5748 branches covered (86.73%)

Branch coverage included in aggregate %.

12 of 14 new or added lines in 4 files covered. (85.71%)

2 existing lines in 2 files now uncovered.

12435 of 13502 relevant lines covered (92.1%)

358.63 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
85.71
2.38% src/modules/transactions/routes/mappers/transactions-history.mapper.ts

Coverage Regressions

Lines Coverage ∆ File
1
82.57
-0.92% src/modules/relay/domain/relayers/no-fee-campaign.relayer.ts
1
93.57
-0.58% src/modules/safe/domain/safe.repository.ts
Jobs
ID Job ID Ran Files Coverage
1 run-integration-tests-2 - 40549279600.1 27 Oct 2026 05:19PM UTC 1080
43.4
GitHub Action Run
2 run-integration-tests-1 - 40549279600.2 27 Oct 2026 05:19PM UTC 1080
37.74
GitHub Action Run
3 run-unit-tests - 40549279600.3 27 Oct 2026 05:19PM UTC 1080
68.88
GitHub Action Run
4 run-integration-tests-3 - 40549279600.4 27 Oct 2026 05:20PM UTC 1080
42.34
GitHub Action Run
Source Files on build 40549279600
  • Tree
  • List 1080
  • Changed 18
  • Source Changed 4
  • Coverage Changed 18
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #40549279600
  • 6fa12094 on github
  • Prev Build on main (#40490071196)
  • Next Build on main (#40550096084)
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