Proof abstract class
Proof: Cast to ProofOfWork for outputs
Proof: polymorphic serialization
Proof::ToString()