Geth has a development mode which sets up a single node Ethereum test network with a number of options optimized for developing on local machines. You enable it with the `--dev` argument.
Starting geth in dev mode does the following:
- Initializes the data directory with a testing genesis block
- Sets max peers to 0
- Turns off discovery by other nodes
- Sets the gas price to 0
- Uses the Clique PoA consensus engine with which allows blocks to be mined as-needed without excessive CPU and memory consumption
- Uses on-demand block generation, producing blocks when there are transactions waiting to be mined
You can specify a data directory to maintain state between runs using the `--datadir` option, otherwise databases are ephemeral and in-memory:
```shell
$ mkdir test-chain-dir
$ geth --dev --datadir test-chain-dir console
```
Once geth is running in dev mode, you can interact with it in the same way as when geth is running in other ways.
For example, create a test account:
```shell
> personal.newAccount()
```
Then transfer ether from the coinbase to the new account: