Guide for deploying a zcashd Zcash full node (Electric Coin Co implementation) using Akash Console . Here is a video tutorial below. A more in-depth guide can be found below.
What You're Deploying
A full zcashd node that will:
-> Sync the entire Zcash blockchain (350GB+ for mainnet, ~ 40GB for testnet)
-> Cost roughly $15/month depending on AKT token prices
-> Take several hours to days to fully sync
-> Use 4 vCPUs, 16GB RAM, 350GB storage (mainnet) or 2 vCPUs, 8GB RAM, 50GB (testnet)
-> Download cryptographic parameters on first run (~ 2GB, one-time)
zcashd vs Zebra:
-> zcashd is the original Zcash node implementation by Electric Coin Co
-> Zebra is the Zcash Foundation's alternative implementation
-> Both are compatible with the Zcash network
-> zcashd has more features (mining, wallet, Insight Explorer API)
-> Use zcashd if you need wallet functionality or specific RPC APIs
Important: Port Mapping on Akash
When you expose a port on Akash (e.g., port 8233 for zcashd P2P), it does NOT bind to that exact port on the provider's public IP. Instead, the provider assigns a random high port (like 31234 or 42567) and reverse-proxies it to your container's port 8233.
This is by design - providers run multiple deployments, and they'd have conflicts if everyone tried to use port 8233 directly.
What this means for you:
-> You configure port 8233 in the SDL (zcashd's standard P2P port)
-> Akash gives you a URI like provider.com:31234
-> Other Zcash nodes connect to you at provider.com:31234
-> Inside your container, zcashd still listens on 8233
This is handled automatically. Just use the URI that Akash gives you.
First run will download zcash-params (~2GB). This is a one-time operation and takes 5-10 minutes depending on provider bandwidth. Subsequent restarts will skip this.
The sync will take hours to days depending on the network. Watch for:
-> Increasing block heights
-> Peer connections (should be 10-30 peers)
-> No repeated errors
Step 7: Get Your Node's Address
Click on the Leases tab, then URIs.
You'll see something like:
zcashd-8233: provider-hostname.com:31234
This is your node's public P2P endpoint. Other Zcash nodes will connect to you at this address.
Note the port mapping: You configured port 8233 in the SDL, but Akash assigned it to a different public port (31234 in this example). This is normal - see the "Port Mapping on Akash" section at the top if this confuses you. Your node is accessible at whatever port Akash shows here, not necessarily 8233.
If you enabled RPC (commented out by default in the SDL), you'll also see the RPC endpoint here with its own mapped port.
Configuration Options
Switching to Testnet
The SDL defaults to Mainnet. To use Testnet instead:
-> Optional: Reduce resources for Testnet in profiles.compute.zcashd.resources:
cpu:
units: 2 # Down from 4
memory:
size: 8Gi # Down from 16Gi
storage:
- size: 50Gi # Down from 150Gi
-> Optional: Lower pricing in profiles.placement.akash.pricing:
amount: 5000 # Down from 10000
note lowering prices may filter our providers form bidding. experiement with this value, or use the provider endpiont to check if they would bid. (review provider api documentation)
Enable RPC Access
RPC is disabled by default for security. To enable it:
CRITICAL: Set strong credentials. zcashd RPC transmits username/password over HTTP (not HTTPS). Only expose RPC if you understand the security implications.
-> Uncomment in env section:
- "ZCASHD_RPCUSER=yourusername"
- "ZCASHD_RPCPASSWORD=your_very_strong_password_here" # Use a real password
- "ZCASHD_RPCBIND=0.0.0.0"
- "ZCASHD_RPCPORT=8232" # Mainnet
# - "ZCASHD_RPCPORT=18232" # Testnet
- "ZCASHD_ALLOWIP=0.0.0.0/0" # Allow from anywhere (use with caution)
-> Uncomment the RPC port in expose:
For Mainnet:
- port: 8232
as: 8232
to:
- global: false # Keep internal for security
proto: tcp
Warning: If you set global: true for RPC, you're exposing it to the internet with basic auth. This is a bad idea. Use global: false and access RPC through Akash's internal network or set up a secure tunnel.
Port mapping reminder: Even if you expose RPC globally, Akash will map it to a random high port (not 8232/18232). Check the URIs in your deployment to see the actual public endpoint. For global: false (recommended), the RPC endpoint is only accessible within the Akash deployment network, not from the public internet.
Enable Transaction Index
Transaction index allows you to query any transaction by its ID via RPC. Uses more storage (~ 20% increase).
Uncomment in env:
- "ZCASHD_TXINDEX=1"
Warning: Enabling txindex on an existing synced node requires re-indexing the entire blockchain, which takes hours.
Enable Insight Explorer
Insight Explorer provides additional REST API endpoints for blockchain data (useful for block explorers).
Uncomment in env:
- "ZCASHD_INSIGHTEXPLORER=1"
This automatically enables txindex and adds extra RPC methods.
If you enabled RPC, you can query your node as a normal zcashd full node (because it is!)
zcash-cli Alternative
If you have shell access via Console, you can use zcash-cli directly:
# From the Shell tab in Console
zcash-cli getblockchaininfo
zcash-cli getpeerinfo
zcash-cli getinfo
Closing Your Deployment
When you're done or want to stop paying:
-> Go to My Deployments
-> Find your zcashd deployment
-> Click "Close Deployment"
-> Confirm and sign in Keplr
Your 5 AKT deposit will be refunded. Persistent storage should be preserved by the provider, but don't rely on it - treat it like any other cloud provider.
Troubleshooting
"Insufficient funds" error
You need more AKT. Fund your Keplr wallet.
No bids showing up
Either:
-> Your pricing is too low (increase amount in SDL)
-> Your resource requirements are too high for available providers (reduce CPU/memory/storage)
-> Wait longer (sometimes takes 60-90 seconds for bids to appear)
Deployment stuck in "pending"
The provider might be having issues. Close the deployment and try a different provider.
zcashd logs show "No peers connected"
This is normal for the first few minutes. zcashd will discover peers automatically. If it persists after 10+ minutes, you might have a networking issue (unlikely on Akash).
"Out of memory" errors in logs
You cheaped out on RAM. Close the deployment and redeploy with at least 12Gi memory (16Gi recommended).
Sync is taking forever
Define "forever":
-> Hours: Normal
-> Days: Also normal for mainnet from scratch
-> Weeks: Something's wrong, check logs for errors
"Error fetching zcash-params"
The provider might have network issues or slow bandwidth. This usually resolves itself. If it persists for more than 30 minutes, try redeploying to a different provider.
RPC authentication failures
-> Check that ZCASHD_RPCUSER and ZCASHD_RPCPASSWORD are set correctly
-> Verify you're using the correct port (8232 for mainnet, 18232 for testnet)
-> Remember ports are mapped by Akash - use the URI from your deployment, not 8232 directly
Cost Management
Monitor your spending in the Console:
-> My Deployments -> Your deployment -> Shows "Cost per month" estimate
-> Your Keplr wallet balance will decrease over time
When your balance runs low, Akash will auto-close your deployment. Top up your wallet periodically or set up alerts.
Reducing Costs
-> Use Testnet for non-production testing (50% cheaper)