rpcprovider

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: 70 Imported by: 0

Documentation

Overview

Code generated by MockGen. DO NOT EDIT. Source: protocol/rpcprovider/provider_listener.go

Generated by this command:

mockgen -source=protocol/rpcprovider/provider_listener.go -destination protocol/rpcprovider/provider_listener_mock.go -package rpcprovider

Package rpcprovider is a generated GoMock package.

Index

Constants

View Source
const (
	HealthCheckURLPathFlagName    = "health-check-url-path"
	HealthCheckURLPathFlagDefault = "/lava/health"
)
View Source
const (
	ChainTrackerDefaultMemory  = 100
	DEFAULT_ALLOWED_MISSING_CU = 0.2

	ShardIDFlagName           = "shard-id"
	StickinessHeaderName      = "sticky-header"
	DefaultShardID       uint = 0

	CacheMaxCost          = 10 * 1024 // each item cost would be 1
	CacheNumCounters      = 1000      // expect 2000 items
	VerificationsTTL      = 30 * time.Second
	VerificationsCacheKey = "verifications"
)
View Source
const (
	SpecValidationIntervalFlagName               = "spec-validation-interval"
	SpecValidationIntervalDisabledChainsFlagName = "spec-validation-interval-disabled-chains"
)
View Source
const (
	RPCProviderAddressHeader = "Lava-Provider-Address"
)

Variables

View Source
var (
	Yaml_config_properties     = []string{"network-address.address", "chain-id", "api-interface", "node-urls.url"}
	DefaultRPCProviderFileName = "rpcprovider.yml"

	RelaysHealthEnableFlagDefault  = true
	RelayHealthIntervalFlagDefault = 5 * time.Minute
)
View Source
var (
	SpecValidationInterval               = 3 * time.Hour
	SpecValidationIntervalDisabledChains = 3 * time.Minute
)
View Source
var (
	RPCProviderStickinessHeaderName = "X-Node-Sticky"
)

Functions

func CreateRPCProviderCobraCommand

func CreateRPCProviderCobraCommand() *cobra.Command

func CreateTestRPCProviderCobraCommand

func CreateTestRPCProviderCobraCommand() *cobra.Command

func GetAllNodeUrlsInternalPaths

func GetAllNodeUrlsInternalPaths(nodeUrls []common.NodeUrl) []string

func ParseEndpoints

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

func ParseEndpointsCustomName

func ParseEndpointsCustomName(viper_endpoints *viper.Viper, endpointsConfigName string, geolocation uint64) (endpoints []*lavasession.RPCProviderEndpoint, err error)

func ParseStaticProviderEndpoints added in v5.6.0

func ParseStaticProviderEndpoints(viper_endpoints *viper.Viper, endpointsConfigName string, geolocation uint64) (endpoints []*lavasession.RPCStaticProviderEndpoint, err error)

ParseStaticProviderEndpoints parses static provider configuration into extended endpoint types

func PerformCORSCheck

func PerformCORSCheck(endpoint epochstoragetypes.Endpoint) error

Types

type BucketType added in v5.6.0

type BucketType string

BucketType represents the resource bucket category for request classification

const (
	// BucketHeavy represents high-resource requests (high CU, debug/trace methods)
	BucketHeavy BucketType = "heavy"
	// BucketNormal represents standard requests
	BucketNormal BucketType = "normal"
)

func (BucketType) String added in v5.6.0

func (b BucketType) String() string

String returns the string representation of the bucket type

type IVerificationsStatus added in v5.1.0

type IVerificationsStatus interface {
	GetVerificationsStatus() (status []*pairingtypes.Verification)
}

type MethodConfig added in v5.6.0

type MethodConfig struct {
	MaxConcurrent int64         // Max concurrent executions
	QueueSize     int           // Max queued requests
	Timeout       time.Duration // Max time in queue
}

MethodConfig defines resource limits for specific method types

type MockRelayReceiver

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

MockRelayReceiver is a mock of RelayReceiver interface.

func NewMockRelayReceiver

func NewMockRelayReceiver(ctrl *gomock.Controller) *MockRelayReceiver

NewMockRelayReceiver creates a new mock instance.

func (*MockRelayReceiver) EXPECT

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

func (*MockRelayReceiver) Probe

Probe mocks base method.

func (*MockRelayReceiver) Relay

Relay mocks base method.

func (*MockRelayReceiver) RelaySubscribe

RelaySubscribe mocks base method.

type MockRelayReceiverMockRecorder

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

MockRelayReceiverMockRecorder is the mock recorder for MockRelayReceiver.

func (*MockRelayReceiverMockRecorder) Probe

func (mr *MockRelayReceiverMockRecorder) Probe(ctx, probeReq any) *gomock.Call

Probe indicates an expected call of Probe.

func (*MockRelayReceiverMockRecorder) Relay

func (mr *MockRelayReceiverMockRecorder) Relay(ctx, request any) *gomock.Call

Relay indicates an expected call of Relay.

func (*MockRelayReceiverMockRecorder) RelaySubscribe

func (mr *MockRelayReceiverMockRecorder) RelaySubscribe(request, srv any) *gomock.Call

RelaySubscribe indicates an expected call of RelaySubscribe.

type ProviderListener

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

func NewProviderListener

func NewProviderListener(ctx context.Context, networkAddress lavasession.NetworkAddressData, healthCheckPath string) *ProviderListener

func (*ProviderListener) Key

func (pl *ProviderListener) Key() string

func (*ProviderListener) RegisterReceiver

func (pl *ProviderListener) RegisterReceiver(existingReceiver RelayReceiver, endpoint *lavasession.RPCProviderEndpoint) error

func (*ProviderListener) Shutdown

func (pl *ProviderListener) Shutdown(shutdownCtx context.Context) error

type ProviderLoadManager

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

func NewProviderLoadManager

func NewProviderLoadManager(rateLimitThreshold uint64) *ProviderLoadManager

type ProviderPolicy

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

used to call SetPolicy in base chain parser so we are allowed to run verifications on the addons and extensions

func GetAllAddonsAndExtensionsFromNodeUrlSlice

func GetAllAddonsAndExtensionsFromNodeUrlSlice(nodeUrls []common.NodeUrl) *ProviderPolicy

func (*ProviderPolicy) GetSupportedAddons

func (pp *ProviderPolicy) GetSupportedAddons(specID string) (addons []string, err error)

func (*ProviderPolicy) GetSupportedExtensions

func (pp *ProviderPolicy) GetSupportedExtensions(specID string) (extensions []epochstorage.EndpointService, err error)

type ProviderRelaySender

type ProviderRelaySender interface {
	SendNodeMsg(ctx context.Context, ch chan interface{}, chainMessage chainlib.ChainMessageForSend, extensions []string) (relayReply *chainlib.RelayReplyWrapper, subscriptionID string, relayReplyServer *rpcclient.ClientSubscription, proxyUrl common.NodeUrl, chainId string, err error)
}

type ProviderStateMachine

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

func NewProviderStateMachine

func NewProviderStateMachine(chainId string, relayRetriesManager lavaprotocol.RelayRetriesManagerInf, relaySender ProviderRelaySender, numberOfRetries int, testModeConfig *TestModeConfig) *ProviderStateMachine

func (*ProviderStateMachine) SendNodeMessage

type ProviderStateTrackerInf

type ProviderStateTrackerInf interface {
	RegisterForVersionUpdates(ctx context.Context, version *protocoltypes.Version, versionValidator updaters.VersionValidationInf)
	RegisterForSpecUpdates(ctx context.Context, specUpdatable updaters.SpecUpdatable, endpoint lavasession.RPCEndpoint) error
	RegisterForSpecVerifications(ctx context.Context, specVerifier updaters.SpecVerifier, chainId string) error
	RegisterForEpochUpdates(ctx context.Context, epochUpdatable updaters.EpochUpdatable)
	RegisterForDowntimeParamsUpdates(ctx context.Context, downtimeParamsUpdatable updaters.DowntimeParamsUpdatable) error
	TxRelayPayment(ctx context.Context, relayRequests []*pairingtypes.RelaySession, description string, latestBlocks []*pairingtypes.LatestBlockReport) error
	LatestBlock() int64
	GetMaxCuForUser(ctx context.Context, consumerAddress, chainID string, epocu uint64) (maxCu uint64, err error)
	VerifyPairing(ctx context.Context, consumerAddress, providerAddress string, epoch uint64, chainID string) (valid bool, total int64, projectId string, err error)
	GetEpochSize(ctx context.Context) (uint64, error)
	EarliestBlockInMemory(ctx context.Context) (uint64, error)
	RegisterPaymentUpdatableForPayments(ctx context.Context, paymentUpdatable updaters.PaymentUpdatable)
	GetRecommendedEpochNumToCollectPayment(ctx context.Context) (uint64, error)
	GetEpochSizeMultipliedByRecommendedEpochNumToCollectPayment(ctx context.Context) (uint64, error)
	GetProtocolVersion(ctx context.Context) (*updaters.ProtocolVersionResponse, error)
	GetVirtualEpoch(epoch uint64) uint64
	GetAverageBlockTime() time.Duration
}

type RPCProvider

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

func (*RPCProvider) AddVerificationStatusFetcher added in v5.1.0

func (rpcp *RPCProvider) AddVerificationStatusFetcher(fetcher IVerificationsStatus)

func (*RPCProvider) GetLatestBlockNumForSpec

func (rpcp *RPCProvider) GetLatestBlockNumForSpec(specID string) int64

func (*RPCProvider) GetVerificationsStatus added in v5.1.0

func (rpcp *RPCProvider) GetVerificationsStatus() []*pairingtypes.Verification

func (*RPCProvider) RetryDisabledEndpoints

func (rpcp *RPCProvider) RetryDisabledEndpoints(disabledEndpoints []*lavasession.RPCProviderEndpoint, specValidator *SpecValidator, retryCount int)

func (*RPCProvider) SetupEndpoint

func (rpcp *RPCProvider) SetupEndpoint(ctx context.Context, rpcProviderEndpoint *lavasession.RPCProviderEndpoint, specValidator *SpecValidator) error

func (*RPCProvider) SetupProviderEndpoints

func (rpcp *RPCProvider) SetupProviderEndpoints(rpcProviderEndpoints []*lavasession.RPCProviderEndpoint, specValidator *SpecValidator, parallel bool) (disabledEndpointsRet []*lavasession.RPCProviderEndpoint)

func (*RPCProvider) Start

func (rpcp *RPCProvider) Start(options *rpcProviderStartOptions) (err error)

type RPCProviderServer

type RPCProviderServer struct {
	StaticProvider bool
	// contains filtered or unexported fields
}

func (*RPCProviderServer) ExtractConsumerAddress

func (rpcps *RPCProviderServer) ExtractConsumerAddress(ctx context.Context, relaySession *pairingtypes.RelaySession) (extractedConsumerAddress sdk.AccAddress, err error)

func (*RPCProviderServer) GetBlockDataForOptimisticFetch

func (rpcps *RPCProviderServer) GetBlockDataForOptimisticFetch(ctx context.Context, relayBaseTimeout time.Duration, requiredProofBlock int64, blockDistanceToFinalization uint32, blocksInFinalizationData uint32, averageBlockTime time.Duration) (latestBlock int64, requestedHashes []*chaintracker.BlockStore, err error)

func (*RPCProviderServer) GetLatestBlockData

func (rpcps *RPCProviderServer) GetLatestBlockData(ctx context.Context, blockDistanceToFinalization uint32, blocksInFinalizationData uint32) (latestBlock int64, requestedHashes []*chaintracker.BlockStore, changeTime time.Time, err error)

func (*RPCProviderServer) GetParametersForCache added in v5.7.0

func (rpcps *RPCProviderServer) GetParametersForCache(ctx context.Context, request *pairingtypes.RelayRequest, chainMsg chainlib.ChainMessage, blockDistanceToFinalization uint32) (latestBlock int64, requestedBlockHash []byte, finalized bool)

GetParametersForCache calculates cache parameters without DR overhead This extracts only the cache-relevant logic that was previously inside GetParametersForRelayDataReliability

func (*RPCProviderServer) IsHealthy

func (rpcps *RPCProviderServer) IsHealthy() bool

func (*RPCProviderServer) Probe

func (*RPCProviderServer) Relay

func (rpcps *RPCProviderServer) Relay(ctx context.Context, request *pairingtypes.RelayRequest) (reply *pairingtypes.RelayReply, err error)

function used to handle relay requests from a consumer, it is called by a provider_listener by calling RegisterReceiver

func (*RPCProviderServer) RelaySubscribe

func (*RPCProviderServer) SendProof

func (rpcps *RPCProviderServer) SendProof(ctx context.Context, epoch uint64, request *pairingtypes.RelayRequest, consumerAddress sdk.AccAddress, apiInterface string) error

func (*RPCProviderServer) ServeRPCRequests

func (rpcps *RPCProviderServer) ServeRPCRequests(
	ctx context.Context, rpcProviderEndpoint *lavasession.RPCProviderEndpoint,
	chainParser chainlib.ChainParser,
	rewardServer RewardServerInf,
	providerSessionManager *lavasession.ProviderSessionManager,
	chainTracker chaintracker.IChainTracker,
	privKey *btcec.PrivateKey,
	cache *performance.Cache,
	cacheLatestBlockEnabled bool,
	chainRouter chainlib.ChainRouter,
	stateTracker StateTrackerInf,
	providerAddress sdk.AccAddress,
	lavaChainID string,
	allowedMissingCUThreshold float64,
	providerMetrics *metrics.ProviderMetrics,
	relaysMonitor *metrics.RelaysMonitor,
	providerNodeSubscriptionManager *chainlib.ProviderNodeSubscriptionManager,
	staticProvider bool,
	providerLoadManager *ProviderLoadManager,
	verificationsStatusGetter IVerificationsStatus,
	numberOfRetries int,
	testModeConfig *TestModeConfig,
	resourceLimiter *ResourceLimiter,
)

func (*RPCProviderServer) SetProviderUniqueId

func (rpcps *RPCProviderServer) SetProviderUniqueId(uniqueId string)

func (*RPCProviderServer) SleepUntilTimeOrConditionReached

func (rpcps *RPCProviderServer) SleepUntilTimeOrConditionReached(ctx context.Context, queryTime time.Duration, condition func() bool) (sleepTime time.Duration)

func (*RPCProviderServer) TryRelaySubscribe

func (rpcps *RPCProviderServer) TryRelaySubscribe(ctx context.Context, requestBlockHeight uint64, request *pairingtypes.RelayRequest, srv pairingtypes.Relayer_RelaySubscribeServer, chainMessage chainlib.ChainMessage, consumerAddress sdk.AccAddress, relaySession *lavasession.SingleProviderSession, relayNumber uint64) (subscribedSuccessfully bool, errRet error)

func (*RPCProviderServer) TryRelayUnsubscribe

func (rpcps *RPCProviderServer) TryRelayUnsubscribe(ctx context.Context, request *pairingtypes.RelayRequest, consumerAddress sdk.AccAddress, chainMessage chainlib.ChainMessage) (*pairingtypes.RelayReply, error)

func (*RPCProviderServer) TryRelayWithWrapper added in v5.5.0

func (rpcps *RPCProviderServer) TryRelayWithWrapper(ctx context.Context, request *pairingtypes.RelayRequest, consumerAddr sdk.AccAddress, chainMsg chainlib.ChainMessage) (*pairingtypes.RelayReply, *chainlib.RelayReplyWrapper, error)

func (*RPCProviderServer) ValidateAddonsExtensions

func (rpcps *RPCProviderServer) ValidateAddonsExtensions(addon string, extensions []string, chainMessage chainlib.ChainMessage) error

func (*RPCProviderServer) ValidateRequest

func (rpcps *RPCProviderServer) ValidateRequest(chainMessage chainlib.ChainMessage, request *pairingtypes.RelayRequest, ctx context.Context) error

type ResourceLimiter added in v5.6.0

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

ResourceLimiter manages concurrent execution based on method type

func NewResourceLimiter added in v5.6.0

func NewResourceLimiter(enabled bool, endpointName string, cuThreshold uint64, heavyMaxConcurrent int64, heavyQueueSize int, normalMaxConcurrent int64) *ResourceLimiter

NewResourceLimiter creates a new resource limiter endpointName: Unique name for this provider endpoint (used for metric differentiation) cuThreshold: CU value above which methods are classified as "heavy" (recommended: 100, minimum: 10) heavyMaxConcurrent: Max concurrent heavy (high-CU/debug/trace) method calls heavyQueueSize: Queue size for heavy methods normalMaxConcurrent: Max concurrent normal method calls Note: cuThreshold should be validated before calling this function

func (*ResourceLimiter) Acquire added in v5.6.0

func (rl *ResourceLimiter) Acquire(ctx context.Context, computeUnits uint64, methodName string, execute func() error) error

Acquire attempts to acquire resources for executing a request

type ResourceLimiterMetrics added in v5.6.0

type ResourceLimiterMetrics struct {
	TotalRejected  uint64
	TotalQueued    uint64
	TotalTimeout   uint64
	HeavyInFlight  uint64
	NormalInFlight uint64
	// contains filtered or unexported fields
}

type RewardServerInf

type RewardServerInf interface {
	SendNewProof(ctx context.Context, proof *pairingtypes.RelaySession, epoch uint64, consumerAddr, apiInterface string) (existingCU uint64, updatedWithProof bool)
	SubscribeStarted(consumer string, epoch uint64, subscribeID string)
	SubscribeEnded(consumer string, epoch uint64, subscribeID string)
}

type SpecValidator

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

func NewSpecValidator

func NewSpecValidator() *SpecValidator

func (*SpecValidator) Active

func (sv *SpecValidator) Active() bool

func (*SpecValidator) AddChainFetcher

func (sv *SpecValidator) AddChainFetcher(ctx context.Context, chainFetcher *chainlib.IChainFetcher, chainId string) error

func (*SpecValidator) AddRPCProviderListener

func (sv *SpecValidator) AddRPCProviderListener(address string, providerListener *ProviderListener)

func (*SpecValidator) GetUniqueName

func (sv *SpecValidator) GetUniqueName() string

func (*SpecValidator) Start

func (sv *SpecValidator) Start(ctx context.Context)

func (*SpecValidator) VerifySpec

func (sv *SpecValidator) VerifySpec(spec spectypes.Spec)

type StateTrackerInf

type StateTrackerInf interface {
	LatestBlock() int64
	GetMaxCuForUser(ctx context.Context, consumerAddress, chainID string, epocu uint64) (maxCu uint64, err error)
	VerifyPairing(ctx context.Context, consumerAddress, providerAddress string, epoch uint64, chainID string) (valid bool, total int64, projectId string, err error)
	GetVirtualEpoch(epoch uint64) uint64
}

type TestModeConfig added in v5.5.0

type TestModeConfig struct {
	TestMode     bool                    `json:"test_mode"`
	Responses    map[string]TestResponse `json:"responses"`
	ResponseFile string                  `json:"response_file"`
}

TestModeConfig represents the configuration for test mode responses

type TestModeContextKey added in v5.5.0

type TestModeContextKey struct{}

TestModeContextKey is used to pass test mode context through the call chain

type TestResponse added in v5.5.0

type TestResponse struct {
	SuccessReply           string  `json:"success_reply"`
	ErrorReply             string  `json:"error_reply"`
	RateLimitReply         string  `json:"rate_limit_reply"`
	UnsupportedMethodReply string  `json:"unsupported_method_reply"`
	SuccessProbability     float64 `json:"success_probability"`
	ErrorProbability       float64 `json:"error_probability"`
	RateLimitProbability   float64 `json:"rate_limit_probability"`
	UnsupportedProbability float64 `json:"unsupported_probability"`
}

TestResponse represents a test response configuration for a specific API method

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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