From dc97d48aec3ab18e9840bf6f231c98461810c988 Mon Sep 17 00:00:00 2001 From: SREENIDHI DR Date: Fri, 21 Mar 2025 14:27:13 +0530 Subject: [PATCH 1/7] issue fix --- token/services/ttx/accept.go | 10 +++------- token/services/ttx/auditor.go | 7 ++++++- token/services/ttx/endorse.go | 14 ++++++++----- token/services/ttx/multisig/spend.go | 30 +++------------------------- 4 files changed, 21 insertions(+), 40 deletions(-) diff --git a/token/services/ttx/accept.go b/token/services/ttx/accept.go index 082ab34ec..3432dacf1 100644 --- a/token/services/ttx/accept.go +++ b/token/services/ttx/accept.go @@ -17,6 +17,7 @@ import ( "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token" "github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens" + session2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/session" "github.com/pkg/errors" "go.opentelemetry.io/otel/trace" "go.uber.org/zap/zapcore" @@ -132,16 +133,11 @@ func (s *AcceptView) respondToSignatureRequests(context view.Context) error { if logger.IsEnabledFor(zapcore.DebugLevel) { logger.Debugf("Receiving signature request...") } - - msg, err := ReadMessage(session, time.Minute) + jsonSession := session2.JSON(context) + err := jsonSession.ReceiveWithTimeout(signatureRequest, time.Minute) if err != nil { return errors.Wrap(err, "failed reading signature request") } - // TODO: check what is signed... - err = Unmarshal(msg, signatureRequest) - if err != nil { - return errors.Wrap(err, "failed unmarshalling signature request") - } } span.AddEvent("Fetched request from session") tms := token.GetManagementService(context, token.WithTMS(s.tx.Network(), s.tx.Channel(), s.tx.Namespace())) diff --git a/token/services/ttx/auditor.go b/token/services/ttx/auditor.go index 0016d6123..95e70b71b 100644 --- a/token/services/ttx/auditor.go +++ b/token/services/ttx/auditor.go @@ -20,6 +20,7 @@ import ( "github.com/hyperledger-labs/fabric-token-sdk/token/services/db/driver" "github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens" "github.com/hyperledger-labs/fabric-token-sdk/token/services/ttxdb" + session2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/session" view3 "github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/view" "github.com/pkg/errors" "go.opentelemetry.io/otel/trace" @@ -146,11 +147,15 @@ func (a *AuditingViewInitiator) Call(context view.Context) (interface{}, error) // Receive signature logger.Debugf("Receiving signature for [%s]", a.tx.ID()) span.AddEvent("start_receiving") - signature, err := ReadMessage(session, time.Minute) + jsonSession := session2.NewFromSession(context, session) + signature, err := jsonSession.ReceiveRawWithTimeout(time.Minute) if err != nil { span.RecordError(err) return nil, errors.WithMessage(err, "failed to read audit event") } + if len(signature) == 0 { + return nil, errors.New("Empty signature data.") + } span.AddEvent("received_message") logger.Debugf("reply received from %s", a.tx.Opts.Auditor) diff --git a/token/services/ttx/endorse.go b/token/services/ttx/endorse.go index c2b81f7cc..5f6e386ea 100644 --- a/token/services/ttx/endorse.go +++ b/token/services/ttx/endorse.go @@ -23,6 +23,7 @@ import ( "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/multisig" "github.com/hyperledger-labs/fabric-token-sdk/token/services/network" "github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens" + session2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/session" "github.com/pkg/errors" "go.opentelemetry.io/otel/trace" "go.uber.org/zap/zapcore" @@ -349,7 +350,8 @@ func (c *CollectEndorsementsView) signRemote(context view.Context, party view.Id return nil, errors.Wrap(err, "failed sending transaction content") } - sigma, err := ReadMessage(session, time.Minute) + jsonSession := session2.NewFromSession(context, session) + sigma, err := jsonSession.ReceiveRawWithTimeout(time.Minute) if err != nil { return nil, errors.Wrap(err, "failed reading message") } @@ -554,7 +556,8 @@ func (c *CollectEndorsementsView) distributeEvnToParty(context view.Context, ent } span.AddEvent("Wait for ack") - sigma, err := ReadMessage(session, 1*time.Minute) + jsonSession := session2.NewFromSession(context, session) + sigma, err := jsonSession.ReceiveRawWithTimeout(time.Minute) if err != nil { return errors.Wrapf(err, "failed reading message on session [%s]", session.Info().ID) } @@ -736,8 +739,8 @@ func (f *ReceiveTransactionView) Call(context view.Context) (interface{}, error) span := trace.SpanFromContext(context.Context()) span.AddEvent("start_receive_transaction_view") defer span.AddEvent("end_receive_transaction_view") - - msg, err := ReadMessage(context.Session(), time.Minute*4) + jsonSession := session2.JSON(context) + msg, err := jsonSession.ReceiveRawWithTimeout(time.Minute * 4) if err != nil { span.RecordError(err) } @@ -845,7 +848,8 @@ func (s *EndorseView) Call(context view.Context) (interface{}, error) { if logger.IsEnabledFor(zapcore.DebugLevel) { logger.Debugf("Receiving signature request...") } - srRaw, err = ReadMessage(session, time.Minute) + jsonSession := session2.JSON(context) + srRaw, err = jsonSession.ReceiveRawWithTimeout(time.Minute) if err != nil { return nil, errors.Wrap(err, "failed reading signature request") } diff --git a/token/services/ttx/multisig/spend.go b/token/services/ttx/multisig/spend.go index b6c76659e..2678e914f 100644 --- a/token/services/ttx/multisig/spend.go +++ b/token/services/ttx/multisig/spend.go @@ -7,12 +7,10 @@ SPDX-License-Identifier: Apache-2.0 package multisig import ( - "runtime/debug" "slices" "time" "github.com/hyperledger-labs/fabric-smart-client/pkg/utils/errors" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/hash" "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" token2 "github.com/hyperledger-labs/fabric-token-sdk/token" "github.com/hyperledger-labs/fabric-token-sdk/token/core/common/encoding/json" @@ -21,7 +19,6 @@ import ( "github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/session" "github.com/hyperledger-labs/fabric-token-sdk/token/token" "go.opentelemetry.io/otel/trace" - "go.uber.org/zap/zapcore" ) // SpendRequest is the request to spend a token @@ -29,15 +26,6 @@ type SpendRequest struct { Token *token.UnspentToken } -func NewSpendRequestFromBytes(msg []byte) (*SpendRequest, error) { - request := &SpendRequest{} - err := json.Unmarshal(msg, request) - if err != nil { - return nil, errors.Wrap(err, "failed unmarshalling spendRequest") - } - return request, nil -} - func ReceiveSpendRequest(context view.Context, opts ...ttx.TxOption) (*SpendRequest, error) { logger.Debugf("receive a new spendRequest...") requestBoxed, err := context.RunView(NewReceiveSpendRequestView(), view.WithSameContext()) @@ -66,25 +54,13 @@ func (f *ReceiveSpendRequestView) Call(context view.Context) (interface{}, error span := trace.SpanFromContext(context.Context()) span.AddEvent("start_receive_spendRequest_view") defer span.AddEvent("end_receive_spendRequest_view") - - msg, err := ttx.ReadMessage(context.Session(), time.Minute*4) + tx := &SpendRequest{} + jsonSession := session.JSON(context) + err := jsonSession.ReceiveWithTimeout(tx, time.Minute*4) if err != nil { span.RecordError(err) } span.AddEvent("receive_tx") - - if logger.IsEnabledFor(zapcore.DebugLevel) { - logger.Debugf("ReceiveSpendRequestView: received spendRequest, len [%d][%s]", len(msg), hash.Hashable(msg)) - } - if len(msg) == 0 { - info := context.Session().Info() - logger.Errorf("received empty message, session closed [%s:%v], [%s]", info.ID, info.Closed, string(debug.Stack())) - return nil, errors.Errorf("received empty message, session closed [%s:%v]", info.ID, info.Closed) - } - tx, err := NewSpendRequestFromBytes(msg) - if err != nil { - return nil, errors.Wrap(err, "failed to receive spendRequest") - } return tx, nil } From 25ccfdd1f1af12e1d4dcbd5d558b2f8e0a28ba7d Mon Sep 17 00:00:00 2001 From: SREENIDHI DR Date: Thu, 27 Mar 2025 12:12:22 +0530 Subject: [PATCH 2/7] err handling Signed-off-by: SREENIDHI DR --- token/services/ttx/endorse.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/token/services/ttx/endorse.go b/token/services/ttx/endorse.go index 5f6e386ea..52e2b40ca 100644 --- a/token/services/ttx/endorse.go +++ b/token/services/ttx/endorse.go @@ -355,7 +355,10 @@ func (c *CollectEndorsementsView) signRemote(context view.Context, party view.Id if err != nil { return nil, errors.Wrap(err, "failed reading message") } - + if len(sigma) == 0 { + info := context.Session().Info() + return nil, errors.Errorf("received empty message, session closed [%s:%v]", info.ID, info.Closed) + } verifier, err := verifierGetter(party) if err != nil { return nil, errors.Wrapf(err, "failed getting verifier for [%s]", party) @@ -561,6 +564,10 @@ func (c *CollectEndorsementsView) distributeEvnToParty(context view.Context, ent if err != nil { return errors.Wrapf(err, "failed reading message on session [%s]", session.Info().ID) } + if len(sigma) == 0 { + info := context.Session().Info() + return errors.Errorf("received empty message, session closed [%s:%v]", info.ID, info.Closed) + } logger.Debugf("received ack from [%s] [%s], checking signature on [%s]", entry.LongTerm, hash.Hashable(sigma).String(), hash.Hashable(txRaw).String()) @@ -744,6 +751,10 @@ func (f *ReceiveTransactionView) Call(context view.Context) (interface{}, error) if err != nil { span.RecordError(err) } + if len(msg) == 0 { + info := context.Session().Info() + return nil, errors.Errorf("received empty message, session closed [%s:%v]", info.ID, info.Closed) + } span.AddEvent("receive_tx") if logger.IsEnabledFor(zapcore.DebugLevel) { From 789fb9ec156ec51371fb9e256e95342bc26ee8d8 Mon Sep 17 00:00:00 2001 From: SREENIDHI DR Date: Thu, 27 Mar 2025 12:18:52 +0530 Subject: [PATCH 3/7] err handling Signed-off-by: SREENIDHI DR --- token/services/ttx/endorse.go | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/token/services/ttx/endorse.go b/token/services/ttx/endorse.go index 52e2b40ca..869a4031c 100644 --- a/token/services/ttx/endorse.go +++ b/token/services/ttx/endorse.go @@ -355,10 +355,6 @@ func (c *CollectEndorsementsView) signRemote(context view.Context, party view.Id if err != nil { return nil, errors.Wrap(err, "failed reading message") } - if len(sigma) == 0 { - info := context.Session().Info() - return nil, errors.Errorf("received empty message, session closed [%s:%v]", info.ID, info.Closed) - } verifier, err := verifierGetter(party) if err != nil { return nil, errors.Wrapf(err, "failed getting verifier for [%s]", party) @@ -564,10 +560,6 @@ func (c *CollectEndorsementsView) distributeEvnToParty(context view.Context, ent if err != nil { return errors.Wrapf(err, "failed reading message on session [%s]", session.Info().ID) } - if len(sigma) == 0 { - info := context.Session().Info() - return errors.Errorf("received empty message, session closed [%s:%v]", info.ID, info.Closed) - } logger.Debugf("received ack from [%s] [%s], checking signature on [%s]", entry.LongTerm, hash.Hashable(sigma).String(), hash.Hashable(txRaw).String()) @@ -751,10 +743,6 @@ func (f *ReceiveTransactionView) Call(context view.Context) (interface{}, error) if err != nil { span.RecordError(err) } - if len(msg) == 0 { - info := context.Session().Info() - return nil, errors.Errorf("received empty message, session closed [%s:%v]", info.ID, info.Closed) - } span.AddEvent("receive_tx") if logger.IsEnabledFor(zapcore.DebugLevel) { From d0b01a11c963b7732e1b3025f20033a0cb4091c7 Mon Sep 17 00:00:00 2001 From: sreenidhi Date: Tue, 1 Apr 2025 14:42:30 +0530 Subject: [PATCH 4/7] read message func removal Signed-off-by: sreenidhi --- token/services/ttx/session.go | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/token/services/ttx/session.go b/token/services/ttx/session.go index 6bbd0ec83..085943155 100644 --- a/token/services/ttx/session.go +++ b/token/services/ttx/session.go @@ -9,7 +9,6 @@ package ttx import ( "context" "encoding/base64" - "time" "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/pkg/errors" @@ -128,23 +127,3 @@ func (s *localSession) Receive() <-chan *view.Message { func (s *localSession) Close() { s.info.Closed = true } - -func ReadMessage(session view.Session, timeout time.Duration) ([]byte, error) { - timer := time.NewTimer(timeout) - defer timer.Stop() - - ch := session.Receive() - select { - case msg := <-ch: - if msg == nil { - return nil, errors.New("received nil tx") - } - if msg.Status == view.ERROR { - return nil, errors.New(string(msg.Payload)) - } - return msg.Payload, nil - case <-timer.C: - err := errors.New("timeout reached") - return nil, err - } -} From c13d2bb2bf2cc84805cc258edcf11c4cc32dd9dc Mon Sep 17 00:00:00 2001 From: sreenidhi Date: Tue, 1 Apr 2025 18:15:00 +0530 Subject: [PATCH 5/7] read message func addition Signed-off-by: sreenidhi --- token/services/ttx/session.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/token/services/ttx/session.go b/token/services/ttx/session.go index 085943155..6bbd0ec83 100644 --- a/token/services/ttx/session.go +++ b/token/services/ttx/session.go @@ -9,6 +9,7 @@ package ttx import ( "context" "encoding/base64" + "time" "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/pkg/errors" @@ -127,3 +128,23 @@ func (s *localSession) Receive() <-chan *view.Message { func (s *localSession) Close() { s.info.Closed = true } + +func ReadMessage(session view.Session, timeout time.Duration) ([]byte, error) { + timer := time.NewTimer(timeout) + defer timer.Stop() + + ch := session.Receive() + select { + case msg := <-ch: + if msg == nil { + return nil, errors.New("received nil tx") + } + if msg.Status == view.ERROR { + return nil, errors.New(string(msg.Payload)) + } + return msg.Payload, nil + case <-timer.C: + err := errors.New("timeout reached") + return nil, err + } +} From 161b9e48ed46c7725653eb88494f72b58a60e735 Mon Sep 17 00:00:00 2001 From: sreenidhi Date: Tue, 1 Apr 2025 20:09:27 +0530 Subject: [PATCH 6/7] read message func deletion Signed-off-by: sreenidhi --- token/services/ttx/session.go | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/token/services/ttx/session.go b/token/services/ttx/session.go index 6bbd0ec83..085943155 100644 --- a/token/services/ttx/session.go +++ b/token/services/ttx/session.go @@ -9,7 +9,6 @@ package ttx import ( "context" "encoding/base64" - "time" "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/pkg/errors" @@ -128,23 +127,3 @@ func (s *localSession) Receive() <-chan *view.Message { func (s *localSession) Close() { s.info.Closed = true } - -func ReadMessage(session view.Session, timeout time.Duration) ([]byte, error) { - timer := time.NewTimer(timeout) - defer timer.Stop() - - ch := session.Receive() - select { - case msg := <-ch: - if msg == nil { - return nil, errors.New("received nil tx") - } - if msg.Status == view.ERROR { - return nil, errors.New(string(msg.Payload)) - } - return msg.Payload, nil - case <-timer.C: - err := errors.New("timeout reached") - return nil, err - } -} From ff29240772609dfe70e1d0302a1c99c4650d9f39 Mon Sep 17 00:00:00 2001 From: sreenidhi Date: Fri, 11 Apr 2025 12:46:32 +0530 Subject: [PATCH 7/7] review comment Signed-off-by: sreenidhi --- token/services/ttx/auditor.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/token/services/ttx/auditor.go b/token/services/ttx/auditor.go index 95e70b71b..c12a510f9 100644 --- a/token/services/ttx/auditor.go +++ b/token/services/ttx/auditor.go @@ -153,9 +153,6 @@ func (a *AuditingViewInitiator) Call(context view.Context) (interface{}, error) span.RecordError(err) return nil, errors.WithMessage(err, "failed to read audit event") } - if len(signature) == 0 { - return nil, errors.New("Empty signature data.") - } span.AddEvent("received_message") logger.Debugf("reply received from %s", a.tx.Opts.Auditor)