code: func (c *chainView) Next(node *blockNode) *blockNode {
  	c.mtx.Lock()
  	next := c.next(node)
  	c.mtx.Unlock()
  	return next
  }
docs: // Next returns the successor to the provided node for the chain view.  It will
  // return nil if there is no successfor or the provided node is not part of the
  // view.
  //
  // For example, assume a block chain with a side chain as depicted below:
  //   genesis -> 1 -> 2 -> 3 -> 4  -> 5 ->  6  -> 7  -> 8
  //                         \-> 4a -> 5a -> 6a
  //
  // Further, assume the view is for the longer chain depicted above.  That is to
  // say it consists of:
  //   genesis -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8
  //
  // Invoking this function with block node 5 would return block node 6 while
  // invoking it with block node 5a would return nil since that node is not part
  // of the view.
  //
  // This function is safe for concurrent access.