Replies: 4 comments 3 replies
-
Two blocks may be produced and imported for the same slot. This kind of simple forking shuld be supported by the target |
Beta Was this translation helpful? Give feedback.
-
|
Forking is required both in production and in the fuzzer to support mutations. In production nodes, complex forking is needed, while the M1 fuzzer only requires trivial forking, i.e., forks can occur only at the last successfully imported block. I will include this in the fuzzer protocol spec v1. Without forking support, blocks mutations are not possible. Which precludes fault injection using interesting techniques |
Beta Was this translation helpful? Give feedback.
-
|
Thanks for your response, @davxy , I forgot the possibility of forks. I'm going to close this discussion. |
Beta Was this translation helpful? Give feedback.
-
|
As far as I recall, there is no strict formula for fork choice. The fork choice rule is essentially an off-chain decision of the block producer. As a block producer, you decide which fork to extend, following a few guidelines:
In our fuzzer, forks may only be created at the parent of the last successfully imported block. In other words, they can only be siblings of the latest imported block. Examples of this rule, if B_i is the block imported on step i: YES NO Once the chain has been extended, you never fork more than one block below the head. In other words, forks may only start at the parent of the latest imported block. The fuzzer typically decides to build over the last imported mutation: YES NO I'll add all this stuff in the README of fuzzer protocol v1 #47 |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
In the report 1757422771, the trace
00000032processes a block produced in the slot 27. The next trace00000033processes a block also produced in the slot 27, so this block should be rejected but the fuzzer seems to process it successfully (pre state-root is not equal to post state-root)Another thing that I noticed is that the post state-root of
00000032is not equal to the pre state-root of00000033and pre state-root of00000032is equal to pre state-root of00000033.The same pattern happens with the reports
1757423102and1757423365.It appears that the fuzzer produces 2 blocks in the same slot but with different extrinsic values.
Beta Was this translation helpful? Give feedback.
All reactions