feat(wallet): let Safe users open the explorer as a Safe App - #816
Merged
Merged
Conversation
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>
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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>
rickstaa
force-pushed
the
feat/safe-app
branch
from
September 22, 2026 13:43
e12d74d to
2923e6e
Compare
This was referenced Sep 22, 2026
Contributor
There was a problem hiding this comment.
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.
ECWireless
approved these changes
Sep 24, 2026
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.