Skip to content
3F Docs

Claiming Repaid Bridges

When an auction repays, your bridge moves to REPAID and becomes claimable. The console reads on-chain balances live (balancesOf(account) + convertToAssets(pt, yt)) so the Claim button only lights up when the underlying contract actually has something for you.

The flow depends on whether the bridge was funded by a pull offer (claim from your EOA) or a push offer (claim from your Safe / Fireblocks / Fordefi).


Pull bridges — single-tx claim from your EOA

Section titled “Pull bridges — single-tx claim from your EOA”

In User → Open Bridges, claimable pull rows show a green Claim X.XX USDC button in the action column. The amount is the live on-chain totalAssets from convertToAssets(pt, yt) — exactly what burnAll will pay out, not the offer-projected preview.

Click the button (or anywhere on the row — pull rows are row-clickable). A confirmation dialog opens with five rows:

  • Bridge — BR-XXXX for a single offer or N offers for an aggregated row.
  • Auction — auction ID.
  • Principal — pAssets from the on-chain conversion.
  • Interest earned — yAssets from the on-chain conversion (in green, prefixed with +).
  • Total claimable — totalAssets from the same multicall.

A small note at the bottom — “Live amount read from the request contract” — confirms the values are on-chain rather than projected. Principal + Interest equals Total to the cent because all three come from the same multicall; if they don’t agree, refresh.

Click Confirm claim. Your wallet pops up a burnAll(owner, receiver) transaction with both arguments set to the connected EOA. Sign and submit. A success toast surfaces the tx hash with an explorer link.

The hook short-circuits the 30 s on-chain poll on submission and again on receipt, so the row updates to CLAIMED within seconds of inclusion rather than waiting for the next poll tick.


The position is held by your Safe / Fireblocks / Fordefi, not by the connected EOA in the main console. There are two ways to claim it.

Open request-push.3f.xyz and connect the offer-address wallet (Fireblocks/Fordefi over WalletConnect, Safe via the Safe Apps iframe, or any browser wallet). Repaid bridges with a non-zero PT/YT balance show up in the Claimable proceeds table; click Claim on each row. The page submits a single burnAll(owner = receiver = connectedAddress) — proceeds land in the offer address.

For Safe wallets the click becomes a queued proposal; signers ratify it through the usual Safe flow.

See Mint & Claim (request-push) for the full walkthrough.

Alternative — Safe burn batch export from the console

Section titled “Alternative — Safe burn batch export from the console”

If you’d rather drive the claim from your custody UI’s existing Transaction Builder integration, the main console can build the burn batch JSON.

In User → Open Bridges, claimable push rows show a checkbox + a PUSH badge instead of the Claim button. Already-claimed push rows show a CLAIMED badge (no checkbox) — they’re rendered for history but can’t be re-selected.

Tick the rows you want to claim. The action bar at the bottom of the Open Bridges card lights up with:

Will export burnAll per selected bridge for Safe 0x1234…abcd.

The action bar only renders when at least one push row is currently claimable, so you won’t see it on a pull-only account.

Click Export Safe burn JSON (N). The console builds one burnAll(owner, receiver) call per selected bridge — owner and receiver both set to the bound Safe address — and triggers a JSON download. The button shows “Building…” while the file is being assembled.

If you haven’t bound an offer address yet, the action bar reads “Set a Safe offer address in Settings → Push Offers before exporting” and the button stays disabled.

3. Import and execute from Safe / Fireblocks

Section titled “3. Import and execute from Safe / Fireblocks”
  • Safe — app.safe.global → Apps → Transaction Builder → drag in the JSON → review the list of burnAll calls (one per request contract) → Create Batch → Send Batch → sign per your threshold.
  • Fireblocks / Fordefi — replay manually, or use the Request Push UI instead.

Once the batch lands on-chain, the rows update to CLAIMED after the next 30 s on-chain poll cycle (or immediately if you hit Refresh).


  • The Claim button only appears when the underlying contract still holds your PT/YT — both UIs poll balancesOf every 30 s and skip the row if the balance is zero.
  • The dialog math comes from one multicall: Principal + Interest = Total. If the dialog shows different numbers, refresh.
  • Multiple offers on the same auction are aggregated into a single bridge row — claiming claims the whole position in one shot (the burnAll call doesn’t take an amount parameter).
  • If you cancel and resubmit offers on the same request, only the matched offers contribute to the bridge — the row aggregation reflects what actually settled, not what you submitted.