There is a related question, but the differences are still not clear. These five types are mentioned in the Michelson whitedoc with the following definitions:
address
: An untyped address (implicit account or smart contract).contract 'param
: A contract, with the type of its code, contract unit for implicit accounts.key
: A public cryptographic key.key_hash
: The hash of a public cryptographic key.signature
: A cryptographic signature.What is the difference between
key_hash
andaddress
? It seems like for both I can doPUSH address "tz1..."
andPUSH key_hash "tz1..."
using the same string literal. I remember seeing something about reveal. What does reveal mean?Why can I convert between
address
andcontract
. But not betweenaddress
andkey_hash
?What is the difference between
key
andkey_hash
? When would I have akey
, but not akey_hash
?What is a cryptographic signature and what are some of the use cases in Michelson?
Any other important details about these data types.