Affected file: go/provider/client/client.go in akash-network/chain-sdk v0.2.11 and main (HEAD as of 2026-05-26).
Three bugs cause the gateway-side service filter and tail to never apply:
(c *client) LeaseLogs (lines 781-805) sends ?services= (plural) but the akash-network/provider gateway middleware reads ?service= (singular) in requestStreamParams. The filter is silently dropped by the gateway.
(c *client) LeaseLogs signature names its tail parameter _ int64 (line 785) and the function never writes it to the query string. The gateway supports ?tail=N; the value never reaches the wire.
(c *client) LeaseEvents signature names its services parameter _ string (line 606) and the function never writes it to the query string. Same class of bug as (1) but for events.
The contract is already broken at the interface level: client.go:70-71 declares
LeaseEvents(ctx, id, services string, follow bool) (*LeaseKubeEvents, error)
LeaseLogs(ctx, id, services string, follow bool, tailLines int64) (*ServiceLogs, error)
but the implementations bind services / tailLines to _. Callers cannot tell the values are discarded without reading the implementation.
Gateway-side reference
Cross-verified against akash-network/provider/main/gateway/rest/middleware.go, function requestStreamParams (lines 199-251):
services := vars.Get("service") — singular key; comma-separated list; K8s in (...) selector against the manifest-service label.
vars.Get("tail") — parsed as int32, must be >= -1, default -1.
vars.Get("follow") — bool.
Repro
Any chain-sdk consumer calling:
client.LeaseLogs(ctx, id, "svc-a", true, 50)
Capture the websocket upgrade request (wireshark / tcpdump -i lo0 -A -s 0 port 8443 / provider gateway access log).
- Observed query string:
services=svc-a&follow=true (no tail, wrong key).
- Expected:
service=svc-a&follow=true&tail=50.
Affected file:
go/provider/client/client.goinakash-network/chain-sdkv0.2.11 andmain(HEAD as of 2026-05-26).Three bugs cause the gateway-side service filter and tail to never apply:
(c *client) LeaseLogs(lines 781-805) sends?services=(plural) but theakash-network/providergateway middleware reads?service=(singular) inrequestStreamParams. The filter is silently dropped by the gateway.(c *client) LeaseLogssignature names its tail parameter_ int64(line 785) and the function never writes it to the query string. The gateway supports?tail=N; the value never reaches the wire.(c *client) LeaseEventssignature names its services parameter_ string(line 606) and the function never writes it to the query string. Same class of bug as (1) but for events.The contract is already broken at the interface level:
client.go:70-71declaresbut the implementations bind
services/tailLinesto_. Callers cannot tell the values are discarded without reading the implementation.Gateway-side reference
Cross-verified against
akash-network/provider/main/gateway/rest/middleware.go, functionrequestStreamParams(lines 199-251):services := vars.Get("service")— singular key; comma-separated list; K8sin (...)selector against the manifest-service label.vars.Get("tail")— parsed asint32, must be>= -1, default-1.vars.Get("follow")— bool.Repro
Any chain-sdk consumer calling:
Capture the websocket upgrade request (wireshark /
tcpdump -i lo0 -A -s 0 port 8443/ provider gateway access log).services=svc-a&follow=true(no tail, wrong key).service=svc-a&follow=true&tail=50.