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..c12a510f9 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,7 +147,8 @@ 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") diff --git a/token/services/ttx/endorse.go b/token/services/ttx/endorse.go index c2b81f7cc..869a4031c 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,11 +350,11 @@ 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") } - verifier, err := verifierGetter(party) if err != nil { return nil, errors.Wrapf(err, "failed getting verifier for [%s]", party) @@ -554,7 +555,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 +738,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 +847,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 } 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 - } -}