TL;DR - Ganache and Puppeth are both tools to spin up your own blockchain. Ganache is meant to be used as a testbed where transactions can be created and contracts can be deployed freely and instantaneously. Puppeth is similar in that it has the ability to do this as well. Puppeth has the advantage of being more configurable and acting more similar to a live network. This is because Puppeth allows for customizations such as choosing a custom consensus algorithm, viewing the TxPool (something that Ganache cannot do, for now), communicating between nodes, and more. In summary, each have their own place in the development flow. Puppeth acts more like a true blockchain network whereas Ganache acts more like a single instance of a blockchain node.
I would consider using Ganache when testing transactions and contracts. I would consider using Puppeth when testing the network layer (and anything on top of this layer).
Ganache allows you to create a private Ethereum blockchain for you to run tests, execute commands, and inspect state while controlling how the chain operates. It gives you the ability to perform all actions you would on the main chain without the cost. Many developers use this to test their smart contracts during development. It provides convenient tools such as advanced mining controls and a built-in block explorer.
Puppeth is a tool built into Geth that allows you to create a private Ethereum blockchain that closely mimics one of the existing networks. You can use the CLI to configure exact parameters for your network without having to manually create an entire new blockchain from scratch. You can configure settings such as the consensus mechanism,
maxPeers, block times, and more.
Some Puppeth features that are noted on its official release blog are:
- Pure Go ethash
- Router CPU compatibility
- Plugable consensus engines
- Clique PoA (proof-of authority) protocol
- A Puppeth network manager
- 64 bit gas calculations