6.3 KiB
{% comment %} This file is licensed under the MIT License (MIT) available on http://opensource.org/licenses/MIT. {% endcomment %} {% assign filename="_includes/devdoc/example_testing.md" %}
Testing Applications
{% include helpers/subhead-links.md %}
{% autocrossref %}
Dash Core provides testing tools designed to let developers test their applications with reduced risks and limitations.
{% endautocrossref %}
Testnet
{% include helpers/subhead-links.md %}
{% autocrossref %}
When run with no arguments, all Dash Core programs default to Dash's main network ([mainnet][/en/glossary/mainnet]{:#term-mainnet}{:.term}). However, for development, it's safer and cheaper to use Dash's test network (testnet) where the duffs spent have no real-world value. Testnet also relaxes some restrictions (such as standard transaction checks) so you can test functions which might currently be disabled by default on mainnet.
To use testnet, use the argument -testnet
with dash-cli
, dashd
or dash-qt
or add testnet=1
to your dash.conf
file as
[described earlier][dashd initial setup]. To get free duffs for testing,
check the faucets listed below. They are community supported and due to
potentially frequent Testnet changes, one or more of them may be unavailable at
a given time:
- [Testnet Faucet - Masternode.io]
- [Testnet Faucet - Crowdnode.io]
Testnet is a public resource provided for free by members of the community, so please don't abuse it.
{% endautocrossref %}
Regtest Mode
{% include helpers/subhead-links.md %}
{% autocrossref %}
For situations where interaction with random peers and blocks is unnecessary or unwanted, Dash Core's regression test mode (regtest mode) lets you instantly create a brand-new private block chain with the same basic rules as testnet---but one major difference: you choose when to create new blocks, so you have complete control over the environment.
Many developers consider regtest mode the preferred way to develop new applications. The following example will let you create a regtest environment after you first [configure dashd][dashd initial setup].
{% endautocrossref %}
{% highlight bash %}
dashd -regtest -daemon Dash Core server starting {% endhighlight %}
{% autocrossref %}
Start dashd
in regtest mode to create a private block chain.
{% endautocrossref %}
## Dash Core
dash-cli -regtest generate 101
{% autocrossref %}
Generate 101 blocks using a special RPC which is only available in regtest mode. This takes less than a second on a generic PC. Because this is a new block chain using Dash's default rules, the first blocks pay a block reward of 500 dash. Unlike mainnet, in regtest mode only the first 150 blocks pay a reward of 500 dash. However, a block must have 100 confirmations before that reward can be spent, so we generate 101 blocks to get access to the coinbase transaction from block #1.
{% endautocrossref %}
{% highlight bash %} dash-cli -regtest getbalance 500.00000000 {% endhighlight %}
{% autocrossref %}
Verify that we now have 500 dash available to spend.
You can now use Dash Core RPCs prefixed with dash-cli -regtest
.
Regtest wallets and block chain state (chainstate) are saved in the regtest
subdirectory of the Dash Core configuration directory. You can safely
delete the regtest
subdirectory and restart Dash Core to
start a new regtest. (See the [Developer Examples Introduction][devexamples] for default
configuration directory locations on various operating systems. Always back up
mainnet wallets before performing dangerous operations such as deleting.)
{% endautocrossref %}
Devnet Mode
{% include helpers/subhead-links.md %}
{% autocrossref %}
Developer networks (devnets) have some aspects of testnet and some aspects of
regtest. Unlike testnet, multiple independent devnets can be created and coexist
without interference. Each one is identified by a name which is hardened into a
"devnet genesis" block, which is automatically positioned at height 1. Validation
rules will ensure that a node from devnet<!--noref-->=test1
never be able to
accept blocks from devnet<!--noref-->=test2
. This is done by checking the
expected devnet genesis block.
The genesis block of the devnet is the same as the one from regtest. This starts the devnet with a very low difficulty, allowing quick generation of a sufficient balance to create a masternode.
The devnet name is put into the sub-version of the version
message.
If a node connects to the wrong network, it will immediately be disconnected.
To use devnet, use the argument -devnet=<name>
with dash-cli
,
dashd
or dash-qt
or add devnet<!--noref-->=<name>
to your dash.conf
file as
described earlier.
Devnets must be assigned both -port
and -rpcport
unless they are not
listening (-listen=0
). It is possible to run a devnet on a private (RFC1918)
network by using the -allowprivatenet=1
argument.
{% endautocrossref %}
Example devnet start command:
{% highlight bash %}
dashd -devnet=mydevnet -rpcport=18998 -port=18999 -daemon Dash Core server starting {% endhighlight %}
{% autocrossref %}
You can now use Dash Core RPCs prefixed with dash-cli -devnet=<name>
.
Devnet wallets and block chain state (chainstate) are saved in the devnet-<name>
subdirectory of the Dash Core configuration directory. You can safely
delete the devnet-<name>
subdirectory and restart Dash Core to
start a new devnet. (See the [Developer Examples Introduction][devexamples] for default
configuration directory locations on various operating systems. Always back up
mainnet wallets before performing dangerous operations such as deleting.)
Eventually, there may be many public and/or private devnets that vary in size and function. Providing the correct devnet name and the seed node of the network will be all that is required to join.
An old devnet can be easily dropped and a new one started just by destroying all nodes and recreating them with a new devnet name. This works best in combination with an automated deployment using something like Ansible and Terraform. The Dash Cluster Ansible provides a way to do this (currently a work-in-progress at an early development stage).
{% endautocrossref %}