code: func (oc *ordererClient) NewBroadcast(ctx context.Context, opts ...grpc.CallOption) (Broadcast, error) {
  	// reuse the existing connection to create Broadcast client
  	broadcast, err := ab.NewAtomicBroadcastClient(oc.conn).Broadcast(ctx)
  	if err == nil {
  		return broadcast, nil
  	}
  
  	// error occurred with the existing connection, so create a new connection to orderer
  	oc.conn, err = oc.grpcClient.NewConnection(oc.ordererAddr, oc.serverNameOverride)
  	if err != nil {
  		return nil, errors.WithMessage(err, fmt.Sprintf("failed to connect to orderer %s", oc.ordererAddr))
  	}
  
  	// create a new Broadcast
  	broadcast, err = ab.NewAtomicBroadcastClient(oc.conn).Broadcast(ctx)
  	if err != nil {
  		rpcStatus, _ := status.FromError(err)
  		return nil, errors.Wrapf(err, "failed to new a broadcast, rpcStatus=%+v", rpcStatus)
  	}
  	return broadcast, nil
  }
docs: // NewBroadcast creates a Broadcast