From 87a45983a1f59a280b37a6f1edb215f08866b90a Mon Sep 17 00:00:00 2001
From: Leonard Lyubich <leonard@nspcc.ru>
Date: Mon, 24 Jan 2022 20:03:23 +0300
Subject: [PATCH] [#1084] accounting: Keep balance precision from contract

Do not convert balance response of Balance contract to Fixed8.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
---
 pkg/services/accounting/morph/executor.go | 14 ++------------
 1 file changed, 2 insertions(+), 12 deletions(-)

diff --git a/pkg/services/accounting/morph/executor.go b/pkg/services/accounting/morph/executor.go
index 7ec66232a..bd6dc2e76 100644
--- a/pkg/services/accounting/morph/executor.go
+++ b/pkg/services/accounting/morph/executor.go
@@ -6,7 +6,6 @@ import (
 	"github.com/nspcc-dev/neofs-api-go/v2/accounting"
 	"github.com/nspcc-dev/neofs-node/pkg/morph/client/balance/wrapper"
 	accountingSvc "github.com/nspcc-dev/neofs-node/pkg/services/accounting"
-	"github.com/nspcc-dev/neofs-node/pkg/util/precision"
 	"github.com/nspcc-dev/neofs-sdk-go/owner"
 )
 
@@ -14,8 +13,6 @@ type morphExecutor struct {
 	client *wrapper.Wrapper
 }
 
-const fixed8Precision = 8
-
 func NewExecutor(client *wrapper.Wrapper) accountingSvc.ServiceExecutor {
 	return &morphExecutor{
 		client: client,
@@ -33,16 +30,9 @@ func (s *morphExecutor) Balance(ctx context.Context, body *accounting.BalanceReq
 		return nil, err
 	}
 
-	// Convert amount to Fixed8 precision. This way it will definitely fit
-	// int64 value.
-	// Max Fixed8 decimal integer value that fit into int64: 92 233 720 368.
-	// Max Fixed12 decimal integer value that fit into int64: 9 223 372.
-	// Max Fixed16 decimal integer value that fit into int64: 922.
-	fixed8Amount := precision.Convert(balancePrecision, fixed8Precision, amount)
-
 	dec := new(accounting.Decimal)
-	dec.SetValue(fixed8Amount.Int64())
-	dec.SetPrecision(fixed8Precision)
+	dec.SetValue(amount.Int64())
+	dec.SetPrecision(balancePrecision)
 
 	res := new(accounting.BalanceResponseBody)
 	res.SetBalance(dec)