Skip to content

Commit 7156807

Browse files
committed
split initiator and responder
Signed-off-by: Angelo De Caro <adc@zurich.ibm.com>
1 parent 51104c7 commit 7156807

File tree

2 files changed

+89
-73
lines changed

2 files changed

+89
-73
lines changed
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/*
2+
Copyright IBM Corp. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package endorsement
8+
9+
import (
10+
"time"
11+
12+
"github.com/hyperledger-labs/fabric-smart-client/pkg/utils/errors"
13+
fabric2 "github.com/hyperledger-labs/fabric-smart-client/platform/fabric"
14+
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/endorser"
15+
"github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
16+
token2 "github.com/hyperledger-labs/fabric-token-sdk/token"
17+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network/driver"
18+
)
19+
20+
type RequestApprovalView struct {
21+
TMSID token2.TMSID
22+
TxID driver.TxID
23+
RequestRaw []byte
24+
// RequestAnchor, if not nil it will instruct the approver to verify the token request using this anchor and not the transaction it.
25+
// This is to be used only for testing.
26+
RequestAnchor string
27+
// Nonce, if not nil it will be appended to the messages to sign.
28+
// This is to be used only for testing.
29+
Nonce []byte
30+
// Endorsers are the identities of the FSC node that play the role of endorser
31+
Endorsers []view.Identity
32+
}
33+
34+
func (r *RequestApprovalView) Call(context view.Context) (interface{}, error) {
35+
logger.DebugfContext(context.Context(), "request approval...")
36+
37+
_, tx, err := endorser.NewTransaction(
38+
context,
39+
fabric2.WithCreator(r.TxID.Creator),
40+
fabric2.WithNonce(r.TxID.Nonce),
41+
)
42+
if err != nil {
43+
return nil, errors.WithMessagef(err, "failed to create endorser transaction")
44+
}
45+
46+
tms, err := token2.GetManagementService(context, token2.WithTMSID(r.TMSID))
47+
if err != nil {
48+
return nil, errors.WithMessagef(err, "no token management service for [%s]", r.TMSID)
49+
}
50+
tx.SetProposal(tms.Namespace(), "", InvokeFunction)
51+
if err := tx.EndorseProposal(); err != nil {
52+
return nil, errors.WithMessagef(err, "failed to endorse proposal")
53+
}
54+
if err := tx.SetTransientState("tmsID", tms.ID()); err != nil {
55+
return nil, errors.WithMessagef(err, "failed to set TMS ID transient")
56+
}
57+
if err := tx.SetTransient("token_request", r.RequestRaw); err != nil {
58+
return nil, errors.WithMessagef(err, "failed to set token request transient")
59+
}
60+
if len(r.RequestAnchor) != 0 {
61+
if err := tx.SetTransient("RequestAnchor", []byte(r.RequestAnchor)); err != nil {
62+
return nil, errors.WithMessagef(err, "failed to set token request transient")
63+
}
64+
}
65+
if len(r.Nonce) != 0 {
66+
if err := tx.SetTransient("Nonce", r.Nonce); err != nil {
67+
return nil, errors.WithMessagef(err, "failed to set token request transient")
68+
}
69+
}
70+
71+
logger.DebugfContext(context.Context(), "request endorsement on tx [%s] to [%v]...", tx.ID(), r.Endorsers)
72+
_, err = context.RunView(endorser.NewParallelCollectEndorsementsOnProposalView(
73+
tx,
74+
r.Endorsers...,
75+
).WithTimeout(2 * time.Minute))
76+
if err != nil {
77+
return nil, errors.WithMessagef(err, "failed to collect endorsements")
78+
}
79+
logger.DebugfContext(context.Context(), "request endorsement done")
80+
81+
// Return envelope
82+
env, err := tx.Envelope()
83+
if err != nil {
84+
return nil, errors.WithMessagef(err, "failed to retrieve envelope for endorsement")
85+
}
86+
logger.DebugfContext(context.Context(), "envelope ready")
87+
88+
return env, nil
89+
}

token/services/network/fabric/endorsement/approval.go renamed to token/services/network/fabric/endorsement/responder.go

Lines changed: 0 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ package endorsement
88

99
import (
1010
"context"
11-
"time"
1211

1312
"github.com/hyperledger-labs/fabric-smart-client/pkg/utils/errors"
1413
fabric2 "github.com/hyperledger-labs/fabric-smart-client/platform/fabric"
@@ -18,83 +17,11 @@ import (
1817
"github.com/hyperledger-labs/fabric-token-sdk/token/core/common"
1918
driver2 "github.com/hyperledger-labs/fabric-token-sdk/token/driver"
2019
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network/common/rws/translator"
21-
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network/driver"
2220
"github.com/hyperledger-labs/fabric-token-sdk/token/services/ttxdb"
2321
"github.com/hyperledger-labs/fabric-token-sdk/token/services/utils"
2422
"github.com/hyperledger-labs/fabric-token-sdk/token/token"
2523
)
2624

27-
type RequestApprovalView struct {
28-
TMSID token2.TMSID
29-
TxID driver.TxID
30-
RequestRaw []byte
31-
// RequestAnchor, if not nil it will instruct the approver to verify the token request using this anchor and not the transaction it.
32-
// This is to be used only for testing.
33-
RequestAnchor string
34-
// Nonce, if not nil it will be appended to the messages to sign.
35-
// This is to be used only for testing.
36-
Nonce []byte
37-
// Endorsers are the identities of the FSC node that play the role of endorser
38-
Endorsers []view.Identity
39-
}
40-
41-
func (r *RequestApprovalView) Call(context view.Context) (interface{}, error) {
42-
logger.DebugfContext(context.Context(), "request approval...")
43-
44-
_, tx, err := endorser.NewTransaction(
45-
context,
46-
fabric2.WithCreator(r.TxID.Creator),
47-
fabric2.WithNonce(r.TxID.Nonce),
48-
)
49-
if err != nil {
50-
return nil, errors.WithMessagef(err, "failed to create endorser transaction")
51-
}
52-
53-
tms, err := token2.GetManagementService(context, token2.WithTMSID(r.TMSID))
54-
if err != nil {
55-
return nil, errors.WithMessagef(err, "no token management service for [%s]", r.TMSID)
56-
}
57-
tx.SetProposal(tms.Namespace(), "", InvokeFunction)
58-
if err := tx.EndorseProposal(); err != nil {
59-
return nil, errors.WithMessagef(err, "failed to endorse proposal")
60-
}
61-
if err := tx.SetTransientState("tmsID", tms.ID()); err != nil {
62-
return nil, errors.WithMessagef(err, "failed to set TMS ID transient")
63-
}
64-
if err := tx.SetTransient("token_request", r.RequestRaw); err != nil {
65-
return nil, errors.WithMessagef(err, "failed to set token request transient")
66-
}
67-
if len(r.RequestAnchor) != 0 {
68-
if err := tx.SetTransient("RequestAnchor", []byte(r.RequestAnchor)); err != nil {
69-
return nil, errors.WithMessagef(err, "failed to set token request transient")
70-
}
71-
}
72-
if len(r.Nonce) != 0 {
73-
if err := tx.SetTransient("Nonce", r.Nonce); err != nil {
74-
return nil, errors.WithMessagef(err, "failed to set token request transient")
75-
}
76-
}
77-
78-
logger.DebugfContext(context.Context(), "request endorsement on tx [%s] to [%v]...", tx.ID(), r.Endorsers)
79-
_, err = context.RunView(endorser.NewParallelCollectEndorsementsOnProposalView(
80-
tx,
81-
r.Endorsers...,
82-
).WithTimeout(2 * time.Minute))
83-
if err != nil {
84-
return nil, errors.WithMessagef(err, "failed to collect endorsements")
85-
}
86-
logger.DebugfContext(context.Context(), "request endorsement done")
87-
88-
// Return envelope
89-
env, err := tx.Envelope()
90-
if err != nil {
91-
return nil, errors.WithMessagef(err, "failed to retrieve envelope for endorsement")
92-
}
93-
logger.DebugfContext(context.Context(), "envelope ready")
94-
95-
return env, nil
96-
}
97-
9825
type Translator interface {
9926
AddPublicParamsDependency() error
10027
CommitTokenRequest(raw []byte, storeHash bool) ([]byte, error)

0 commit comments

Comments
 (0)