Subject: Re: [bitcoin-dev] [patch] Switching Bitcoin Core to sqlite db

From: Peter R <[email-masked]>
Date: Thu, 29 Oct 2015 21:04:22 -0700

> On Oct 29, 2015, at 8:35 PM, Gregory Maxwell via bitcoin-dev <[email-masked]> wrote:
> 
> On Fri, Oct 30, 2015 at 3:04 AM, Simon Liu via bitcoin-dev
> <[email-masked]> wrote:
>> Given that UTXO storage is considered critical, it seems reasonable to
> 
> This sounds like a misunderstanding of what consensus criticial means.
> It does not mean that it must be right (though obviously that is
> preferable) but that it must be _consistent_, between all nodes.

Can you give a specific example of how nodes that used different database technologies might determine different answers to whether a given transaction is valid or invalid?  I’m not a database expert, but to me it would seem that if all the unspent outputs can be found in the database, and if the relevant information about each output can be retrieved without corruption, then that’s all that really matters as far as the database is concerned.

Let’s use an unspent pay-to-pubkey-hash output as an example: Alice spends this to Bob (she signs it properly), the TX propagates across the network and…then what?  Do some nodes disagree on whether or not the TX is valid?  What exactly would they disagree on?  Are you suggesting that a database bug would cause some nodes to think the output was actually already spent, while others can correctly see that it’s unspent?  Or maybe some nodes think the output doesn’t exist while others do?  Or are you suggesting that the details about this output might be retrieved with errors from certain databases but correctly from others?  

I’d like a concrete example to help me understand why more than one implementation of something like the UTXO database would be unreasonable.    

Peter