Skip to content

feat(wallet): let Safe users open the explorer as a Safe App - #816

Merged
ECWireless merged 4 commits into
mainfrom
feat/safe-app
Sep 24, 2026
Merged

ECWireless merged 4 commits into
mainfrom
feat/safe-app

Conversation

@rickstaa

@rickstaa rickstaa commented Sep 22, 2026 •

Copy link
Copy Markdown
Member

Adds the manifest and CORS header Safe{Wallet} needs to accept the explorer as a custom Safe App, and a Safe connector (listed only inside an iframe) so the explorer opens already connected as the Safe. The connector only trusts app.safe.global as the parent page, so another site embedding the explorer cannot fake the Safe connection. Safes connected from outside Safe{Wallet} get a short hint under the transaction dialog to open the explorer as a Safe App instead.

Stacked on #815; retarget to main once that merges.

Closes #814.

Safes return a Safe tx hash, not an on-chain one. Skip RainbowKit
tracking for them, show a "Sent to Safe" dialog linking to the queue,
and don't gate withdrawFees on a simulation that reverts from a Safe.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
explorer-arbitrum-one Ready Ready Preview Sep 24, 2026 2:57am UTC

Request Review

Only app.safe.global is trusted as the parent page, so a site embedding
the explorer cannot fake the Safe connection.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

The Safe App link can target the wrong Safe on supported non-default networks.

Review effort: Lite
Findings: None

What changed in this PR

Adds Safe App support so Safe users can open the Explorer connected to their Safe.

Changes:

  • Adds Safe App manifest and CORS support.
  • Restricts the Safe connector to Safe Wallet iframes.
  • Adds guidance for externally connected Safe users.
File Summary
public/​manifest.json Defines Safe App metadata.
next.config.js Enables cross-origin manifest access.
components/​Web3Providers/​index.tsx Configures the restricted Safe connector.
components/​TxConfirmedDialog/​index.tsx Adds the Safe App handoff link; its URL currently uses the default chain instead of the connected chain.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Base automatically changed from fix/safe-transactions to main September 24, 2026 02:40
Copilot AI review requested due to automatic review settings September 24, 2026 02:56

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@ECWireless
ECWireless merged commit 48a67e4 into main Sep 24, 2026
9 checks passed
@ECWireless
ECWireless deleted the feat/safe-app branch September 24, 2026 03:11
adamsoffer pushed a commit to adamsoffer/explorer-v2 that referenced this pull request Sep 26, 2026
A Safe returns a proposal's hash, not a transaction's, so waiting for a
receipt left the dialog on "Confirming" for good. Detect a Safe (Safe App
connector, or an address answering getThreshold) and show "Sent to your
Safe" with a link to its queue, plus the Safe App hint when it's connected
another way. Covers staking, including the approval step, and voting.

Ports livepeer#815 and livepeer#816 to the rebuild; the connector and
manifest parts were already here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dh52qRhBrfkLKKAAGqPxYN
adamsoffer added a commit to adamsoffer/explorer-v2 that referenced this pull request Sep 26, 2026
A Safe returns a proposal's hash, not a transaction's, so waiting for a
receipt left the dialog on "Confirming" for good. Detect a Safe (Safe App
connector, or an address answering getThreshold) and show "Sent to your
Safe" with a link to its queue, plus the Safe App hint when it's connected
another way. Covers staking, including the approval step, and voting.

Ports livepeer#815 and livepeer#816 to the rebuild; the connector and
manifest parts were already here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dh52qRhBrfkLKKAAGqPxYN
adamsoffer added a commit to adamsoffer/explorer-v2 that referenced this pull request Sep 29, 2026
A Safe returns a proposal's hash, not a transaction's, so waiting for a
receipt left the dialog on "Confirming" for good. Detect a Safe (Safe App
connector, or an address answering getThreshold) and show "Sent to your
Safe" with a link to its queue, plus the Safe App hint when it's connected
another way. Covers staking, including the approval step, and voting.

Ports livepeer#815 and livepeer#816 to the rebuild; the connector and
manifest parts were already here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dh52qRhBrfkLKKAAGqPxYN

This branch was successfully deployed

1 active deployment
Preview — 24a76c81 Deployed Sep 24, 2026 by vercel[bot]
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.

Explorer UI gets stuck after proposing a transaction from a Safe

3 participants