Merkle Trees and Merkle Proofs in Solidity Smart Contracts