code: func (n *Node) ResolveAddress(ctx context.Context, msg *api.ResolveAddressRequest) (*api.ResolveAddressResponse, error) {
  	if !n.IsMember() {
  		return nil, ErrNoRaftMember
  	}
  
  	nodeInfo, err := ca.RemoteNode(ctx)
  	if err != nil {
  		return nil, err
  	}
  
  	fields := logrus.Fields{
  		"node.id": nodeInfo.NodeID,
  		"method":  "(*Node).ResolveAddress",
  		"raft_id": fmt.Sprintf("%x", n.Config.ID),
  	}
  	if nodeInfo.ForwardedBy != nil {
  		fields["forwarder.id"] = nodeInfo.ForwardedBy.NodeID
  	}
  	log.G(ctx).WithFields(fields).Debug("")
  
  	member := n.cluster.GetMember(msg.RaftID)
  	if member == nil {
  		return nil, status.Errorf(codes.NotFound, "member %x not found", msg.RaftID)
  	}
  	return &api.ResolveAddressResponse{Addr: member.Addr}, nil
  }
docs: // ResolveAddress returns the address reaching for a given node ID.