Represents a proposal we obtain from another node. Note that since the proposal might come from
a malicious node there is no guarantee that the block hashes in the proposal correspond to real blocks
and even if they do then they could not match the provided number. Moreover, the block number in the
proposal might be completely arbitrary and hence we perform initial validation of the block number and
the branch length before we transform it into a safer PhronProposal
type that guarantees we will not
fail on any integer over- or underflows.
We expect that honest nodes create UnvalidatedPhronProposal {branch: [h_0, h_1, …, h_n], number: num} objects
that represent an ascending sequence of blocks b_0, b_1, …, b_n satisfying the following conditions:
1) hash(b_i) = h_i for i = 0, 1, …, n,
2) parent(b_{i+1}) = b_i for i = 0, 1, …, (n-1),
3) height(b_n) = num,
4) The parent of b_0 has been finalized (prior to creating this PhronData).
Such an UnvalidatedPhronProposal object should be thought of as a proposal for block b_n to be finalized.
We refer for to DataProvider
for a precise description of honest nodes’ algorithm of creating proposals.