# Zcash (/docs/nodes/defi/zcash)

Swap Solana assets into ZEC delivered to your own Zcash wallet. Powered by the NEAR Intents 1Click network.



The Zcash node moves Solana value into ZEC delivered straight to your own Zcash wallet: pair it with Zodl and shield on arrival. Under the hood it rides the NEAR Intents 1Click network. The node quotes the route, sends the origin asset from your Solaris AI wallet to a swap-specific deposit address, and solvers deliver native ZEC on Zcash. The destination is part of the node's identity: it always delivers ZEC (no destination fields to configure).

Prerequisites [#prerequisites]

No credential required; access is included with Solaris AI. Get Quote and Swap to Zcash use your embedded Solana wallet (it supplies the refund address, and the swap sends the deposit from it), so the origin asset must live on Solana (SOL, USDC, or any other supported Solana asset). Supported Assets and Swap Status need nothing.

Operations [#operations]

Supported Assets [#supported-assets]

Lists everything 1Click can swap between, one row per asset per chain: the `assetId` (the canonical route identifier), symbol, blockchain, decimals, and an indicative USD price. Filter by `chain` (for example `zec` or `sol`) or by `symbol`. Use this to check which Solana origin assets can reach ZEC, or when an origin symbol fails to resolve.

Get Quote [#get-quote]

Prices the ZEC exit without moving anything: expected output, worst case after slippage, USD values, and a time estimate for delivery. It takes the same fields as the swap (origin asset, amount, recipient), so a quote you like can be promoted to a swap by switching the operation. This is the dry-run path; the swap operation itself has no dry-run toggle by design.

Swap to Zcash [#swap-to-zcash]

Executes the route end to end: requests an executable quote, transfers the exact origin amount from your Solaris AI wallet to the quote's deposit address, then waits (up to **Wait seconds**, default 180, max 300) for delivery. The output always carries `depositAddress`, the durable handle for the swap, plus the canonical 1Click `status` (`PENDING_DEPOSIT`, `KNOWN_DEPOSIT_TX`, `PROCESSING`, `INCOMPLETE_DEPOSIT`, `SUCCESS`, `REFUNDED`, `FAILED`) and `done`.

Before any funds move, the node authenticates the quote end to end: the response must carry a valid ed25519 signature from 1Click's manager key, echo the exact route you configured (asset, amount, recipient, refund address), and name a deposit address that decodes as a real Solana account. Refunds always return to your Solaris AI wallet.

Four behaviors worth knowing:

* If delivery outlasts the wait window, the node still succeeds with `done: false`. Compose a Delay node followed by Swap Status to keep watching.
* Once the transfer has broadcast, the node never hard-fails on a later API hiccup; it reports the freshest status it could observe. `REFUNDED` and `FAILED` come back as `success: false` so downstream nodes do not act as if value arrived; refunds return to your Solaris AI wallet automatically.
* If the quote demands a deposit memo (rare), the node refuses before sending anything rather than stranding the deposit.
* One deposit at a time, even across crashes: the node records the deposit address durably before signing, so a rerun while a previous swap's funds are unaccounted for refuses to send again and points at that swap instead. It unblocks automatically once the earlier swap reaches SUCCESS, REFUNDED, or FAILED.

Swap Status [#swap-status]

Looks up a swap by deposit address, normally via the swap output: `{zcashResponse.depositAddress}`. Unknown or expired addresses return `found: false` rather than an error, so a status check in a loop can't kill the run.

Zcash recipients [#zcash-recipients]

1Click delivers ZEC to **transparent addresses only** (`t1...` or `t3...`), and the node validates this strictly before any funds move. Shielded (`zs...`) and unified (`u1...`) addresses are rejected. In Zodl, copy your Transparent receive address; when the ZEC arrives, Zodl offers one-tap shielding into the Orchard pool. The swap itself is not private: the Solana leg and the transparent receipt are public on their chains.

Configuration [#configuration]

The destination is fixed: native ZEC on the Zcash chain. There is nothing to configure on that side.

| Field          | Type   | Required          | Description                                                                                                                                       |
| -------------- | ------ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| originAsset    | string | For quote/swap    | A Solana asset: SOL, USDC, or another supported SPL token (symbol, or its Solana-chain asset id from Supported Assets when a symbol is ambiguous) |
| amount         | string | For quote/swap    | Human units of the origin asset (0.5 = half a SOL); templates supported                                                                           |
| recipient      | string | For quote/swap    | Your Zcash transparent address (t1/t3)                                                                                                            |
| slippageBps    | number | No                | Slippage tolerance in basis points (default 100 = 1%)                                                                                             |
| waitSeconds    | string | No (swap)         | Bounded settlement wait (default 180, max 300)                                                                                                    |
| depositAddress | string | For getSwapStatus | The swap output's deposit address                                                                                                                 |
| chain / symbol | string | No (assets)       | Filters for Supported Assets                                                                                                                      |

Example: exit to ZEC on a price trigger [#example-exit-to-zec-on-a-price-trigger]

Cron → Jupiter (price check) → Condition (`SOL < 120`) → Zcash swap (USDC in, ZEC to your `t1...` address) → [Workflow Control](/docs/nodes/utility/workflow-control) (end automation) → Telegram notification with `{zcashResponse.status}` and `{zcashResponse.destinationTxHash}`.

The Workflow Control node is what makes this a one-time exit. After the swap it switches the workflow's own automation off, so the cron stops ticking once the job is done; the current run still finishes and sends the notification. The copilot's vetted Zcash exit recipe builds exactly this shape: a stored flag written right after the swap guards the run while it settles, and the workflow ends its own automation both after the exit and on any later tick that finds the flag already set. Turning automation back on is an explicit re-arm, and the exit can execute again if the price still qualifies.
