Skip to content

feat(wallets): add Noir Wallet connector for Zcash#1633

Closed
harry1115 wants to merge 2 commits into
swapkit:developfrom
NoirWallet:feat/noir-wallet-zcash
Closed

feat(wallets): add Noir Wallet connector for Zcash#1633
harry1115 wants to merge 2 commits into
swapkit:developfrom
NoirWallet:feat/noir-wallet-zcash

Conversation

@harry1115

Copy link
Copy Markdown

Summary

  • Adds a NOIR_WALLET wallet option backed by the Noir Wallet browser
    extension (window.noirwallet), following the same injected-provider
    pattern already used for Vultisig/CTRL and the MetaMask SDK connector
    (feat(wallets): connect MetaMask via @metamask/connect-evm SDK #1632).
  • Registers Chain.Zcash on the UTXO toolbox, overriding getBalance,
    transfer, and signMessage to delegate to the extension, which spends
    from the shielded pool and builds/signs transactions internally.
  • Memo'd transfers throw wallet_noir_wallet_memo_not_supported: the
    extension cannot attach OP_RETURN data to transparent recipients, so
    OP_RETURN-based routes (Maya) are rejected explicitly with a clear error
    instead of failing silently on-chain. Deposit-address routes (NEAR
    Intents) are fully supported.
  • No new dependency — the connector talks to window.noirwallet directly,
    same approach as the Vultisig connector.

Notes for reviewers

  • Noir Wallet reports the shielded-pool spendable balance via
    zcash_getBalance().available, not the transparent address' on-chain
    UTXO set, so the displayed balance intentionally won't match a block
    explorer lookup of the transparent address.
  • Maya-routed quotes against a connected Noir Wallet will fail fast with a
    SwapKitError rather than attempting a broken transaction. A follow-up
    extension-side change (adding transparent-pool spends with OP_RETURN
    memo support) could unlock the Maya route later; out of scope here.

Test plan

  • bun run build:ci — full monorepo build + .d.ts generation
  • bun biome check — lint clean
  • bun test packages/wallet-extensions/src/noir-wallet/__tests__/noir-wallet.test.ts — 7/7 passing
  • SDK smoke test: createSwapKit()connectNoirWallet → balance/transfer/signMessage against a mocked window.noirwallet
  • Manual verification in the Vite playground with a real Noir Wallet extension build (ZEC↔BTC swap via NEAR Intents)

zerochl and others added 2 commits July 14, 2026 21:34
Adds a NOIR_WALLET wallet option backed by the Noir Wallet browser
extension (window.noirwallet). The connector registers Chain.Zcash with
the UTXO toolbox, overriding getBalance/transfer/signMessage to
delegate to the extension, which spends from the shielded pool and
builds/signs transactions internally.

Memo'd transfers throw wallet_noir_wallet_memo_not_supported since the
extension cannot attach OP_RETURN data to transparent recipients, so
OP_RETURN-based routes (Maya) are rejected explicitly while
deposit-address routes (NEAR Intents) are fully supported.
@harry1115 harry1115 closed this Jul 15, 2026
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.

2 participants