SPV clients, like Electrum, ask for cryptographic proof that a transaction is contained in a block. This is done by including each merkle branch necessary to get a hash that's equal to the merkle root of the block. This takes log(2, N) * 32 bytes
, where N is the number of transactions in the block.
Is there a more space-efficient way to cryptographically prove that a transaction is contained within a block?
For the sake of argument, let's assume that you're allowed to change how the block header and merkle tree is calculated, or replace it altogether.
An example of a possible improvement would be to change the hash function used for building merkle trees from SHA256d to RIPEMD-160 (or another 160 bit hash function, like SHA512/160). This would only take log(2, N) * 20 bytes
.