Have you created any sealer accounts prior to creating the genesis file?
if not, create at least one sealer account first by running the following:
geth account new --datadir /path/to/your/custom/datadir
Note down the address this generates, then when you run puppeth you can add this address into the pre-defined list of sealer accounts during the genesis creation process.
Once this is done you can initialise geth with the new genesis.json file:
geth --datadir /path/to/your/custom/datadir init genesis.json
then once you're up and running you need to unlock that account:
personal.unlockAccount(eth.accounts[0], "<password>", 0)
(note "0" above will keep the account unlocked permanently, or you can specify a time interval in seconds)
Then to get mining started on a single core type the following into the console:
miner.start(1)
and you should see block sealing as proof of successful mining pretty soon.
PoA in Aura consensus engine of parity defaults to 5s, which has been tested to run with good stability. PoA network runs one such infrastructure.
I have tested for a 1 sec PoA using aura running across 4 different geographical regions. This is the minimum possible and one that I have successfully tested :) Stability testing across more regions is still in progress. Will update with more info.
Update
Stability testing was successful. Only problems that were faced were regarding timings, the servers have to be synchronised with same time. After resolving this issue, there were no more problems.
The main thing being that they all need to have a synchronised time.
Possible problems that you might face:
- Whichever server goes out of sync in time, fails to verify blocks from other ones. So the one which is out of sync, will follow its own chain if it is one of the validator node, or remain stuck if it is a normal sync node.
- If one validator stops for some reason, other will continue the chain, and at that time, there will be a slight instability in average block time. But everything will come back to normal when all validators come back online.
Personally, I think 5s is a decent time for PoA and runs smoothly without any problems. If you wanna read about Aura, see Aura Consensus Protocol Audit.
Best Answer
The protocol defines a voting mechanism to dynamically add new signers and remove existing ones. In Geth this can be controlled via the
clique.propose(address, authorized)
method (clique_propose
for remote RPC calls).To authorize a new signer, existing ones can propose it via
clique.propose("0x...", true)
. When more than half the signers proposed it, the authorization comes into effect immediately and the new account can start signing blocks.Similarly, existing signers can propose deauthorizing existing ones via
clique.propose("0x...", false)
. Again if half + 1 signers deauthorize a signer, it is immediately removed from the list and blocks minted by it are rejected from that point onward.The protocol defines that the block reward is zero (and similarly there can't be any uncles). The block and uncle rewards are a subsidy for the effort wasted on PoW. Since Clique is based on PoA, there's zero cost to minting a block, so there shouldn't be any "reward" for doing it either.
Running transactions of course may incur a tiny processing time, but the sealer does get the transaction fees in exchange, so that should cover it.
All in all however note, that PoA is meant for more of a collaborative environments where miners don't try to race each other, rather attempt to play together for a common goal of keeping the network ticking.