Hi Igno (and list):
Really cool to see this specification getting fleshed out!
I have mixed feelings about the full node mode. While archival is desirable for
later checks (included from new nodes), we would get stronger privacy
guarantees if cut-through still happened on full nodes. I think the "right to
be forgotten" is an important part of the design. Any strong opinion either way?
I agree with your preference for the "right to be forgotten". However, given
that: 1) there can be no guarantee that a custom node is not recording
transactions in full since genesis and 2) full block sync may be an important
fallback under adversarial conditions, I'm not sure it would be possible to
exclude this functionality completely in the default node implementation. I do
think it makes sense to take reasonable measures to prevent or actively
obfuscate this full history from being maintained and easily exported from the
node, however.
Re: the spec itself:
At a high level, I really like the partial history sync to facilitate
bootstrapping. If bootstrapping can be extremely fast and still very secure,
that opens up the possibility for extremely light applications throughout the
ecosystem, from wallets to short-lived web applications, that don't sacrifice
much of the security model.
As someone new to the project, I feel like one piece of context I'm missing is
the form of the cut-through blocks themselves. From glancing at the pruning doc
and the mimblewimble spec, my guess is that the cut-through block would contain
all the block headers, plus the abridged utxo set. Is this an accurate
assumption?
Another question I have is with regards to the interaction between the moving
horizon and discarding block history via cut-through. Given the example from
the doc:
> The new node also has prior knowledge of the genesis block. It connects to
> other peers and learns about the head of the most worked chain. It asks for
> the block header at the horizon block, requiring peer agreement. If consensus
> is not reached at h = H - Z, the node gradually increases the horizon Z,
> moving h backward until consensus is reached. Then it gets the full UTXO set
> at the horizon block.
If most (if not all) of the nodes on the network are pruning their history, it
seems like there would be an upper bound of the horizon Z- a node with pruned
history at horizon Z cannot provide a cut-through block at Z' > Z, nor can it
provide the full history. Even if the node's internal cut-through horizon is
many multiples greater than the bootstrapping horizon, there is still an
effective minimum height that this peer can bootstrap back to given any
disagreement. Additionally, even if some nodes are full nodes which are capable
of providing full history, as written it seems necessary to consider the sybil
attack probability as the likelihood of an attacker controlling all the full
nodes the peer is connected to, which may be significantly easier than a
generalized sybil attack (depending on the ratio of pruning nodes to full
nodes).
My first thought is: How much does this actually matter? Assuming that the
block headers are included in the cut-through block, proof of work is
validated, and the longest/valid chain is determined by total work, forging an
entirely invalid cut-through block from genesis would require at the minimum
the same amount of total work as the valid chain has accumulated thus far. An
adversary could build on top of the valid chain, perhaps adding a handful of
"difficulty adjustment" blocks with forged timestamps to drive down the
difficulty, but the total work of the forged chain would still need to exceed
that of the main chain to be deemed valid. Given this, does it make sense to
amend the spec to seek more peers and go with the majority agreement chain with
the most work, rather than push back the horizon? That removes the requirement
for a significant number of non-pruning peers in the network, which helps your
"right to be forgotten" point from your email.
-MW
--
Mailing list: https://launchpad.net/~mimblewimble
Post to : mimblewimble@lists.launchpad.net
Unsubscribe : https://launchpad.net/~mimblewimble
More help : https://help.launchpad.net/ListHelp