Which Ethereum testnet to use?

So you are about to deploy your Dapp to a public Ethereum testnet. However, you realize that there isn’t just one testnets, but several.

Choice, choice, choice… Can you just deploy your Dapp to any testnet? Well you could, but they each have their pros an cons and worst, some are not even fully compatible with all implementations of Ethereum…

Ideally, you want to pick a testnet which is as close as possible from mainnet. That means:

  • Being compatible with ALL Ethereum clients (Parity & Geth at least)
  • Having similar block time (average time for mining a block)
  • Having similar block gas limit (the max gas spent on all transactions of a block)

By far, the most important is the compatibility with all Ethereum clients.

From a practical perspective you want to pick a testnet that:

  • is stable (i.e always online and mining transactions with the same time)
  • has faucets that work. If faucets are down and you don’t have any testnet ether, you are stuck
  • is supported by some blockchain explorers (ex: Etherscan)

If you never heard of Faucet, there are free Ether dispenser for testnets. Since you don’t have pre-funded Ethereum addresses on Testnet, you do need them.

There is a lot of different testnets, but the below 3 are the most important:

Ropsten Kovan Rinkeby
Network ID 3 42 4
Block time 30s 4s 15s
Block gas limit* 8M 8M 7M
Chain data size** 15GB 13GB 6GB
Algorithm*** PoW PoA PoA
Supported by Geth / Parity Parity Geth
Blockchain explorer Link Link Link
Faucet: Link Link Link

* The block gas limit of mainnet is 10M
** As or April 2008
***PoW = Proof-Of-Work. PoA = Proof-Of-Authority

So who wins here? From a compatibility perspective, only Ropsten works with Geth and Parity. So you do need to test on Ropsten no matter what.

However, because this is a PoW network, it is vulnerable to spam attacks, and the block time is a bit slow.

So what you could do is test your Dapp first on Rinkeby (faster, more reliable, but less compatible with mainnet), then once in a while test it on Ropsten.

How about Kovan? I don’t recommend to use it because Parity technologies (the company behing the Parity client) seems not very commited to support Parity in the long-term. Geth has always been and will stay the leading Ethereum client.

So here is what you should do to try your first deployment on Ropsten:

  • Take some Ether from a Ropsten faucet
  • Create an account on Infura and create a project for Ropsten
  • In your truffle-config.js add an entry for ropsten with:
    • A custom provider with the truffle-hdwallet-provider package.
    • You will need the seed phrase used to get some ether from the Ropsten faucet
    • You will also need to specify the endpoint to Infura
  • Deploy with the smart contract with truffle deploy --network ropsten command

Voila! You have deployed to Ropsten, and you can test your Dapp safely there before deploying to mainnet!