code: func (r *Request) fromJSON(j *updateRequestJSON) error {
  
  	r.ID = j.ID
  	r.Header.Version = j.ProtocolVersion
  
  	var err error
  	if j.Data != "" {
  		r.data, err = hexutil.Decode(j.Data)
  		if err != nil {
  			return NewError(ErrInvalidValue, "Cannot decode data")
  		}
  	}
  
  	if j.Signature != "" {
  		sigBytes, err := hexutil.Decode(j.Signature)
  		if err != nil || len(sigBytes) != signatureLength {
  			return NewError(ErrInvalidSignature, "Cannot decode signature")
  		}
  		r.Signature = new(Signature)
  		r.idAddr = r.Addr()
  		copy(r.Signature[:], sigBytes)
  	}
  	return nil
  }
docs: // fromJSON takes an update request JSON and populates an UpdateRequest