Skip to content

Commit c30c9d8

Browse files
alexandrosfiliosadecaro
authored andcommitted
fixup! Review comments
Signed-off-by: Alexandros Filios <alexandros.filios@ibm.com>
1 parent e0407c6 commit c30c9d8

File tree

10 files changed

+98
-52
lines changed

10 files changed

+98
-52
lines changed

cmd/tokengen/main_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
dlog "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/driver"
1919
"github.com/hyperledger-labs/fabric-token-sdk/token/driver"
2020
"github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/msp"
21+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/slices"
2122
. "github.com/onsi/gomega"
2223
"github.com/onsi/gomega/gexec"
2324
)
@@ -256,7 +257,7 @@ func validateOutputEquivalent(gt *WithT, tempOutput, auditorsMSPdir, issuersMSPd
256257

257258
idemixPK, err := os.ReadFile(idemixMSPdir)
258259
gt.Expect(err).NotTo(HaveOccurred())
259-
gt.Expect(idemixPK).To(BeEquivalentTo(pp.IdemixIssuerPublicKeys[0].PublicKey))
260+
gt.Expect(idemixPK).To(BeEquivalentTo(slices.GetUnique(pp.IdemixIssuerPublicKeys).PublicKey))
260261
}
261262

262263
func testGenRunWithError(gt *WithT, tokengen string, args []string, errMsg string) {

integration/token/fungible/support.go

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,32 +1014,25 @@ func WhoDeletedToken(network *integration.Infrastructure, id *token3.NodeReferen
10141014
}
10151015

10161016
func GetAuditorIdentity(tms *topology.TMS, id string) []byte {
1017-
for _, auditor := range tms.Wallets.Auditors {
1018-
if auditor.ID == id {
1019-
// Build an MSP Identity
1020-
provider, _, err := x509.NewKeyManager(auditor.Path, "", msp2.AuditorMSPID, nil, auditor.Opts)
1021-
Expect(err).NotTo(HaveOccurred())
1022-
id, _, err := provider.Identity(nil)
1023-
Expect(err).NotTo(HaveOccurred())
1024-
return id
1025-
}
1026-
}
1027-
Expect(false).To(BeTrue(), "auditor identity not found in [%s]", id)
1028-
return nil
1017+
return getIdentity(tms.Wallets.Auditors, id, msp2.AuditorMSPID)
10291018
}
10301019

10311020
func GetIssuerIdentity(tms *topology.TMS, id string) []byte {
1032-
for _, issuer := range tms.Wallets.Issuers {
1033-
if issuer.ID == id {
1021+
return getIdentity(tms.Wallets.Issuers, id, msp2.IssuerMSPID)
1022+
}
1023+
1024+
func getIdentity(identities []topology.Identity, id string, mspID string) []byte {
1025+
for _, identity := range identities {
1026+
if identity.ID == id {
10341027
// Build an MSP Identity
1035-
provider, _, err := x509.NewKeyManager(issuer.Path, "", msp2.IssuerMSPID, nil, issuer.Opts)
1028+
provider, _, err := x509.NewKeyManager(identity.Path, "", mspID, nil, identity.Opts)
10361029
Expect(err).NotTo(HaveOccurred())
10371030
id, _, err := provider.Identity(nil)
10381031
Expect(err).NotTo(HaveOccurred())
10391032
return id
10401033
}
10411034
}
1042-
Expect(false).To(BeTrue(), "issuer identity not found in [%s]", id)
1035+
Expect(false).To(BeTrue(), "identity not found in [%s]", id)
10431036
return nil
10441037
}
10451038

token/core/zkatdlog/crypto/audit/auditor_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
msp3 "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/msp/idemix/msp"
3232
"github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/sig"
3333
"github.com/hyperledger-labs/fabric-token-sdk/token/services/logging"
34+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/slices"
3435
token3 "github.com/hyperledger-labs/fabric-token-sdk/token/token"
3536
msp2 "github.com/hyperledger/fabric/msp"
3637
. "github.com/onsi/ginkgo/v2"
@@ -51,7 +52,7 @@ var _ = Describe("Auditor", func() {
5152
Expect(err).NotTo(HaveOccurred())
5253
pp, err = crypto.Setup(32, ipk, math.FP256BN_AMCL)
5354
Expect(err).NotTo(HaveOccurred())
54-
des, err := idemix.NewDeserializer(pp.IdemixIssuerPublicKeys[0].PublicKey, math.FP256BN_AMCL)
55+
des, err := idemix.NewDeserializer(slices.GetUnique(pp.IdemixIssuerPublicKeys).PublicKey, math.FP256BN_AMCL)
5556
Expect(err).NotTo(HaveOccurred())
5657
auditor = audit.NewAuditor(logging.MustGetLogger("auditor"), &noop.Tracer{}, des, pp.PedersenGenerators, fakeSigningIdentity, math.Curves[pp.Curve])
5758
fakeSigningIdentity.SignReturns([]byte("auditor-signature"), nil)

token/core/zkatdlog/crypto/validator/validator_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
msp3 "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/msp/idemix/msp"
3636
"github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/sig"
3737
"github.com/hyperledger-labs/fabric-token-sdk/token/services/logging"
38+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/slices"
3839
token2 "github.com/hyperledger-labs/fabric-token-sdk/token/token"
3940
msp2 "github.com/hyperledger/fabric/msp"
4041
. "github.com/onsi/ginkgo/v2"
@@ -73,7 +74,7 @@ var _ = Describe("validator", func() {
7374
c := math.Curves[pp.Curve]
7475

7576
asigner, _ := prepareECDSASigner()
76-
des, err := idemix.NewDeserializer(pp.IdemixIssuerPublicKeys[0].PublicKey, math.FP256BN_AMCL)
77+
des, err := idemix.NewDeserializer(slices.GetUnique(pp.IdemixIssuerPublicKeys).PublicKey, math.FP256BN_AMCL)
7778
Expect(err).NotTo(HaveOccurred())
7879
auditor = audit.NewAuditor(logging.MustGetLogger("auditor"), &noop.Tracer{}, des, pp.PedersenGenerators, asigner, c)
7980
araw, err := asigner.Serialize()

token/core/zkatdlog/nogh/driver/base.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ func (d *base) newWalletService(
8686
)
8787
// owner role
8888
// we have one key manager for fabtoken and one for each idemix issuer public key
89-
var kmps []common2.KeyManagerProvider
90-
for _, key := range pp.IdemixIssuerPublicKeys {
89+
kmps := make([]common2.KeyManagerProvider, len(pp.IdemixIssuerPublicKeys)+1)
90+
for i, key := range pp.IdemixIssuerPublicKeys {
9191
backend, err := storageProvider.NewKeystore()
9292
if err != nil {
9393
return nil, errors.Wrapf(err, "failed to get new keystore backend")
@@ -96,7 +96,7 @@ func (d *base) newWalletService(
9696
if err != nil {
9797
return nil, errors.Wrapf(err, "failed to instantiate bccsp key store")
9898
}
99-
kmp := idemix2.NewKeyManagerProvider(
99+
kmps[i] = idemix2.NewKeyManagerProvider(
100100
key.PublicKey,
101101
key.Curve,
102102
msp.RoleToMSPID[driver.OwnerRole],
@@ -106,9 +106,8 @@ func (d *base) newWalletService(
106106
identityConfig.DefaultCacheSize(),
107107
ignoreRemote,
108108
)
109-
kmps = append(kmps, kmp)
110109
}
111-
kmps = append(kmps, x509.NewKeyManagerProvider(identityConfig, msp.RoleToMSPID[driver.OwnerRole], ip, ignoreRemote))
110+
kmps[len(kmps)-1] = x509.NewKeyManagerProvider(identityConfig, msp.RoleToMSPID[driver.OwnerRole], ip, ignoreRemote)
112111

113112
role, err := roleFactory.NewIdemix(
114113
driver.OwnerRole,

token/request.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,12 @@ type Request struct {
171171
TokenService *ManagementService `json:"-"`
172172
}
173173

174+
func (r *Request) AllApplicationMetadata() map[string][]byte { return r.Metadata.Application }
175+
func (r *Request) PublicParamsHash() PPHash {
176+
return r.TokenService.PublicParametersManager().PublicParamsHash()
177+
}
178+
func (r *Request) String() string { return r.Anchor }
179+
174180
// NewRequest creates a new empty request for the given token service and anchor
175181
func NewRequest(tokenService *ManagementService, anchor string) *Request {
176182
return &Request{

token/services/auditdb/db.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ import (
2323
"github.com/pkg/errors"
2424
)
2525

26+
type tokenRequest interface {
27+
AuditRecord() (*token.AuditRecord, error)
28+
Bytes() ([]byte, error)
29+
AllApplicationMetadata() map[string][]byte
30+
PublicParamsHash() token.PPHash
31+
}
32+
2633
type (
2734
Holder = db.DriverHolder[*DB, driver.AuditTransactionDB, driver.AuditDBDriver]
2835
Manager = db.Manager[*DB, driver.AuditTransactionDB, driver.AuditDBDriver]
@@ -149,26 +156,19 @@ func newDB(p driver.AuditTransactionDB) *DB {
149156
}
150157

151158
// Append appends send and receive movements, and transaction records corresponding to the passed token request
152-
func (d *DB) Append(req *token.Request, gapFiller func(record *token.AuditRecord) error) error {
153-
logger.Debugf("appending new record... [%s]", req.Anchor)
159+
func (d *DB) Append(req tokenRequest) error {
160+
logger.Debugf("appending new record... [%s]", req)
154161

155162
record, err := req.AuditRecord()
156163
if err != nil {
157-
return errors.WithMessagef(err, "failed getting audit records for request [%s]", req.Anchor)
158-
}
159-
160-
// fill the gap in the record
161-
if gapFiller != nil {
162-
if err := gapFiller(record); err != nil {
163-
return errors.WithMessagef(err, "failed filling gaps for request [%s]", req.Anchor)
164-
}
164+
return errors.WithMessagef(err, "failed getting audit records for request [%s]", req)
165165
}
166166

167167
logger.Debugf("parsing new audit record... [%d] in, [%d] out", record.Inputs.Count(), record.Outputs.Count())
168168
now := time.Now().UTC()
169169
raw, err := req.Bytes()
170170
if err != nil {
171-
return errors.Wrapf(err, "failed to marshal token request [%s]", req.Anchor)
171+
return errors.Wrapf(err, "failed to marshal token request [%s]", req)
172172
}
173173
mov, err := ttxdb.Movements(record, now)
174174
if err != nil {
@@ -187,8 +187,8 @@ func (d *DB) Append(req *token.Request, gapFiller func(record *token.AuditRecord
187187
if err := w.AddTokenRequest(
188188
record.Anchor,
189189
raw,
190-
req.Metadata.Application,
191-
req.TokenService.PublicParametersManager().PublicParamsHash(),
190+
req.AllApplicationMetadata(),
191+
req.PublicParamsHash(),
192192
); err != nil {
193193
w.Rollback()
194194
return errors.WithMessagef(err, "append token request for txid [%s] failed", record.Anchor)

token/services/auditor/auditor.go

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,43 @@ func (a *Auditor) Audit(tx Transaction) (*token.InputStream, *token.OutputStream
9797
return record.Inputs, record.Outputs, nil
9898
}
9999

100+
func newRequestWrapper(r *token.Request, tms *token.ManagementService) *requestWrapper {
101+
return &requestWrapper{r: r, tms: tms}
102+
}
103+
104+
type requestWrapper struct {
105+
r *token.Request
106+
tms *token.ManagementService
107+
}
108+
109+
func (r *requestWrapper) Bytes() ([]byte, error) { return r.r.Bytes() }
110+
func (r *requestWrapper) AllApplicationMetadata() map[string][]byte {
111+
return r.r.AllApplicationMetadata()
112+
}
113+
func (r *requestWrapper) PublicParamsHash() token.PPHash { return r.r.PublicParamsHash() }
114+
115+
func (r *requestWrapper) AuditRecord() (*token.AuditRecord, error) {
116+
record, err := r.r.AuditRecord()
117+
if err != nil {
118+
return nil, err
119+
}
120+
if err := r.completeInputsWithEmptyEID(record); err != nil {
121+
return nil, errors.WithMessagef(err, "failed filling gaps for request [%s]", r.r.Anchor)
122+
}
123+
return record, nil
124+
}
125+
100126
// Append adds the passed transaction to the auditor database.
101127
// It also releases the locks acquired by Audit.
102128
func (a *Auditor) Append(tx Transaction) error {
103129
defer a.Release(tx)
104130

131+
tms, err := a.tmsProvider.GetManagementService(token.WithTMSID(a.tmsID))
132+
if err != nil {
133+
return err
134+
}
105135
// append request to audit db
106-
if err := a.auditDB.Append(tx.Request(), a.completeInputsWithEmptyEID); err != nil {
136+
if err := a.auditDB.Append(newRequestWrapper(tx.Request(), tms)); err != nil {
107137
return errors.WithMessagef(err, "failed appending request %s", tx.ID())
108138
}
109139

@@ -148,7 +178,7 @@ func (a *Auditor) Check(context context.Context) ([]string, error) {
148178
return a.checkService.Check(context)
149179
}
150180

151-
func (a *Auditor) completeInputsWithEmptyEID(record *token.AuditRecord) error {
181+
func (r *requestWrapper) completeInputsWithEmptyEID(record *token.AuditRecord) error {
152182
filter := record.Inputs.ByEnrollmentID("")
153183
if filter.Count() == 0 {
154184
return nil
@@ -157,15 +187,11 @@ func (a *Auditor) completeInputsWithEmptyEID(record *token.AuditRecord) error {
157187
targetEID := record.Outputs.EnrollmentIDs()[0]
158188

159189
// fetch all the tokens
160-
tms, err := a.tmsProvider.GetManagementService(token.WithTMSID(a.tmsID))
161-
if err != nil {
162-
return errors.WithMessagef(err, "failed getting management service for [%s]", a.tmsID)
163-
}
164-
tokens, err := tms.Vault().NewQueryEngine().ListAuditTokens(filter.IDs()...)
190+
tokens, err := r.tms.Vault().NewQueryEngine().ListAuditTokens(filter.IDs()...)
165191
if err != nil {
166192
return errors.WithMessagef(err, "failed listing tokens for [%s]", filter.IDs())
167193
}
168-
precision := tms.PublicParametersManager().PublicParameters().Precision()
194+
precision := r.tms.PublicParametersManager().PublicParameters().Precision()
169195
for i := 0; i < filter.Count(); i++ {
170196
item := filter.At(i)
171197
item.EnrollmentID = targetEID

token/services/identity/common/identity.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ type LocalIdentity struct {
2626
}
2727

2828
func (i *LocalIdentity) String() string {
29-
if !i.Anonymous {
30-
id, _, err := i.GetIdentity(nil)
31-
if err != nil {
32-
return err.Error()
33-
}
34-
return fmt.Sprintf("{%s@%s-%v-%v-%v}[%s]", i.Name, i.EnrollmentID, i.Default, i.Anonymous, i.Remote, id)
29+
if i.Anonymous {
30+
return fmt.Sprintf("{%s@%s-%v-%v-%v}", i.Name, i.EnrollmentID, i.Default, i.Anonymous, i.Remote)
3531
}
36-
return fmt.Sprintf("{%s@%s-%v-%v-%v}", i.Name, i.EnrollmentID, i.Default, i.Anonymous, i.Remote)
32+
id, _, err := i.GetIdentity(nil)
33+
if err != nil {
34+
return err.Error()
35+
}
36+
return fmt.Sprintf("{%s@%s-%v-%v-%v}[%s]", i.Name, i.EnrollmentID, i.Default, i.Anonymous, i.Remote, id)
3737
}
3838

3939
// IdentityInfo implements the driver.IdentityInfo interface on top LocalIdentity
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
Copyright IBM Corp. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package slices
8+
9+
func GetUnique[V any](v []V) V {
10+
return v[0]
11+
}
12+
13+
func GetAny[V any](v []V) V {
14+
return v[0]
15+
}
16+
17+
func GetFirst[V any](v []V) V {
18+
return v[0]
19+
}

0 commit comments

Comments
 (0)