Skip to content

feat: Safe wallet transaction module for Solidarity Fund (#279)#421

Open
diterra-code wants to merge 1 commit into
developmentfrom
feat/safe-tx-module-279
Open

feat: Safe wallet transaction module for Solidarity Fund (#279)#421
diterra-code wants to merge 1 commit into
developmentfrom
feat/safe-tx-module-279

Conversation

@diterra-code

Copy link
Copy Markdown

Closes #279

Problem

When a Gnosis Safe wallet connects to the Solidarity Fund and initiates a transaction (bake, burn, governance vote), the standard wallet confirmation popup does nothing visible — Safe transactions require multi-sig approval inside the Safe app and return a safeTxHash instead of executing synchronously. The current UI gave no feedback, leaving users confused about why nothing happened after clicking confirm.

What this PR does

Adds a dedicated, Safe-aware modal that detects the Safe wallet flow and guides the user through confirmation with bread-branded UI matching the approved Figma designs (Solidarity Fund / Safe Module page).

New components

  • SafeTransactionModal — single modal that renders all states:
    • Pending — explains the tx needs confirmation in Safe + Open Safe App deep link to the connected Safe's transaction queue (app.safe.global/transactions/queue?safe=gno:<address>)
    • Waiting for signers — live signer progress (X of Y confirmations received) with a progress bar
    • Confirmed — success state
    • Rejected — owners rejected the tx
    • Expired — not signed within the timeout window
  • SafeIndicatorBadge — persistent nav indicator (ShieldCheck + "Safe", jade) shown whenever a Safe wallet is connected.

Wiring

  • SafeTransactionWatcher now also surfaces signer progress (from detailedExecutionInfo) and marks a tx expired after 30 min, alongside the existing success/revert polling.
  • TransactionsReducer — adds SAFE_EXPIRED status, signer-progress fields, and SET_SAFE_PROGRESS / SET_SAFE_EXPIRED actions.
  • Safe submissions from Bake, Burn (ConfirmBurnModal) and Vote (CastVote) now route to the new SAFE_TRANSACTION modal instead of the generic transaction modal.

Design reference

Implements the states designed in #279 (desktop + mobile): Safe-detected nav indicator, Pending, Waiting for signers, Confirmed, Rejected, Expired.

Testing

  • tsc --noEmit — passes (0 errors)
  • next lint — clean
  • Reuses existing Safe detection (useConnectedUser().isSafe), wallet kit (wagmi + RainbowKit), and @safe-global/safe-apps-sdk already in the repo.

Note: the Safe multi-sig flow is hard to exercise fully in local dev without a real Safe; manual QA with a connected Safe on Gnosis Chain is recommended before merge.

🤖 Generated with Claude Code

@netlify

netlify Bot commented Jun 4, 2026

Copy link
Copy Markdown

Deploy Preview for dapper-sundae-ae0873 ready!

Name Link
🔨 Latest commit eee73ec
🔍 Latest deploy log https://app.netlify.com/projects/dapper-sundae-ae0873/deploys/6a42ae2764f09900084577d8
😎 Deploy Preview https://deploy-preview-421--dapper-sundae-ae0873.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@Olaleye-Blessing
Olaleye-Blessing changed the base branch from main to development June 9, 2026 16:28
@Olaleye-Blessing
Olaleye-Blessing force-pushed the development branch 2 times, most recently from a5aecfe to 55056d4 Compare June 9, 2026 17:00
@Olaleye-Blessing
Olaleye-Blessing force-pushed the feat/safe-tx-module-279 branch from 1298a05 to edc86db Compare June 9, 2026 18:26
When a Gnosis Safe wallet connects to the Solidarity Fund and initiates a
transaction (bake, burn, governance vote), the standard wallet confirmation
popup does nothing visible — Safe requires multi-sig approval inside the Safe
app. This left users confused with no feedback.

This adds a dedicated, Safe-aware modal that guides the user through the
confirmation flow with bread-branded UI matching the approved Figma designs.

Changes:
- SafeTransactionModal: new modal with pending, waiting-for-signers (with
  signer progress bar), confirmed, rejected and expired states, plus a
  direct "Open Safe App" deep link to the connected Safe's tx queue.
- SafeIndicatorBadge: persistent nav indicator shown while a Safe is connected.
- SafeTransactionWatcher: now surfaces signer progress (X of Y confirmations)
  and marks transactions expired after a timeout, in addition to success/revert.
- TransactionsReducer: SAFE_EXPIRED status + signer-progress fields and the
  SET_SAFE_PROGRESS / SET_SAFE_EXPIRED actions.
- Route Safe submissions from Bake, Burn (ConfirmBurnModal) and Vote
  (CastVote) to the new SAFE_TRANSACTION modal.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Olaleye-Blessing
Olaleye-Blessing force-pushed the feat/safe-tx-module-279 branch from edc86db to eee73ec Compare June 29, 2026 17:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Design: Safe wallet transaction module for Solidarity Fund

1 participant