-
Notifications
You must be signed in to change notification settings - Fork 121
Mining Guide
Welcome! This guide is intended to get you mining testnet currency, a.k.a. "TAZ", on the Zcash Beta testnet. The unit for mining is Sol/s (Solutions per second).
If you run into snags, please let us know. There's plenty of work needed to make this usable and your input will help us prioritize the worst sharpest edges earlier. For user help, we recommend using our forum:
First, you need to set up your local Zcash node. Follow the Beta Guide up to the end of the section "Compiling", then come back here. (You can also do the "Testing" section if you want!)
Create the ~/.zcash
directory using mkdir -p ~/.zcash
. Then place a configuration file at ~/.zcash/zcash.conf
with the following contents:
testnet=1
addnode=betatestnet.z.cash
rpcuser=username
rpcpassword=password
gen=1
By default, zcashd
uses one thread for mining. To use a defined number of threads (e.g. 2), add the following to your zcash.conf
:
genproclimit=2
If instead you want as many mining threads as you have CPU cores, use:
genproclimit=-1
Now, run the daemon!
$ ./src/zcashd -daemon
You should see the following output in the debug log (~/.zcash/testnet3/debug.log
):
Zcash Miner started
Congratulations! You are now mining on the testnet.
Coins are mined into a t_addr (transparent address), but can only be spent in a private transaction to a z-addr. Refer to our Beta Guide for instructions on how to use the z_sendmany
command to send coins from a t-addr to a z-addr. You will need at least 4GB of RAM for this operation.
The internal zcashd
miner uses a new transparent address for each mined block. If you want to instead use the same address for every mined block, find the following line in both src/miner.cpp
(in the function ProcessBlockFound()
) and src/wallet/wallet.cpp
(in the function CommitTransaction()
):
reservekey.KeepKey();
Remove or comment out that line in both places.
The internal zcashd
miner inherited from Bitcoin uses P2PK for coinbase transactions. The trend in the Bitcoin blockchain has been to use P2PKH instead; we are considering changing the internal miner to use P2PKH, but not for the 1.0 release.
If you want to use P2PKH for your coinbase transactions, find the following line in src/miner.cpp
(in the function CreateNewBlockWithKey()
):
CScript scriptPubKey = CScript() << ToByteVector(pubkey) << OP_CHECKSIG;
Change it to:
CScript scriptPubKey = CScript() << OP_DUP << OP_HASH160 << ToByteVector(pubkey.GetID()) << OP_EQUALVERIFY << OP_CHECKSIG;