code: func (typedData *TypedData) EncodeType(primaryType string) hexutil.Bytes {
  	// Get dependencies primary first, then alphabetical
  	deps := typedData.Dependencies(primaryType, []string{})
  	slicedDeps := deps[1:]
  	sort.Strings(slicedDeps)
  	deps = append([]string{primaryType}, slicedDeps...)
  
  	// Format as a string with fields
  	var buffer bytes.Buffer
  	for _, dep := range deps {
  		buffer.WriteString(dep)
  		buffer.WriteString("(")
  		for _, obj := range typedData.Types[dep] {
  			buffer.WriteString(obj.Type)
  			buffer.WriteString(" ")
  			buffer.WriteString(obj.Name)
  			buffer.WriteString(",")
  		}
  		buffer.Truncate(buffer.Len() - 1)
  		buffer.WriteString(")")
  	}
  	return buffer.Bytes()
  }
docs: // EncodeType generates the following encoding:
  // `name ‖ "(" ‖ member₁ ‖ "," ‖ member₂ ‖ "," ‖ … ‖ memberₙ ")"`
  //
  // each member is written as `type ‖ " " ‖ name` encodings cascade down and are sorted by name