Simply put, the GHAST consensus is to base the weight of each block on the basis of GHOST’s rules. When the network stroke is calm, the weight of the block is 1, similar to a rule of ghost that is very fast out of the block. When an attack occurs in the network, the probability of a block weighting 1/360 is 360, and the probability of 359/360 is 0. This is equivalent to slowing the block out by 360 times.
In determining the weight of each block, we first read the parent block of the block, the reference block, the reference block of the parent block, the parent block of the reference block、…… In short, along the father’s side and reference, we put all the reachable blocks together to form a tree map called the “historical tree map of the block”.
For a chunk generated by an honest node, this historical tree diagram is actually: “What is the tree structure that the node that generated it is when the block is generated?”” The GHAST rule is based on whether the historical tree map is under attack. Since the parent and reference edges of the block are not tamperable, the historical tree diagrams calculated by these edges are also non-tamperable, ensuring that everyone’s perception of the weight of the block is consistent. The Detailed Adaptive Weight “GHAST” (1) is described in more detail.
The purpose of the GHAST rule is to respond to surviving attacks. After upgrading the GHAST rule, we changed the “historical tree map has not been attacked” rule very simply.
“In this tree diagram structure, the largest child has a clear advantage over the second-largest child (on the sub-tree weight) for each of the main chain blocks that are old enough. Otherwise, the tree diagram structure is under attack. ”
Why do we want the oldest child to have a clear advantage over the second-largest?
Recall the “balanced attack” we talked about earlier, in which the bad guys managed to construct two subtrees of similar size, leaving the good guys to argue more about which sub-tree. And if the oldest child has an overwhelming advantage over the second-largest child, the oldest child will be uncontroversially the next main chain. The crown prince’s battle is decided to win or lose, the throne successfully inherited, there will not be nine sons to seize the phenomenon.
Why do we have such a requirement only for a large enough-old main chain block?
Because for the younger main chain block, its child (on the weight of the subtree) is the same force is normal. If these blocks also require “a clear advantage for the largest child”, it will only put the entire system in a neurotic situation without improving safety.
So how do we quantify that there are obvious advantages and old enough?
There are obvious advantages relatively simple, as long as the largest child than the second largest child (the weight of the subtree) is 1000 more.
The judgment as to whether the block is old enough is more troubling. Theoretical analysis shows that whether a block is old enough should be determined by the time it is generated, not the time it is first seen. That means if a block is hidden by the bad guys for a long time and then released, even if you just see it, it should be old enough. We’ve talked about a situation in “Split Attack” (click to read the details) where a block that has been hidden by bad guys for a long time can enter the main chain just after being released. Therefore, the main chain block is old enough to simply determine the height of the block or the size of the sub-tree.
l How do you tell if a block in a tree map is old enough?
Let’s start with a non-controversial situation:
1. For the Good Guys block, if it has been generated for a long time (beyond the threshold d1), it should be old enough.
2. For good people blocks, it cannot be old enough if they are generated only before a short time (below the threshold d2).
3. For bad block, if it has been generated for a long time (beyond the threshold d1), it should be old enough.
Of the two thresholds above, d1 is d2, so we don’t always know if it’s old enough for a good person block in the middle. But for our theoretical analysis, it’s enough to tell if it’s “obviously old enough.”
Careful friends may have noticed that our category above does not cover “bad guy blocks with short build times” because there are situations that cannot be judged. Suppose, after a year of operation on the blockchain network, someone releases a block whose father block is a Genesis block and does not reference any other block. For others, it’s impossible to tell whether the block was just generated or released after a year of snow – an indistinguishable in the sense of information theory, even with quantum supercomputers.
But one thing is certain, such a block is definitely not normal, it must be generated by bad guys – good guys will not generate such a big broadcast delay. According to the usual processing methods in cryptography, since it is indistinguishable, it may be considered a situation, so we can directly consider such blocks as sufficiently old block processing, that is, the third case of the above classification.
So the question arises, how do you tell if a block is “obviously” old enough? This is another problem that can be solved in the way that eight cents cross the sea. As for how Conflux resolves, and listens to the decomposition.