public static void AddBranch(this BlockTree blockTree, int branchLength, int splitBlockNumber) { int splitVariant = 0; BlockTree alternative = Build.A.BlockTree(blockTree.FindBlock(0, BlockTreeLookupOptions.RequireCanonical) !).OfChainLength(branchLength, splitVariant).TestObject; Block? parent = null; for (int i = splitBlockNumber + 1; i < branchLength; i++) { Block block = alternative.FindBlock(i, BlockTreeLookupOptions.RequireCanonical) !; if (i == splitBlockNumber + 1) { Block?mainBlock = blockTree.FindBlock(i - 1, BlockTreeLookupOptions.RequireCanonical); if (mainBlock != null) { parent = mainBlock; } } block.Header.ParentHash = parent?.Hash; block.Header.StateRoot = parent?.StateRoot; block.Header.Hash = block.Header.CalculateHash(); parent = block; bool shouldProcess = i == branchLength - 1; BlockTreeSuggestOptions options = BlockTreeSuggestOptions.ForceDontSetAsMain; options |= shouldProcess ? BlockTreeSuggestOptions.ShouldProcess : BlockTreeSuggestOptions.None; blockTree.SuggestBlock(block, options); } }
public static bool ContainsFlag(this BlockTreeSuggestOptions value, BlockTreeSuggestOptions flag) => (value & flag) == flag;