From cda04dc33c98cd153ca077277255d50ed4fd1e73 Mon Sep 17 00:00:00 2001
From: Pavel Karpy <p.karpy@yadro.com>
Date: Mon, 20 Mar 2023 20:36:07 +0300
Subject: [PATCH] [#152] IR: Process empty basic incomes

If network is not configured for basic income earnings, do not distribute
GAS by the Alphabet nodes.

Signed-off-by: Pavel Karpy <p.karpy@yadro.com>
---
 pkg/innerring/processors/settlement/basic/collect.go    | 5 +++++
 pkg/innerring/processors/settlement/basic/context.go    | 2 ++
 pkg/innerring/processors/settlement/basic/distribute.go | 4 ++++
 3 files changed, 11 insertions(+)

diff --git a/pkg/innerring/processors/settlement/basic/collect.go b/pkg/innerring/processors/settlement/basic/collect.go
index 72f4eb8dd..ee7354c4f 100644
--- a/pkg/innerring/processors/settlement/basic/collect.go
+++ b/pkg/innerring/processors/settlement/basic/collect.go
@@ -26,6 +26,11 @@ func (inc *IncomeSettlementContext) Collect() {
 		return
 	}
 
+	if cachedRate == 0 {
+		inc.noop = true
+		return
+	}
+
 	cnrEstimations, err := inc.estimations.Estimations(inc.epoch)
 	if err != nil {
 		inc.log.Error("can't fetch container size estimations",
diff --git a/pkg/innerring/processors/settlement/basic/context.go b/pkg/innerring/processors/settlement/basic/context.go
index a605c053b..59bedf2e4 100644
--- a/pkg/innerring/processors/settlement/basic/context.go
+++ b/pkg/innerring/processors/settlement/basic/context.go
@@ -28,6 +28,8 @@ type (
 	IncomeSettlementContext struct {
 		mu sync.Mutex // lock to prevent collection and distribution in the same time
 
+		noop bool
+
 		log   *logger.Logger
 		epoch uint64
 
diff --git a/pkg/innerring/processors/settlement/basic/distribute.go b/pkg/innerring/processors/settlement/basic/distribute.go
index a2baa36af..e085f1e22 100644
--- a/pkg/innerring/processors/settlement/basic/distribute.go
+++ b/pkg/innerring/processors/settlement/basic/distribute.go
@@ -12,6 +12,10 @@ func (inc *IncomeSettlementContext) Distribute() {
 	inc.mu.Lock()
 	defer inc.mu.Unlock()
 
+	if inc.noop {
+		return
+	}
+
 	txTable := common.NewTransferTable()
 
 	bankBalance, err := inc.balances.Balance(inc.bankOwner)