Skip to content

Sign Message bottom sheet: long/JSON messages push Confirm/Cancel off-screen with no way to scroll #929

Description

@gip

What version are you using?

Freighter mobile v1.20.27 on iOS

What did you do?

From a dapp, requested stellar_signMessage over WalletConnect with a JSON message of ~500 characters (a canonical JSON object with ~13 fields, including 64-char hex strings).

What did you expect to see?

The sign-message bottom sheet shows the message (scrollable if long) with the Confirm and Cancel buttons reachable.

What did you see instead?

The bottom sheet grows past 100% of the screen height. The pretty-printed message pushes the account/network rows and both action buttons off the bottom of the screen, and the sheet content cannot be scrolled — so the request can be neither approved nor rejected. The only way out is to kill the request from the dapp side or switch apps.

Root cause (from reading main)

  • DappSignMessageBottomSheetContent.tsx renders the header, banners, message, account list, and the DappRequestButtons footer all inside a plain non-scrollable View.
  • DappMessageDisplay.tsx wraps the message in a ScrollView with no height constraint (the JSDoc even says "Dynamically increases height based on message length"), so it never actually scrolls — it just grows. When the message parses as JSON it is additionally pretty-printed with JSON.stringify(parsed, null, 2), so even a compact ~500-char JSON message becomes 15+ lines.
  • An unbounded plain RN ScrollView nested inside @gorhom/bottom-sheet also doesn't receive pan gestures (that needs BottomSheetScrollView), so there's no scrolling anywhere in the sheet.

Net effect: message height is unbounded → sheet exceeds screen height → footer buttons are unreachable.

Suggested fix

Cap the message box (e.g. maxHeight on the DappMessageDisplay container) and use BottomSheetScrollView so long messages scroll inside the box, and/or make the sheet body scrollable with the DappRequestButtons footer pinned. This is the same failure mode previously fixed for other screens in #348, and the pinned-footer + scrollable-body work was explored in #781 / #816 — the dapp signing sheets just never got that treatment. Possibly also affects DappSignAuthEntryBottomSheetContent with large auth entries.

Repro

  1. Pair any dapp with Freighter mobile via WalletConnect.
  2. Send stellar_signMessage with a message like:

{"protocol":"EXAMPLE_PROTOCOL_V1","purpose":"authorize","rootChain":"stellar","rootAddress":"GBRPYHIL2CI3FNQ4BXLFMNDLFJUNPU2HY3ZMFSHONUCEOASW7QC7OX2H","zone":"top","network":"testnet","signerPublicKey":"a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90","policyHash":"00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff","nonce":"5e884898da28047151d0e56f8dc62927","issuedAt":"2026-07-09T12:00:00Z","expiresAt":"2026-07-09T12:05:00Z","version":1}

  1. Open the request in Freighter mobile: the JSON is pretty-printed, the sheet overflows the screen, and Confirm/Cancel are unreachable with no way to scroll to them.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions