<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Nov 15, 2017 at 8:47 AM, Nico Williams <span dir="ltr"><<a href="mailto:nico@cryptonector.com" target="_blank">nico@cryptonector.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I don't know of any cases where one does this, but I can imagine one:<br>
replicating a logical stream of operations on a Merkle hash tree DB,<br>
with a hash/MAC/signature of the final Merkle hash tree root.  The<br>
logical stream being a compression of the block-level stream, this is<br>
worthwhile just on account of that when the goal is to replicate the<br>
same Merkle hash tree on the recipient side.  (Of course, one should<br>
also integrity-protect the logical stream in this case.)  This would,<br>
indeed, be a legitimate application of canonical encodings.</blockquote><div><br></div><div>You have pretty much just described the architecture of Google Trillian:</div><div><br></div><div><a href="https://github.com/google/trillian/blob/master/docs/VerifiableDataStructures.pdf">https://github.com/google/trillian/blob/master/docs/VerifiableDataStructures.pdf</a></div><div><br></div><div>Trillian's log-derived maps consist of two logs: a Merkle log of operations to apply to a verifiable map (i.e. sparse Merkle tree), and another log that checkpoints the new Merkle roots of an updated verifiable map after the operations have been applied. </div></div><div><br></div><div>Ethereum does something similar with Merkle Patricia Trees:</div><div><br></div><div><a href="https://github.com/ethereum/wiki/wiki/Patricia-Tree">https://github.com/ethereum/wiki/wiki/Patricia-Tree</a><br></div><div><br></div>-- <br><div class="gmail_signature">Tony Arcieri<br></div>
</div></div>