Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/evm/cmd/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ var RunCmd = &cobra.Command{
return err
}

blobClient, err := blobrpc.NewWSClient(cmd.Context(), nodeConfig.DA.Address, nodeConfig.DA.AuthToken, "")
blobClient, err := blobrpc.NewWSClient(cmd.Context(), logger, nodeConfig.DA.Address, nodeConfig.DA.AuthToken, "")
if err != nil {
return fmt.Errorf("failed to create blob client: %w", err)
}
Expand Down
2 changes: 1 addition & 1 deletion apps/grpc/cmd/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ func createSequencer(
genesis genesis.Genesis,
executor execution.Executor,
) (coresequencer.Sequencer, error) {
blobClient, err := blobrpc.NewWSClient(ctx, nodeConfig.DA.Address, nodeConfig.DA.AuthToken, "")
blobClient, err := blobrpc.NewWSClient(ctx, logger, nodeConfig.DA.Address, nodeConfig.DA.AuthToken, "")
if err != nil {
return nil, fmt.Errorf("failed to create blob client: %w", err)
}
Expand Down
2 changes: 1 addition & 1 deletion apps/testapp/cmd/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ func createSequencer(
genesis genesis.Genesis,
executor execution.Executor,
) (coresequencer.Sequencer, error) {
blobClient, err := blobrpc.NewWSClient(ctx, nodeConfig.DA.Address, nodeConfig.DA.AuthToken, "")
blobClient, err := blobrpc.NewWSClient(ctx, logger, nodeConfig.DA.Address, nodeConfig.DA.AuthToken, "")
if err != nil {
return nil, fmt.Errorf("failed to create blob client: %w", err)
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/cmd/run_node.go
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ func StartNode(
}
}

blobClient, err := blobrpc.NewWSClient(ctx, nodeConfig.DA.Address, nodeConfig.DA.AuthToken, "")
blobClient, err := blobrpc.NewWSClient(ctx, logger, nodeConfig.DA.Address, nodeConfig.DA.AuthToken, "")
if err != nil {
return fmt.Errorf("failed to create blob client: %w", err)
}
Expand Down
13 changes: 10 additions & 3 deletions pkg/da/jsonrpc/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (

libshare "github.com/celestiaorg/go-square/v3/share"
"github.com/filecoin-project/go-jsonrpc"
"github.com/rs/zerolog"
)

// Client dials the celestia-node RPC "blob" and "header" namespaces.
Expand Down Expand Up @@ -72,9 +73,15 @@ func NewClient(ctx context.Context, addr, token string, authHeaderName string) (
// Automatically converts http:// to ws:// (and https:// to wss://).
// Supports channel-based subscriptions (e.g. Subscribe).
// Note: WebSocket connections are eager — they connect at creation time
// and will fail immediately if the server is unavailable.
func NewWSClient(ctx context.Context, addr, token string, authHeaderName string) (*Client, error) {
return NewClient(ctx, httpToWS(addr), token, authHeaderName)
// if it fails, we fallback to non websocket connection for the whole runtime process.
func NewWSClient(ctx context.Context, logger zerolog.Logger, addr, token string, authHeaderName string) (*Client, error) {
client, err := NewClient(ctx, httpToWS(addr), token, authHeaderName)
if err != nil {
logger.Warn().Err(err).Msg("DA websocket connection failed, falling back to DA polling")
return NewClient(ctx, addr, token, authHeaderName)
}

return client, nil
}

// BlobAPI mirrors celestia-node's blob module (nodebuilder/blob/blob.go).
Expand Down
Loading