Skip to content

Commit 208e2c9

Browse files
committed
cleanup
Signed-off-by: Angelo De Caro <adc@zurich.ibm.com>
1 parent 37c507a commit 208e2c9

File tree

5 files changed

+90
-81
lines changed

5 files changed

+90
-81
lines changed

token/core/zkatdlog/nogh/issue.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -109,21 +109,21 @@ func (s *IssueService) Issue(ctx context.Context, issuerIdentity driver.Identity
109109
}, pp)
110110

111111
start := time.Now()
112-
action, zkOutputsMetadata, err := issuer.GenerateZKIssue(values, owners)
113-
duration := time.Since(start)
112+
issueAction, zkOutputsMetadata, err := issuer.GenerateZKIssue(values, owners)
114113
if err != nil {
115-
return nil, nil, err
114+
return nil, nil, errors.WithMessagef(err, "failed to generate zk issue")
116115
}
116+
duration := time.Since(start)
117117
s.Metrics.zkIssueDuration.Observe(float64(duration.Milliseconds()))
118118

119119
// metadata
120120

121121
var inputsMetadata []*driver.IssueInputMetadata
122122
if opts != nil && opts.TokensUpgradeRequest != nil && len(opts.TokensUpgradeRequest.Tokens) > 0 {
123123
tokens := opts.TokensUpgradeRequest.Tokens
124-
action.Inputs = make([]issue.ActionInput, len(tokens))
124+
issueAction.Inputs = make([]issue.ActionInput, len(tokens))
125125
for i, tok := range tokens {
126-
action.Inputs[i] = issue.ActionInput{
126+
issueAction.Inputs[i] = issue.ActionInput{
127127
ID: tok.ID,
128128
Token: tok.Token,
129129
}
@@ -134,20 +134,20 @@ func (s *IssueService) Issue(ctx context.Context, issuerIdentity driver.Identity
134134
}
135135

136136
var outputsMetadata []*driver.IssueOutputMetadata
137-
for _, meta := range zkOutputsMetadata {
138-
raw, err := meta.Serialize()
137+
for i, owner := range owners {
138+
raw, err := zkOutputsMetadata[i].Serialize()
139139
if err != nil {
140140
return nil, nil, errors.WithMessage(err, "failed serializing token info")
141141
}
142-
auditInfo, err := s.Deserializer.GetOwnerAuditInfo(owners[0], s.WalletService)
142+
auditInfo, err := s.Deserializer.GetOwnerAuditInfo(owner, s.WalletService)
143143
if err != nil {
144144
return nil, nil, err
145145
}
146146
outputsMetadata = append(outputsMetadata, &driver.IssueOutputMetadata{
147147
OutputMetadata: raw,
148148
Receivers: []*driver.AuditableIdentity{
149149
{
150-
Identity: owners[0],
150+
Identity: owner,
151151
AuditInfo: auditInfo,
152152
},
153153
},
@@ -159,7 +159,7 @@ func (s *IssueService) Issue(ctx context.Context, issuerIdentity driver.Identity
159159
return nil, nil, err
160160
}
161161

162-
s.Logger.Debugf("issue with [%d] inputs", len(action.Inputs))
162+
s.Logger.Debugf("issue with [%d] inputs", len(issueAction.Inputs))
163163

164164
meta := &driver.IssueMetadata{
165165
Issuer: issuerSerializedIdentity,
@@ -168,7 +168,7 @@ func (s *IssueService) Issue(ctx context.Context, issuerIdentity driver.Identity
168168
ExtraSigners: nil,
169169
}
170170

171-
return action, meta, err
171+
return issueAction, meta, err
172172
}
173173

174174
// VerifyIssue checks if the outputs of an IssueAction match the passed metadata

token/core/zkatdlog/nogh/transfer.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ func (s *TransferService) Transfer(ctx context.Context, txID string, _ driver.Ow
128128
if err != nil {
129129
return nil, nil, err
130130
}
131-
var values []uint64
132-
var owners [][]byte
131+
values := make([]uint64, 0, len(outputTokens))
132+
owners := make([][]byte, 0, len(outputTokens))
133133
// get values and owners of outputs
134134
span.AddEvent("prepare_output_tokens")
135135
for i, output := range outputTokens {

token/metadata.go

Lines changed: 67 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ SPDX-License-Identifier: Apache-2.0
77
package token
88

99
import (
10+
"slices"
11+
1012
"github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/collections"
1113
"github.com/hyperledger-labs/fabric-token-sdk/token/driver"
1214
"github.com/hyperledger-labs/fabric-token-sdk/token/services/logging"
@@ -52,14 +54,38 @@ func (m *Metadata) FilterBy(eIDs ...string) (*Metadata, error) {
5254
return m, nil
5355
}
5456

55-
clonedMetadata := &Metadata{
56-
TokenService: m.TokenService,
57-
WalletService: m.WalletService,
58-
TokenRequestMetadata: &driver.TokenRequestMetadata{},
59-
Logger: m.Logger,
60-
}
6157
eIDSet := collections.NewSet(eIDs...)
62-
// filter issues
58+
59+
issues, err := m.filterIssues(m.TokenRequestMetadata.Issues, eIDSet)
60+
if err != nil {
61+
return nil, errors.WithMessagef(err, "failed filtering issues")
62+
}
63+
transfers, err := m.filterTransfers(m.TokenRequestMetadata.Transfers, eIDSet)
64+
if err != nil {
65+
return nil, errors.WithMessagef(err, "failed filtering transfers")
66+
}
67+
clone := &Metadata{
68+
TokenService: m.TokenService,
69+
WalletService: m.WalletService,
70+
TokenRequestMetadata: &driver.TokenRequestMetadata{
71+
Issues: issues,
72+
Transfers: transfers,
73+
Application: m.TokenRequestMetadata.Application,
74+
},
75+
Logger: m.Logger,
76+
}
77+
78+
// TODO: update this log
79+
m.Logger.Debugf("filtered metadata for [% x] from [%d:%d] to [%d:%d]",
80+
eIDs,
81+
len(m.TokenRequestMetadata.Issues), len(m.TokenRequestMetadata.Transfers),
82+
len(clone.TokenRequestMetadata.Issues), len(clone.TokenRequestMetadata.Transfers))
83+
84+
return clone, nil
85+
}
86+
87+
func (m *Metadata) filterIssues(issues []*driver.IssueMetadata, eIDSet collections.Set[string]) ([]*driver.IssueMetadata, error) {
88+
cloned := make([]*driver.IssueMetadata, 0, len(issues))
6389
for _, issue := range m.TokenRequestMetadata.Issues {
6490
clone := &driver.IssueMetadata{
6591
Issuer: issue.Issuer,
@@ -70,19 +96,9 @@ func (m *Metadata) FilterBy(eIDs ...string) (*Metadata, error) {
7096

7197
counter := 0
7298
for _, output := range issue.Outputs {
73-
found := false
74-
for _, receiver := range output.Receivers {
75-
// If the receiver has the given enrollment ID, add it
76-
recipientEID, err := m.WalletService.GetEnrollmentID(receiver.Identity, receiver.AuditInfo)
77-
if err != nil {
78-
return nil, errors.Wrap(err, "failed getting enrollment ID")
79-
}
80-
if eIDSet.Contains(recipientEID) {
81-
found = true
82-
break
83-
}
84-
}
85-
if found {
99+
if found, err := m.contains(output.Receivers, eIDSet); err != nil {
100+
return nil, errors.WithMessagef(err, "failed checking receivers")
101+
} else if found {
86102
clone.Outputs = append(clone.Outputs, output)
87103
counter++
88104
} else {
@@ -91,10 +107,13 @@ func (m *Metadata) FilterBy(eIDs ...string) (*Metadata, error) {
91107
}
92108

93109
m.Logger.Debugf("keeping issue with [%d] out of [%d] outputs", counter, len(issue.Outputs))
94-
clonedMetadata.TokenRequestMetadata.Issues = append(clonedMetadata.TokenRequestMetadata.Issues, clone)
110+
cloned = append(cloned, clone)
95111
}
112+
return cloned, nil
113+
}
96114

97-
// filter transfers
115+
func (m *Metadata) filterTransfers(issues []*driver.TransferMetadata, eIDSet collections.Set[string]) ([]*driver.TransferMetadata, error) {
116+
cloned := make([]*driver.TransferMetadata, 0, len(issues))
98117
for _, transfer := range m.TokenRequestMetadata.Transfers {
99118
clone := &driver.TransferMetadata{
100119
Inputs: nil,
@@ -104,63 +123,52 @@ func (m *Metadata) FilterBy(eIDs ...string) (*Metadata, error) {
104123

105124
// Filter outputs
106125
// if the receiver has the given enrollment ID, add it. Otherwise, add empty entries
107-
skip := true
108126
counter := 0
109127
for _, output := range transfer.Outputs {
110-
found := false
111-
for _, receiver := range output.Receivers {
112-
// If the receiver has the given enrollment ID, add it
113-
recipientEID, err := m.WalletService.GetEnrollmentID(receiver.Identity, receiver.AuditInfo)
114-
if err != nil {
115-
return nil, errors.Wrap(err, "failed getting enrollment ID")
116-
}
117-
if eIDSet.Contains(recipientEID) {
118-
logger.Debugf("eid [%s] found in list [%v]", recipientEID, eIDs)
119-
skip = false
120-
found = true
121-
break
122-
} else {
123-
logger.Debugf("eid [%s] not found in list [%v]", recipientEID, eIDs)
124-
}
125-
}
126-
if found {
128+
if found, err := m.contains(output.Receivers, eIDSet); err != nil {
129+
return nil, errors.WithMessagef(err, "failed checking receivers")
130+
} else if found {
127131
clone.Outputs = append(clone.Outputs, output)
128132
counter++
129133
} else {
130134
clone.Outputs = append(clone.Outputs, nil)
131135
}
132136
}
133137

134-
// if skip = true, it means that this transfer does not contain any output for the given enrollment IDs.
138+
// if counter == 0, it means that this transfer does not contain any output for the given enrollment IDs.
135139
// Therefore, no metadata should be given to the passed enrollment IDs.
136-
// if skip = false, it means that this transfer contains at least one output for the given enrollment IDs.
140+
// if counter > 0, it means that this transfer contains at least one output for the given enrollment IDs.
137141
// Append the senders to the transfer metadata.
138142
for range transfer.Inputs {
139-
clone.Inputs = append(clone.Inputs, &driver.TransferInputMetadata{
140-
TokenID: nil,
141-
Senders: nil,
142-
})
143+
clone.Inputs = append(clone.Inputs, &driver.TransferInputMetadata{})
143144
}
144-
if !skip {
145+
if counter > 0 {
145146
for i, input := range transfer.Inputs {
146147
clone.Inputs[i].Senders = input.Senders
147148
}
148149
}
149150

150151
m.Logger.Debugf("keeping transfer with [%d] out of [%d] outputs", counter, len(transfer.Outputs))
151-
clonedMetadata.TokenRequestMetadata.Transfers = append(clonedMetadata.TokenRequestMetadata.Transfers, clone)
152+
cloned = append(cloned, clone)
152153
}
154+
return cloned, nil
155+
}
153156

154-
// application
155-
clonedMetadata.TokenRequestMetadata.Application = m.TokenRequestMetadata.Application
156-
157-
// TODO: update this log
158-
m.Logger.Debugf("filtered metadata for [% x] from [%d:%d] to [%d:%d]",
159-
eIDs,
160-
len(m.TokenRequestMetadata.Issues), len(m.TokenRequestMetadata.Transfers),
161-
len(clonedMetadata.TokenRequestMetadata.Issues), len(clonedMetadata.TokenRequestMetadata.Transfers))
162-
163-
return clonedMetadata, nil
157+
func (m *Metadata) contains(receivers []*driver.AuditableIdentity, eIDSet collections.Set[string]) (bool, error) {
158+
for _, receiver := range receivers {
159+
// If the receiver has the given enrollment ID, add it
160+
recipientEID, err := m.WalletService.GetEnrollmentID(receiver.Identity, receiver.AuditInfo)
161+
if err != nil {
162+
return false, errors.Wrap(err, "failed getting enrollment ID")
163+
}
164+
if eIDSet.Contains(recipientEID) {
165+
logger.Debugf("eid [%s] found in list [%v]", recipientEID, eIDSet)
166+
return true, nil
167+
} else {
168+
logger.Debugf("eid [%s] not found in list [%v]", recipientEID, eIDSet)
169+
}
170+
}
171+
return false, nil
164172
}
165173

166174
// Issue returns the i-th issue metadata, if present
@@ -212,7 +220,7 @@ func (m *IssueMetadata) Match(action *IssueAction) error {
212220
}
213221
// check that the extra signers are the same
214222
for i, signer := range extraSigner {
215-
if !signer.Equal(m.ExtraSigners[i]) {
223+
if !slices.ContainsFunc(m.ExtraSigners, signer.Equal) {
216224
return errors.Errorf("expected extra signer [%s] but got [%s]", signer, m.ExtraSigners[i])
217225
}
218226
}

token/services/identity/deserializer/typed.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ import (
2121
var logger = logging.MustGetLogger("token-sdk.services.identity.deserializer")
2222

2323
type TypedVerifierDeserializer interface {
24-
DeserializeVerifier(typ string, raw []byte) (driver.Verifier, error)
25-
Recipients(id driver.Identity, typ string, raw []byte) ([]driver.Identity, error)
26-
GetOwnerAuditInfo(id driver.Identity, typ string, raw []byte, p driver.AuditInfoProvider) ([]byte, error)
24+
DeserializeVerifier(typ identity.Type, raw []byte) (driver.Verifier, error)
25+
Recipients(id driver.Identity, typ identity.Type, raw []byte) ([]driver.Identity, error)
26+
GetOwnerAuditInfo(id driver.Identity, typ identity.Type, raw []byte, p driver.AuditInfoProvider) ([]byte, error)
2727
GetOwnerMatcher(owner driver.Identity, auditInfo []byte) (driver.Matcher, error)
2828
}
2929

@@ -175,15 +175,15 @@ func NewTypedIdentityVerifierDeserializer(verifierDeserializer common.VerifierDe
175175
return &TypedIdentityVerifierDeserializer{VerifierDeserializer: verifierDeserializer, MatcherDeserializer: matcherDeserializer}
176176
}
177177

178-
func (t *TypedIdentityVerifierDeserializer) DeserializeVerifier(typ string, raw []byte) (driver.Verifier, error) {
178+
func (t *TypedIdentityVerifierDeserializer) DeserializeVerifier(typ identity.Type, raw []byte) (driver.Verifier, error) {
179179
return t.VerifierDeserializer.DeserializeVerifier(raw)
180180
}
181181

182-
func (t *TypedIdentityVerifierDeserializer) Recipients(id driver.Identity, typ string, raw []byte) ([]driver.Identity, error) {
182+
func (t *TypedIdentityVerifierDeserializer) Recipients(id driver.Identity, typ identity.Type, raw []byte) ([]driver.Identity, error) {
183183
return []driver.Identity{id}, nil
184184
}
185185

186-
func (t *TypedIdentityVerifierDeserializer) GetOwnerAuditInfo(id driver.Identity, typ string, raw []byte, p driver.AuditInfoProvider) ([]byte, error) {
186+
func (t *TypedIdentityVerifierDeserializer) GetOwnerAuditInfo(id driver.Identity, typ identity.Type, raw []byte, p driver.AuditInfoProvider) ([]byte, error) {
187187
auditInfo, err := p.GetAuditInfo(id)
188188
if err != nil {
189189
return nil, errors.Wrapf(err, "failed getting audit info for recipient identity [%s]", id)

token/services/identity/interop/htlc/deserializer.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"encoding/json"
1111

1212
"github.com/hyperledger-labs/fabric-token-sdk/token/driver"
13+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/identity"
1314
driver2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/driver"
1415
"github.com/hyperledger-labs/fabric-token-sdk/token/services/interop/htlc"
1516
"github.com/pkg/errors"
@@ -27,7 +28,7 @@ func NewTypedIdentityDeserializer(verifierDeserializer VerifierDES) *TypedIdenti
2728
return &TypedIdentityDeserializer{VerifierDeserializer: verifierDeserializer}
2829
}
2930

30-
func (t *TypedIdentityDeserializer) DeserializeVerifier(typ string, raw []byte) (driver.Verifier, error) {
31+
func (t *TypedIdentityDeserializer) DeserializeVerifier(typ identity.Type, raw []byte) (driver.Verifier, error) {
3132
if typ != htlc.ScriptType {
3233
return nil, errors.Errorf("cannot deserializer type [%s], expected [%s]", typ, htlc.ScriptType)
3334
}
@@ -53,7 +54,7 @@ func (t *TypedIdentityDeserializer) DeserializeVerifier(typ string, raw []byte)
5354
return v, nil
5455
}
5556

56-
func (t *TypedIdentityDeserializer) Recipients(id driver.Identity, typ string, raw []byte) ([]driver.Identity, error) {
57+
func (t *TypedIdentityDeserializer) Recipients(id driver.Identity, typ identity.Type, raw []byte) ([]driver.Identity, error) {
5758
if typ != htlc.ScriptType {
5859
return nil, errors.New("unknown identity type")
5960
}
@@ -66,7 +67,7 @@ func (t *TypedIdentityDeserializer) Recipients(id driver.Identity, typ string, r
6667
return []driver.Identity{script.Recipient}, nil
6768
}
6869

69-
func (t *TypedIdentityDeserializer) GetOwnerAuditInfo(id driver.Identity, typ string, raw []byte, p driver.AuditInfoProvider) ([]byte, error) {
70+
func (t *TypedIdentityDeserializer) GetOwnerAuditInfo(id driver.Identity, typ identity.Type, raw []byte, p driver.AuditInfoProvider) ([]byte, error) {
7071
if typ != htlc.ScriptType {
7172
return nil, errors.Errorf("invalid type, got [%s], expected [%s]", typ, htlc.ScriptType)
7273
}

0 commit comments

Comments
 (0)