Hi all,
I think we could do without any type of Merkle tree, both in block headers and
in the complete UTXO set (for sync). Please tell me if I'm wrong.
A block is composed of the following information (ignoring header):
- Outputs, with a commitment, range proof and a features bitset.
- Inputs, which are just outputs commitments.
- Kernels, with the excess value, its signature and the fee.
The UTXO set necessary to sync-up a new node, assuming it has the header chain
already, is composed of outputs (all unspents) and kernels (all of them) with
same information as above.
The purpose of putting some sort of Merkle tree root in a block header is to
make it hard to mess with block data, as it would change the proof of work
(also SPV but let's ignore that for a sec). Now lets get rid of all tree roots
and just put 2 things in block headers: the sum of excess values over the whole
block and the sum of excess values since genesis (summing all blocks). What can
we mess with?
- Output commitments can't be changed, wouldn't match the sums (both in block
and total in UTXO set).
- Output range proofs can't be changed, they would get invalidated with respect
to their commitment.
- Inputs can't be changed, would match the sum.
- Kernel excess can't be changed, wouldn't match the sums (also both in block
and total in UTXO set)
- Kernel sig can't be changed, wouldn't validate with the excess as pubkey.
- Kernel fee can't be changed, wouldn't validate with the sig.
Only the feature bitsets could be potentially messed with, but right now
they're only used to flag coinbase kernels and outputs and messing with that
would also invalidate sums.
The result would be that full nodes don't need to maintain any tree of any
type, making it a lot simpler and saving a fair amount of space. Also when a
new node wants to sync up, there's no tree to transfer and that process also
get a fair amount simpler. If I'm right, I have to apologize to Merope for not
seeing this earlier. And obviously we would lose some features, SPV would get
harder and spent proofs, while still possible (I think), wouldn't be as elegant.
- Igno
--
Mailing list: https://launchpad.net/~mimblewimble
Post to : mimblewimble@lists.launchpad.net
Unsubscribe : https://launchpad.net/~mimblewimble
More help : https://help.launchpad.net/ListHelp