proc/worker/client.go
func (w *Worker) ClientPreUncooperativeCloseRequest(job *data.Job) error {
	logger := w.logger.Add("method", "ClientPreUncooperativeCloseRequest",
		"job", job)

	ch, err := w.relatedChannel(logger, job,
		data.JobClientPreUncooperativeCloseRequest)
	if err != nil {
		return err
	}

	jdata, err := w.publishData(logger, job)
	if err != nil {
		return err
	}

	offer, err := w.offering(logger, ch.Offering)
	if err != nil {
		return err
	}

	acc, err := w.account(logger, ch.Client)
	if err != nil {
		return err
	}

	if err := w.clientValidateChannelForClose(ch); err != nil {
		return err
	}

	return w.doClientPreUncooperativeCloseRequestAndSaveTx(logger, job, ch,
		acc, offer, jdata.GasPrice)
}
func (w *Worker) ClientPreUncooperativeCloseRequest(job *data.Job) error {
	logger := w.logger.Add("method", "ClientPreUncooperativeCloseRequest",
		"job", job)

	ch, err := w.relatedChannel(logger, job,
		data.JobClientPreUncooperativeCloseRequest)
	if err != nil {
		return err
	}

	jdata, err := w.publishData(logger, job)
	if err != nil {
		return err
	}

	offer, err := w.offering(logger, ch.Offering)
	if err != nil {
		return err
	}

	acc, err := w.account(logger, ch.Client)
	if err != nil {
		return err
	}

	if err := w.clientValidateChannelForClose(ch); err != nil {
		return err
	}

	return w.doClientPreUncooperativeCloseRequestAndSaveTx(logger, job, ch,
		acc, offer, jdata.GasPrice)
}
// ClientPreUncooperativeCloseRequest requests the closing of the channel
// and starts the challenge period.