I would specifically like to know how would a private block-chain scale. If there are no block rewards, how many txes/sec could a single computer mine? How many computers would you need to deploy a nation-wide application utilizing a private Ethereum block-chain?
There's no need to do Proof-of-Work mining (i.e. hashing) in a private blockchain. In a private blockchain you can use a Proof-of-Authority consensus mechanism to create the blocks and finalise transactions, since the nodes are essentially assumed to trust each other, or at least to trust certain nodes. This removes the most severe performance limit, the need for PoW mining to achieve consensus in a network with no trust (i.e. the public Ethereum network). By this means, it is possible for the network to process (potentially) thousands of transactions per second on modest hardware.
The question then changes to something else, such as how many nodes do you need to achieve resilience in your network?
Examples of proof-of-authority chains,
- Aura and Tendermint with Parity,
- Clique with Geth,
- Raft with Quorum (also basically Geth under the hood). This creates a block up to 20 times a second and is designed to be extremely performant.
Thanks for the very informative and thorough reply. Proof-of-Authority is different from Proof-of-Stake and PoA will never be implemented on the main-net, correct? Oct 13, 2017 at 10:42
Yes, correct. PoA is different from PoS. On mainnet you cannot assume that anybody trusts anybody else, so you need to have ways to reach consensus that take this into account (PoW and PoS being two). On a private network where the participants mostly trust each other most of the time you can do PoA - the network collectively grants certain nodes the right to make blocks for a period. This can be very efficient, but it is not suitable for mainnet. Oct 13, 2017 at 11:16
First of all, you don't mine transactions; you mine blocks.
If you are willing to change any network parameter, a single block could contain any amount of transactions. It would only be limited by your network bandwidth.
If you want to keep the network parameters of the current public Ethereum network in place, you have the exact same transaction limits as the current Ethereum network. The power consumption depends on the type of hardware you're using, and on the mining difficulty. The mining difficulty depends entirely on the amount of seconds between blocks. The time between blocks depends entirely on the network hashrate.
If there are no block rewards, nobody except the network operator has an incentive to mine. So, the network operator has total control over the hashrate. You can theoretically spend as little energy mining as you want.
This is the Homestead release formula for the difficulty of a block:
block_diff = parent_diff + parent_diff // 2048 * max(1 - (block_timestamp - parent_timestamp) // 10, -99) + int(2**((block.number // 100000) - 2))
If someone ever got an incentive to disrupt the normal operation of your network, they would need to overpower your mining hardware. If you want to prevent this, the amount of money you should spend on mining is directly proportional to the incentive a malicious actor has to disrupt your network.
In any case, you would still need the transaction fees as block reward. Otherwise, it is trivial to DDOS your network with 0-fee transactions and fill up all the blocks with useless junk.