Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: PRT - fireblocks with UTXO support #1949

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
7c637a0
fixing dependencies for getpairing errors on consumer side.
ranlavanet Aug 25, 2024
01043de
add onchain provider
ranlavanet Aug 25, 2024
af17321
PRT - add support for addons + extensions without consumer policy
ranlavanet Sep 25, 2024
bc8141e
Merge branch 'PRT-add-offline-policy' into PRT-add-offline-policy-v-4
ranlavanet Oct 24, 2024
8f4483e
chore: PRT - fix killing service on static providers not valid
ranlavanet Oct 24, 2024
6b873a7
Merge branch 'main' into PRT-add-offline-policy-v-4
shleikes Nov 25, 2024
bd975c5
Remove duplicated flag
shleikes Nov 25, 2024
846b6a2
Remove unused flag
shleikes Nov 25, 2024
222c873
Merge branch 'main' into PRT-add-offline-policy-v-4
shleikes Nov 25, 2024
b6c136c
Merge branch 'main' into PRT-add-offline-policy-v-4-2-1
shleikes Dec 15, 2024
38fc112
Fix lint
shleikes Dec 15, 2024
b1c48ad
Add flag to disable websocket verification
shleikes Dec 16, 2024
8f936e7
Merge branch 'main' into PRT-add-offline-policy-v-4-2-1
shleikes Dec 16, 2024
9e8d0d6
Merge branch 'main' into PRT-add-offline-policy-v-4-2-1
shleikes Dec 16, 2024
558863a
Update go version
shleikes Dec 16, 2024
6c60e63
Added periodic provider probe
fbjohnny Dec 16, 2024
473264d
Merge pull request #1844 from fbjohnny/FB-add-provider-probe-to-metrics
shleikes Dec 16, 2024
1fb86df
Merge branch 'main' into PRT-add-offline-policy-v-4-2-1
shleikes Dec 17, 2024
9e0a80b
Added provider_endpoint to lava_consumer_latest_provider_block
fbjohnny Dec 19, 2024
f2b25d1
Merge pull request #1855 from fbjohnny/FB-add-provider-endpoint_to_la…
shleikes Dec 19, 2024
af6f45e
feat: Added provider_endpoint to QOS metrics
fbjohnny Dec 25, 2024
b300a99
Merge pull request #1868 from fbjohnny/FB-add-provider-endpoint_to_qo…
shleikes Dec 25, 2024
8eeb943
Merge branch 'main' into PRT-fb-branch-with-offline-policy-v-4-2-4
shleikes Dec 30, 2024
d191cdb
Merge remote-tracking branch 'origin/PRT-add-offline-policy-v-4-2-1' …
shleikes Dec 30, 2024
282e870
Merge branch 'main' into PRT-fb-branch-with-offline-policy-v-4-2-4
shleikes Jan 2, 2025
f364b35
Merge branch 'main' into PRT-fb-branch-with-offline-policy-v-4-2-5
shleikes Jan 7, 2025
103f6a9
Merge branch 'main' into PRT-fb-branch-with-offline-policy-v-4-2-5
shleikes Jan 9, 2025
273414c
Merge branch 'main' into PRT-fb-branch-with-offline-policy-v-4-2-5
shleikes Jan 12, 2025
d4fffab
Switch one spam log to debug
shleikes Jan 14, 2025
aa00fde
Merge branch 'main' into PRT-fb-branch-with-offline-policy-v-4-2-5
shleikes Jan 15, 2025
453fce8
added lava_consumer_provider_blocked metric
fbjohnny Jan 20, 2025
be3ae1c
fixing config to include archive
ranlavanet Jan 20, 2025
a74e406
config updated
ranlavanet Jan 20, 2025
625759b
Merge branch 'PRT-add-lava-consumer-blocked-providers-metrics' into F…
ranlavanet Jan 20, 2025
3164628
Merge pull request #1918 from fbjohnny/FB-add-lava_consumer_blocked_p…
ranlavanet Jan 20, 2025
bdafe1a
fix a few issues with locks on metrics
ranlavanet Jan 20, 2025
09931b8
Merge branch 'main' into PRT-fb-branch-with-offline-policy-v-4-2-5
shleikes Jan 21, 2025
aad9f4d
Merge branch 'PRT-add-lava-consumer-blocked-providers-metrics' into P…
shleikes Jan 21, 2025
2ec8e30
Merge pull request #1920 from lavanet/PRT-add-lava-consumer-blocked-p…
ranlavanet Jan 21, 2025
5d350ef
fix: PRT - eth client upgrade to latest version.
ranlavanet Feb 2, 2025
c3de1bb
fix lint
ranlavanet Feb 2, 2025
17f7a9c
fix e2e
ranlavanet Feb 2, 2025
03eb507
resolve conflict
ranlavanet Feb 2, 2025
47fb0f0
resolve conflicts p2
ranlavanet Feb 2, 2025
5219891
fix conflict p3
ranlavanet Feb 2, 2025
ee9d5ed
fix conflict p4
ranlavanet Feb 2, 2025
6ee1821
resolve conflict
ranlavanet Feb 2, 2025
ae97b24
resolve conflict p2
ranlavanet Feb 2, 2025
d237641
fix
ranlavanet Feb 2, 2025
864f7ad
lint
ranlavanet Feb 2, 2025
6d52cb8
chore: PRT - FB release 05/02/25 - DO NOT MERGE
ranlavanet Feb 5, 2025
058c7e7
Merge branch 'main' into PRT-fireblocks-with-updated-eth-client-05-02-25
ranlavanet Feb 5, 2025
a2ac9d9
Merge branch 'main' into PRT-fireblocks-with-updated-eth-client-05-02-25
ranlavanet Feb 5, 2025
0e8099c
feat: PRT - Add QOS reputation for static providers.
ranlavanet Feb 5, 2025
bccd504
Merge branch 'main' into PRT-fireblocks-with-updated-eth-client-05-02-25
ranlavanet Feb 5, 2025
01e8822
Merge branch 'main' into PRT-fireblocks-with-updated-eth-client-05-02-25
ranlavanet Feb 6, 2025
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
11 changes: 9 additions & 2 deletions protocol/chainlib/base_chain_parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@ import (
spectypes "github.com/lavanet/lava/v5/x/spec/types"
)

var AllowMissingApisByDefault = true
var (
SkipPolicyVerification = false
AllowMissingApisByDefault = true
SkipWebsocketVerification = false
)

type PolicyInf interface {
GetSupportedAddons(specID string) (addons []string, err error)
Expand Down Expand Up @@ -98,12 +102,15 @@ func (bcp *BaseChainParser) isAddon(addon string) bool {
}

func (bcp *BaseChainParser) isExtension(extension string) bool {
return bcp.extensionParser.AllowedExtension(extension)
return bcp.extensionParser.AllowedExtension(extension, SkipPolicyVerification)
}

// use while bcp locked.
func (bcp *BaseChainParser) validateAddons(nodeMessage *baseChainMessageContainer) error {
var addon string
if SkipPolicyVerification {
return nil
}
if addon = GetAddon(nodeMessage); addon != "" { // check we have an addon
if allowed := bcp.allowedAddons[addon]; !allowed { // check addon is allowed
return utils.LavaFormatError("consumer policy does not allow addon", nil,
Expand Down
2 changes: 1 addition & 1 deletion protocol/chainlib/chain_fetcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ func getExtensionsForVerification(verification VerificationContainer, chainParse
ConnectionType: verification.ConnectionType,
}

if chainParser.IsTagInCollection(spectypes.FUNCTION_TAG_SUBSCRIBE, collectionKey) {
if chainParser.IsTagInCollection(spectypes.FUNCTION_TAG_SUBSCRIBE, collectionKey) && !SkipWebsocketVerification {
if verification.Extension == "" {
extensions = []string{WebSocketExtension}
} else {
Expand Down
2 changes: 1 addition & 1 deletion protocol/chainlib/chain_router.go
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ func newChainRouter(ctx context.Context, nConns uint, rpcProviderEndpoint lavase
break
}
}
if !IgnoreWsEnforcementForTestCommands && hasSubscriptionInSpec && apiCollection.Enabled && !webSocketSupported {
if !IgnoreWsEnforcementForTestCommands && hasSubscriptionInSpec && apiCollection.Enabled && !webSocketSupported && !SkipWebsocketVerification {
return nil, utils.LavaFormatError("subscriptions are applicable for this chain, but websocket is not provided in 'supported' map. By not setting ws/wss your provider wont be able to accept ws subscriptions, therefore might receive less rewards and lower QOS score.", nil,
utils.LogAttr("apiInterface", apiCollection.CollectionData.ApiInterface),
utils.LogAttr("supportedMap", supportedMap),
Expand Down
4 changes: 2 additions & 2 deletions protocol/chainlib/extensionslib/extension_parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ func (ep *ExtensionParser) GetConfiguredExtensions() map[ExtensionKey]*spectypes
return ep.configuredExtensions
}

func (ep *ExtensionParser) AllowedExtension(extension string) bool {
if extension == "" {
func (ep *ExtensionParser) AllowedExtension(extension string, skip bool) bool {
if extension == "" || skip {
return true
}
_, ok := ep.allowedExtensions[extension]
Expand Down
6 changes: 5 additions & 1 deletion protocol/common/cobra_common.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,12 @@ const (
LimitParallelWebsocketConnectionsPerIpFlag = "limit-parallel-websocket-connections-per-ip"
LimitWebsocketIdleTimeFlag = "limit-websocket-connection-idle-time"
RateLimitRequestPerSecondFlag = "rate-limit-requests-per-second"
SkipPolicyVerificationFlag = "skip-policy-verification"
SkipWebsocketVerificationFlag = "skip-websocket-verification"
// specification default flags
AllowMissingApisByDefaultFlagName = "allow-missing-apis-by-default"
AllowMissingApisByDefaultFlagName = "allow-missing-apis-by-default"
PeriodicProbeProvidersFlagName = "enable-periodic-probe-providers"
PeriodicProbeProvidersIntervalFlagName = "periodic-probe-providers-interval"

ShowProviderEndpointInMetricsFlagName = "show-provider-address-in-metrics"
)
Expand Down
41 changes: 39 additions & 2 deletions protocol/lavasession/consumer_session_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,18 @@ const (
)

var (
retrySecondChanceAfter = time.Minute * 3
DebugProbes = false
retrySecondChanceAfter = time.Minute * 3
DebugProbes = false
PeriodicProbeProviders = false
PeriodicProbeProvidersInterval = 5 * time.Second
)

// created with NewConsumerSessionManager
type ConsumerSessionManager struct {
rpcEndpoint *RPCEndpoint // used to filter out endpoints
lock sync.RWMutex
pairing map[string]*ConsumerSessionsWithProvider // key == provider address
rawPairing map[uint64]*ConsumerSessionsWithProvider // key == provider index in pairing. Used for periodic probing of providers
currentEpoch uint64
numberOfResets uint64

Expand Down Expand Up @@ -88,6 +91,8 @@ func (csm *ConsumerSessionManager) UpdateAllProviders(epoch uint64, pairingList
csm.lock.Lock() // start by locking the class lock.
defer csm.lock.Unlock() // we defer here so in case we return an error it will unlock automatically.

csm.rawPairing = pairingList

if epoch <= csm.atomicReadCurrentEpoch() { // sentry shouldn't update an old epoch or current epoch
return utils.LavaFormatError("trying to update provider list for older epoch", nil, utils.Attribute{Key: "epoch", Value: epoch}, utils.Attribute{Key: "currentEpoch", Value: csm.atomicReadCurrentEpoch()})
}
Expand All @@ -102,6 +107,9 @@ func (csm *ConsumerSessionManager) UpdateAllProviders(epoch uint64, pairingList
csm.reportedProviders.Reset()
csm.pairingAddressesLength = uint64(pairingListLength)
csm.numberOfResets = 0

providerAddressToEndpoint := map[string]string{}

csm.RemoveAddonAddresses("", nil)
// Reset the pairingPurge.
// This happens only after an entire epoch. so its impossible to have session connected to the old purged list
Expand All @@ -111,11 +119,13 @@ func (csm *ConsumerSessionManager) UpdateAllProviders(epoch uint64, pairingList
for idx, provider := range pairingList {
csm.pairingAddresses[idx] = provider.PublicLavaAddress
csm.pairing[provider.PublicLavaAddress] = provider
providerAddressToEndpoint[provider.PublicLavaAddress] = provider.Endpoints[0].NetworkAddress
}
csm.setValidAddressesToDefaultValue("", nil) // the starting point is that valid addresses are equal to pairing addresses.
// reset session related metrics
go csm.consumerMetricsManager.ResetSessionRelatedMetrics()
go csm.providerOptimizer.UpdateWeights(CalcWeightsByStake(pairingList), epoch)
go csm.consumerMetricsManager.ResetBlockedProvidersMetrics(csm.rpcEndpoint.ChainID, csm.rpcEndpoint.ApiInterface, providerAddressToEndpoint)

utils.LavaFormatDebug("updated providers", utils.Attribute{Key: "epoch", Value: epoch}, utils.Attribute{Key: "spec", Value: csm.rpcEndpoint.Key()})
return nil
Expand Down Expand Up @@ -191,6 +201,21 @@ func (csm *ConsumerSessionManager) closePurgedUnusedPairingsConnections() {
}
}

func (csm *ConsumerSessionManager) PeriodicProbeProviders(ctx context.Context, interval time.Duration) {
ticker := time.NewTicker(interval)

for {
select {
case <-ticker.C:
if csm.rawPairing != nil {
csm.probeProviders(ctx, csm.rawPairing, csm.atomicReadCurrentEpoch())
}
case <-ctx.Done():
return
}
}
}

func (csm *ConsumerSessionManager) probeProviders(ctx context.Context, pairingList map[uint64]*ConsumerSessionsWithProvider, epoch uint64) error {
guid := utils.GenerateUniqueIdentifier()
ctx = utils.AppendUniqueIdentifier(ctx, guid)
Expand All @@ -207,6 +232,7 @@ func (csm *ConsumerSessionManager) probeProviders(ctx context.Context, pairingLi
defer wg.Done()
latency, providerAddress, err := csm.probeProvider(ctx, consumerSessionsWithProvider, epoch, false)
success := err == nil // if failure then regard it in availability
csm.consumerMetricsManager.SetProviderLiveness(csm.rpcEndpoint.ChainID, providerAddress, consumerSessionWithProvider.Endpoints[0].NetworkAddress, success)
csm.providerOptimizer.AppendProbeRelayData(providerAddress, latency, success)
}(consumerSessionWithProvider)
}
Expand Down Expand Up @@ -830,6 +856,13 @@ func (csm *ConsumerSessionManager) removeAddressFromValidAddresses(address strin
csm.currentlyBlockedProviderAddresses = append(csm.currentlyBlockedProviderAddresses, address)
// sort the blocked provider list by cu served
csm.sortBlockedProviderListByCuServed()
provider, ok := csm.pairing[addr]
if ok {
info := csm.RPCEndpoint()
go func(networkAddress string, chainId string, apiInterface string, providerAddress string) {
csm.consumerMetricsManager.SetBlockedProvider(chainId, apiInterface, providerAddress, networkAddress, true)
}(provider.Endpoints[0].NetworkAddress, info.ChainID, info.ApiInterface, addr)
}
return nil
}
}
Expand Down Expand Up @@ -1005,7 +1038,11 @@ func (csm *ConsumerSessionManager) validateAndReturnBlockedProviderToValidAddres
csm.RemoveAddonAddresses("", nil)
// Reset redemption status
if provider, ok := csm.pairing[providerAddress]; ok {
info := csm.RPCEndpoint()
provider.atomicWriteBlockedStatus(BlockedProviderSessionUnusedStatus)
go func(networkAddress string, chainId string, apiInterface string, providerAddress string) {
csm.consumerMetricsManager.SetBlockedProvider(chainId, apiInterface, providerAddress, networkAddress, false)
}(provider.Endpoints[0].NetworkAddress, info.ChainID, info.ApiInterface, providerAddress)
}
return
}
Expand Down
5 changes: 4 additions & 1 deletion protocol/lavasession/consumer_session_manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,10 @@ func (bpm DirectiveHeaders) GetBlockedProviders() []string {
}
blockedProviders, ok := bpm.directiveHeaders[common.BLOCK_PROVIDERS_ADDRESSES_HEADER_NAME]
if ok {
return strings.Split(blockedProviders, ",")
blockProviders := strings.Split(blockedProviders, ",")
if len(blockProviders) <= 2 {
return blockProviders
}
}
return nil
}
Expand Down
61 changes: 61 additions & 0 deletions protocol/metrics/consumer_metrics_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ type ConsumerMetricsManager struct {
relayProcessingLatencyAfterProvider *prometheus.GaugeVec
averageProcessingLatency map[string]*LatencyTracker
consumerOptimizerQoSClient *ConsumerOptimizerQoSClient
providerLivenessMetric *prometheus.GaugeVec
blockedProviderMetric *MappedLabelsGaugeVec
}

type ConsumerMetricsManagerOptions struct {
Expand Down Expand Up @@ -153,6 +155,22 @@ func NewConsumerMetricsManager(options ConsumerMetricsManagerOptions) *ConsumerM
Help: "The latency of requests requested by the consumer over time.",
}, []string{"spec", "apiInterface"})

providerLivenessMetric := prometheus.NewGaugeVec(prometheus.GaugeOpts{
Name: "lava_consumer_provider_liveness",
Help: "The liveness of connected provider based on probe",
}, []string{"spec", "provider_address", "provider_endpoint"})

blockedProviderMetricLabels := []string{"spec", "apiInterface", "provider_address"}
if ShowProviderEndpointInMetrics {
blockedProviderMetricLabels = append(blockedProviderMetricLabels, "provider_endpoint")
}

blockedProviderMetric := NewMappedLabelsGaugeVec(MappedLabelsMetricOpts{
Name: "lava_consumer_provider_blocked",
Help: "Is provider blocked. 1-blocked, 0-not blocked",
Labels: blockedProviderMetricLabels,
})

qosMetricLabels := []string{"spec", "apiInterface", "provider_address", "qos_metric"}
if ShowProviderEndpointInMetrics {
qosMetricLabels = append(qosMetricLabels, "provider_endpoint")
Expand Down Expand Up @@ -255,6 +273,7 @@ func NewConsumerMetricsManager(options ConsumerMetricsManagerOptions) *ConsumerM
prometheus.MustRegister(totalErroredMetric)
prometheus.MustRegister(blockMetric)
prometheus.MustRegister(latencyMetric)
prometheus.MustRegister(providerLivenessMetric)
prometheus.MustRegister(latestProviderRelay)
prometheus.MustRegister(virtualEpochMetric)
prometheus.MustRegister(endpointsHealthChecksOkMetric)
Expand Down Expand Up @@ -313,6 +332,8 @@ func NewConsumerMetricsManager(options ConsumerMetricsManagerOptions) *ConsumerM
totalLoLSuccessMetric: totalLoLSuccessMetric,
totalLoLErrorsMetric: totalLoLErrorsMetric,
consumerOptimizerQoSClient: options.ConsumerOptimizerQoSClient,
providerLivenessMetric: providerLivenessMetric,
blockedProviderMetric: blockedProviderMetric,
}

http.Handle("/metrics", promhttp.Handler())
Expand Down Expand Up @@ -569,6 +590,19 @@ func (pme *ConsumerMetricsManager) ResetSessionRelatedMetrics() {
pme.providerRelays = map[string]uint64{}
}

func (pme *ConsumerMetricsManager) ResetBlockedProvidersMetrics(chainId, apiInterface string, providers map[string]string) {
if pme == nil {
return
}
pme.lock.Lock()
defer pme.lock.Unlock()
pme.blockedProviderMetric.Reset()
for provider, endpoint := range providers {
labels := map[string]string{"spec": chainId, "apiInterface": apiInterface, "provider_address": provider, "provider_endpoint": endpoint}
pme.blockedProviderMetric.WithLabelValues(labels).Set(0)
}
}

func (pme *ConsumerMetricsManager) SetVersion(version string) {
if pme == nil {
return
Expand Down Expand Up @@ -627,6 +661,33 @@ func (pme *ConsumerMetricsManager) SetLoLResponse(success bool) {
}
}

func (pme *ConsumerMetricsManager) SetProviderLiveness(chainId string, providerAddress string, providerEndpoint string, isAlive bool) {
if pme == nil {
return
}

var value float64 = 0
if isAlive {
value = 1
}

pme.providerLivenessMetric.WithLabelValues(chainId, providerAddress, providerEndpoint).Set(value)
}

func (pme *ConsumerMetricsManager) SetBlockedProvider(chainId, apiInterface, providerAddress, providerEndpoint string, isBlocked bool) {
if pme == nil {
return
}
var value float64 = 0
if isBlocked {
value = 1
}
labels := map[string]string{"spec": chainId, "apiInterface": apiInterface, "provider_address": providerAddress, "provider_endpoint": providerEndpoint}
pme.lock.Lock()
defer pme.lock.Unlock()
pme.blockedProviderMetric.WithLabelValues(labels).Set(value)
}

func (pme *ConsumerMetricsManager) handleOptimizerQoS(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
Expand Down
8 changes: 8 additions & 0 deletions protocol/rpcconsumer/rpcconsumer.go
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,9 @@ func (rpcc *RPCConsumer) CreateConsumerEndpoint(
// Create active subscription provider storage for each unique chain
activeSubscriptionProvidersStorage := lavasession.NewActiveSubscriptionProvidersStorage()
consumerSessionManager := lavasession.NewConsumerSessionManager(rpcEndpoint, optimizer, consumerMetricsManager, consumerReportsManager, consumerAddr.String(), activeSubscriptionProvidersStorage)
if lavasession.PeriodicProbeProviders {
go consumerSessionManager.PeriodicProbeProviders(ctx, lavasession.PeriodicProbeProvidersInterval)
}
// Register For Updates
rpcc.consumerStateTracker.RegisterConsumerSessionManagerForPairingUpdates(ctx, consumerSessionManager, options.staticProvidersList)

Expand Down Expand Up @@ -782,10 +785,15 @@ rpcconsumer consumer_examples/full_consumer_example.yml --cache-be "127.0.0.1:77
cmdRPCConsumer.Flags().Int64Var(&chainlib.MaximumNumberOfParallelWebsocketConnectionsPerIp, common.LimitParallelWebsocketConnectionsPerIpFlag, chainlib.MaximumNumberOfParallelWebsocketConnectionsPerIp, "limit number of parallel connections to websocket, per ip, default is unlimited (0)")
cmdRPCConsumer.Flags().Int64Var(&chainlib.MaxIdleTimeInSeconds, common.LimitWebsocketIdleTimeFlag, chainlib.MaxIdleTimeInSeconds, "limit the idle time in seconds for a websocket connection, default is 20 minutes ( 20 * 60 )")
cmdRPCConsumer.Flags().DurationVar(&chainlib.WebSocketBanDuration, common.BanDurationForWebsocketRateLimitExceededFlag, chainlib.WebSocketBanDuration, "once websocket rate limit is reached, user will be banned Xfor a duration, default no ban")
cmdRPCConsumer.Flags().BoolVar(&chainlib.SkipPolicyVerification, common.SkipPolicyVerificationFlag, chainlib.SkipPolicyVerification, "skip policy verifications, this flag will skip onchain policy verification and will use the static provider list")

// lava over lava backup
cmdRPCConsumer.Flags().Bool(LavaOverLavaBackupFlagName, true, "enable lava over lava backup to regular rpc calls")
// allow missing apis by default
cmdRPCConsumer.Flags().BoolVar(&chainlib.AllowMissingApisByDefault, common.AllowMissingApisByDefaultFlagName, true, "allows missing apis to be proxied to the provider by default, set flase to block missing apis in the spec")
cmdRPCConsumer.Flags().BoolVar(&lavasession.PeriodicProbeProviders, common.PeriodicProbeProvidersFlagName, lavasession.PeriodicProbeProviders, "enable periodic probing of providers")
cmdRPCConsumer.Flags().DurationVar(&lavasession.PeriodicProbeProvidersInterval, common.PeriodicProbeProvidersIntervalFlagName, lavasession.PeriodicProbeProvidersInterval, "interval for periodic probing of providers")

common.AddRollingLogConfig(cmdRPCConsumer)
return cmdRPCConsumer
}
Expand Down
2 changes: 1 addition & 1 deletion protocol/rpcconsumer/rpcconsumer_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,7 @@ func (rpccs *RPCConsumerServer) getLatestBlock() uint64 {
if numProviders > 0 && latestKnownBlock > 0 {
return uint64(latestKnownBlock)
}
utils.LavaFormatWarning("no information on latest block", nil, utils.Attribute{Key: "latest block", Value: 0})
utils.LavaFormatDebug("no information on latest block", utils.Attribute{Key: "latest block", Value: 0})
return 0
}

Expand Down
1 change: 1 addition & 0 deletions protocol/rpcprovider/rpcprovider.go
Original file line number Diff line number Diff line change
Expand Up @@ -881,6 +881,7 @@ rpcprovider 127.0.0.1:3333 OSMOSIS tendermintrpc "wss://www.node-path.com:80,htt
cmdRPCProvider.Flags().String(common.UseStaticSpecFlag, "", "load offline spec provided path to spec file, used to test specs before they are proposed on chain, example for spec with inheritance: --use-static-spec ./specs/mainnet-1/specs/ibc.json,./specs/mainnet-1/specs/tendermint.json,./specs/mainnet-1/specs/cosmossdk.json,./specs/mainnet-1/specs/ethermint.json,./specs/mainnet-1/specs/ethereum.json,./specs/mainnet-1/specs/evmos.json")
cmdRPCProvider.Flags().Uint64(common.RateLimitRequestPerSecondFlag, 0, "Measuring the load relative to this number for feedback - per second - per chain - default unlimited. Given Y simultaneous relay calls, a value of X and will measure Y/X load rate.")
cmdRPCProvider.Flags().BoolVar(&chainlib.AllowMissingApisByDefault, common.AllowMissingApisByDefaultFlagName, true, "allows missing apis to be proxied to the node by default, set false to block missing apis in the spec, might result in degraded performance if spec is misconfigured")
cmdRPCProvider.Flags().BoolVar(&chainlib.SkipWebsocketVerification, common.SkipWebsocketVerificationFlag, false, "skip websocket verification")
cmdRPCProvider.Flags().BoolVar(&metrics.ShowProviderEndpointInProviderMetrics, common.ShowProviderEndpointInMetricsFlagName, metrics.ShowProviderEndpointInProviderMetrics, "show provider endpoint in provider metrics")
common.AddRollingLogConfig(cmdRPCProvider)
return cmdRPCProvider
Expand Down
2 changes: 1 addition & 1 deletion protocol/upgrade/protocol_version.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func GetCurrentVersion() ProtocolVersion {
func (pv *ProtocolVersion) ValidateProtocolVersion(incoming *updaters.ProtocolVersionResponse) error {
// check min version
if HasVersionMismatch(incoming.Version.ConsumerMin, lavaProtocolVersion.ConsumerVersion) || HasVersionMismatch(incoming.Version.ProviderMin, lavaProtocolVersion.ProviderVersion) {
utils.LavaFormatFatal("minimum protocol version mismatch!, you must update your protocol version to at least the minimum required protocol version",
return utils.LavaFormatError("minimum protocol version mismatch!, you must update your protocol version to at least the minimum required protocol version",
nil,
utils.Attribute{Key: "required (on-chain) consumer minimum version:", Value: incoming.Version.ConsumerMin},
utils.Attribute{Key: "required (on-chain) provider minimum version", Value: incoming.Version.ProviderMin},
Expand Down
Loading
Loading