@@ -760,27 +760,44 @@ func (f *Fabric) query(request QueryRequest) (*libveritas.VerifiedMessage, error
760760}
761761
762762func (f * Fabric ) sendQuery (ctx * libveritas.QueryContext , request QueryRequest , relays []string ) (* libveritas.VerifiedMessage , error ) {
763+ var qParts []string
764+ var hintParts []string
763765 for _ , q := range request .Queries {
764766 ctx .AddRequest (q .Space )
767+ qParts = append (qParts , q .Space )
765768 for _ , h := range q .Handles {
766769 if h != "" {
767770 ctx .AddRequest (h + q .Space )
771+ qParts = append (qParts , h + q .Space )
768772 }
769773 }
770- }
771-
772- body , err := json .Marshal (request )
773- if err != nil {
774- return nil , fmt .Errorf ("encoding query: %w" , err )
774+ if q .EpochHint != nil {
775+ hintParts = append (hintParts , fmt .Sprintf ("%s:%s:%d" , q .Space , q .EpochHint .Root , q .EpochHint .Height ))
776+ }
775777 }
776778
777779 var lastErr error = & FabricError {Code : "no_peers" , Message : "no peers available" }
778780
779781 for _ , u := range relays {
780- respBytes , err := postBinary (f .client , u + "/query" , body )
782+ queryURL , _ := url .Parse (u + "/query" )
783+ params := url.Values {}
784+ params .Set ("q" , strings .Join (qParts , "," ))
785+ if len (hintParts ) > 0 {
786+ params .Set ("hints" , strings .Join (hintParts , "," ))
787+ }
788+ queryURL .RawQuery = params .Encode ()
789+
790+ resp , err := f .client .Get (queryURL .String ())
781791 if err != nil {
782792 f .pool .MarkFailed (u )
783- lastErr = err
793+ lastErr = & FabricError {Code : "http" , Message : err .Error ()}
794+ continue
795+ }
796+ respBytes , _ := io .ReadAll (resp .Body )
797+ resp .Body .Close ()
798+ if resp .StatusCode >= 300 {
799+ f .pool .MarkFailed (u )
800+ lastErr = & FabricError {Code : "relay" , Status : resp .StatusCode , Message : string (respBytes )}
784801 continue
785802 }
786803
0 commit comments