rpcconsumer

package
v5.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 20, 2026 License: Apache-2.0 Imports: 56 Imported by: 0

README

RPC Consumer (Decentralized Mode)

The RPC Consumer is Lava's decentralized RPC gateway that dynamically discovers and pairs with blockchain data providers through on-chain pairing mechanisms. It ensures data reliability through conflict detection, finalization consensus, and multi-provider validation.

When to Use RPC Consumer

Use rpcconsumer when you want:

  • Decentralized provider discovery - Automatically find and pair with on-chain staked providers
  • Data reliability - Conflict detection and finalization consensus ensure data accuracy
  • Dynamic provider rotation - Providers change based on blockchain epochs and staking
  • Trustless operation - No need to trust specific provider infrastructure
  • Full Lava protocol features - Access all blockchain validation and incentive mechanisms

For centralized/enterprise deployments with known provider infrastructure, use rpcsmartrouter instead.

Key Features

Decentralized Architecture
  • On-chain Pairing: Discovers providers through blockchain pairing lists
  • Epoch Management: Provider selection updates with blockchain epochs
  • Stake-based Selection: Providers weighted by their on-chain stake
Data Reliability
  • Conflict Detection: Automatically detects and reports provider conflicts
  • Finalization Consensus: Validates data finalization across multiple providers
  • Response Verification: Ensures responses match blockchain state
Advanced Capabilities
  • Provider Optimizer: QoS-based provider selection with multiple strategies
  • Smart Caching: Two-layer caching for improved performance
  • Relay Health Monitoring: Continuous provider health tracking
  • WebSocket Support: Full support for subscription-based APIs

Installation

# Clone the repository
git clone https://github.com/lavanet/lava.git
cd lava

# Install all binaries
make install-all

Configuration

Create a configuration file (e.g., rpcconsumer.yml):

endpoints:
  - chain-id: ETH1
    api-interface: jsonrpc
    network-address: 127.0.0.1:3333
  - chain-id: OSMOSIS
    api-interface: rest
    network-address: 127.0.0.1:3334
  - chain-id: OSMOSIS
    api-interface: tendermintrpc
    network-address: 127.0.0.1:3335
Configuration Fields
  • chain-id: Blockchain identifier (e.g., ETH1, OSMOSIS, LAV1)
  • api-interface: API type (jsonrpc, rest, tendermintrpc, grpc)
  • network-address: IP:PORT where the consumer will listen for requests

Usage

Basic Usage
lavap rpcconsumer rpcconsumer.yml \
  --from wallet_name \
  --chain-id lava-testnet-2 \
  --geolocation 1
Required Flags
  • --from: Your wallet name (used for signing relay requests and conflict detection)
  • --chain-id: Lava blockchain chain ID (e.g., lava-testnet-2, lava-mainnet-1)
  • --geolocation: Your geographic location code
Common Options
lavap rpcconsumer rpcconsumer.yml \
  --from wallet_name \
  --chain-id lava-testnet-2 \
  --geolocation 1 \
  --cache-be "127.0.0.1:7778" \
  --strategy latency \
  --metrics-listen-address ":7779" \
  --log_level debug
Strategy Options

Choose provider selection strategy with --strategy:

  • balanced (default) - Balance between all factors
  • latency - Prioritize fastest providers
  • sync-freshness - Prioritize most up-to-date providers
  • cost - Optimize for lower cost
  • privacy - Maximize privacy
  • accuracy - Prioritize data accuracy
  • distributed - Distribute across many providers
Advanced Flags
# Enable caching
--cache-be "127.0.0.1:7778"

# Prometheus metrics
--metrics-listen-address ":7779"

# Kafka analytics
--relay-kafka-addr "localhost:9092"

# Optimizer QoS reports
--optimizer-qos-server-address "http://qos-server:8080"

# Debug options
--debug-relays
--log_level trace

# Performance tuning
--max-concurrent-providers 5

Example Requests

After starting the consumer, make RPC requests to the configured endpoints:

# REST API request
curl http://127.0.0.1:3334/cosmos/base/tendermint/v1beta1/blocks/latest

# JSON-RPC request
curl -X POST http://127.0.0.1:3333 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "eth_blockNumber",
    "params": [],
    "id": 1
  }'

# WebSocket subscription
wscat -c ws://127.0.0.1:3333
> {"jsonrpc":"2.0","id":1,"method":"eth_subscribe","params":["newHeads"]}

How It Works

  1. Blockchain Pairing: Consumer queries Lava blockchain for provider pairings
  2. Provider Selection: Selects providers based on stake, QoS, and strategy
  3. Request Routing: Routes user requests to selected providers
  4. Response Validation: Validates responses against finalization consensus
  5. Conflict Detection: Reports any conflicts to the blockchain
  6. QoS Updates: Continuously updates provider QoS scores

Architecture

User Request → RPC Consumer → Blockchain Pairing Query
                     ↓
              Provider Selection (stake-weighted)
                     ↓
              Relay to Providers (parallel)
                     ↓
              Response Validation & Consensus
                     ↓
              Conflict Detection (if needed)
                     ↓
              Return Best Response

vs. RPC Smart Router

Feature RPC Consumer (Decentralized) RPC Smart Router (Centralized)
Provider Discovery On-chain blockchain pairing Static configuration file
Trust Model Trustless (blockchain verified) Trust known providers
Provider Selection Stake-weighted + QoS QoS only
Data Validation Conflict detection + consensus Basic validation
Setup Complexity Medium (requires wallet) Simple (just config file)
Use Case Public networks, trustless Enterprises, known infrastructure
Blockchain Dependency Yes (requires Lava chain) Optional (only for specs)

Monitoring & Metrics

RPC Consumer exposes Prometheus metrics at the configured --metrics-listen-address:

# View metrics
curl http://localhost:7779/metrics

# Key metrics:
# - lava_consumer_relay_requests_total
# - lava_consumer_relay_errors_total
# - lava_consumer_provider_qos_score
# - lava_consumer_cache_hit_rate

Troubleshooting

"No pairings available"
  • Ensure your wallet has an active subscription
  • Check that providers are staked for your requested chain
  • Verify geolocation matches available providers
"Failed to get provider address"
  • Check blockchain connectivity
  • Verify chain-id is correct
  • Ensure subscription is active
Performance Issues
  • Enable caching with --cache-be
  • Adjust --max-concurrent-providers
  • Use --strategy latency for speed
  • Check provider QoS metrics

Configuration Examples

See the config/consumer_examples/ directory for complete configuration examples:

  • full_consumer_example.yml - All features enabled
  • ethereum_example.yml - Ethereum-specific setup
  • osmosis_example.yml - Cosmos chain example

More Information

Documentation

Overview

Package rpcconsumer is a generated GoMock package.

Package rpcconsumer is a generated GoMock package.

Index

Constants

View Source
const (
	DefaultRPCConsumerFileName = "rpcconsumer.yml"
	DebugRelaysFlagName        = "debug-relays"
	DebugProbesFlagName        = "debug-probes"
)
View Source
const (
	// maximum number of retries to send due to the ticker, if we didn't get a response after 10 different attempts then just wait.
	MaximumNumberOfTickerRelayRetries = 10
	MaxRelayRetries                   = 6
	SendRelayAttempts                 = 3

	// Subscription and pairing management constants
	MaxSubscriptionMapSizeWarningThreshold = 5000
	SubscriptionCleanupInterval            = 1 * time.Minute
	PairingInitializationTimeout           = 30 * time.Second
	PairingCheckInterval                   = 1 * time.Second
	BlockGapWarningThreshold               = 1000
	RelayRetryBackoffDuration              = 2 * time.Millisecond
)

Variables

View Source
var (
	Yaml_config_properties         = []string{"network-address", "chain-id", "api-interface"}
	RelaysHealthEnableFlagDefault  = true
	RelayHealthIntervalFlagDefault = 5 * time.Minute
)
View Source
var NoResponseTimeout = protocolerrors.NoResponseTimeout

NoResponseTimeout is imported from protocolerrors to avoid duplicate error code registration

Functions

func CreateRPCConsumerCobraCommand

func CreateRPCConsumerCobraCommand() *cobra.Command

func CreateTestRPCConsumerCobraCommand

func CreateTestRPCConsumerCobraCommand() *cobra.Command

func ParseEndpoints

func ParseEndpoints(viper_endpoints *viper.Viper, geolocation uint64) (endpoints []*lavasession.RPCEndpoint, err error)

Types

type AnalyticsServerAddresses

type AnalyticsServerAddresses struct {
	AddApiMethodCallsMetrics bool
	MetricsListenAddress     string
	RelayServerAddress       string
	RelayKafkaAddress        string
	RelayKafkaTopic          string
	RelayKafkaUsername       string
	RelayKafkaPassword       string
	RelayKafkaMechanism      string
	RelayKafkaTLSEnabled     bool
	RelayKafkaTLSInsecure    bool
	ReportsAddressFlag       string
	OptimizerQoSAddress      string
	OptimizerQoSListen       bool
}

type CancelableContextHolder

type CancelableContextHolder struct {
	Ctx        context.Context
	CancelFunc context.CancelFunc
}

type ConsumerRelaySender

type ConsumerRelaySender interface {
	GetChainIdAndApiInterface() (string, string)
	ParseRelay(
		ctx context.Context,
		url string,
		req string,
		connectionType string,
		dappID string,
		consumerIp string,
		metadata []pairingtypes.Metadata,
	) (protocolMessage chainlib.ProtocolMessage, err error)
	// contains filtered or unexported methods
}

type ConsumerRelayStateMachine

type ConsumerRelayStateMachine struct {
	// contains filtered or unexported fields
}

func (*ConsumerRelayStateMachine) GetDebugState

func (crsm *ConsumerRelayStateMachine) GetDebugState() bool

func (*ConsumerRelayStateMachine) GetProtocolMessage

func (crsm *ConsumerRelayStateMachine) GetProtocolMessage() chainlib.ProtocolMessage

func (*ConsumerRelayStateMachine) GetRelayTaskChannel

func (crsm *ConsumerRelayStateMachine) GetRelayTaskChannel() (chan RelayStateSendInstructions, error)

func (*ConsumerRelayStateMachine) GetSelection

func (crsm *ConsumerRelayStateMachine) GetSelection() relaycore.Selection

func (*ConsumerRelayStateMachine) GetUsedProviders

func (crsm *ConsumerRelayStateMachine) GetUsedProviders() *lavasession.UsedProviders

func (*ConsumerRelayStateMachine) Initialized

func (crsm *ConsumerRelayStateMachine) Initialized() bool

func (*ConsumerRelayStateMachine) SetRelayRetriesManager

func (crsm *ConsumerRelayStateMachine) SetRelayRetriesManager(relayRetriesManager *lavaprotocol.RelayRetriesManager)

func (*ConsumerRelayStateMachine) SetResultsChecker

func (crsm *ConsumerRelayStateMachine) SetResultsChecker(resultsChecker ResultsCheckerInf)

func (*ConsumerRelayStateMachine) UpdateBatch

func (crsm *ConsumerRelayStateMachine) UpdateBatch(err error)

type ConsumerStateTrackerInf

type ConsumerStateTrackerInf interface {
	RegisterForVersionUpdates(ctx context.Context, version *protocoltypes.Version, versionValidator updaters.VersionValidationInf)
	RegisterConsumerSessionManagerForPairingUpdates(ctx context.Context, consumerSessionManager *lavasession.ConsumerSessionManager, staticProvidersList []*lavasession.RPCStaticProviderEndpoint, backupProvidersList []*lavasession.RPCStaticProviderEndpoint)
	RegisterForSpecUpdates(ctx context.Context, specUpdatable updaters.SpecUpdatable, endpoint lavasession.RPCEndpoint) error
	RegisterForDowntimeParamsUpdates(ctx context.Context, downtimeParamsUpdatable updaters.DowntimeParamsUpdatable) error
	GetConsumerPolicy(ctx context.Context, consumerAddress, chainID string) (*plantypes.Policy, error)
	GetProtocolVersion(ctx context.Context) (*updaters.ProtocolVersionResponse, error)
	GetLatestVirtualEpoch() uint64
	LatestBlock() int64
}

type ConsumerTxSender

type ConsumerTxSender interface {
	GetConsumerPolicy(ctx context.Context, consumerAddress, chainID string) (*plantypes.Policy, error)
	GetLatestVirtualEpoch() uint64
}

type MockConsumerStateTrackerInf

type MockConsumerStateTrackerInf struct {
	// contains filtered or unexported fields
}

MockConsumerStateTrackerInf is a mock of ConsumerStateTrackerInf interface.

func NewMockConsumerStateTrackerInf

func NewMockConsumerStateTrackerInf(ctrl *gomock.Controller) *MockConsumerStateTrackerInf

NewMockConsumerStateTrackerInf creates a new mock instance.

func (*MockConsumerStateTrackerInf) EXPECT

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockConsumerStateTrackerInf) GetConsumerPolicy

func (m *MockConsumerStateTrackerInf) GetConsumerPolicy(ctx context.Context, consumerAddress, chainID string) (*types0.Policy, error)

GetConsumerPolicy mocks base method.

func (*MockConsumerStateTrackerInf) GetLatestVirtualEpoch

func (m *MockConsumerStateTrackerInf) GetLatestVirtualEpoch() uint64

GetLatestVirtualEpoch mocks base method.

func (*MockConsumerStateTrackerInf) GetProtocolVersion

GetProtocolVersion mocks base method.

func (*MockConsumerStateTrackerInf) LatestBlock added in v5.6.0

func (m *MockConsumerStateTrackerInf) LatestBlock() int64

LatestBlock mocks base method.

func (*MockConsumerStateTrackerInf) RegisterConsumerSessionManagerForPairingUpdates

func (m *MockConsumerStateTrackerInf) RegisterConsumerSessionManagerForPairingUpdates(ctx context.Context, consumerSessionManager *lavasession.ConsumerSessionManager, staticProvidersList, backupProvidersList []*lavasession.RPCStaticProviderEndpoint)

RegisterConsumerSessionManagerForPairingUpdates mocks base method.

func (*MockConsumerStateTrackerInf) RegisterForDowntimeParamsUpdates

func (m *MockConsumerStateTrackerInf) RegisterForDowntimeParamsUpdates(ctx context.Context, downtimeParamsUpdatable updaters.DowntimeParamsUpdatable) error

RegisterForDowntimeParamsUpdates mocks base method.

func (*MockConsumerStateTrackerInf) RegisterForSpecUpdates

func (m *MockConsumerStateTrackerInf) RegisterForSpecUpdates(ctx context.Context, specUpdatable updaters.SpecUpdatable, endpoint lavasession.RPCEndpoint) error

RegisterForSpecUpdates mocks base method.

func (*MockConsumerStateTrackerInf) RegisterForVersionUpdates

func (m *MockConsumerStateTrackerInf) RegisterForVersionUpdates(ctx context.Context, version *types1.Version, versionValidator updaters.VersionValidationInf)

RegisterForVersionUpdates mocks base method.

type MockConsumerStateTrackerInfMockRecorder

type MockConsumerStateTrackerInfMockRecorder struct {
	// contains filtered or unexported fields
}

MockConsumerStateTrackerInfMockRecorder is the mock recorder for MockConsumerStateTrackerInf.

func (*MockConsumerStateTrackerInfMockRecorder) GetConsumerPolicy

func (mr *MockConsumerStateTrackerInfMockRecorder) GetConsumerPolicy(ctx, consumerAddress, chainID any) *gomock.Call

GetConsumerPolicy indicates an expected call of GetConsumerPolicy.

func (*MockConsumerStateTrackerInfMockRecorder) GetLatestVirtualEpoch

func (mr *MockConsumerStateTrackerInfMockRecorder) GetLatestVirtualEpoch() *gomock.Call

GetLatestVirtualEpoch indicates an expected call of GetLatestVirtualEpoch.

func (*MockConsumerStateTrackerInfMockRecorder) GetProtocolVersion

func (mr *MockConsumerStateTrackerInfMockRecorder) GetProtocolVersion(ctx any) *gomock.Call

GetProtocolVersion indicates an expected call of GetProtocolVersion.

func (*MockConsumerStateTrackerInfMockRecorder) LatestBlock added in v5.6.0

LatestBlock indicates an expected call of LatestBlock.

func (*MockConsumerStateTrackerInfMockRecorder) RegisterConsumerSessionManagerForPairingUpdates

func (mr *MockConsumerStateTrackerInfMockRecorder) RegisterConsumerSessionManagerForPairingUpdates(ctx, consumerSessionManager, staticProvidersList, backupProvidersList any) *gomock.Call

RegisterConsumerSessionManagerForPairingUpdates indicates an expected call of RegisterConsumerSessionManagerForPairingUpdates.

func (*MockConsumerStateTrackerInfMockRecorder) RegisterForDowntimeParamsUpdates

func (mr *MockConsumerStateTrackerInfMockRecorder) RegisterForDowntimeParamsUpdates(ctx, downtimeParamsUpdatable any) *gomock.Call

RegisterForDowntimeParamsUpdates indicates an expected call of RegisterForDowntimeParamsUpdates.

func (*MockConsumerStateTrackerInfMockRecorder) RegisterForSpecUpdates

func (mr *MockConsumerStateTrackerInfMockRecorder) RegisterForSpecUpdates(ctx, specUpdatable, endpoint any) *gomock.Call

RegisterForSpecUpdates indicates an expected call of RegisterForSpecUpdates.

func (*MockConsumerStateTrackerInfMockRecorder) RegisterForVersionUpdates

func (mr *MockConsumerStateTrackerInfMockRecorder) RegisterForVersionUpdates(ctx, version, versionValidator any) *gomock.Call

RegisterForVersionUpdates indicates an expected call of RegisterForVersionUpdates.

type MockRelayerClient

type MockRelayerClient struct {
	// contains filtered or unexported fields
}

MockRelayerClient is a mock of RelayerClient interface.

func NewMockRelayerClient

func NewMockRelayerClient(ctrl *gomock.Controller) *MockRelayerClient

NewMockRelayerClient creates a new mock instance.

func (*MockRelayerClient) EXPECT

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockRelayerClient) Probe

Probe mocks base method.

func (*MockRelayerClient) Relay

Relay mocks base method.

func (*MockRelayerClient) RelaySubscribe

RelaySubscribe mocks base method.

type MockRelayerClientMockRecorder

type MockRelayerClientMockRecorder struct {
	// contains filtered or unexported fields
}

MockRelayerClientMockRecorder is the mock recorder for MockRelayerClient.

func (*MockRelayerClientMockRecorder) Probe

func (mr *MockRelayerClientMockRecorder) Probe(ctx, in any, opts ...any) *gomock.Call

Probe indicates an expected call of Probe.

func (*MockRelayerClientMockRecorder) Relay

func (mr *MockRelayerClientMockRecorder) Relay(ctx, in any, opts ...any) *gomock.Call

Relay indicates an expected call of Relay.

func (*MockRelayerClientMockRecorder) RelaySubscribe

func (mr *MockRelayerClientMockRecorder) RelaySubscribe(ctx, in any, opts ...any) *gomock.Call

RelaySubscribe indicates an expected call of RelaySubscribe.

type MockRelayerServer

type MockRelayerServer struct {
	// contains filtered or unexported fields
}

MockRelayerServer is a mock of RelayerServer interface.

func NewMockRelayerServer

func NewMockRelayerServer(ctrl *gomock.Controller) *MockRelayerServer

NewMockRelayerServer creates a new mock instance.

func (*MockRelayerServer) EXPECT

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockRelayerServer) Probe

Probe mocks base method.

func (*MockRelayerServer) Relay

Relay mocks base method.

func (*MockRelayerServer) RelaySubscribe

RelaySubscribe mocks base method.

type MockRelayerServerMockRecorder

type MockRelayerServerMockRecorder struct {
	// contains filtered or unexported fields
}

MockRelayerServerMockRecorder is the mock recorder for MockRelayerServer.

func (*MockRelayerServerMockRecorder) Probe

func (mr *MockRelayerServerMockRecorder) Probe(arg0, arg1 any) *gomock.Call

Probe indicates an expected call of Probe.

func (*MockRelayerServerMockRecorder) Relay

func (mr *MockRelayerServerMockRecorder) Relay(arg0, arg1 any) *gomock.Call

Relay indicates an expected call of Relay.

func (*MockRelayerServerMockRecorder) RelaySubscribe

func (mr *MockRelayerServerMockRecorder) RelaySubscribe(arg0, arg1 any) *gomock.Call

RelaySubscribe indicates an expected call of RelaySubscribe.

type MockRelayer_RelaySubscribeClient

type MockRelayer_RelaySubscribeClient struct {
	// contains filtered or unexported fields
}

MockRelayer_RelaySubscribeClient is a mock of Relayer_RelaySubscribeClient interface.

func NewMockRelayer_RelaySubscribeClient

func NewMockRelayer_RelaySubscribeClient(ctrl *gomock.Controller) *MockRelayer_RelaySubscribeClient

NewMockRelayer_RelaySubscribeClient creates a new mock instance.

func (*MockRelayer_RelaySubscribeClient) CloseSend

func (m *MockRelayer_RelaySubscribeClient) CloseSend() error

CloseSend mocks base method.

func (*MockRelayer_RelaySubscribeClient) Context

Context mocks base method.

func (*MockRelayer_RelaySubscribeClient) EXPECT

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockRelayer_RelaySubscribeClient) Header

Header mocks base method.

func (*MockRelayer_RelaySubscribeClient) Recv

Recv mocks base method.

func (*MockRelayer_RelaySubscribeClient) RecvMsg

func (m_2 *MockRelayer_RelaySubscribeClient) RecvMsg(m any) error

RecvMsg mocks base method.

func (*MockRelayer_RelaySubscribeClient) SendMsg

func (m_2 *MockRelayer_RelaySubscribeClient) SendMsg(m any) error

SendMsg mocks base method.

func (*MockRelayer_RelaySubscribeClient) Trailer

Trailer mocks base method.

type MockRelayer_RelaySubscribeClientMockRecorder

type MockRelayer_RelaySubscribeClientMockRecorder struct {
	// contains filtered or unexported fields
}

MockRelayer_RelaySubscribeClientMockRecorder is the mock recorder for MockRelayer_RelaySubscribeClient.

func (*MockRelayer_RelaySubscribeClientMockRecorder) CloseSend

CloseSend indicates an expected call of CloseSend.

func (*MockRelayer_RelaySubscribeClientMockRecorder) Context

Context indicates an expected call of Context.

func (*MockRelayer_RelaySubscribeClientMockRecorder) Header

Header indicates an expected call of Header.

func (*MockRelayer_RelaySubscribeClientMockRecorder) Recv

Recv indicates an expected call of Recv.

func (*MockRelayer_RelaySubscribeClientMockRecorder) RecvMsg

RecvMsg indicates an expected call of RecvMsg.

func (*MockRelayer_RelaySubscribeClientMockRecorder) SendMsg

SendMsg indicates an expected call of SendMsg.

func (*MockRelayer_RelaySubscribeClientMockRecorder) Trailer

Trailer indicates an expected call of Trailer.

type MockRelayer_RelaySubscribeServer

type MockRelayer_RelaySubscribeServer struct {
	// contains filtered or unexported fields
}

MockRelayer_RelaySubscribeServer is a mock of Relayer_RelaySubscribeServer interface.

func NewMockRelayer_RelaySubscribeServer

func NewMockRelayer_RelaySubscribeServer(ctrl *gomock.Controller) *MockRelayer_RelaySubscribeServer

NewMockRelayer_RelaySubscribeServer creates a new mock instance.

func (*MockRelayer_RelaySubscribeServer) Context

Context mocks base method.

func (*MockRelayer_RelaySubscribeServer) EXPECT

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockRelayer_RelaySubscribeServer) RecvMsg

func (m_2 *MockRelayer_RelaySubscribeServer) RecvMsg(m any) error

RecvMsg mocks base method.

func (*MockRelayer_RelaySubscribeServer) Send

Send mocks base method.

func (*MockRelayer_RelaySubscribeServer) SendHeader

func (m *MockRelayer_RelaySubscribeServer) SendHeader(arg0 metadata.MD) error

SendHeader mocks base method.

func (*MockRelayer_RelaySubscribeServer) SendMsg

func (m_2 *MockRelayer_RelaySubscribeServer) SendMsg(m any) error

SendMsg mocks base method.

func (*MockRelayer_RelaySubscribeServer) SetHeader

SetHeader mocks base method.

func (*MockRelayer_RelaySubscribeServer) SetTrailer

func (m *MockRelayer_RelaySubscribeServer) SetTrailer(arg0 metadata.MD)

SetTrailer mocks base method.

type MockRelayer_RelaySubscribeServerMockRecorder

type MockRelayer_RelaySubscribeServerMockRecorder struct {
	// contains filtered or unexported fields
}

MockRelayer_RelaySubscribeServerMockRecorder is the mock recorder for MockRelayer_RelaySubscribeServer.

func (*MockRelayer_RelaySubscribeServerMockRecorder) Context

Context indicates an expected call of Context.

func (*MockRelayer_RelaySubscribeServerMockRecorder) RecvMsg

RecvMsg indicates an expected call of RecvMsg.

func (*MockRelayer_RelaySubscribeServerMockRecorder) Send

Send indicates an expected call of Send.

func (*MockRelayer_RelaySubscribeServerMockRecorder) SendHeader

SendHeader indicates an expected call of SendHeader.

func (*MockRelayer_RelaySubscribeServerMockRecorder) SendMsg

SendMsg indicates an expected call of SendMsg.

func (*MockRelayer_RelaySubscribeServerMockRecorder) SetHeader

SetHeader indicates an expected call of SetHeader.

func (*MockRelayer_RelaySubscribeServerMockRecorder) SetTrailer

SetTrailer indicates an expected call of SetTrailer.

type RPCConsumer

type RPCConsumer struct {
	// contains filtered or unexported fields
}

func (*RPCConsumer) CreateConsumerEndpoint

func (rpcc *RPCConsumer) CreateConsumerEndpoint(
	ctx context.Context,
	rpcEndpoint *lavasession.RPCEndpoint,
	errCh chan error,
	consumerAddr sdk.AccAddress,
	consumerStateTracker *statetracker.ConsumerStateTracker,
	policyUpdaters *common.SafeSyncMap[string, *updaters.PolicyUpdater],
	optimizers *common.SafeSyncMap[string, *provideroptimizer.ProviderOptimizer],
	consumerConsistencies *common.SafeSyncMap[string, relaycore.Consistency],
	chainMutexes map[string]*sync.Mutex,
	options *rpcConsumerStartOptions,
	privKey *secp256k1.PrivateKey,
	lavaChainID string,
	rpcConsumerMetrics *metrics.RPCConsumerLogs,
	consumerReportsManager *metrics.ConsumerReportsClient,
	consumerOptimizerQoSClient *metrics.ConsumerOptimizerQoSClient,
	consumerMetricsManager *metrics.ConsumerMetricsManager,
	relaysMonitorAggregator *metrics.RelaysMonitorAggregator,
) (*RPCConsumerServer, error)

func (*RPCConsumer) Start

func (rpcc *RPCConsumer) Start(ctx context.Context, options *rpcConsumerStartOptions) (err error)

spawns a new RPCConsumer server with all it's processes and internals ready for communications

type RPCConsumerServer

type RPCConsumerServer struct {
	ConsumerAddress sdk.AccAddress
	// contains filtered or unexported fields
}

implements Relay Sender interfaced and uses an ChainListener to get it called

func (*RPCConsumerServer) CancelSubscriptionContext

func (rpccs *RPCConsumerServer) CancelSubscriptionContext(subscriptionKey string)

func (*RPCConsumerServer) CreateDappKey

func (rpccs *RPCConsumerServer) CreateDappKey(userData common.UserData) string

func (*RPCConsumerServer) GetChainIdAndApiInterface

func (rpccs *RPCConsumerServer) GetChainIdAndApiInterface() (string, string)

func (*RPCConsumerServer) GetListeningAddress

func (rpccs *RPCConsumerServer) GetListeningAddress() string

func (*RPCConsumerServer) HandleDirectiveHeadersForMessage

func (rpccs *RPCConsumerServer) HandleDirectiveHeadersForMessage(chainMessage chainlib.ChainMessage, directiveHeaders map[string]string)

func (*RPCConsumerServer) IsHealthy

func (rpccs *RPCConsumerServer) IsHealthy() bool

func (*RPCConsumerServer) IsInitialized

func (rpccs *RPCConsumerServer) IsInitialized() bool

func (*RPCConsumerServer) LavaDirectiveHeaders

func (rpccs *RPCConsumerServer) LavaDirectiveHeaders(metadata []pairingtypes.Metadata) ([]pairingtypes.Metadata, map[string]string)

func (*RPCConsumerServer) ParseRelay

func (rpccs *RPCConsumerServer) ParseRelay(
	ctx context.Context,
	url string,
	req string,
	connectionType string,
	dappID string,
	consumerIp string,
	metadata []pairingtypes.Metadata,
) (protocolMessage chainlib.ProtocolMessage, err error)

func (*RPCConsumerServer) ProcessRelaySend

func (rpccs *RPCConsumerServer) ProcessRelaySend(ctx context.Context, protocolMessage chainlib.ProtocolMessage, analytics *metrics.RelayMetrics) (*relaycore.RelayProcessor, error)

func (*RPCConsumerServer) RoundTrip

func (rpccs *RPCConsumerServer) RoundTrip(req *http.Request) (*http.Response, error)

func (*RPCConsumerServer) SendParsedRelay

func (rpccs *RPCConsumerServer) SendParsedRelay(
	ctx context.Context,
	analytics *metrics.RelayMetrics,
	protocolMessage chainlib.ProtocolMessage,
) (relayResult *common.RelayResult, errRet error)

func (*RPCConsumerServer) SendRelay

func (rpccs *RPCConsumerServer) SendRelay(
	ctx context.Context,
	url string,
	req string,
	connectionType string,
	dappID string,
	consumerIp string,
	analytics *metrics.RelayMetrics,
	metadata []pairingtypes.Metadata,
) (relayResult *common.RelayResult, errRet error)

func (*RPCConsumerServer) ServeRPCRequests

func (rpccs *RPCConsumerServer) ServeRPCRequests(ctx context.Context, listenEndpoint *lavasession.RPCEndpoint,
	consumerStateTracker ConsumerStateTrackerInf,
	chainParser chainlib.ChainParser,
	consumerSessionManager *lavasession.ConsumerSessionManager,
	requiredResponses int,
	privKey *btcec.PrivateKey,
	lavaChainID string,
	cache *performance.Cache,
	rpcConsumerLogs *metrics.RPCConsumerLogs,
	consumerAddress sdk.AccAddress,
	consumerConsistency relaycore.Consistency,
	relaysMonitor *metrics.RelaysMonitor,
	cmdFlags common.ConsumerCmdFlags,
	sharedState bool,
	reporter metrics.Reporter,
	consumerWsSubscriptionManager *chainlib.ConsumerWSSubscriptionManager,
) (err error)

func (*RPCConsumerServer) SetConsistencySeenBlock

func (rpccs *RPCConsumerServer) SetConsistencySeenBlock(blockSeen int64, key string)

type RelayProcessorForHeaders added in v5.6.0

type RelayProcessorForHeaders interface {
	GetQuorumParams() common.QuorumParams
	GetResultsData() ([]common.RelayResult, []common.RelayResult, []relaycore.RelayError)
	GetStatefulRelayTargets() []string
	GetUsedProviders() *lavasession.UsedProviders
	NodeErrors() (ret []common.RelayResult)
}

RelayProcessorForHeaders interface for methods used by appendHeadersToRelayResult

type RelayStateMachine

type RelayStateMachine = relaycore.RelayStateMachine

Using interfaces from relaycore

func NewRelayStateMachine

func NewRelayStateMachine(
	ctx context.Context,
	usedProviders *lavasession.UsedProviders,
	relaySender ConsumerRelaySender,
	protocolMessage chainlib.ProtocolMessage,
	analytics *metrics.RelayMetrics,
	debugRelays bool,
	tickerMetricSetter tickerMetricSetterInf,
) RelayStateMachine

type RelayStateSendInstructions

type RelayStateSendInstructions = relaycore.RelayStateSendInstructions

Using RelayStateSendInstructions from relaycore

type ResultsCheckerInf

type ResultsCheckerInf = relaycore.ResultsCheckerInf

Using interfaces from relaycore

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL