Skip to content

Commit f0e3d53

Browse files
authored
fix(chainlib): skip WS relay signature verification for static providers (#2153)
Use ConsumerSessionManager static-provider flag (no bech32 heuristic) and add helper IsStaticProvider().
1 parent f7a3e08 commit f0e3d53

File tree

2 files changed

+35
-7
lines changed

2 files changed

+35
-7
lines changed

protocol/chainlib/consumer_ws_subscription_manager.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -561,13 +561,23 @@ func (cwsm *ConsumerWSSubscriptionManager) verifySubscriptionMessage(hashedParam
561561
lavaprotocol.UpdateRequestedBlock(request.RelayData, reply) // update relay request requestedBlock to the provided one in case it was arbitrary
562562
filteredHeaders, _, ignoredHeaders := cwsm.chainParser.HandleHeaders(reply.Metadata, chainMessage.GetApiCollection(), spectypes.Header_pass_reply)
563563
reply.Metadata = filteredHeaders
564-
err := lavaprotocol.VerifyRelayReply(context.Background(), reply, request, providerAddr)
565-
if err != nil {
566-
return utils.LavaFormatError("Failed VerifyRelayReply on subscription message", err,
567-
utils.LogAttr("subscriptionMsg", reply.Data),
568-
utils.LogAttr("hashedParams", hashedParams),
569-
utils.LogAttr("originalRequest", request),
570-
)
564+
565+
// For static providers, skip signature verification (similar to regular RPC calls)
566+
// Use the explicit flag from the session manager rather than heuristics based on address formatting.
567+
isStaticProvider := false
568+
if cwsm.consumerSessionManager != nil {
569+
isStaticProvider = cwsm.consumerSessionManager.IsStaticProvider(providerAddr)
570+
}
571+
572+
if !isStaticProvider {
573+
err := lavaprotocol.VerifyRelayReply(context.Background(), reply, request, providerAddr)
574+
if err != nil {
575+
return utils.LavaFormatError("Failed VerifyRelayReply on subscription message", err,
576+
utils.LogAttr("subscriptionMsg", reply.Data),
577+
utils.LogAttr("hashedParams", hashedParams),
578+
utils.LogAttr("originalRequest", request),
579+
)
580+
}
571581
}
572582

573583
reply.Metadata = append(reply.Metadata, ignoredHeaders...)

protocol/lavasession/consumer_session_manager.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1630,6 +1630,24 @@ func NewConsumerSessionManager(
16301630
return csm
16311631
}
16321632

1633+
// IsStaticProvider returns true if the given provider address belongs to a static provider in the current session manager state.
1634+
// If the provider is unknown, it returns false.
1635+
func (csm *ConsumerSessionManager) IsStaticProvider(providerAddress string) bool {
1636+
csm.lock.RLock()
1637+
defer csm.lock.RUnlock()
1638+
1639+
if cswp, ok := csm.pairing[providerAddress]; ok {
1640+
return cswp.StaticProvider
1641+
}
1642+
if cswp, ok := csm.backupProviders[providerAddress]; ok {
1643+
return cswp.StaticProvider
1644+
}
1645+
if cswp, ok := csm.pairingPurge[providerAddress]; ok {
1646+
return cswp.StaticProvider
1647+
}
1648+
return false
1649+
}
1650+
16331651
// SetLavaBlockHeightCallback sets the callback function to get current Lava blockchain block height
16341652
// This must be called after creating the ConsumerSessionManager
16351653
func (csm *ConsumerSessionManager) SetLavaBlockHeightCallback(getLavaBlockHeight func() int64) {

0 commit comments

Comments
 (0)