Skip to content
Field reportAU-2026-0278

Two files, eleven findings, five assumptions

OpenZeppelin's review of the TxFlow bridge found no critical or high issues. The list of things the bridge takes on trust is longer than the list of bugs.

SeverityMedium

3 minSmart Contract Audits

OpenZeppelin reviewed the Bridge2 contract deployed on Arbitrum One, together with Signature.sol — a custodial USDC bridge between Arbitrum and TxFlow L1. The engagement ran from 25 to 30 June 2026 and covered two Solidity files. The report is dated 19 August.

Eleven issues: none critical, none high, one medium, five low, five notes. Five were resolved outright and one partially; the notes were deferred to future updates.

The medium finding

updateValidatorSet had no replay protection. A signed update could be resubmitted, and each resubmission reset the dispute period — which means finalisation could be pushed out indefinitely without forging anything. The recommendation was to call checkMessageNotUsed on the message. It is a denial-of-finality bug rather than a theft bug, and those tend to be underweighted precisely because nothing moves.

The low findings worth reading

  • Malicious validator set parameters could permanently disable the bridge through epoch overflow, power overflow or an excessive validator count.
  • No lower bound on locker threshold updates — later documented as intentional.
  • A non-standard EIP-712 implementation, so users signing did not see what they were signing in the usual form.
  • Deposits accepted while the bridge was paused.
  • Permit front-running on deposits.

The part that is not a bug

The report sets out what the design assumes rather than proves: that no more than a third of validator power is compromised; that lockers can pause within the dispute window before finalisation; that hot and cold wallet separation permits recovery from a hot key compromise; that the L1 manages the validator set and role lifecycle correctly; and that the Arbitrum sequencer stays honest.

One low-severity item — the validator count overflow — was closed as an L1 trust assumption rather than an on-chain code responsibility. That is a defensible call and also a good illustration of what a two-file scope does. The contracts were found to be sound against their assumptions. Whether the assumptions hold is a question the audit was not asked, and anyone sizing exposure to this bridge should read the assumption list as the actual risk register.

Retold from OpenZeppelin. This is a summary in our own words; follow the link for the original reporting.

Read next

Across the network

Desks that share a zone with this one on the BITBRIEF coverage map.

Terms defined