On Wed, Jun 15, 2016 at 5:10 PM, Peter Todd wrote: > On Tue, Jun 14, 2016 at 05:14:23PM -0700, Bram Cohen via bitcoin-dev wrote: > > > The fundamental approach to handling the latency problem is to have the > > utxo commitments trail a bit. Computing utxo commitments takes a certain > > amount of time, too much to hold up block propagation but still hopefully > > vastly less than the average amount of time between blocks. Trailing by a > > single block is probably a bad idea because you sometimes get blocks back > > to back, but you never get blocks back to back to back to back. Having > the > > utxo set be trailing by a fixed amount - five blocks is probably > excessive > > - would do a perfectly good job of keeping latency from every becoming an > > issue. Smaller commitments for the utxos added and removed in each block > > alone could be added without any significant performance penalty. That > way > > all blocks would have sufficient commitments for a completely up to date > > proofs of inclusion and exclusion. This is not a controversial approach. > > Agreed - regardless of approach adding latency to commitment calculations > of > all kinds is something I think we all agree can work in principle, although > obviously it should be a last resort technique when optimization fails. > An important point: Adding latency to utxo commitments does not imply latency to proofs of inclusion and exclusion! If roots of what's added and deleted in each block are added as well, then a proof of inclusion can be done by having a proof of inclusion of the trailing utxo set followed by a proof of exclusion from all the following deletion sets, or a proof of inclusion in one of the single block addition sets followed by proofs of exclusion from all the more recent deletion sets. Likewise a proof of exclusion can be a proof of exclusion from the utxo set followed by proofs of exclusion from all the more recent addition sets or a single proof of inclusion in a recent deletion set. This does make proofs larger (except in the case of recent deletions and maybe recent additions) and adds complexity, so it shouldn't be done unless necessary. But validation before block propagation needs to be extremely fast, so for utxo roots this trick is probably both necessary and sufficient.