I agree. However, the only way to know the host who sent a Heartbeat from a State is to trust that the Host included its id in the Heartbeat itself. This is worrisome, as it means there is a possibility for using different ids in the Update and in the NetworkMessage.

A workaround for this would be to use the Stage1 and Stage2 strings as the index, but this would lead to problems with one host being able to effectively dominate a Blockchain through low latency and high bandwidth. Alternatively, we could change the definition of HandleUpdate for the State interface to require the id of the sending host in its arguments. I think this is a better solution, but it will require changes in more code than just StateSteady.

This is still relevant even if the algorithm changes completely, and I'll form a separate pull request for it.