From 389b9b1c81e42d8f322e2f733541f6e6ad24dcf4 Mon Sep 17 00:00:00 2001 From: Angelo De Caro Date: Wed, 22 May 2024 16:32:45 +0200 Subject: [PATCH] cleanup (#631) Signed-off-by: Angelo De Caro --- token/core/cmd/pp/common/common.go | 8 +- token/core/fabtoken/actions.go | 3 +- token/core/fabtoken/driver/driver.go | 2 +- token/core/fabtoken/issue.go | 34 +++-- token/core/fabtoken/setup.go | 13 +- token/core/fabtoken/tokens.go | 4 +- token/core/fabtoken/transfer.go | 11 +- token/core/fabtoken/validator_transfer.go | 9 +- token/core/zkatdlog/crypto/audit/auditor.go | 4 +- .../zkatdlog/crypto/audit/auditor_test.go | 7 +- token/core/zkatdlog/crypto/common/identity.go | 4 +- token/core/zkatdlog/crypto/setup.go | 11 +- .../crypto/validator/validator_issue.go | 6 +- .../crypto/validator/validator_test.go | 5 +- .../crypto/validator/validator_transfer.go | 10 +- token/core/zkatdlog/nogh/driver/driver.go | 2 +- token/core/zkatdlog/nogh/issue.go | 43 +++++-- token/core/zkatdlog/nogh/service.go | 5 +- token/core/zkatdlog/nogh/tokens.go | 4 +- token/core/zkatdlog/nogh/transfer.go | 11 +- token/driver/issue.go | 4 +- token/driver/publicparams.go | 4 +- token/driver/request.go | 33 +++-- token/driver/request_test.go | 13 +- token/driver/tokens.go | 3 +- token/driver/validator.go | 4 +- token/driver/wallet.go | 41 +++--- token/hashable.go | 33 +++++ token/metadata.go | 35 +++--- token/metadata_test.go | 37 +++--- token/provider.go | 14 ++- token/publicparams.go | 3 +- token/publicparams_test.go | 5 +- token/request.go | 118 +++++++----------- token/sdk/sdk.go | 3 + token/sdk/tokens/issued.go | 7 +- token/services/auditdb/db.go | 4 +- token/services/auditor/auditor.go | 4 +- .../services/certifier/interactive/client.go | 10 +- token/services/certifier/views/register.go | 4 +- token/services/db/sql/init.go | 4 +- .../identity/msp/idemix/cache/cache.go | 5 +- token/services/identity/msp/idemix/lm.go | 13 +- token/services/identity/msp/idemix/msp/id.go | 4 +- .../identity/msp/x509/msp/configbuilder.go | 4 +- token/services/identity/msp/x509/provider.go | 4 +- token/services/identity/provider.go | 4 +- token/services/identity/sig/sigservice.go | 4 +- token/services/identitydb/db.go | 4 +- token/services/interop/encoding/logger.go | 4 +- token/services/interop/htlc/logger.go | 4 +- .../services/logging/{logging => }/logger.go | 12 ++ token/services/network/common/finality.go | 3 +- .../common/rws/translator/translator.go | 5 +- token/services/network/fabric/processor.go | 4 +- token/services/network/fabric/tcc/tcc.go | 7 +- token/services/network/network.go | 4 +- token/services/network/orion/publicparams.go | 4 +- token/services/nfttx/transaction.go | 4 +- token/services/selector/mailman/mailman.go | 4 +- .../selector/simple/inmemory/locker.go | 4 +- token/services/selector/simple/provider.go | 4 +- token/services/tokendb/db.go | 4 +- token/services/tokens/tokens.go | 4 +- token/services/ttx/collect.go | 16 ++- token/services/ttx/logger.go | 4 +- token/services/ttxdb/db.go | 4 +- token/stream.go | 7 +- token/stream_test.go | 17 ++- token/tms.go | 11 +- token/vault.go | 16 ++- token/vault_test.go | 30 ++--- token/wallet.go | 35 +++--- 73 files changed, 442 insertions(+), 390 deletions(-) create mode 100644 token/hashable.go rename token/services/logging/{logging => }/logger.go (78%) diff --git a/token/core/cmd/pp/common/common.go b/token/core/cmd/pp/common/common.go index 839259502..44418a1fd 100644 --- a/token/core/cmd/pp/common/common.go +++ b/token/core/cmd/pp/common/common.go @@ -13,7 +13,7 @@ import ( "path/filepath" "strings" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" + "github.com/hyperledger-labs/fabric-token-sdk/token/driver" "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/msp" msp3 "github.com/hyperledger/fabric/msp" "github.com/pkg/errors" @@ -26,14 +26,14 @@ const ( // PP defines an interface shared by all public parameters type PP interface { // AddAuditor adds an auditor to the public parameters - AddAuditor(raw view.Identity) + AddAuditor(raw driver.Identity) // AddIssuer adds an issuer to the public parameters - AddIssuer(raw view.Identity) + AddIssuer(raw driver.Identity) } // GetMSPIdentity returns the MSP identity from the passed entry formatted as :. // If mspID is not empty, it will be used instead of the MSPID in the entry. -func GetMSPIdentity(entry string, mspID string) (view.Identity, error) { +func GetMSPIdentity(entry string, mspID string) (driver.Identity, error) { entries := strings.Split(entry, ":") if len(mspID) == 0 { if len(entries) != 2 { diff --git a/token/core/fabtoken/actions.go b/token/core/fabtoken/actions.go index aba2d91c0..ee4ec5bf1 100644 --- a/token/core/fabtoken/actions.go +++ b/token/core/fabtoken/actions.go @@ -9,7 +9,6 @@ package fabtoken import ( "encoding/json" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/driver" "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/pkg/errors" @@ -50,7 +49,7 @@ func (t *Output) IsRedeem() bool { // IssueAction encodes a fabtoken Issue type IssueAction struct { // issuer's public key - Issuer view.Identity + Issuer driver.Identity // new tokens to be issued Outputs []*Output // metadata of the issue action diff --git a/token/core/fabtoken/driver/driver.go b/token/core/fabtoken/driver/driver.go index e99977399..faffffd94 100644 --- a/token/core/fabtoken/driver/driver.go +++ b/token/core/fabtoken/driver/driver.go @@ -141,7 +141,7 @@ func (d *Driver) NewTokenService(sp driver.ServiceProvider, networkID string, ch common.NewSerializer(), deserializer, tmsConfig, - fabtoken.NewIssueService(publicParamsManager), + fabtoken.NewIssueService(publicParamsManager, ws, deserializer), fabtoken.NewTransferService(logger, publicParamsManager, ws, common.NewVaultTokenLoader(qe), deserializer), fabtoken.NewAuditorService(), fabtoken.NewTokensService(), diff --git a/token/core/fabtoken/issue.go b/token/core/fabtoken/issue.go index 8d373e49c..0a73f21d0 100644 --- a/token/core/fabtoken/issue.go +++ b/token/core/fabtoken/issue.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: Apache-2.0 package fabtoken import ( - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/driver" token2 "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/pkg/errors" @@ -15,16 +14,18 @@ import ( type IssueService struct { PublicParamsManager driver.PublicParamsManager + WalletService driver.WalletService + Deserializer driver.Deserializer } -func NewIssueService(publicParamsManager driver.PublicParamsManager) *IssueService { - return &IssueService{PublicParamsManager: publicParamsManager} +func NewIssueService(publicParamsManager driver.PublicParamsManager, walletService driver.WalletService, deserializer driver.Deserializer) *IssueService { + return &IssueService{PublicParamsManager: publicParamsManager, WalletService: walletService, Deserializer: deserializer} } // Issue returns an IssueAction as a function of the passed arguments // Issue also returns a serialization OutputMetadata associated with issued tokens // and the identity of the issuer -func (s *IssueService) Issue(issuerIdentity view.Identity, tokenType string, values []uint64, owners [][]byte, opts *driver.IssueOptions) (driver.IssueAction, *driver.IssueMetadata, error) { +func (s *IssueService) Issue(issuerIdentity driver.Identity, tokenType string, values []uint64, owners [][]byte, opts *driver.IssueOptions) (driver.IssueAction, *driver.IssueMetadata, error) { for _, owner := range owners { // a recipient cannot be empty if len(owner) == 0 { @@ -33,7 +34,7 @@ func (s *IssueService) Issue(issuerIdentity view.Identity, tokenType string, val } var outs []*Output - var metas [][]byte + var outputsMetadata [][]byte pp := s.PublicParamsManager.PublicParameters() if pp == nil { return nil, nil, errors.Errorf("public paramenters not set") @@ -61,15 +62,28 @@ func (s *IssueService) Issue(issuerIdentity view.Identity, tokenType string, val if err != nil { return nil, nil, errors.Wrapf(err, "failed serializing token information") } - metas = append(metas, metaRaw) + outputsMetadata = append(outputsMetadata, metaRaw) } - meta := &driver.IssueMetadata{ - Issuer: issuerIdentity, - TokenInfo: metas, + action := &IssueAction{Issuer: issuerIdentity, Outputs: outs} + outputs, err := action.GetSerializedOutputs() + if err != nil { + return nil, nil, err + } + auditInfo, err := s.Deserializer.GetOwnerAuditInfo(owners[0], s.WalletService) + if err != nil { + return nil, nil, err } - return &IssueAction{Issuer: issuerIdentity, Outputs: outs}, meta, nil + meta := &driver.IssueMetadata{ + Issuer: issuerIdentity, + Outputs: outputs, + OutputsMetadata: outputsMetadata, + Receivers: []driver.Identity{driver.Identity(owners[0])}, + ReceiversAuditInfos: auditInfo, + ExtraSigners: nil, + } + return action, meta, nil } // VerifyIssue checks if the outputs of an IssueAction match the passed tokenInfos diff --git a/token/core/fabtoken/setup.go b/token/core/fabtoken/setup.go index 3e6b19724..480a02bf5 100644 --- a/token/core/fabtoken/setup.go +++ b/token/core/fabtoken/setup.go @@ -10,7 +10,6 @@ import ( "encoding/json" "math" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/driver" "github.com/pkg/errors" ) @@ -106,27 +105,27 @@ func (pp *PublicParams) Deserialize(raw []byte) error { } // AuditorIdentity returns the auditor identity encoded in PublicParams -func (pp *PublicParams) AuditorIdentity() view.Identity { +func (pp *PublicParams) AuditorIdentity() driver.Identity { return pp.Auditor } // AddAuditor sets the Auditor field in PublicParams to the passed identity -func (pp *PublicParams) AddAuditor(auditor view.Identity) { +func (pp *PublicParams) AddAuditor(auditor driver.Identity) { pp.Auditor = auditor } // AddIssuer adds the passed issuer to the array of Issuers in PublicParams -func (pp *PublicParams) AddIssuer(issuer view.Identity) { +func (pp *PublicParams) AddIssuer(issuer driver.Identity) { pp.Issuers = append(pp.Issuers, issuer) } // Auditors returns the list of authorized auditors // fabtoken only supports a single auditor -func (pp *PublicParams) Auditors() []view.Identity { +func (pp *PublicParams) Auditors() []driver.Identity { if len(pp.Auditor) == 0 { - return []view.Identity{} + return []driver.Identity{} } - return []view.Identity{pp.Auditor} + return []driver.Identity{pp.Auditor} } // Precision returns the quantity precision encoded in PublicParams diff --git a/token/core/fabtoken/tokens.go b/token/core/fabtoken/tokens.go index 053a27bbb..99a0a43fc 100644 --- a/token/core/fabtoken/tokens.go +++ b/token/core/fabtoken/tokens.go @@ -9,8 +9,8 @@ package fabtoken import ( "encoding/json" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/core/common" + "github.com/hyperledger-labs/fabric-token-sdk/token/driver" token2 "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/pkg/errors" ) @@ -24,7 +24,7 @@ func NewTokensService() *TokensService { } // DeserializeToken returns a deserialized token and the identity of its issuer -func (s *TokensService) DeserializeToken(outputRaw []byte, tokenInfoRaw []byte) (*token2.Token, view.Identity, error) { +func (s *TokensService) DeserializeToken(outputRaw []byte, tokenInfoRaw []byte) (*token2.Token, driver.Identity, error) { tok := &token2.Token{} if err := json.Unmarshal(outputRaw, tok); err != nil { return nil, nil, errors.Wrap(err, "failed unmarshalling token") diff --git a/token/core/fabtoken/transfer.go b/token/core/fabtoken/transfer.go index 61c3ec16d..dd4f4574e 100644 --- a/token/core/fabtoken/transfer.go +++ b/token/core/fabtoken/transfer.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: Apache-2.0 package fabtoken import ( - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/core/common" "github.com/hyperledger-labs/fabric-token-sdk/token/core/common/logging" "github.com/hyperledger-labs/fabric-token-sdk/token/core/common/meta" @@ -49,9 +48,9 @@ func (s *TransferService) Transfer(txID string, wallet driver.OwnerWallet, token return nil, nil, errors.Wrapf(err, "failed to load tokens") } - var senders []view.Identity + var senders []driver.Identity for _, tok := range inputTokens { - s.Logger.Debugf("Selected output [%s,%s,%s]", tok.Type, tok.Quantity, view.Identity(tok.Owner.Raw)) + s.Logger.Debugf("Selected output [%s,%s,%s]", tok.Type, tok.Quantity, driver.Identity(tok.Owner.Raw)) senders = append(senders, tok.Owner.Raw) } @@ -80,7 +79,7 @@ func (s *TransferService) Transfer(txID string, wallet driver.OwnerWallet, token ws := s.WalletService // assemble transfer metadata - var receivers []view.Identity + var receivers []driver.Identity var outputAuditInfos [][]byte for i, output := range outs { if output.Output == nil || output.Output.Owner == nil { @@ -98,7 +97,7 @@ func (s *TransferService) Transfer(txID string, wallet driver.OwnerWallet, token receivers = append(receivers, recipients...) auditInfo, err := s.Deserializer.GetOwnerAuditInfo(output.Output.Owner.Raw, ws) if err != nil { - return nil, nil, errors.Wrapf(err, "failed getting audit info for sender identity [%s]", view.Identity(output.Output.Owner.Raw).String()) + return nil, nil, errors.Wrapf(err, "failed getting audit info for sender identity [%s]", driver.Identity(output.Output.Owner.Raw).String()) } outputAuditInfos = append(outputAuditInfos, auditInfo...) } @@ -107,7 +106,7 @@ func (s *TransferService) Transfer(txID string, wallet driver.OwnerWallet, token for _, t := range inputTokens { auditInfo, err := s.Deserializer.GetOwnerAuditInfo(t.Owner.Raw, ws) if err != nil { - return nil, nil, errors.Wrapf(err, "failed getting audit info for sender identity [%s]", view.Identity(t.Owner.Raw).String()) + return nil, nil, errors.Wrapf(err, "failed getting audit info for sender identity [%s]", driver.Identity(t.Owner.Raw).String()) } senderAuditInfos = append(senderAuditInfos, auditInfo...) } diff --git a/token/core/fabtoken/validator_transfer.go b/token/core/fabtoken/validator_transfer.go index 0d998a73d..f6f6f721a 100644 --- a/token/core/fabtoken/validator_transfer.go +++ b/token/core/fabtoken/validator_transfer.go @@ -10,7 +10,6 @@ import ( "encoding/json" "time" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/driver" "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity" htlc2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/interop/htlc" @@ -28,15 +27,15 @@ func TransferSignatureValidate(ctx *Context) error { ctx.InputTokens = inputTokens for _, tok := range inputTokens { - ctx.Logger.Debugf("check sender [%s]", view.Identity(tok.Owner.Raw).UniqueID()) + ctx.Logger.Debugf("check sender [%s]", driver.Identity(tok.Owner.Raw).UniqueID()) verifier, err := ctx.Deserializer.GetOwnerVerifier(tok.Owner.Raw) if err != nil { - return errors.Wrapf(err, "failed deserializing owner [%v][%s]", tok, view.Identity(tok.Owner.Raw).UniqueID()) + return errors.Wrapf(err, "failed deserializing owner [%v][%s]", tok, driver.Identity(tok.Owner.Raw).UniqueID()) } - ctx.Logger.Debugf("signature verification [%v][%s]", tok, view.Identity(tok.Owner.Raw).UniqueID()) + ctx.Logger.Debugf("signature verification [%v][%s]", tok, driver.Identity(tok.Owner.Raw).UniqueID()) sigma, err := ctx.SignatureProvider.HasBeenSignedBy(tok.Owner.Raw, verifier) if err != nil { - return errors.Wrapf(err, "failed signature verification [%v][%s]", tok, view.Identity(tok.Owner.Raw).UniqueID()) + return errors.Wrapf(err, "failed signature verification [%v][%s]", tok, driver.Identity(tok.Owner.Raw).UniqueID()) } ctx.Signatures = append(ctx.Signatures, sigma) } diff --git a/token/core/zkatdlog/crypto/audit/auditor.go b/token/core/zkatdlog/crypto/audit/auditor.go index a5ea0758d..42b13c422 100644 --- a/token/core/zkatdlog/crypto/audit/auditor.go +++ b/token/core/zkatdlog/crypto/audit/auditor.go @@ -331,12 +331,12 @@ func GetAuditInfoForIssues(issues [][]byte, metadata []driver.IssueMetadata) ([] return nil, err } - if len(ia.OutputTokens) != len(md.ReceiversAuditInfos) || len(ia.OutputTokens) != len(md.TokenInfo) { + if len(ia.OutputTokens) != len(md.ReceiversAuditInfos) || len(ia.OutputTokens) != len(md.OutputsMetadata) { return nil, errors.Errorf("number of output does not match number of provided metadata") } for i := 0; i < len(md.ReceiversAuditInfos); i++ { ti := &token.Metadata{} - err := json.Unmarshal(md.TokenInfo[i], ti) + err := json.Unmarshal(md.OutputsMetadata[i], ti) if err != nil { return nil, err } diff --git a/token/core/zkatdlog/crypto/audit/auditor_test.go b/token/core/zkatdlog/crypto/audit/auditor_test.go index 3fb5e56f7..510007ac2 100644 --- a/token/core/zkatdlog/crypto/audit/auditor_test.go +++ b/token/core/zkatdlog/crypto/audit/auditor_test.go @@ -17,7 +17,6 @@ import ( "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/kvs" registry2 "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/registry" - "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/zkatdlog/crypto" "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/crypto/audit" @@ -232,7 +231,7 @@ func (f *fakeProv) TranslatePath(path string) string { return "" } -func getIdemixInfo(dir string) (view.Identity, *msp3.AuditInfo) { +func getIdemixInfo(dir string) (driver.Identity, *msp3.AuditInfo) { registry := registry2.New() Expect(registry.RegisterService(&fakeProv{typ: "memory"})).NotTo(HaveOccurred()) @@ -271,7 +270,7 @@ func getIdemixInfo(dir string) (view.Identity, *msp3.AuditInfo) { return id, auditInfo } -func createInputs(pp *crypto.PublicParams, id view.Identity) ([]*token.Token, []*token.Metadata) { +func createInputs(pp *crypto.PublicParams, id driver.Identity) ([]*token.Token, []*token.Metadata) { c := math.Curves[pp.Curve] inputs := make([]*token.Token, 2) infos := make([]*token.Metadata, 2) @@ -294,7 +293,7 @@ func createInputs(pp *crypto.PublicParams, id view.Identity) ([]*token.Token, [] return inputs, infos } -func prepareTransfer(pp *crypto.PublicParams, id view.Identity) (*transfer2.TransferAction, []*token.Metadata, []*token.Token) { +func prepareTransfer(pp *crypto.PublicParams, id driver.Identity) (*transfer2.TransferAction, []*token.Metadata, []*token.Token) { inputs, tokenInfos := createInputs(pp, id) fakeSigner := &mock.SigningIdentity{} diff --git a/token/core/zkatdlog/crypto/common/identity.go b/token/core/zkatdlog/crypto/common/identity.go index 139d6b922..53e7f23c1 100644 --- a/token/core/zkatdlog/crypto/common/identity.go +++ b/token/core/zkatdlog/crypto/common/identity.go @@ -3,10 +3,10 @@ Copyright IBM Corp. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ + package common import ( - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/driver" "github.com/pkg/errors" ) @@ -18,7 +18,7 @@ type SigningIdentity interface { } type WrappedSigningIdentity struct { - Identity view.Identity + Identity driver.Identity Signer driver.Signer } diff --git a/token/core/zkatdlog/crypto/setup.go b/token/core/zkatdlog/crypto/setup.go index 09d055337..29eca1018 100644 --- a/token/core/zkatdlog/crypto/setup.go +++ b/token/core/zkatdlog/crypto/setup.go @@ -14,7 +14,6 @@ import ( "strconv" mathlib "github.com/IBM/mathlib" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/driver" "github.com/pkg/errors" ) @@ -151,11 +150,11 @@ func (pp *PublicParams) Bytes() ([]byte, error) { return pp.Serialize() } -func (pp *PublicParams) Auditors() []view.Identity { +func (pp *PublicParams) Auditors() []driver.Identity { if len(pp.Auditor) == 0 { - return []view.Identity{} + return []driver.Identity{} } - return []view.Identity{pp.Auditor} + return []driver.Identity{pp.Auditor} } func (pp *PublicParams) Serialize() ([]byte, error) { @@ -221,11 +220,11 @@ func (pp *PublicParams) GenerateRangeProofParameters(bitLength int) error { return nil } -func (pp *PublicParams) AddAuditor(auditor view.Identity) { +func (pp *PublicParams) AddAuditor(auditor driver.Identity) { pp.Auditor = auditor } -func (pp *PublicParams) AddIssuer(id view.Identity) { +func (pp *PublicParams) AddIssuer(id driver.Identity) { pp.Issuers = append(pp.Issuers, id) } diff --git a/token/core/zkatdlog/crypto/validator/validator_issue.go b/token/core/zkatdlog/crypto/validator/validator_issue.go index e8acccc4c..51b67cb55 100644 --- a/token/core/zkatdlog/crypto/validator/validator_issue.go +++ b/token/core/zkatdlog/crypto/validator/validator_issue.go @@ -9,8 +9,8 @@ package validator import ( "bytes" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/crypto/issue" + "github.com/hyperledger-labs/fabric-token-sdk/token/driver" "github.com/pkg/errors" ) @@ -38,13 +38,13 @@ func IssueValidate(ctx *Context) error { } } if !found { - return errors.Errorf("issuer [%s] is not in issuers", view.Identity(action.Issuer).String()) + return errors.Errorf("issuer [%s] is not in issuers", driver.Identity(action.Issuer).String()) } } verifier, err := ctx.Deserializer.GetIssuerVerifier(action.Issuer) if err != nil { - return errors.Wrapf(err, "failed getting verifier for [%s]", view.Identity(action.Issuer).String()) + return errors.Wrapf(err, "failed getting verifier for [%s]", driver.Identity(action.Issuer).String()) } if _, err := ctx.SignatureProvider.HasBeenSignedBy(action.Issuer, verifier); err != nil { return errors.Wrapf(err, "failed verifying signature") diff --git a/token/core/zkatdlog/crypto/validator/validator_test.go b/token/core/zkatdlog/crypto/validator/validator_test.go index e93e9f038..2d9d14bd6 100644 --- a/token/core/zkatdlog/crypto/validator/validator_test.go +++ b/token/core/zkatdlog/crypto/validator/validator_test.go @@ -18,7 +18,6 @@ import ( "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/kvs" registry2 "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/registry" - "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/core/zkatdlog/crypto" "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/crypto/audit" @@ -364,7 +363,7 @@ func (f *fakeProv) TranslatePath(path string) string { return "" } -func getIdemixInfo(dir string) (view.Identity, *msp3.AuditInfo, driver.SigningIdentity) { +func getIdemixInfo(dir string) (driver.Identity, *msp3.AuditInfo, driver.SigningIdentity) { registry := registry2.New() Expect(registry.RegisterService(&fakeProv{typ: "memory"})).NotTo(HaveOccurred()) @@ -423,7 +422,7 @@ func prepareIssue(auditor *audit.Auditor, issuer *issue2.Issuer) (*driver.TokenR } metadata := driver.IssueMetadata{} - metadata.TokenInfo = marshalledinf + metadata.OutputsMetadata = marshalledinf metadata.Outputs = make([][]byte, len(issue.OutputTokens)) metadata.ReceiversAuditInfos = make([][]byte, len(issue.OutputTokens)) for i := 0; i < len(issue.OutputTokens); i++ { diff --git a/token/core/zkatdlog/crypto/validator/validator_transfer.go b/token/core/zkatdlog/crypto/validator/validator_transfer.go index 70bd2aa70..742cef4ea 100644 --- a/token/core/zkatdlog/crypto/validator/validator_transfer.go +++ b/token/core/zkatdlog/crypto/validator/validator_transfer.go @@ -11,9 +11,9 @@ import ( "time" math "github.com/IBM/mathlib" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/crypto/token" "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/crypto/transfer" + "github.com/hyperledger-labs/fabric-token-sdk/token/driver" "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity" htlc2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/interop/htlc" "github.com/hyperledger-labs/fabric-token-sdk/token/services/interop/htlc" @@ -43,15 +43,15 @@ func TransferSignatureValidate(ctx *Context) error { return errors.Wrapf(err, "failed to deserialize input to spend [%s]", in) } tokens = append(tokens, tok) - ctx.Logger.Debugf("check sender [%d][%s]", i, view.Identity(tok.Owner).UniqueID()) + ctx.Logger.Debugf("check sender [%d][%s]", i, driver.Identity(tok.Owner).UniqueID()) verifier, err := ctx.Deserializer.GetOwnerVerifier(tok.Owner) if err != nil { - return errors.Wrapf(err, "failed deserializing owner [%d][%s][%s]", i, in, view.Identity(tok.Owner).UniqueID()) + return errors.Wrapf(err, "failed deserializing owner [%d][%s][%s]", i, in, driver.Identity(tok.Owner).UniqueID()) } - ctx.Logger.Debugf("signature verification [%d][%s][%s]", i, in, view.Identity(tok.Owner).UniqueID()) + ctx.Logger.Debugf("signature verification [%d][%s][%s]", i, in, driver.Identity(tok.Owner).UniqueID()) sigma, err := ctx.SignatureProvider.HasBeenSignedBy(tok.Owner, verifier) if err != nil { - return errors.Wrapf(err, "failed signature verification [%d][%s][%s]", i, in, view.Identity(tok.Owner).UniqueID()) + return errors.Wrapf(err, "failed signature verification [%d][%s][%s]", i, in, driver.Identity(tok.Owner).UniqueID()) } signatures = append(signatures, sigma) } diff --git a/token/core/zkatdlog/nogh/driver/driver.go b/token/core/zkatdlog/nogh/driver/driver.go index 33f3e8db0..6aa5bd440 100644 --- a/token/core/zkatdlog/nogh/driver/driver.go +++ b/token/core/zkatdlog/nogh/driver/driver.go @@ -155,7 +155,7 @@ func (d *Driver) NewTokenService(sp driver.ServiceProvider, networkID string, ch common.NewSerializer(), deserializer, tmsConfig, - zkatdlog.NewIssueService(ppm, ws), + zkatdlog.NewIssueService(ppm, ws, deserializer), zkatdlog.NewTransferService(logger, ppm, ws, common.NewVaultLedgerTokenAndMetadataLoader[*token3.Token, *token3.Metadata](qe, tokDeserializer), deserializer), zkatdlog.NewAuditorService(logger, ppm, common.NewLedgerTokenLoader[*token3.Token](logger, qe, tokDeserializer), deserializer), zkatdlog.NewTokensService(ppm), diff --git a/token/core/zkatdlog/nogh/issue.go b/token/core/zkatdlog/nogh/issue.go index 4ad6b2fad..6bd392c64 100644 --- a/token/core/zkatdlog/nogh/issue.go +++ b/token/core/zkatdlog/nogh/issue.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: Apache-2.0 package nogh import ( - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" common2 "github.com/hyperledger-labs/fabric-token-sdk/token/core/common" "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/crypto" "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/crypto/common" @@ -19,16 +18,25 @@ import ( type IssueService struct { PublicParametersManager common2.PublicParametersManager[*crypto.PublicParams] WalletService driver.WalletService + Deserializer driver.Deserializer } -func NewIssueService(publicParametersManager common2.PublicParametersManager[*crypto.PublicParams], walletService driver.WalletService) *IssueService { - return &IssueService{PublicParametersManager: publicParametersManager, WalletService: walletService} +func NewIssueService( + publicParametersManager common2.PublicParametersManager[*crypto.PublicParams], + walletService driver.WalletService, + deserializer driver.Deserializer, +) *IssueService { + return &IssueService{ + PublicParametersManager: publicParametersManager, + WalletService: walletService, + Deserializer: deserializer, + } } // Issue returns an IssueAction as a function of the passed arguments // Issue also returns a serialization TokenInformation associated with issued tokens // and the identity of the issuer -func (s *IssueService) Issue(issuerIdentity view.Identity, tokenType string, values []uint64, owners [][]byte, opts *driver.IssueOptions) (driver.IssueAction, *driver.IssueMetadata, error) { +func (s *IssueService) Issue(issuerIdentity driver.Identity, tokenType string, values []uint64, owners [][]byte, opts *driver.IssueOptions) (driver.IssueAction, *driver.IssueMetadata, error) { for _, owner := range owners { // a recipient cannot be empty if len(owner) == 0 { @@ -52,18 +60,18 @@ func (s *IssueService) Issue(issuerIdentity view.Identity, tokenType string, val Signer: signer, }, pp) - issue, outputMetadata, err := issuer.GenerateZKIssue(values, owners) + action, zkOutputsMetadata, err := issuer.GenerateZKIssue(values, owners) if err != nil { return nil, nil, err } - var outputMetadataRaw [][]byte - for _, meta := range outputMetadata { + var outputsMetadata [][]byte + for _, meta := range zkOutputsMetadata { raw, err := meta.Serialize() if err != nil { return nil, nil, errors.WithMessage(err, "failed serializing token info") } - outputMetadataRaw = append(outputMetadataRaw, raw) + outputsMetadata = append(outputsMetadata, raw) } issuerSerializedIdentity, err := issuer.Signer.Serialize() @@ -71,11 +79,24 @@ func (s *IssueService) Issue(issuerIdentity view.Identity, tokenType string, val return nil, nil, err } + outputs, err := action.GetSerializedOutputs() + if err != nil { + return nil, nil, err + } + auditInfo, err := s.Deserializer.GetOwnerAuditInfo(owners[0], s.WalletService) + if err != nil { + return nil, nil, err + } + meta := &driver.IssueMetadata{ - Issuer: issuerSerializedIdentity, - TokenInfo: outputMetadataRaw, + Issuer: issuerSerializedIdentity, + Outputs: outputs, + OutputsMetadata: outputsMetadata, + Receivers: []driver.Identity{driver.Identity(owners[0])}, + ReceiversAuditInfos: auditInfo, + ExtraSigners: nil, } - return issue, meta, err + return action, meta, err } // VerifyIssue checks if the outputs of an IssueAction match the passed metadata diff --git a/token/core/zkatdlog/nogh/service.go b/token/core/zkatdlog/nogh/service.go index 95a51fd8a..51d17186b 100644 --- a/token/core/zkatdlog/nogh/service.go +++ b/token/core/zkatdlog/nogh/service.go @@ -8,7 +8,6 @@ package nogh import ( "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/hash" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/core/common" "github.com/hyperledger-labs/fabric-token-sdk/token/core/common/logging" "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/crypto" @@ -25,7 +24,7 @@ type TokenCommitmentLoader interface { } type TokenLoader interface { - LoadTokens(ids []*token2.ID) ([]string, []*token.Token, []*token.Metadata, []view.Identity, error) + LoadTokens(ids []*token2.ID) ([]string, []*token.Token, []*token.Metadata, []driver.Identity, error) } type Service struct { @@ -72,7 +71,7 @@ func NewTokenService( // DeserializeToken un-marshals a token and token info from raw bytes // It checks if the un-marshalled token matches the token info. If not, it returns // an error. Else it returns the token in cleartext and the identity of its issuer -func (s *Service) DeserializeToken(tok []byte, infoRaw []byte) (*token2.Token, view.Identity, error) { +func (s *Service) DeserializeToken(tok []byte, infoRaw []byte) (*token2.Token, driver.Identity, error) { // get zkatdlog token output := &token.Token{} if err := output.Deserialize(tok); err != nil { diff --git a/token/core/zkatdlog/nogh/tokens.go b/token/core/zkatdlog/nogh/tokens.go index 74df48f9c..97d634f94 100644 --- a/token/core/zkatdlog/nogh/tokens.go +++ b/token/core/zkatdlog/nogh/tokens.go @@ -7,10 +7,10 @@ SPDX-License-Identifier: Apache-2.0 package nogh import ( - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/core/common" "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/crypto" token2 "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/crypto/token" + "github.com/hyperledger-labs/fabric-token-sdk/token/driver" "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/pkg/errors" ) @@ -27,7 +27,7 @@ func NewTokensService(publicParametersManager common.PublicParametersManager[*cr // DeserializeToken un-marshals a token and token info from raw bytes // It checks if the un-marshalled token matches the token info. If not, it returns // an error. Else it returns the token in cleartext and the identity of its issuer -func (s *TokensService) DeserializeToken(tok []byte, infoRaw []byte) (*token.Token, view.Identity, error) { +func (s *TokensService) DeserializeToken(tok []byte, infoRaw []byte) (*token.Token, driver.Identity, error) { // get zkatdlog token output := &token2.Token{} if err := output.Deserialize(tok); err != nil { diff --git a/token/core/zkatdlog/nogh/transfer.go b/token/core/zkatdlog/nogh/transfer.go index 430f76d57..f81bcb8b0 100644 --- a/token/core/zkatdlog/nogh/transfer.go +++ b/token/core/zkatdlog/nogh/transfer.go @@ -8,7 +8,6 @@ package nogh import ( math "github.com/IBM/mathlib" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/core/common" "github.com/hyperledger-labs/fabric-token-sdk/token/core/common/logging" "github.com/hyperledger-labs/fabric-token-sdk/token/core/common/meta" @@ -62,7 +61,7 @@ func (s *TransferService) Transfer(txID string, wallet driver.OwnerWallet, token } var values []uint64 var owners [][]byte - var receivers []view.Identity + var receivers []driver.Identity var outputAuditInfos [][]byte // get values and owners of outputs @@ -88,7 +87,7 @@ func (s *TransferService) Transfer(txID string, wallet driver.OwnerWallet, token receivers = append(receivers, recipients...) auditInfo, err := s.Deserializer.GetOwnerAuditInfo(output.Owner.Raw, s.WalletService) if err != nil { - return nil, nil, errors.Wrapf(err, "failed getting audit info for sender identity [%s]", view.Identity(output.Owner.Raw).String()) + return nil, nil, errors.Wrapf(err, "failed getting audit info for sender identity [%s]", driver.Identity(output.Owner.Raw).String()) } outputAuditInfos = append(outputAuditInfos, auditInfo...) } @@ -132,10 +131,10 @@ func (s *TransferService) Transfer(txID string, wallet driver.OwnerWallet, token for i, t := range tokens { auditInfo, err := s.Deserializer.GetOwnerAuditInfo(t.Owner, ws) if err != nil { - return nil, nil, errors.Wrapf(err, "failed getting audit info for sender identity [%s]", view.Identity(t.Owner).String()) + return nil, nil, errors.Wrapf(err, "failed getting audit info for sender identity [%s]", driver.Identity(t.Owner).String()) } if len(auditInfo) == 0 { - s.Logger.Errorf("empty audit info for the owner [%s] of the i^th token [%s]", tokenIDs[i].String(), view.Identity(t.Owner)) + s.Logger.Errorf("empty audit info for the owner [%s] of the i^th token [%s]", tokenIDs[i].String(), driver.Identity(t.Owner)) } senderAuditInfos = append(senderAuditInfos, auditInfo...) } @@ -199,7 +198,7 @@ func (s *TransferService) VerifyTransfer(action driver.TransferAction, outputsMe if err != nil { return errors.Wrap(err, "failed getting token in the clear") } - s.Logger.Debugf("transfer output [%s,%s,%s]", tok.Type, tok.Quantity, view.Identity(tok.Owner.Raw)) + s.Logger.Debugf("transfer output [%s,%s,%s]", tok.Type, tok.Quantity, driver.Identity(tok.Owner.Raw)) } return transfer.NewVerifier(tr.InputCommitments, com, pp).Verify(tr.Proof) diff --git a/token/driver/issue.go b/token/driver/issue.go index 786a4cab3..c0b83ee4c 100644 --- a/token/driver/issue.go +++ b/token/driver/issue.go @@ -6,8 +6,6 @@ SPDX-License-Identifier: Apache-2.0 package driver -import "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" - // IssueOptions models the options that can be passed to the issue command type IssueOptions struct { // Attributes is a container of generic options that might be driver specific @@ -22,7 +20,7 @@ type IssueService interface { // The function returns an IssuerAction, the associated metadata, and the identity of the issuer (depending on the implementation, it can be different from // the one passed in input). // The metadata is an array with an entry for each output created by the action. - Issue(issuerIdentity view.Identity, tokenType string, values []uint64, owners [][]byte, opts *IssueOptions) (IssueAction, *IssueMetadata, error) + Issue(issuerIdentity Identity, tokenType string, values []uint64, owners [][]byte, opts *IssueOptions) (IssueAction, *IssueMetadata, error) // VerifyIssue checks the well-formedness of the passed IssuerAction with the respect to the passed metadata VerifyIssue(tr IssueAction, metadata [][]byte) error diff --git a/token/driver/publicparams.go b/token/driver/publicparams.go index 58a693109..a7215434b 100644 --- a/token/driver/publicparams.go +++ b/token/driver/publicparams.go @@ -6,8 +6,6 @@ SPDX-License-Identifier: Apache-2.0 package driver -import "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" - // SerializedPublicParameters is the serialized form of PublicParameters. type SerializedPublicParameters struct { // Identifier is the unique identifier of this public parameters. @@ -47,7 +45,7 @@ type PublicParameters interface { // Bytes returns the marshalled version of the public parameters. Bytes() ([]byte, error) // Auditors returns the list of auditors. - Auditors() []view.Identity + Auditors() []Identity // Precision returns the precision used to represent the token value. Precision() uint64 // String returns a readable version of the public parameters diff --git a/token/driver/request.go b/token/driver/request.go index a67595e49..029bc03b9 100644 --- a/token/driver/request.go +++ b/token/driver/request.go @@ -10,7 +10,6 @@ import ( "bytes" "encoding/asn1" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/pkg/errors" ) @@ -42,20 +41,20 @@ func (r *TokenRequest) FromBytes(raw []byte) error { // For each output, there is a token info and a list of receivers with their audit info to recover their enrollment ID. type IssueMetadata struct { // Issuer is the identity of the issuer - Issuer view.Identity + Issuer Identity // Outputs is the list of outputs issued Outputs [][]byte - // TokenInfo, for each output we have a TokenInfo entry that contains secrets to de-obfuscate the output - TokenInfo [][]byte + // OutputsMetadata, for each output we have a OutputsMetadata entry that contains secrets to de-obfuscate the output + OutputsMetadata [][]byte // Receivers, for each output we have a receiver - Receivers []view.Identity + Receivers []Identity // ReceiversAuditInfos, for each receiver we have audit info to recover the enrollment ID of the receiver ReceiversAuditInfos [][]byte // ExtraSigners is the list of extra identities that are not part of the issue action per se // but needs to sign the request - ExtraSigners []view.Identity + ExtraSigners []Identity } // TransferMetadata contains the metadata of a transfer action @@ -69,7 +68,7 @@ type TransferMetadata struct { // TokenIDs is the list of TokenIDs spent by this action TokenIDs []*token.ID // Senders is the list of senders - Senders []view.Identity + Senders []Identity // SendersAuditInfos, for each sender we have audit info to recover the enrollment ID of the sender SenderAuditInfos [][]byte @@ -80,7 +79,7 @@ type TransferMetadata struct { // OutputAuditInfos, for each output owner we have audit info OutputAuditInfos [][]byte // Receivers is the list of receivers - Receivers []view.Identity + Receivers []Identity // ReceiversAuditInfos, for each receiver we have audit info to recover the enrollment ID of the receiver ReceiverAuditInfos [][]byte // ReceiverIsSender indicates if the receiver is a sender in this very same action @@ -88,7 +87,7 @@ type TransferMetadata struct { // ExtraSigners is the list of extra identities that are not part of the transfer action per se // but needs to sign the request - ExtraSigners []view.Identity + ExtraSigners []Identity } // TokenIDAt returns the TokenID at the given index. @@ -110,12 +109,12 @@ type TokenRequestMetadata struct { Application map[string][]byte } -// GetTokenInfo returns the TokenInfo that matches the given token +// GetTokenInfo returns the OutputsMetadata that matches the given token func (m *TokenRequestMetadata) GetTokenInfo(tokenRaw []byte) []byte { for _, issue := range m.Issues { for i, output := range issue.Outputs { if bytes.Equal(output, tokenRaw) { - return issue.TokenInfo[i] + return issue.OutputsMetadata[i] } } } @@ -146,7 +145,7 @@ func (m *TokenRequestMetadata) Bytes() ([]byte, error) { TokenIDs: TokenIDs, Outputs: transfer.Outputs, OutputAuditInfos: transfer.OutputAuditInfos, - TokenInfo: transfer.OutputsMetadata, + OutputsMetadata: transfer.OutputsMetadata, Senders: transfer.Senders, SenderAuditInfos: transfer.SenderAuditInfos, Receivers: transfer.Receivers, @@ -184,7 +183,7 @@ func (m *TokenRequestMetadata) FromBytes(raw []byte) error { TokenIDs: TokenIDs, Outputs: transfer.Outputs, OutputAuditInfos: transfer.OutputAuditInfos, - OutputsMetadata: transfer.TokenInfo, + OutputsMetadata: transfer.OutputsMetadata, Senders: transfer.Senders, SenderAuditInfos: transfer.SenderAuditInfos, Receivers: transfer.Receivers, @@ -209,13 +208,13 @@ type TransferMetadataSer struct { TokenIDs []TokenIDSer Outputs [][]byte OutputAuditInfos [][]byte - TokenInfo [][]byte - Senders []view.Identity + OutputsMetadata [][]byte + Senders []Identity SenderAuditInfos [][]byte - Receivers []view.Identity + Receivers []Identity ReceiverIsSender []bool ReceiverAuditInfos [][]byte - ExtraSigners []view.Identity + ExtraSigners []Identity } type tokenRequestMetadataSer struct { diff --git a/token/driver/request_test.go b/token/driver/request_test.go index ca893ce71..7184b1b05 100644 --- a/token/driver/request_test.go +++ b/token/driver/request_test.go @@ -9,7 +9,6 @@ package driver import ( "testing" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/stretchr/testify/assert" token2 "github.com/hyperledger-labs/fabric-token-sdk/token/token" @@ -43,11 +42,11 @@ func TestTokenRequestMetadataSerialization(t *testing.T) { []byte("output1"), []byte("output2"), }, - TokenInfo: [][]byte{ + OutputsMetadata: [][]byte{ []byte("token_info1"), []byte("token_info2"), }, - Receivers: []view.Identity{ + Receivers: []Identity{ []byte("receiver1"), []byte("receiver2"), }, @@ -55,7 +54,7 @@ func TestTokenRequestMetadataSerialization(t *testing.T) { []byte("audit_info1"), []byte("audit_info2"), }, - ExtraSigners: []view.Identity{ + ExtraSigners: []Identity{ []byte("issue_extra_signer1"), []byte("issue_extra_signer2"), }, @@ -85,7 +84,7 @@ func TestTokenRequestMetadataSerialization(t *testing.T) { []byte("output_token_audit_info1"), []byte("output_token_audit_info2"), }, - Senders: []view.Identity{ + Senders: []Identity{ []byte("sender1"), []byte("sender2"), }, @@ -93,7 +92,7 @@ func TestTokenRequestMetadataSerialization(t *testing.T) { []byte("sender_audit_info1"), []byte("sender_audit_info2"), }, - Receivers: []view.Identity{ + Receivers: []Identity{ []byte("receiver1"), []byte("receiver2"), }, @@ -102,7 +101,7 @@ func TestTokenRequestMetadataSerialization(t *testing.T) { []byte("receiver_audit_info1"), []byte("receiver_audit_info2"), }, - ExtraSigners: []view.Identity{ + ExtraSigners: []Identity{ []byte("extra_signer1"), []byte("extra_signer2"), }, diff --git a/token/driver/tokens.go b/token/driver/tokens.go index 21946b13a..a5f055fe8 100644 --- a/token/driver/tokens.go +++ b/token/driver/tokens.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: Apache-2.0 package driver import ( - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" token2 "github.com/hyperledger-labs/fabric-token-sdk/token/token" ) @@ -15,7 +14,7 @@ import ( type TokensService interface { // DeserializeToken unmarshals the passed output and uses the passed metadata to derive a token and its issuer (if any). - DeserializeToken(output []byte, outputMetadata []byte) (*token2.Token, view.Identity, error) + DeserializeToken(output []byte, outputMetadata []byte) (*token2.Token, Identity, error) // GetTokenInfo extracts from the given metadata the token info entry corresponding to the given target GetTokenInfo(meta *TokenRequestMetadata, target []byte) ([]byte, error) diff --git a/token/driver/validator.go b/token/driver/validator.go index 688f97ac0..d2163b67d 100644 --- a/token/driver/validator.go +++ b/token/driver/validator.go @@ -6,8 +6,6 @@ SPDX-License-Identifier: Apache-2.0 package driver -import "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" - // ValidationAttributeID is the type of validation attribute identifier type ValidationAttributeID = string @@ -25,7 +23,7 @@ type Ledger interface { type SignatureProvider interface { // HasBeenSignedBy returns true and the verified signature if the provider contains a valid signature for the passed identity and verifier - HasBeenSignedBy(id view.Identity, verifier Verifier) ([]byte, error) + HasBeenSignedBy(id Identity, verifier Verifier) ([]byte, error) // Signatures returns the signatures inside this provider Signatures() [][]byte } diff --git a/token/driver/wallet.go b/token/driver/wallet.go index c43898996..9cf479577 100644 --- a/token/driver/wallet.go +++ b/token/driver/wallet.go @@ -7,14 +7,13 @@ SPDX-License-Identifier: Apache-2.0 package driver import ( - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/token" ) // RecipientData contains information about the identity of a token owner type RecipientData struct { // Identity is the identity of the token owner - Identity view.Identity + Identity Identity // AuditInfo contains private information Identity AuditInfo []byte // TokenMetadata contains public information related to the token to be assigned to this Recipient. @@ -35,13 +34,13 @@ type Wallet interface { ID() string // Contains returns true if the passed identity belongs to this wallet - Contains(identity view.Identity) bool + Contains(identity Identity) bool // ContainsToken returns true if the passed token is owned by this wallet ContainsToken(token *token.UnspentToken) bool // GetSigner returns the Signer bound to the passed identity - GetSigner(identity view.Identity) (Signer, error) + GetSigner(identity Identity) (Signer, error) } // OwnerWallet models the wallet of a token recipient. @@ -54,16 +53,16 @@ type OwnerWallet interface { // - Identity audit info via GetAuditInfo; // - TokenMetadata via GetTokenMetadata; // - TokenIdentityMetadata via GetTokenMetadataAuditInfo. - GetRecipientIdentity() (view.Identity, error) + GetRecipientIdentity() (Identity, error) // GetAuditInfo returns auditing information for the passed identity - GetAuditInfo(id view.Identity) ([]byte, error) + GetAuditInfo(id Identity) ([]byte, error) // GetTokenMetadata returns the public information related to the token to be assigned to passed recipient identity. - GetTokenMetadata(id view.Identity) ([]byte, error) + GetTokenMetadata(id Identity) ([]byte, error) // GetTokenMetadataAuditInfo returns private information about the token metadata assigned to the passed recipient identity. - GetTokenMetadataAuditInfo(id view.Identity) ([]byte, error) + GetTokenMetadataAuditInfo(id Identity) ([]byte, error) // ListTokens returns the list of unspent tokens owned by this wallet filtered using the passed options. ListTokens(opts *ListTokensOptions) (*token.UnspentTokens, error) @@ -87,7 +86,7 @@ type IssuerWallet interface { // GetIssuerIdentity returns an issuer identity for the passed token type. // Depending on the underlying wallet implementation, this can be a long-term or ephemeral identity. - GetIssuerIdentity(tokenType string) (view.Identity, error) + GetIssuerIdentity(tokenType string) (Identity, error) // HistoryTokens returns the list of tokens issued by this wallet filtered using the passed options. HistoryTokens(opts *ListTokensOptions) (*token.IssuedTokens, error) @@ -99,7 +98,7 @@ type AuditorWallet interface { // GetAuditorIdentity returns an auditor identity. // Depending on the underlying wallet implementation, this can be a long-term or ephemeral identity. - GetAuditorIdentity() (view.Identity, error) + GetAuditorIdentity() (Identity, error) } // CertifierWallet models the wallet of a certifier @@ -108,7 +107,7 @@ type CertifierWallet interface { // GetCertifierIdentity returns a certifier identity. // Depending on the underlying wallet implementation, this can be a long-term or ephemeral identity. - GetCertifierIdentity() (view.Identity, error) + GetCertifierIdentity() (Identity, error) } type IdentityConfiguration struct { @@ -131,16 +130,16 @@ type WalletService interface { RegisterRecipientIdentity(data *RecipientData) error // GetAuditInfo retrieves the audit information for the passed identity - GetAuditInfo(id view.Identity) ([]byte, error) + GetAuditInfo(id Identity) ([]byte, error) // GetEnrollmentID extracts the enrollment id from the passed audit information - GetEnrollmentID(identity view.Identity, auditInfo []byte) (string, error) + GetEnrollmentID(identity Identity, auditInfo []byte) (string, error) // GetRevocationHandler extracts the revocation handler from the passed audit information - GetRevocationHandler(identity view.Identity, auditInfo []byte) (string, error) + GetRevocationHandler(identity Identity, auditInfo []byte) (string, error) // Wallet returns the wallet bound to the passed identity, if any is available - Wallet(identity view.Identity) Wallet + Wallet(identity Identity) Wallet // RegisterOwnerIdentity registers an owner long-term identity RegisterOwnerIdentity(config IdentityConfiguration) error @@ -180,7 +179,7 @@ type Matcher interface { // AuditInfoProvider models a provider of audit information type AuditInfoProvider interface { // GetAuditInfo returns the audit information for the given identity, if available. - GetAuditInfo(identity view.Identity) ([]byte, error) + GetAuditInfo(identity Identity) ([]byte, error) } //go:generate counterfeiter -o mock/deserializer.go -fake-name Deserializer . Deserializer @@ -189,18 +188,18 @@ type AuditInfoProvider interface { // get signature verifiers type Deserializer interface { // GetOwnerVerifier returns the verifier associated to the passed owner identity - GetOwnerVerifier(id view.Identity) (Verifier, error) + GetOwnerVerifier(id Identity) (Verifier, error) // GetIssuerVerifier returns the verifier associated to the passed issuer identity - GetIssuerVerifier(id view.Identity) (Verifier, error) + GetIssuerVerifier(id Identity) (Verifier, error) // GetAuditorVerifier returns the verifier associated to the passed auditor identity - GetAuditorVerifier(id view.Identity) (Verifier, error) + GetAuditorVerifier(id Identity) (Verifier, error) // GetOwnerMatcher returns an identity matcher for the passed identity audit data GetOwnerMatcher(auditData []byte) (Matcher, error) // Recipients returns the recipient identities from the given serialized representation - Recipients(raw view.Identity) ([]view.Identity, error) + Recipients(raw Identity) ([]Identity, error) // MatchOwnerIdentity returns nil if the given identity matches the given audit information. // An error otherwise - MatchOwnerIdentity(identity view.Identity, info []byte) error + MatchOwnerIdentity(identity Identity, info []byte) error // GetOwnerAuditInfo returns the audit information for each identity contained in the given serialized representation GetOwnerAuditInfo(id Identity, p AuditInfoProvider) ([][]byte, error) } diff --git a/token/hashable.go b/token/hashable.go new file mode 100644 index 000000000..8cad64687 --- /dev/null +++ b/token/hashable.go @@ -0,0 +1,33 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package token + +import ( + "crypto/sha256" + "encoding/base64" +) + +type Hashable []byte + +func (id Hashable) Raw() []byte { + if len(id) == 0 { + return nil + } + hash := sha256.New() + n, err := hash.Write(id) + if n != len(id) { + panic("hash failure") + } + if err != nil { + panic(err) + } + return hash.Sum(nil) +} + +func (id Hashable) String() string { return base64.StdEncoding.EncodeToString(id.Raw()) } + +func (id Hashable) RawString() string { return string(id.Raw()) } diff --git a/token/metadata.go b/token/metadata.go index fdbee41d6..c1375e6be 100644 --- a/token/metadata.go +++ b/token/metadata.go @@ -7,9 +7,8 @@ SPDX-License-Identifier: Apache-2.0 package token import ( - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/hash" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/driver" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/pkg/errors" ) @@ -19,13 +18,14 @@ type Metadata struct { TokenService driver.TokensService WalletService driver.WalletService TokenRequestMetadata *driver.TokenRequestMetadata + Logger logging.Logger } // GetToken unmarshals the given bytes to extract the token and its issuer (if any). -func (m *Metadata) GetToken(raw []byte) (*token.Token, view.Identity, []byte, error) { +func (m *Metadata) GetToken(raw []byte) (*token.Token, Identity, []byte, error) { tokenInfoRaw, err := m.TokenService.GetTokenInfo(m.TokenRequestMetadata, raw) if err != nil { - return nil, nil, nil, errors.WithMessagef(err, "metadata for [%s] not found", hash.Hashable(raw).String()) + return nil, nil, nil, errors.WithMessagef(err, "metadata for [%s] not found", Hashable(raw).String()) } tok, id, err := m.TokenService.DeserializeToken(raw, tokenInfoRaw) if err != nil { @@ -57,6 +57,7 @@ func (m *Metadata) FilterBy(eIDs ...string) (*Metadata, error) { TokenService: m.TokenService, WalletService: m.WalletService, TokenRequestMetadata: &driver.TokenRequestMetadata{}, + Logger: m.Logger, } // filter issues @@ -73,21 +74,21 @@ func (m *Metadata) FilterBy(eIDs ...string) (*Metadata, error) { return nil, errors.Wrap(err, "failed getting enrollment ID") } var Outputs []byte - var TokenInfo []byte - var Receivers view.Identity + var OutputsMetadata []byte + var Receivers Identity var ReceiverAuditInfos []byte if search(eIDs, recipientEID) != -1 { Outputs = issue.Outputs[i] - TokenInfo = issue.TokenInfo[i] + OutputsMetadata = issue.OutputsMetadata[i] Receivers = issue.Receivers[i] ReceiverAuditInfos = issue.ReceiversAuditInfos[i] } else { - logger.Debugf("skipping issue for [%s]", recipientEID) + m.Logger.Debugf("skipping issue for [%s]", recipientEID) } issueRes.Outputs = append(issueRes.Outputs, Outputs) - issueRes.TokenInfo = append(issueRes.TokenInfo, TokenInfo) + issueRes.OutputsMetadata = append(issueRes.OutputsMetadata, OutputsMetadata) issueRes.Receivers = append(issueRes.Receivers, Receivers) issueRes.ReceiversAuditInfos = append(issueRes.ReceiversAuditInfos, ReceiverAuditInfos) } @@ -111,12 +112,12 @@ func (m *Metadata) FilterBy(eIDs ...string) (*Metadata, error) { } var Outputs []byte var TokenInfo []byte - var Receivers view.Identity + var Receivers Identity var ReceiverIsSender bool var ReceiverAuditInfos []byte if search(eIDs, recipientEID) != -1 { - logger.Debugf("keeping transfer for [%s]", recipientEID) + m.Logger.Debugf("keeping transfer for [%s]", recipientEID) Outputs = transfer.Outputs[i] TokenInfo = transfer.OutputsMetadata[i] Receivers = transfer.Receivers[i] @@ -124,7 +125,7 @@ func (m *Metadata) FilterBy(eIDs ...string) (*Metadata, error) { ReceiverAuditInfos = transfer.ReceiverAuditInfos[i] skip = false } else { - logger.Debugf("skipping transfer for [%s]", recipientEID) + m.Logger.Debugf("skipping transfer for [%s]", recipientEID) } transferRes.Outputs = append(transferRes.Outputs, Outputs) @@ -145,14 +146,14 @@ func (m *Metadata) FilterBy(eIDs ...string) (*Metadata, error) { } } - logger.Debugf("keeping transfer with [%d] out of [%d] outputs", len(transferRes.Outputs), len(transfer.Outputs)) + m.Logger.Debugf("keeping transfer with [%d] out of [%d] outputs", len(transferRes.Outputs), len(transfer.Outputs)) res.TokenRequestMetadata.Transfers = append(res.TokenRequestMetadata.Transfers, transferRes) } // application res.TokenRequestMetadata.Application = m.TokenRequestMetadata.Application - logger.Debugf("filtered metadata for [% x] from [%d:%d] to [%d:%d]", + m.Logger.Debugf("filtered metadata for [% x] from [%d:%d] to [%d:%d]", eIDs, len(m.TokenRequestMetadata.Issues), len(m.TokenRequestMetadata.Transfers), len(res.TokenRequestMetadata.Issues), len(res.TokenRequestMetadata.Transfers)) @@ -192,8 +193,8 @@ func (m *IssueMetadata) Match(action *IssueAction) error { if len(m.Outputs) != action.NumOutputs() { return errors.Errorf("expected [%d] outputs but got [%d]", len(m.Outputs), action.NumOutputs()) } - if len(m.Outputs) != len(m.TokenInfo) { - return errors.Errorf("expected [%d] token info but got [%d]", len(m.Outputs), len(m.TokenInfo)) + if len(m.Outputs) != len(m.OutputsMetadata) { + return errors.Errorf("expected [%d] token info but got [%d]", len(m.Outputs), len(m.OutputsMetadata)) } if len(m.Outputs) != len(m.Receivers) { return errors.Errorf("expected [%d] receivers but got [%d]", len(m.Outputs), len(m.Receivers)) @@ -206,7 +207,7 @@ func (m *IssueMetadata) Match(action *IssueAction) error { // IsOutputAbsent returns true if the given output's metadata is absent func (m *IssueMetadata) IsOutputAbsent(j int) bool { - return len(m.TokenInfo[j]) == 0 + return len(m.OutputsMetadata[j]) == 0 } // TransferMetadata contains the metadata of a transfer action diff --git a/token/metadata_test.go b/token/metadata_test.go index 5a416f951..6a932127f 100644 --- a/token/metadata_test.go +++ b/token/metadata_test.go @@ -9,10 +9,10 @@ package token_test import ( "testing" - "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/driver" "github.com/hyperledger-labs/fabric-token-sdk/token/driver/mock" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" token2 "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/test-go/testify/assert" ) @@ -39,11 +39,11 @@ func testFilterByCase0(t *testing.T) { Index: 0, }, }, - Senders: []view.Identity{view.Identity("Alice")}, + Senders: []token.Identity{token.Identity("Alice")}, SenderAuditInfos: [][]byte{[]byte("Alice")}, Outputs: [][]byte{[]byte("Bob's output")}, OutputsMetadata: [][]byte{[]byte("Bob's output's token info")}, - Receivers: []view.Identity{view.Identity("Bob")}, + Receivers: []token.Identity{token.Identity("Bob")}, ReceiverAuditInfos: [][]byte{[]byte("Bob")}, ReceiverIsSender: []bool{false}, } @@ -55,11 +55,11 @@ func testFilterByCase0(t *testing.T) { Index: 0, }, }, - Senders: []view.Identity{view.Identity("Charlie")}, + Senders: []token.Identity{token.Identity("Charlie")}, SenderAuditInfos: [][]byte{[]byte("Charlie")}, Outputs: [][]byte{[]byte("Dave's output")}, OutputsMetadata: [][]byte{[]byte("Dave's output's token info")}, - Receivers: []view.Identity{view.Identity("Dave")}, + Receivers: []token.Identity{token.Identity("Dave")}, ReceiverAuditInfos: [][]byte{[]byte("Dave")}, ReceiverIsSender: []bool{false}, } @@ -85,6 +85,7 @@ func testFilterByCase0(t *testing.T) { "application": []byte("application"), }, }, + Logger: logging.MustGetLogger("test"), } // Filter by Bob filteredMetadata, err := metadata.FilterBy("Bob") @@ -149,19 +150,19 @@ func testFilterByCase1(t *testing.T) { // Alice's issue aliceIssue := driver.IssueMetadata{ - Issuer: view.Identity("Issuer"), + Issuer: token.Identity("Issuer"), Outputs: [][]byte{[]byte("Alice's output")}, - TokenInfo: [][]byte{[]byte("Alice's output's token info")}, - Receivers: []view.Identity{view.Identity("Alice")}, + OutputsMetadata: [][]byte{[]byte("Alice's output's token info")}, + Receivers: []token.Identity{token.Identity("Alice")}, ReceiversAuditInfos: [][]byte{[]byte("Alice")}, } // Bob's issue bobIssue := driver.IssueMetadata{ - Issuer: view.Identity("Issuer"), + Issuer: token.Identity("Issuer"), Outputs: [][]byte{[]byte("Bob's output")}, - TokenInfo: [][]byte{[]byte("Bob's output's token info")}, - Receivers: []view.Identity{view.Identity("Bob")}, + OutputsMetadata: [][]byte{[]byte("Bob's output's token info")}, + Receivers: []token.Identity{token.Identity("Bob")}, ReceiversAuditInfos: [][]byte{[]byte("Bob")}, } @@ -183,6 +184,7 @@ func testFilterByCase1(t *testing.T) { bobIssue, }, }, + Logger: logging.MustGetLogger("test"), } // Filter by Alice @@ -245,7 +247,7 @@ func testFilterByCase1(t *testing.T) { func assertEqualIssueMetadata(t *testing.T, original, filtered *driver.IssueMetadata) { assert.Equal(t, original.Issuer, filtered.Issuer) assert.Equal(t, original.Outputs, filtered.Outputs) - assert.Equal(t, original.TokenInfo, filtered.TokenInfo) + assert.Equal(t, original.OutputsMetadata, filtered.OutputsMetadata) assert.Equal(t, original.Receivers, filtered.Receivers) } @@ -254,7 +256,7 @@ func assertEmptyIssueMetadata(t *testing.T, original, filtered *driver.IssueMeta assert.Equal(t, original.Issuer, filtered.Issuer) // assert that the lengths are the same assert.Len(t, original.Outputs, len(filtered.Outputs)) - assert.Len(t, original.TokenInfo, len(filtered.TokenInfo)) + assert.Len(t, original.OutputsMetadata, len(filtered.OutputsMetadata)) assert.Len(t, original.Receivers, len(filtered.Receivers)) assert.Len(t, original.ReceiversAuditInfos, len(filtered.ReceiversAuditInfos)) @@ -263,8 +265,8 @@ func assertEmptyIssueMetadata(t *testing.T, original, filtered *driver.IssueMeta assert.Empty(t, filtered.Outputs[i]) } // assert that the token info is empty - for i := 0; i < len(original.TokenInfo); i++ { - assert.Empty(t, filtered.TokenInfo[i]) + for i := 0; i < len(original.OutputsMetadata); i++ { + assert.Empty(t, filtered.OutputsMetadata[i]) } // assert that the receivers are empty for i := 0; i < len(original.Receivers); i++ { @@ -330,17 +332,18 @@ func TestMetadata_GetToken(t *testing.T) { TokenService: mockTokenService, WalletService: mockWalletService, TokenRequestMetadata: &driver.TokenRequestMetadata{}, + Logger: logging.MustGetLogger("test"), } // Mocks and expectations raw := []byte("some raw data") expectedToken := &token2.Token{} - expectedIdentity := view.Identity("identity1") + expectedIdentity := token.Identity("identity1") expectedTokenInfoRaw := []byte("token info raw") mockTokenService.GetTokenInfoStub = func(metadata *driver.TokenRequestMetadata, raw []byte) ([]byte, error) { return expectedTokenInfoRaw, nil } - mockTokenService.DeserializeTokenStub = func(raw []byte, tokenInfoRaw []byte) (*token2.Token, view.Identity, error) { + mockTokenService.DeserializeTokenStub = func(raw []byte, tokenInfoRaw []byte) (*token2.Token, token.Identity, error) { return expectedToken, expectedIdentity, nil } diff --git a/token/provider.go b/token/provider.go index bbefe0201..9c359edbb 100644 --- a/token/provider.go +++ b/token/provider.go @@ -7,8 +7,8 @@ SPDX-License-Identifier: Apache-2.0 package token import ( - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/hash" "github.com/hyperledger-labs/fabric-token-sdk/token/driver" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/pkg/errors" ) @@ -50,6 +50,7 @@ type CertificationClientProvider interface { // ManagementServiceProvider provides instances of the management service type ManagementServiceProvider struct { + logger logging.Logger tmsProvider driver.TokenManagerServiceProvider normalizer Normalizer certificationClientProvider CertificationClientProvider @@ -59,6 +60,7 @@ type ManagementServiceProvider struct { // NewManagementServiceProvider returns a new instance of ManagementServiceProvider func NewManagementServiceProvider( + logger logging.Logger, tmsProvider driver.TokenManagerServiceProvider, normalizer Normalizer, vaultProvider VaultProvider, @@ -66,6 +68,7 @@ func NewManagementServiceProvider( selectorManagerProvider SelectorManagerProvider, ) *ManagementServiceProvider { return &ManagementServiceProvider{ + logger: logger, tmsProvider: tmsProvider, normalizer: normalizer, vaultProvider: vaultProvider, @@ -95,7 +98,7 @@ func (p *ManagementServiceProvider) managementService(aNew bool, opts ...Service return nil, errors.Wrap(err, "failed to normalize options") } - logger.Debugf("get tms for [%s,%s,%s]", opt.Network, opt.Channel, opt.Namespace) + p.logger.Debugf("get tms for [%s,%s,%s]", opt.Network, opt.Channel, opt.Namespace) var tokenService driver.TokenManagerService driverOpts := driver.ServiceOptions{ @@ -115,9 +118,10 @@ func (p *ManagementServiceProvider) managementService(aNew bool, opts ...Service return nil, errors.Wrapf(err, "failed getting TMS for [%s]", opt) } - logger.Debugf("returning tms for [%s,%s,%s]", opt.Network, opt.Channel, opt.Namespace) + p.logger.Debugf("returning tms for [%s,%s,%s]", opt.Network, opt.Channel, opt.Namespace) ms := &ManagementService{ + logger: logging.DeriveDriverLogger(p.logger, "", opt.Network, opt.Channel, opt.Namespace), network: opt.Network, channel: opt.Channel, namespace: opt.Namespace, @@ -137,7 +141,7 @@ func (p *ManagementServiceProvider) managementService(aNew bool, opts ...Service } func (p *ManagementServiceProvider) Update(tmsID TMSID, val []byte) error { - logger.Debugf("update tms [%s] with public params [%s]", tmsID, hash.Hashable(val)) + p.logger.Debugf("update tms [%s] with public params [%s]", tmsID, Hashable(val)) err := p.tmsProvider.Update(driver.ServiceOptions{ Network: tmsID.Network, Channel: tmsID.Channel, @@ -147,7 +151,7 @@ func (p *ManagementServiceProvider) Update(tmsID TMSID, val []byte) error { if err != nil { return errors.Wrapf(err, "failed updating tms [%s]", tmsID) } - logger.Debugf("update tms [%s] with public params [%s]...done", tmsID, hash.Hashable(val)) + p.logger.Debugf("update tms [%s] with public params [%s]...done", tmsID, Hashable(val)) return nil } diff --git a/token/publicparams.go b/token/publicparams.go index be115f800..f40da0483 100644 --- a/token/publicparams.go +++ b/token/publicparams.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: Apache-2.0 package token import ( - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/driver" ) @@ -52,7 +51,7 @@ func (c *PublicParameters) Identifier() string { } // Auditors returns the list of auditors' identities -func (c *PublicParameters) Auditors() []view.Identity { +func (c *PublicParameters) Auditors() []Identity { return c.PublicParameters.Auditors() } diff --git a/token/publicparams_test.go b/token/publicparams_test.go index 2250a1ab6..dc0dd67f1 100644 --- a/token/publicparams_test.go +++ b/token/publicparams_test.go @@ -9,7 +9,6 @@ package token import ( "testing" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/driver/mock" "github.com/stretchr/testify/assert" ) @@ -112,11 +111,11 @@ func TestPublicParameters_Auditors(t *testing.T) { } mockPP := pp.PublicParameters.(*mock.PublicParameters) - mockPP.AuditorsReturns([]view.Identity{[]byte("auditor1"), []byte("auditor2")}) + mockPP.AuditorsReturns([]Identity{[]byte("auditor1"), []byte("auditor2")}) auditors := pp.Auditors() - expectedAuditors := []view.Identity{[]byte("auditor1"), []byte("auditor2")} + expectedAuditors := []Identity{[]byte("auditor1"), []byte("auditor2")} assert.Equal(t, expectedAuditors, auditors) } diff --git a/token/request.go b/token/request.go index fca44c5a1..fcecfcf86 100644 --- a/token/request.go +++ b/token/request.go @@ -9,9 +9,6 @@ package token import ( "encoding/asn1" - view2 "github.com/hyperledger-labs/fabric-smart-client/platform/view" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/hash" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/core/common/meta" "github.com/hyperledger-labs/fabric-token-sdk/token/driver" "github.com/hyperledger-labs/fabric-token-sdk/token/token" @@ -23,6 +20,10 @@ const ( TransferMetadataPrefix = meta.TransferMetadataPrefix ) +type Binder interface { + Bind(longTerm Identity, ephemeral Identity) error +} + // RecipientData contains information about the identity of a token owner type RecipientData = driver.RecipientData @@ -133,26 +134,26 @@ type AuditRecord struct { // In particular, it carries the identities of the issuer and the receivers type Issue struct { // Issuer is the issuer of the tokens - Issuer view.Identity + Issuer Identity // Receivers is the list of identities of the receivers - Receivers []view.Identity + Receivers []Identity // ExtraSigners is the list of extra identities that must sign the token request to make it valid. // This field is to be used by the token drivers to list any additional identities that must // sign the token request. - ExtraSigners []view.Identity + ExtraSigners []Identity } // Transfer contains information about a transfer operation. // In particular, it carries the identities of the senders and the receivers type Transfer struct { // Senders is the list of identities of the senders - Senders []view.Identity + Senders []Identity // Receivers is the list of identities of the receivers - Receivers []view.Identity + Receivers []Identity // ExtraSigners is the list of extra identities that must sign the token request to make it valid. // This field is to be used by the token drivers to list any additional identities that must // sign the token request. - ExtraSigners []view.Identity + ExtraSigners []Identity } // Request aggregates token operations that must be performed atomically. @@ -217,7 +218,7 @@ func (r *Request) ID() string { // Issue appends an issue action to the request. The action will be prepared using the provided issuer wallet. // The action issues to the receiver a token of the passed type and quantity. // Additional options can be passed to customize the action. -func (r *Request) Issue(wallet *IssuerWallet, receiver view.Identity, typ string, q uint64, opts ...IssueOption) (*IssueAction, error) { +func (r *Request) Issue(wallet *IssuerWallet, receiver Identity, typ string, q uint64, opts ...IssueOption) (*IssueAction, error) { if wallet == nil { return nil, errors.Errorf("wallet is nil") } @@ -247,7 +248,7 @@ func (r *Request) Issue(wallet *IssuerWallet, receiver view.Identity, typ string } // Compute Issue - issue, meta, err := r.TokenService.tms.IssueService().Issue( + action, meta, err := r.TokenService.tms.IssueService().Issue( id, typ, []uint64{q}, @@ -261,43 +262,21 @@ func (r *Request) Issue(wallet *IssuerWallet, receiver view.Identity, typ string } // Append - raw, err := issue.Serialize() + raw, err := action.Serialize() if err != nil { return nil, err } r.Actions.Issues = append(r.Actions.Issues, raw) - outputs, err := issue.GetSerializedOutputs() - if err != nil { - return nil, err - } - - auditInfo, err := r.TokenService.tms.WalletService().GetAuditInfo(receiver) - if err != nil { - return nil, err - } - if r.Metadata == nil { - return nil, errors.New("failed to complete issue: nil ValidationRecords in token request") - } - - r.Metadata.Issues = append(r.Metadata.Issues, - driver.IssueMetadata{ - Issuer: meta.Issuer, - Outputs: outputs, - TokenInfo: meta.TokenInfo, - Receivers: []view.Identity{receiver}, - ReceiversAuditInfos: [][]byte{auditInfo}, - ExtraSigners: meta.ExtraSigners, - }, - ) + r.Metadata.Issues = append(r.Metadata.Issues, *meta) - return &IssueAction{a: issue}, nil + return &IssueAction{a: action}, nil } // Transfer appends a transfer action to the request. The action will be prepared using the provided owner wallet. // The action transfers tokens of the passed types to the receivers for the passed quantities. // In other words, owners[0] will receives values[0], and so on. // Additional options can be passed to customize the action. -func (r *Request) Transfer(wallet *OwnerWallet, typ string, values []uint64, owners []view.Identity, opts ...TransferOption) (*TransferAction, error) { +func (r *Request) Transfer(wallet *OwnerWallet, typ string, values []uint64, owners []Identity, opts ...TransferOption) (*TransferAction, error) { for _, v := range values { if v == 0 { return nil, errors.Errorf("value is zero") @@ -312,7 +291,7 @@ func (r *Request) Transfer(wallet *OwnerWallet, typ string, values []uint64, own return nil, errors.Wrap(err, "failed preparing transfer") } - logger.Debugf("Prepare Transfer Action [id:%s,ins:%d,outs:%d]", r.Anchor, len(tokenIDs), len(outputTokens)) + r.TokenService.logger.Debugf("Prepare Transfer Action [id:%s,ins:%d,outs:%d]", r.Anchor, len(tokenIDs), len(outputTokens)) ts := r.TokenService.tms.TransferService() @@ -329,7 +308,7 @@ func (r *Request) Transfer(wallet *OwnerWallet, typ string, values []uint64, own if err != nil { return nil, errors.Wrap(err, "failed creating transfer action") } - if logger.IsEnabledFor(zapcore.DebugLevel) { + if r.TokenService.logger.IsEnabledFor(zapcore.DebugLevel) { // double check if err := ts.VerifyTransfer(transfer, transferMetadata.OutputsMetadata); err != nil { return nil, errors.Wrap(err, "failed checking generated proof") @@ -355,12 +334,12 @@ func (r *Request) Redeem(wallet *OwnerWallet, typ string, value uint64, opts ... if err != nil { return errors.WithMessagef(err, "failed compiling options [%v]", opts) } - tokenIDs, outputTokens, err := r.prepareTransfer(true, wallet, typ, []uint64{value}, []view.Identity{nil}, opt) + tokenIDs, outputTokens, err := r.prepareTransfer(true, wallet, typ, []uint64{value}, []Identity{nil}, opt) if err != nil { return errors.Wrap(err, "failed preparing transfer") } - logger.Debugf("Prepare Redeem Action [ins:%d,outs:%d]", len(tokenIDs), len(outputTokens)) + r.TokenService.logger.Debugf("Prepare Redeem Action [ins:%d,outs:%d]", len(tokenIDs), len(outputTokens)) ts := r.TokenService.tms.TransferService() @@ -378,7 +357,7 @@ func (r *Request) Redeem(wallet *OwnerWallet, typ string, value uint64, opts ... return errors.Wrap(err, "failed creating transfer action") } - if logger.IsEnabledFor(zapcore.DebugLevel) { + if r.TokenService.logger.IsEnabledFor(zapcore.DebugLevel) { // double check if err := ts.VerifyTransfer(transfer, transferMetadata.OutputsMetadata); err != nil { return errors.Wrap(err, "failed checking generated proof") @@ -489,17 +468,17 @@ func (r *Request) extractIssueOutputs(i int, counter uint64, issueAction driver. // is the j-th meta present? It might have been filtered out if issueMeta.IsOutputAbsent(j) { - logger.Debugf("Issue Action Output [%d,%d] is absent", i, j) + r.TokenService.logger.Debugf("Issue Action Output [%d,%d] is absent", i, j) if failOnMissing { return nil, 0, errors.Errorf("missing token info for output [%d,%d]", i, j) } counter++ continue } - if len(issueAction.GetOutputs()) != len(issueMeta.TokenInfo) || len(issueMeta.ReceiversAuditInfos) != len(issueAction.GetOutputs()) { + if len(issueAction.GetOutputs()) != len(issueMeta.OutputsMetadata) || len(issueMeta.ReceiversAuditInfos) != len(issueAction.GetOutputs()) { return nil, 0, errors.Wrapf(err, "failed matching issue action with its metadata [%d]: invalid metadata", i) } - tok, _, err := tms.TokensService().DeserializeToken(raw, issueMeta.TokenInfo[j]) + tok, _, err := tms.TokensService().DeserializeToken(raw, issueMeta.OutputsMetadata[j]) if err != nil { return nil, 0, errors.Wrapf(err, "failed getting issue action output in the clear [%d,%d]", i, j) } @@ -551,7 +530,7 @@ func (r *Request) extractTransferOutputs(i int, counter uint64, transferAction d // is the j-th meta present? It might have been filtered out if transferMeta.IsOutputAbsent(j) { - logger.Debugf("Transfer Action Output [%d,%d] is absent", i, j) + r.TokenService.logger.Debugf("Transfer Action Output [%d,%d] is absent", i, j) if failOnMissing { return nil, 0, errors.Errorf("missing token info for output [%d,%d]", i, j) } @@ -586,7 +565,7 @@ func (r *Request) extractTransferOutputs(i int, counter uint64, transferAction d if !output.IsRedeem() { ledgerOutput = raw } - logger.Debugf("Transfer Action Output [%d,%d][%s:%d] is present, extract [%s]", i, j, r.Anchor, counter, hash.Hashable(ledgerOutput)) + r.TokenService.logger.Debugf("Transfer Action Output [%d,%d][%s:%d] is present, extract [%s]", i, j, r.Anchor, counter, Hashable(ledgerOutput)) outputs = append(outputs, &Output{ ActionIndex: i, Index: counter, @@ -721,7 +700,7 @@ func (r *Request) inputsAndOutputs(failOnMissing, verifyActions bool) (*InputStr } if verifyActions { - if err := issueService.VerifyIssue(issueAction, issueMeta.TokenInfo); err != nil { + if err := issueService.VerifyIssue(issueAction, issueMeta.OutputsMetadata); err != nil { return nil, nil, errors.WithMessagef(err, "failed verifying issue action") } } @@ -889,14 +868,14 @@ func (r *Request) SetSignatures(sigmas map[string][]byte) { if sigma, ok := sigmas[signer.UniqueID()]; ok { signatures[i] = sigma } else { - logger.Warnf("Signature %d for signer %s not found.", i, signer.UniqueID()) + r.TokenService.logger.Warnf("Signature %d for signer %s not found.", i, signer.UniqueID()) } } r.Actions.Signatures = signatures } -func (r *Request) TransferSigners() []view.Identity { - signers := make([]view.Identity, 0) +func (r *Request) TransferSigners() []Identity { + signers := make([]Identity, 0) for _, transfer := range r.Transfers() { signers = append(signers, transfer.Senders...) signers = append(signers, transfer.ExtraSigners...) @@ -904,8 +883,8 @@ func (r *Request) TransferSigners() []view.Identity { return signers } -func (r *Request) IssueSigners() []view.Identity { - signers := make([]view.Identity, 0) +func (r *Request) IssueSigners() []Identity { + signers := make([]Identity, 0) for _, issue := range r.Issues() { signers = append(signers, issue.Issuer) signers = append(signers, issue.ExtraSigners...) @@ -919,13 +898,7 @@ func (r *Request) SetTokenService(service *ManagementService) { } // BindTo binds transfers' senders and receivers, that are senders, that are not me to the passed identity -func (r *Request) BindTo(sp view2.ServiceProvider, party view.Identity) error { - resolver := view2.GetEndpointService(sp) - longTermIdentity, _, _, err := view2.GetEndpointService(sp).Resolve(party) - if err != nil { - return errors.Wrap(err, "cannot resolve identity") - } - +func (r *Request) BindTo(binder Binder, identity Identity) error { for i := range r.Actions.Transfers { // senders for _, eid := range r.Metadata.Transfers[i].Senders { @@ -933,8 +906,8 @@ func (r *Request) BindTo(sp view2.ServiceProvider, party view.Identity) error { // this is me, skip continue } - logger.Debugf("bind sender [%s] to [%s]", eid, party) - if err := resolver.Bind(longTermIdentity, eid); err != nil { + r.TokenService.logger.Debugf("bind sender [%s] to [%s]", eid, identity) + if err := binder.Bind(identity, eid); err != nil { return errors.Wrap(err, "failed binding sender identities") } } @@ -945,8 +918,8 @@ func (r *Request) BindTo(sp view2.ServiceProvider, party view.Identity) error { // this is me, skip continue } - logger.Debugf("bind extra signer [%s] to [%s]", eid, party) - if err := resolver.Bind(longTermIdentity, eid); err != nil { + r.TokenService.logger.Debugf("bind extra signer [%s] to [%s]", eid, identity) + if err := binder.Bind(identity, eid); err != nil { return errors.Wrap(err, "failed binding sender identities") } } @@ -960,8 +933,8 @@ func (r *Request) BindTo(sp view2.ServiceProvider, party view.Identity) error { continue } - logger.Debugf("bind receiver as sender [%s] to [%s]", receivers[j], party) - if err := resolver.Bind(longTermIdentity, receivers[j]); err != nil { + r.TokenService.logger.Debugf("bind receiver as sender [%s] to [%s]", receivers[j], identity) + if err := binder.Bind(identity, receivers[j]); err != nil { return errors.Wrap(err, "failed binding receiver identities") } } @@ -999,7 +972,7 @@ func (r *Request) Transfers() []*Transfer { // AuditCheck performs the audit check of the request in addition to // the checks of the token request itself via IsValid. func (r *Request) AuditCheck() error { - logger.Debugf("audit check request [%s] on tms [%s]", r.Anchor, r.TokenService.ID()) + r.TokenService.logger.Debugf("audit check request [%s] on tms [%s]", r.Anchor, r.TokenService.ID()) if err := r.IsValid(); err != nil { return err } @@ -1052,7 +1025,6 @@ func (r *Request) AuditRecord() (*AuditRecord, error) { return nil, errors.Wrapf(err, "failed getting audit info for owner [%s]", toks[i].Owner) } in.OwnerAuditInfo = ownerAuditInfo - } return &AuditRecord{ @@ -1088,6 +1060,7 @@ func (r *Request) FilterMetadataBy(eIDs ...string) (*Request, error) { TokenService: r.TokenService.tms.TokensService(), WalletService: r.TokenService.tms.WalletService(), TokenRequestMetadata: r.Metadata, + Logger: r.TokenService.logger, } filteredMeta, err := meta.FilterBy(eIDs[0]) if err != nil { @@ -1107,6 +1080,7 @@ func (r *Request) GetMetadata() (*Metadata, error) { TokenService: r.TokenService.tms.TokensService(), WalletService: r.TokenService.tms.WalletService(), TokenRequestMetadata: r.Metadata, + Logger: r.TokenService.logger, }, nil } @@ -1139,7 +1113,7 @@ func (r *Request) parseInputIDs(inputs []*token.ID) ([]*token.ID, token.Quantity return inputs, sum, typ, nil } -func (r *Request) prepareTransfer(redeem bool, wallet *OwnerWallet, tokenType string, values []uint64, owners []view.Identity, transferOpts *TransferOptions) ([]*token.ID, []*token.Token, error) { +func (r *Request) prepareTransfer(redeem bool, wallet *OwnerWallet, tokenType string, values []uint64, owners []Identity, transferOpts *TransferOptions) ([]*token.ID, []*token.Token, error) { for _, owner := range owners { if redeem { if !owner.IsNone() { @@ -1200,7 +1174,7 @@ func (r *Request) prepareTransfer(redeem bool, wallet *OwnerWallet, tokenType st switch cmp { case 1: diff := inputSum.Sub(outputSum) - logger.Debugf("reassign rest [%s] to sender", diff.Decimal()) + r.TokenService.logger.Debugf("reassign rest [%s] to sender", diff.Decimal()) var restIdentity []byte if transferOpts.RestRecipientIdentity != nil { @@ -1226,7 +1200,7 @@ func (r *Request) prepareTransfer(redeem bool, wallet *OwnerWallet, tokenType st } if r.TokenService.PublicParametersManager().PublicParameters().GraphHiding() { - logger.Debugf("graph hiding enabled, request certification") + r.TokenService.logger.Debugf("graph hiding enabled, request certification") // Check token certification cc, err := r.TokenService.CertificationClient() if err != nil { @@ -1240,7 +1214,7 @@ func (r *Request) prepareTransfer(redeem bool, wallet *OwnerWallet, tokenType st return tokenIDs, outputTokens, nil } -func (r *Request) genOutputs(values []uint64, owners []view.Identity, tokenType string) ([]*token.Token, token.Quantity, error) { +func (r *Request) genOutputs(values []uint64, owners []Identity, tokenType string) ([]*token.Token, token.Quantity, error) { pp := r.TokenService.PublicParametersManager().PublicParameters() precision := pp.Precision() maxTokenValue := pp.MaxTokenValue() diff --git a/token/sdk/sdk.go b/token/sdk/sdk.go index 3ecd25142..378be9169 100644 --- a/token/sdk/sdk.go +++ b/token/sdk/sdk.go @@ -10,6 +10,8 @@ import ( "context" "time" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" + "github.com/hyperledger-labs/fabric-smart-client/platform/fabric" orion2 "github.com/hyperledger-labs/fabric-smart-client/platform/orion" view2 "github.com/hyperledger-labs/fabric-smart-client/platform/view" @@ -118,6 +120,7 @@ func (p *SDK) Install() error { // Register the token management service provider tmsp := token.NewManagementServiceProvider( + logging.MustGetLogger("token-sdk"), tmsProvider, network2.NewNormalizer(network.GetProvider(p.registry), fabricNSP, orionNSP, config.NewTokenSDK(configProvider)), &vault.ProviderAdaptor{Provider: networkProvider}, diff --git a/token/sdk/tokens/issued.go b/token/sdk/tokens/issued.go index 12c5254b8..d87f9d8da 100644 --- a/token/sdk/tokens/issued.go +++ b/token/sdk/tokens/issued.go @@ -7,21 +7,20 @@ SPDX-License-Identifier: Apache-2.0 package tokens import ( - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token" token2 "github.com/hyperledger-labs/fabric-token-sdk/token/token" ) type Issued interface { // Issued returns true if the passed issuer issued the passed token - Issued(tms *token.ManagementService, issuer view.Identity, tok *token2.Token) bool + Issued(tms *token.ManagementService, issuer token.Identity, tok *token2.Token) bool } // WalletIssued is an owner wallet-based Issued checker type WalletIssued struct{} // Issued returns true if the passed issuer issued the passed token -func (w *WalletIssued) Issued(tms *token.ManagementService, issuer view.Identity, tok *token2.Token) bool { +func (w *WalletIssued) Issued(tms *token.ManagementService, issuer token.Identity, tok *token2.Token) bool { return tms.WalletManager().IssuerWallet(issuer) != nil } @@ -36,7 +35,7 @@ func NewIssuedMultiplexer(checkers ...Issued) *IssuedMultiplexer { } // Issued returns true if the passed issuer issued the passed token -func (o *IssuedMultiplexer) Issued(tms *token.ManagementService, issuer view.Identity, tok *token2.Token) bool { +func (o *IssuedMultiplexer) Issued(tms *token.ManagementService, issuer token.Identity, tok *token2.Token) bool { for _, Issued := range o.Checkers { if Issued.Issued(tms, issuer, tok) { return true diff --git a/token/services/auditdb/db.go b/token/services/auditdb/db.go index 3116d5062..b5cc18ec3 100644 --- a/token/services/auditdb/db.go +++ b/token/services/auditdb/db.go @@ -12,17 +12,17 @@ import ( "sync" "time" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-token-sdk/token" "github.com/hyperledger-labs/fabric-token-sdk/token/core" "github.com/hyperledger-labs/fabric-token-sdk/token/services/db" "github.com/hyperledger-labs/fabric-token-sdk/token/services/db/driver" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/hyperledger-labs/fabric-token-sdk/token/services/ttxdb" "github.com/pkg/errors" ) var ( - logger = flogging.MustGetLogger("token-sdk.auditdb") + logger = logging.MustGetLogger("token-sdk.auditdb") driversMu sync.RWMutex drivers = make(map[string]driver.AuditDBDriver) ) diff --git a/token/services/auditor/auditor.go b/token/services/auditor/auditor.go index 8e935f80c..90a85cbcb 100644 --- a/token/services/auditor/auditor.go +++ b/token/services/auditor/auditor.go @@ -7,9 +7,9 @@ SPDX-License-Identifier: Apache-2.0 package auditor import ( - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-token-sdk/token" "github.com/hyperledger-labs/fabric-token-sdk/token/services/auditdb" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/hyperledger-labs/fabric-token-sdk/token/services/network" "github.com/hyperledger-labs/fabric-token-sdk/token/services/network/common" "github.com/hyperledger-labs/fabric-token-sdk/token/services/network/driver" @@ -17,7 +17,7 @@ import ( "github.com/pkg/errors" ) -var logger = flogging.MustGetLogger("token-sdk.auditor") +var logger = logging.MustGetLogger("token-sdk.auditor") // TxStatus is the status of a transaction type TxStatus = auditdb.TxStatus diff --git a/token/services/certifier/interactive/client.go b/token/services/certifier/interactive/client.go index 23f02b49a..48ca61fcc 100644 --- a/token/services/certifier/interactive/client.go +++ b/token/services/certifier/interactive/client.go @@ -10,14 +10,12 @@ import ( "context" "time" - "github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens" - - token2 "github.com/hyperledger-labs/fabric-token-sdk/token" - "github.com/hyperledger-labs/fabric-smart-client/platform/view" "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/events" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" view2 "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/services/logging" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens" "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/pkg/errors" ) @@ -28,7 +26,7 @@ const ( Add Op = iota ) -var logger = flogging.MustGetLogger("token-sdk.certifier.interactive") +var logger = logging.MustGetLogger("token-sdk.certifier.interactive") type QueryEngine interface { UnspentTokensIterator() (*token2.UnspentTokensIterator, error) diff --git a/token/services/certifier/views/register.go b/token/services/certifier/views/register.go index 0a62c748d..922201f0c 100644 --- a/token/services/certifier/views/register.go +++ b/token/services/certifier/views/register.go @@ -9,14 +9,14 @@ package certifier import ( "time" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "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/certifier" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/pkg/errors" ) -var logger = flogging.MustGetLogger("token-sdk.certifier") +var logger = logging.MustGetLogger("token-sdk.certifier") type RegisterView struct { Network string diff --git a/token/services/db/sql/init.go b/token/services/db/sql/init.go index 27ea246fd..e4295354e 100644 --- a/token/services/db/sql/init.go +++ b/token/services/db/sql/init.go @@ -13,11 +13,11 @@ import ( "runtime/debug" "strings" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/pkg/errors" ) -var logger = flogging.MustGetLogger("token-sdk.sql") +var logger = logging.MustGetLogger("token-sdk.sql") func initSchema(db *sql.DB, schemas ...string) (err error) { logger.Info("creating tables") diff --git a/token/services/identity/msp/idemix/cache/cache.go b/token/services/identity/msp/idemix/cache/cache.go index 093389f33..e54b9eedf 100644 --- a/token/services/identity/msp/idemix/cache/cache.go +++ b/token/services/identity/msp/idemix/cache/cache.go @@ -11,14 +11,13 @@ import ( "sync" "time" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" - "github.com/hyperledger-labs/fabric-token-sdk/token/driver" "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/msp/common" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "go.uber.org/zap/zapcore" ) -var logger = flogging.MustGetLogger("token-sdk.services.identity.msp.idemix") +var logger = logging.MustGetLogger("token-sdk.services.identity.msp.idemix") type IdentityCacheBackendFunc func(opts *common.IdentityOptions) (driver.Identity, []byte, error) diff --git a/token/services/identity/msp/idemix/lm.go b/token/services/identity/msp/idemix/lm.go index 3307ce0e4..28be4bbc2 100644 --- a/token/services/identity/msp/idemix/lm.go +++ b/token/services/identity/msp/idemix/lm.go @@ -11,27 +11,24 @@ import ( "path/filepath" "sync" - "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/sig" - - "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/msp/idemix/cache" - - msp2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/msp/idemix/msp" - bccsp "github.com/IBM/idemix/bccsp/types" math "github.com/IBM/mathlib" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/hash" "github.com/hyperledger-labs/fabric-token-sdk/token/driver" "github.com/hyperledger-labs/fabric-token-sdk/token/driver/config" driver3 "github.com/hyperledger-labs/fabric-token-sdk/token/services/db/driver" "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/msp/common" config2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/msp/config" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/msp/idemix/cache" + msp2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/msp/idemix/msp" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/sig" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/hyperledger/fabric-protos-go/msp" "github.com/pkg/errors" "go.uber.org/zap/zapcore" ) -var logger = flogging.MustGetLogger("token-sdk.services.identity.msp.idemix") +var logger = logging.MustGetLogger("token-sdk.services.identity.msp.idemix") type LocalMembership struct { issuerPublicKey []byte diff --git a/token/services/identity/msp/idemix/msp/id.go b/token/services/identity/msp/idemix/msp/id.go index 7a87ff35f..04ac3d96c 100644 --- a/token/services/identity/msp/idemix/msp/id.go +++ b/token/services/identity/msp/idemix/msp/id.go @@ -11,8 +11,8 @@ import ( "time" bccsp "github.com/IBM/idemix/bccsp/types" - "github.com/IBM/idemix/common/flogging" "github.com/hyperledger-labs/fabric-smart-client/pkg/utils/proto" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" m "github.com/hyperledger/fabric-protos-go/msp" "github.com/hyperledger/fabric/msp" "github.com/pkg/errors" @@ -25,7 +25,7 @@ const ( IdentityConfigurationType = "idemix" ) -var logger = flogging.MustGetLogger("token-sdk.services.identity.msp.idemix") +var logger = logging.MustGetLogger("token-sdk.services.identity.msp.idemix") type Identity struct { NymPublicKey bccsp.Key diff --git a/token/services/identity/msp/x509/msp/configbuilder.go b/token/services/identity/msp/x509/msp/configbuilder.go index d3ea61a44..a9cadf3d8 100644 --- a/token/services/identity/msp/x509/msp/configbuilder.go +++ b/token/services/identity/msp/x509/msp/configbuilder.go @@ -11,14 +11,14 @@ import ( "path/filepath" "github.com/hyperledger-labs/fabric-smart-client/pkg/utils/proto" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/hyperledger/fabric-protos-go/msp" "github.com/hyperledger/fabric/bccsp" "github.com/pkg/errors" "gopkg.in/yaml.v2" ) -var logger = flogging.MustGetLogger("token-sdk.services.identity.msp.x509") +var logger = logging.MustGetLogger("token-sdk.services.identity.msp.x509") // ProviderType indicates the type of identity provider type ProviderType int diff --git a/token/services/identity/msp/x509/provider.go b/token/services/identity/msp/x509/provider.go index ac4c83cca..55fe76efc 100644 --- a/token/services/identity/msp/x509/provider.go +++ b/token/services/identity/msp/x509/provider.go @@ -11,15 +11,15 @@ import ( "fmt" "github.com/hyperledger-labs/fabric-smart-client/pkg/utils/proto" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-token-sdk/token/driver" "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/msp/common" msp2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/msp/x509/msp" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/hyperledger/fabric-protos-go/msp" "github.com/pkg/errors" ) -var logger = flogging.MustGetLogger("token-sdk.services.identity.msp.x509") +var logger = logging.MustGetLogger("token-sdk.services.identity.msp.x509") type SignerService interface { RegisterSigner(identity driver.Identity, signer driver.Signer, verifier driver.Verifier, signerInfo []byte) error diff --git a/token/services/identity/provider.go b/token/services/identity/provider.go index 144cf28a2..bae757980 100644 --- a/token/services/identity/provider.go +++ b/token/services/identity/provider.go @@ -10,14 +10,14 @@ import ( "runtime/debug" "sync" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-token-sdk/token/driver" "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/sig" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/pkg/errors" "go.uber.org/zap/zapcore" ) -var logger = flogging.MustGetLogger("token-sdk.services.identity") +var logger = logging.MustGetLogger("token-sdk.services.identity") // Deserializer is an interface for deserializing identities type Deserializer interface { diff --git a/token/services/identity/sig/sigservice.go b/token/services/identity/sig/sigservice.go index 2d6d07163..2d3255883 100644 --- a/token/services/identity/sig/sigservice.go +++ b/token/services/identity/sig/sigservice.go @@ -11,13 +11,13 @@ import ( "runtime/debug" "sync" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-token-sdk/token/driver" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/pkg/errors" "go.uber.org/zap/zapcore" ) -var logger = flogging.MustGetLogger("token-sdk.services.identity.sig") +var logger = logging.MustGetLogger("token-sdk.services.identity.sig") type Storage interface { StoreIdentityData(id []byte, identityAudit []byte, tokenMetadata []byte, tokenMetadataAudit []byte) error diff --git a/token/services/identitydb/db.go b/token/services/identitydb/db.go index bd58ce25e..7c7c7c569 100644 --- a/token/services/identitydb/db.go +++ b/token/services/identitydb/db.go @@ -10,17 +10,17 @@ import ( "sort" "sync" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-token-sdk/token" "github.com/hyperledger-labs/fabric-token-sdk/token/core" "github.com/hyperledger-labs/fabric-token-sdk/token/services/db/driver" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/pkg/errors" ) var ( driversMu sync.RWMutex drivers = make(map[string]driver.IdentityDBDriver) - logger = flogging.MustGetLogger("token-sdk.services.identitydb") + logger = logging.MustGetLogger("token-sdk.services.identitydb") ) // Register makes a DB driver available by the provided name. diff --git a/token/services/interop/encoding/logger.go b/token/services/interop/encoding/logger.go index 2add741fe..b4d60fe70 100644 --- a/token/services/interop/encoding/logger.go +++ b/token/services/interop/encoding/logger.go @@ -6,6 +6,6 @@ SPDX-License-Identifier: Apache-2.0 package encoding -import "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" +import "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" -var logger = flogging.MustGetLogger("token-sdk.interop.encoding") +var logger = logging.MustGetLogger("token-sdk.interop.encoding") diff --git a/token/services/interop/htlc/logger.go b/token/services/interop/htlc/logger.go index 880d2451b..f33f96184 100644 --- a/token/services/interop/htlc/logger.go +++ b/token/services/interop/htlc/logger.go @@ -6,6 +6,6 @@ SPDX-License-Identifier: Apache-2.0 package htlc -import "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" +import "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" -var logger = flogging.MustGetLogger("token-sdk.htlc") +var logger = logging.MustGetLogger("token-sdk.htlc") diff --git a/token/services/logging/logging/logger.go b/token/services/logging/logger.go similarity index 78% rename from token/services/logging/logging/logger.go rename to token/services/logging/logger.go index 3c566c705..85bc6bee5 100644 --- a/token/services/logging/logging/logger.go +++ b/token/services/logging/logger.go @@ -33,10 +33,22 @@ type Logger interface { IsEnabledFor(level zapcore.Level) bool } +func MustGetLogger(loggerName string) Logger { + return flogging.MustGetLogger(loggerName) +} + func DriverLogger(prefix string, networkID string, channel string, namespace string) Logger { return flogging.MustGetLogger(loggerName(prefix, networkID, channel, namespace)) } +func DeriveDriverLogger(logger Logger, prefix string, networkID string, channel string, namespace string) Logger { + l, ok := logger.(*flogging.FabricLogger) + if !ok { + panic("invalid logger") + } + return l.Named(loggerName(prefix, networkID, channel, namespace)) +} + func DriverLoggerFromPP(prefix string, ppIdentifier string) Logger { return flogging.MustGetLogger(loggerName(prefix, ppIdentifier)) } diff --git a/token/services/network/common/finality.go b/token/services/network/common/finality.go index a1232c76d..15d481fca 100644 --- a/token/services/network/common/finality.go +++ b/token/services/network/common/finality.go @@ -11,11 +11,12 @@ import ( "fmt" "time" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" + "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/hash" "github.com/hyperledger-labs/fabric-token-sdk/token" "github.com/hyperledger-labs/fabric-token-sdk/token/services/db" "github.com/hyperledger-labs/fabric-token-sdk/token/services/db/driver" - "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging/logging" "github.com/hyperledger-labs/fabric-token-sdk/token/services/network" "github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens" "github.com/pkg/errors" diff --git a/token/services/network/common/rws/translator/translator.go b/token/services/network/common/rws/translator/translator.go index cc1423855..553f3cfc3 100644 --- a/token/services/network/common/rws/translator/translator.go +++ b/token/services/network/common/rws/translator/translator.go @@ -11,14 +11,13 @@ import ( "encoding/base64" "strconv" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/hyperledger-labs/fabric-token-sdk/token/services/network/common/rws/keys" - - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/pkg/errors" ) -var logger = flogging.MustGetLogger("token-sdk.vault.translator") +var logger = logging.MustGetLogger("token-sdk.vault.translator") // Translator validates token requests and generates the corresponding RWSets type Translator struct { diff --git a/token/services/network/fabric/processor.go b/token/services/network/fabric/processor.go index b388a2b4a..cba585468 100644 --- a/token/services/network/fabric/processor.go +++ b/token/services/network/fabric/processor.go @@ -8,15 +8,15 @@ package fabric import ( "github.com/hyperledger-labs/fabric-smart-client/platform/fabric" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-token-sdk/token" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/hyperledger-labs/fabric-token-sdk/token/services/network/common/rws/keys" "github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens" "github.com/pkg/errors" "go.uber.org/zap/zapcore" ) -var logger = flogging.MustGetLogger("token-sdk.vault.processor") +var logger = logging.MustGetLogger("token-sdk.vault.processor") type GetTokensFunc = func() (*tokens.Tokens, error) type GetTMSProviderFunc = func() *token.ManagementServiceProvider diff --git a/token/services/network/fabric/tcc/tcc.go b/token/services/network/fabric/tcc/tcc.go index 54a934f85..7f1669b06 100644 --- a/token/services/network/fabric/tcc/tcc.go +++ b/token/services/network/fabric/tcc/tcc.go @@ -14,18 +14,17 @@ import ( "runtime/debug" "sync" - "github.com/hyperledger-labs/fabric-token-sdk/token/services/network/common/rws/translator" - - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-token-sdk/token" "github.com/hyperledger-labs/fabric-token-sdk/token/core/common" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/network/common/rws/translator" token2 "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/hyperledger/fabric-chaincode-go/shim" pb "github.com/hyperledger/fabric-protos-go/peer" "github.com/pkg/errors" ) -var logger = flogging.MustGetLogger("token-sdk.tcc") +var logger = logging.MustGetLogger("token-sdk.tcc") const ( InvokeFunction = "invoke" diff --git a/token/services/network/network.go b/token/services/network/network.go index cb3377111..352644d96 100644 --- a/token/services/network/network.go +++ b/token/services/network/network.go @@ -14,10 +14,10 @@ import ( "sync" "time" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token" api2 "github.com/hyperledger-labs/fabric-token-sdk/token/driver" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/hyperledger-labs/fabric-token-sdk/token/services/network/driver" "github.com/hyperledger-labs/fabric-token-sdk/token/services/vault" token2 "github.com/hyperledger-labs/fabric-token-sdk/token/token" @@ -33,7 +33,7 @@ const ( Unknown = driver.Unknown // Transaction is unknown ) -var logger = flogging.MustGetLogger("token-sdk.network") +var logger = logging.MustGetLogger("token-sdk.network") type UnspentTokensIterator = driver.UnspentTokensIterator diff --git a/token/services/network/orion/publicparams.go b/token/services/network/orion/publicparams.go index 3280b8fad..59f17abed 100644 --- a/token/services/network/orion/publicparams.go +++ b/token/services/network/orion/publicparams.go @@ -11,15 +11,15 @@ import ( "github.com/hyperledger-labs/fabric-smart-client/platform/orion" view2 "github.com/hyperledger-labs/fabric-smart-client/platform/view" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" session2 "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/session" "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/logging" "github.com/hyperledger-labs/fabric-token-sdk/token/services/network/common/rws/translator" "github.com/pkg/errors" ) -var logger = flogging.MustGetLogger("token-sdk.network.orion.custodian") +var logger = logging.MustGetLogger("token-sdk.network.orion.custodian") type PublicParamsRequest struct { Network string diff --git a/token/services/nfttx/transaction.go b/token/services/nfttx/transaction.go index 22ff96be4..08f40ec5b 100644 --- a/token/services/nfttx/transaction.go +++ b/token/services/nfttx/transaction.go @@ -9,16 +9,16 @@ package nfttx import ( "encoding/base64" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "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/logging" "github.com/hyperledger-labs/fabric-token-sdk/token/services/nfttx/marshaller" "github.com/hyperledger-labs/fabric-token-sdk/token/services/ttx" "github.com/pkg/errors" "go.uber.org/zap/zapcore" ) -var logger = flogging.MustGetLogger("token-sdk.nfttx") +var logger = logging.MustGetLogger("token-sdk.nfttx") type TxOption ttx.TxOption diff --git a/token/services/selector/mailman/mailman.go b/token/services/selector/mailman/mailman.go index bddf55ad4..1b261a90e 100644 --- a/token/services/selector/mailman/mailman.go +++ b/token/services/selector/mailman/mailman.go @@ -7,11 +7,11 @@ SPDX-License-Identifier: Apache-2.0 package mailman import ( - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/hyperledger-labs/fabric-token-sdk/token/token" ) -var logger = flogging.MustGetLogger("token-sdk.selector.mailman") +var logger = logging.MustGetLogger("token-sdk.selector.mailman") // Mailman implements a token selector service that is targeting high concurrent use type Mailman struct { diff --git a/token/services/selector/simple/inmemory/locker.go b/token/services/selector/simple/inmemory/locker.go index 76c52d86b..f48421064 100644 --- a/token/services/selector/simple/inmemory/locker.go +++ b/token/services/selector/simple/inmemory/locker.go @@ -11,7 +11,7 @@ import ( "sync" "time" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/hyperledger-labs/fabric-token-sdk/token/services/selector/simple" token2 "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/pkg/errors" @@ -19,7 +19,7 @@ import ( ) var ( - logger = flogging.MustGetLogger("token-sdk.selector.inmemory") + logger = logging.MustGetLogger("token-sdk.selector.inmemory") AlreadyLockedError = errors.New("already locked") ) diff --git a/token/services/selector/simple/provider.go b/token/services/selector/simple/provider.go index ff683948b..3d6e03647 100644 --- a/token/services/selector/simple/provider.go +++ b/token/services/selector/simple/provider.go @@ -9,14 +9,14 @@ package simple import ( "time" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-token-sdk/token" "github.com/hyperledger-labs/fabric-token-sdk/token/sdk/common" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" token2 "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/pkg/errors" ) -var logger = flogging.MustGetLogger("token-sdk.selector.simple") +var logger = logging.MustGetLogger("token-sdk.selector.simple") type LockerProvider interface { New(network, channel, namespace string) Locker diff --git a/token/services/tokendb/db.go b/token/services/tokendb/db.go index 016ca9cbd..628058c30 100644 --- a/token/services/tokendb/db.go +++ b/token/services/tokendb/db.go @@ -11,15 +11,15 @@ import ( "sort" "sync" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-token-sdk/token" "github.com/hyperledger-labs/fabric-token-sdk/token/core" "github.com/hyperledger-labs/fabric-token-sdk/token/services/db/driver" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/pkg/errors" ) var ( - logger = flogging.MustGetLogger("token-sdk.tokendb") + logger = logging.MustGetLogger("token-sdk.tokendb") driversMu sync.RWMutex drivers = make(map[string]driver.TokenDBDriver) ) diff --git a/token/services/tokens/tokens.go b/token/services/tokens/tokens.go index 83d8b4d78..000ce75b1 100644 --- a/token/services/tokens/tokens.go +++ b/token/services/tokens/tokens.go @@ -9,16 +9,16 @@ package tokens import ( "runtime/debug" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/hash" "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/logging" token2 "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/pkg/errors" "go.uber.org/zap/zapcore" ) -var logger = flogging.MustGetLogger("token-sdk.tokens") +var logger = logging.MustGetLogger("token-sdk.tokens") // Authorization is an interface that defines method to check the relation between a token or TMS // and wallets (owner, auditor, etc.) diff --git a/token/services/ttx/collect.go b/token/services/ttx/collect.go index ffb79c7d9..b14bced50 100644 --- a/token/services/ttx/collect.go +++ b/token/services/ttx/collect.go @@ -9,6 +9,8 @@ import ( "fmt" "time" + view2 "github.com/hyperledger-labs/fabric-smart-client/platform/view" + "go.uber.org/zap/zapcore" "github.com/pkg/errors" @@ -83,7 +85,12 @@ func (c *collectActionsView) collectLocal(context view.Context, actionTransfer * } // Binds identities - if err := c.tx.TokenRequest.BindTo(context, party); err != nil { + es := view2.GetEndpointService(context) + longTermIdentity, _, _, err := es.Resolve(party) + if err != nil { + return errors.Wrapf(err, "cannot resolve long term network identity for [%s]", party) + } + if err := c.tx.TokenRequest.BindTo(es, longTermIdentity); err != nil { return errors.Wrapf(err, "failed binding to [%s]", party.String()) } @@ -147,7 +154,12 @@ func (c *collectActionsView) collectRemote(context view.Context, actionTransfer } // Bind to party - if err := txPayload.TokenRequest.BindTo(context, party); err != nil { + es := view2.GetEndpointService(context) + longTermIdentity, _, _, err := es.Resolve(party) + if err != nil { + return errors.Wrapf(err, "cannot resolve long term network identity for [%s]", party) + } + if err := txPayload.TokenRequest.BindTo(es, longTermIdentity); err != nil { return errors.Wrapf(err, "failed binding to [%s]", party.String()) } diff --git a/token/services/ttx/logger.go b/token/services/ttx/logger.go index fc8e50d9c..055473fdc 100644 --- a/token/services/ttx/logger.go +++ b/token/services/ttx/logger.go @@ -6,6 +6,6 @@ SPDX-License-Identifier: Apache-2.0 package ttx -import "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" +import "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" -var logger = flogging.MustGetLogger("token-sdk.ttx") +var logger = logging.MustGetLogger("token-sdk.ttx") diff --git a/token/services/ttxdb/db.go b/token/services/ttxdb/db.go index cc998f73f..5bcaf623d 100644 --- a/token/services/ttxdb/db.go +++ b/token/services/ttxdb/db.go @@ -13,17 +13,17 @@ import ( "sync" "time" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" view2 "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/core" "github.com/hyperledger-labs/fabric-token-sdk/token/services/db" "github.com/hyperledger-labs/fabric-token-sdk/token/services/db/driver" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/pkg/errors" ) var ( - logger = flogging.MustGetLogger("token-sdk.ttxdb") + logger = logging.MustGetLogger("token-sdk.ttxdb") driversMu sync.RWMutex drivers = make(map[string]driver.TTXDBDriver) ) diff --git a/token/stream.go b/token/stream.go index 7b96659d9..3bd4b2376 100644 --- a/token/stream.go +++ b/token/stream.go @@ -10,7 +10,6 @@ import ( "fmt" "math/big" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/pkg/errors" ) @@ -26,7 +25,7 @@ type Output struct { // Index is the absolute position of this output in the token request Index uint64 // Owner is the identity of the owner of this output - Owner view.Identity + Owner Identity // OwnerAuditInfo contains the audit information of the output's owner OwnerAuditInfo []byte // EnrollmentID is the enrollment ID of the owner of this output @@ -68,7 +67,7 @@ func (o *OutputStream) Filter(f func(t *Output) bool) *OutputStream { } // ByRecipient filters the OutputStream to only include outputs that match the passed recipient. -func (o *OutputStream) ByRecipient(id view.Identity) *OutputStream { +func (o *OutputStream) ByRecipient(id Identity) *OutputStream { return o.Filter(func(t *Output) bool { return id.Equal(t.Owner) }) @@ -169,7 +168,7 @@ func (o *OutputStream) String() string { type Input struct { ActionIndex int Id *token.ID - Owner view.Identity + Owner Identity OwnerAuditInfo []byte EnrollmentID string RevocationHandler string diff --git a/token/stream_test.go b/token/stream_test.go index 4012fd341..d1474fc12 100644 --- a/token/stream_test.go +++ b/token/stream_test.go @@ -11,7 +11,6 @@ import ( "math/big" "testing" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/pkg/errors" "github.com/stretchr/testify/assert" @@ -39,13 +38,13 @@ func TestOutput_ID(t *testing.T) { } func TestOutputStream_Filter(t *testing.T) { - output1 := &Output{Owner: view.Identity("owner1")} - output2 := &Output{Owner: view.Identity("owner2")} - output3 := &Output{Owner: view.Identity("owner1")} + output1 := &Output{Owner: Identity("owner1")} + output2 := &Output{Owner: Identity("owner2")} + output3 := &Output{Owner: Identity("owner1")} stream := NewOutputStream([]*Output{output1, output2, output3}, 0) filtered := stream.Filter(func(t *Output) bool { - return t.Owner.Equal(view.Identity("owner1")) + return t.Owner.Equal(Identity("owner1")) }) assert.Equal(t, 2, filtered.Count()) @@ -107,8 +106,8 @@ func TestInputStream_IsAnyMine(t *testing.T) { } func TestOutputStream_ByRecipient(t *testing.T) { - identity1 := view.Identity("owner1") - identity2 := view.Identity("owner2") + identity1 := Identity("owner1") + identity2 := Identity("owner2") output1 := &Output{Owner: identity1} output2 := &Output{Owner: identity2} output3 := &Output{Owner: identity1} @@ -231,8 +230,8 @@ func TestOutputStream_TokenTypes(t *testing.T) { } func TestInputStream_Owners(t *testing.T) { - identity1 := view.Identity("owner1") - identity2 := view.Identity("owner2") + identity1 := Identity("owner1") + identity2 := Identity("owner2") input1 := &Input{Owner: identity1} input2 := &Input{Owner: identity2} input3 := &Input{Owner: identity1} diff --git a/token/tms.go b/token/tms.go index 57f537ecb..5261efc90 100644 --- a/token/tms.go +++ b/token/tms.go @@ -9,14 +9,13 @@ package token import ( "fmt" - "github.com/hyperledger-labs/fabric-smart-client/platform/view" - "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging" "github.com/hyperledger-labs/fabric-token-sdk/token/core" "github.com/hyperledger-labs/fabric-token-sdk/token/driver" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" "github.com/pkg/errors" ) -var logger = flogging.MustGetLogger("token-sdk") +var logger = logging.MustGetLogger("token-sdk") // TMSID models a TMS identifier type TMSID struct { @@ -172,6 +171,7 @@ type ManagementService struct { selectorManagerProvider SelectorManagerProvider signatureService *SignatureService vault *Vault + logger logging.Logger } // String returns a string representation of the TMS @@ -220,6 +220,7 @@ func (t *ManagementService) NewMetadataFromBytes(raw []byte) (*Metadata, error) TokenService: t.tms.TokensService(), WalletService: t.tms.WalletService(), TokenRequestMetadata: tokenRequestMetadata, + Logger: t.logger, }, nil } @@ -296,7 +297,7 @@ func (t *ManagementService) init() error { if err != nil { return errors.WithMessagef(err, "failed to get vault for [%s:%s:%s]", t.namespace, t.channel, t.namespace) } - t.vault = &Vault{v: v} + t.vault = &Vault{v: v, logger: t.logger} return nil } @@ -353,7 +354,7 @@ func NewPublicParametersManagerFromPublicParams(params []byte) (*PublicParameter return &PublicParametersManager{ppm: ppm}, nil } -func NewWalletManager(sp view.ServiceProvider, network string, channel string, namespace string, params []byte) (*WalletManager, error) { +func NewWalletManager(sp ServiceProvider, network string, channel string, namespace string, params []byte) (*WalletManager, error) { logger.Debugf("unmarshall public parameters...") pp, err := core.PublicParametersFromBytes(params) if err != nil { diff --git a/token/vault.go b/token/vault.go index cab20d0a6..81225388e 100644 --- a/token/vault.go +++ b/token/vault.go @@ -9,6 +9,8 @@ package token import ( "time" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" + "github.com/hyperledger-labs/fabric-token-sdk/token/driver" "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/pkg/errors" @@ -30,15 +32,16 @@ const ( // QueryEngine models a token query engine type QueryEngine struct { - qe driver.QueryEngine + qe driver.QueryEngine + logger logging.Logger // Variables used to control retry condition NumRetries int RetryDelay time.Duration } -func NewQueryEngine(qe driver.QueryEngine, numRetries int, retryDelay time.Duration) *QueryEngine { - return &QueryEngine{qe: qe, NumRetries: numRetries, RetryDelay: retryDelay} +func NewQueryEngine(logger logging.Logger, qe driver.QueryEngine, numRetries int, retryDelay time.Duration) *QueryEngine { + return &QueryEngine{logger: logger, qe: qe, NumRetries: numRetries, RetryDelay: retryDelay} } // IsMine returns true is the given token is in this vault and therefore owned by this client @@ -83,7 +86,7 @@ func (q *QueryEngine) ListAuditTokens(ids ...*token.ID) ([]*token.Token, error) for _, id := range ids { pending, err := q.qe.IsPending(id) if pending || err != nil { - logger.Warnf("cannot get audit token for id [%s] because the relative transaction is pending, retry at [%d]: with err [%s]", id, i, err) + q.logger.Warnf("cannot get audit token for id [%s] because the relative transaction is pending, retry at [%d]: with err [%s]", id, i, err) if i == q.NumRetries-1 { return nil, errors.Errorf("failed to get audit tokens, tx [%s] is still pending", id.TxId) } @@ -142,12 +145,13 @@ func (c *CertificationStorage) Store(certifications map[*token.ID][]byte) error // Vault models a token vault type Vault struct { - v driver.Vault + v driver.Vault + logger logging.Logger } // NewQueryEngine returns a new query engine func (v *Vault) NewQueryEngine() *QueryEngine { - return NewQueryEngine(v.v.QueryEngine(), 3, 3*time.Second) + return NewQueryEngine(v.logger, v.v.QueryEngine(), 3, 3*time.Second) } func (v *Vault) CertificationStorage() *CertificationStorage { diff --git a/token/vault_test.go b/token/vault_test.go index 856891161..bcdefb4ee 100644 --- a/token/vault_test.go +++ b/token/vault_test.go @@ -10,6 +10,8 @@ import ( "testing" "time" + "github.com/hyperledger-labs/fabric-token-sdk/token/services/logging" + "github.com/hyperledger-labs/fabric-token-sdk/token/driver/mock" "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/pkg/errors" @@ -21,7 +23,7 @@ func TestQueryEngine_IsMine(t *testing.T) { expectedID := &token.ID{TxId: "a_transaction", Index: 0} mockQE.IsMineReturns(true, nil) - queryEngine := NewQueryEngine(mockQE, 3, time.Second) + queryEngine := NewQueryEngine(logging.MustGetLogger("test"), mockQE, 3, time.Second) isMine, err := queryEngine.IsMine(expectedID) assert.NoError(t, err) assert.True(t, isMine) @@ -32,7 +34,7 @@ func TestQueryEngine_IsMine_Error(t *testing.T) { expectedErr := errors.New("mock error") mockQE.IsMineReturns(false, expectedErr) - queryEngine := NewQueryEngine(mockQE, 3, time.Second) + queryEngine := NewQueryEngine(logging.MustGetLogger("test"), mockQE, 3, time.Second) isMine, err := queryEngine.IsMine(nil) assert.Error(t, err) assert.False(t, isMine) @@ -49,7 +51,7 @@ func TestQueryEngine_ListAuditTokens(t *testing.T) { }} mockQE.ListAuditTokensReturns(expectedTokens, nil) - queryEngine := NewQueryEngine(mockQE, 3, time.Second) + queryEngine := NewQueryEngine(logging.MustGetLogger("test"), mockQE, 3, time.Second) tokens, err := queryEngine.ListAuditTokens(expectedIDs...) assert.NoError(t, err) assert.Equal(t, expectedTokens, tokens) @@ -79,7 +81,7 @@ func TestQueryEngine_ListAuditTokens_IsPendingTrue(t *testing.T) { mockQE.ListAuditTokensReturnsOnCall(1, expectedTokens, nil) mockQE.IsPendingReturnsOnCall(0, true, nil) - queryEngine := NewQueryEngine(mockQE, 3, time.Second) + queryEngine := NewQueryEngine(logging.MustGetLogger("test"), mockQE, 3, time.Second) tokens, err := queryEngine.ListAuditTokens(expectedIDs...) assert.NoError(t, err) assert.Equal(t, expectedTokens, tokens) @@ -99,7 +101,7 @@ func TestQueryEngine_ListAuditTokens_IsPendingTrueNumRetries(t *testing.T) { mockQE.IsPendingReturnsOnCall(1, true, nil) mockQE.IsPendingReturnsOnCall(2, true, nil) - queryEngine := NewQueryEngine(mockQE, 3, time.Second) + queryEngine := NewQueryEngine(logging.MustGetLogger("test"), mockQE, 3, time.Second) tokens, err := queryEngine.ListAuditTokens(expectedIDs...) assert.Error(t, err) assert.Empty(t, tokens) @@ -115,7 +117,7 @@ func TestQueryEngine_UnspentTokensIterator_Error(t *testing.T) { expectedErr := errors.New("mock error") mockQE.UnspentTokensIteratorReturns(nil, expectedErr) - queryEngine := NewQueryEngine(mockQE, 3, time.Second) + queryEngine := NewQueryEngine(logging.MustGetLogger("test"), mockQE, 3, time.Second) iterator, err := queryEngine.UnspentTokensIterator() assert.Error(t, err) assert.Nil(t, iterator) @@ -127,7 +129,7 @@ func TestQueryEngine_ListUnspentTokens(t *testing.T) { expectedUnspentTokens := &token.UnspentTokens{} mockQE.ListUnspentTokensReturns(expectedUnspentTokens, nil) - queryEngine := NewQueryEngine(mockQE, 3, time.Second) + queryEngine := NewQueryEngine(logging.MustGetLogger("test"), mockQE, 3, time.Second) unspentTokens, err := queryEngine.ListUnspentTokens() assert.NoError(t, err) assert.Equal(t, expectedUnspentTokens, unspentTokens) @@ -138,7 +140,7 @@ func TestQueryEngine_ListUnspentTokens_Error(t *testing.T) { expectedErr := errors.New("mock error") mockQE.ListUnspentTokensReturns(nil, expectedErr) - queryEngine := NewQueryEngine(mockQE, 3, time.Second) + queryEngine := NewQueryEngine(logging.MustGetLogger("test"), mockQE, 3, time.Second) unspentTokens, err := queryEngine.ListUnspentTokens() assert.Error(t, err) assert.Nil(t, unspentTokens) @@ -150,7 +152,7 @@ func TestQueryEngine_ListHistoryIssuedTokens(t *testing.T) { expectedIssuedTokens := &token.IssuedTokens{} mockQE.ListHistoryIssuedTokensReturns(expectedIssuedTokens, nil) - queryEngine := NewQueryEngine(mockQE, 3, time.Second) + queryEngine := NewQueryEngine(logging.MustGetLogger("test"), mockQE, 3, time.Second) issuedTokens, err := queryEngine.ListHistoryIssuedTokens() assert.NoError(t, err) assert.Equal(t, expectedIssuedTokens, issuedTokens) @@ -161,7 +163,7 @@ func TestQueryEngine_ListHistoryIssuedTokens_Error(t *testing.T) { expectedErr := errors.New("mock error") mockQE.ListHistoryIssuedTokensReturns(nil, expectedErr) - queryEngine := NewQueryEngine(mockQE, 3, time.Second) + queryEngine := NewQueryEngine(logging.MustGetLogger("test"), mockQE, 3, time.Second) issuedTokens, err := queryEngine.ListHistoryIssuedTokens() assert.Error(t, err) assert.Nil(t, issuedTokens) @@ -173,7 +175,7 @@ func TestQueryEngine_PublicParams(t *testing.T) { expectedParams := []byte("public parameters") mockQE.PublicParamsReturns(expectedParams, nil) - queryEngine := NewQueryEngine(mockQE, 3, time.Second) + queryEngine := NewQueryEngine(logging.MustGetLogger("test"), mockQE, 3, time.Second) params, err := queryEngine.PublicParams() assert.NoError(t, err) assert.Equal(t, expectedParams, params) @@ -184,7 +186,7 @@ func TestQueryEngine_PublicParams_Error(t *testing.T) { expectedErr := errors.New("mock error") mockQE.PublicParamsReturns(nil, expectedErr) - queryEngine := NewQueryEngine(mockQE, 3, time.Second) + queryEngine := NewQueryEngine(logging.MustGetLogger("test"), mockQE, 3, time.Second) params, err := queryEngine.PublicParams() assert.Error(t, err) assert.Nil(t, params) @@ -200,7 +202,7 @@ func TestQueryEngine_GetTokens(t *testing.T) { }} mockQE.GetTokensReturns(nil, expectedTokens, nil) - queryEngine := NewQueryEngine(mockQE, 3, time.Second) + queryEngine := NewQueryEngine(logging.MustGetLogger("test"), mockQE, 3, time.Second) tokens, err := queryEngine.GetTokens(nil) assert.NoError(t, err) assert.Equal(t, expectedTokens, tokens) @@ -212,7 +214,7 @@ func TestQueryEngine_GetTokens_Error(t *testing.T) { expectedErr := errors.New("mock error") mockQE.GetTokensReturns(nil, nil, expectedErr) - queryEngine := NewQueryEngine(mockQE, 3, time.Second) + queryEngine := NewQueryEngine(logging.MustGetLogger("test"), mockQE, 3, time.Second) tokens, err := queryEngine.GetTokens(nil) assert.Error(t, err) assert.Nil(t, tokens) diff --git a/token/wallet.go b/token/wallet.go index 997465425..5425c9610 100644 --- a/token/wallet.go +++ b/token/wallet.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: Apache-2.0 package token import ( - "github.com/hyperledger-labs/fabric-smart-client/platform/view/view" "github.com/hyperledger-labs/fabric-token-sdk/token/driver" "github.com/hyperledger-labs/fabric-token-sdk/token/token" "github.com/pkg/errors" @@ -76,7 +75,7 @@ func (wm *WalletManager) RegisterRecipientIdentity(data *RecipientData) error { // Wallet returns the wallet bound to the passed identity, if any is available. // If no wallet is found, it returns nil. -func (wm *WalletManager) Wallet(identity view.Identity) *Wallet { +func (wm *WalletManager) Wallet(identity Identity) *Wallet { w := wm.walletService.Wallet(identity) if w == nil { return nil @@ -99,7 +98,7 @@ func (wm *WalletManager) OwnerWalletIDs() ([]string, error) { func (wm *WalletManager) OwnerWallet(id WalletLookupID) *OwnerWallet { w, err := wm.walletService.OwnerWallet(id) if err != nil { - logger.Debugf("failed to get owner wallet for id [%s]: [%s]", id, err) + wm.managementService.logger.Debugf("failed to get owner wallet for id [%s]: [%s]", id, err) return nil } return &OwnerWallet{Wallet: &Wallet{w: w, managementService: wm.managementService}, w: w} @@ -111,7 +110,7 @@ func (wm *WalletManager) OwnerWallet(id WalletLookupID) *OwnerWallet { func (wm *WalletManager) IssuerWallet(id WalletLookupID) *IssuerWallet { w, err := wm.walletService.IssuerWallet(id) if err != nil { - logger.Debugf("failed to get issuer wallet for id [%s]: [%s]", id, err) + wm.managementService.logger.Debugf("failed to get issuer wallet for id [%s]: [%s]", id, err) return nil } return &IssuerWallet{Wallet: &Wallet{w: w, managementService: wm.managementService}, w: w} @@ -123,7 +122,7 @@ func (wm *WalletManager) IssuerWallet(id WalletLookupID) *IssuerWallet { func (wm *WalletManager) AuditorWallet(id WalletLookupID) *AuditorWallet { w, err := wm.walletService.AuditorWallet(id) if err != nil { - logger.Debugf("failed to get auditor wallet for id [%s]: [%s]", id, err) + wm.managementService.logger.Debugf("failed to get auditor wallet for id [%s]: [%s]", id, err) return nil } return &AuditorWallet{Wallet: &Wallet{w: w, managementService: wm.managementService}, w: w} @@ -135,14 +134,14 @@ func (wm *WalletManager) AuditorWallet(id WalletLookupID) *AuditorWallet { func (wm *WalletManager) CertifierWallet(id WalletLookupID) *CertifierWallet { w, err := wm.walletService.CertifierWallet(id) if err != nil { - logger.Debugf("failed to get certifier wallet for id [%s]: [%s]", id, err) + wm.managementService.logger.Debugf("failed to get certifier wallet for id [%s]: [%s]", id, err) return nil } return &CertifierWallet{Wallet: &Wallet{w: w, managementService: wm.managementService}, w: w} } // GetEnrollmentID returns the enrollment ID of passed identity -func (wm *WalletManager) GetEnrollmentID(identity view.Identity) (string, error) { +func (wm *WalletManager) GetEnrollmentID(identity Identity) (string, error) { auditInfo, err := wm.walletService.GetAuditInfo(identity) if err != nil { return "", errors.WithMessagef(err, "failed to get audit info for identity %s", identity) @@ -151,7 +150,7 @@ func (wm *WalletManager) GetEnrollmentID(identity view.Identity) (string, error) } // GetRevocationHandle returns the revocation handle of the passed identity -func (wm *WalletManager) GetRevocationHandle(identity view.Identity) (string, error) { +func (wm *WalletManager) GetRevocationHandle(identity Identity) (string, error) { auditInfo, err := wm.walletService.GetAuditInfo(identity) if err != nil { return "", errors.WithMessagef(err, "failed to get audit info for identity %s", identity) @@ -183,7 +182,7 @@ func (w *Wallet) TMS() *ManagementService { } // Contains returns true if the wallet contains the passed identity. -func (w *Wallet) Contains(identity view.Identity) bool { +func (w *Wallet) Contains(identity Identity) bool { return w.w.Contains(identity) } @@ -200,12 +199,12 @@ type AuditorWallet struct { // GetAuditorIdentity returns the auditor identity. This can be a long term identity or a pseudonym depending // on the underlying token driver. -func (a *AuditorWallet) GetAuditorIdentity() (view.Identity, error) { +func (a *AuditorWallet) GetAuditorIdentity() (Identity, error) { return a.w.GetAuditorIdentity() } // GetSigner returns the signer bound to the passed auditor identity. -func (a *AuditorWallet) GetSigner(id view.Identity) (driver.Signer, error) { +func (a *AuditorWallet) GetSigner(id Identity) (driver.Signer, error) { return a.w.GetSigner(id) } @@ -217,12 +216,12 @@ type CertifierWallet struct { // GetCertifierIdentity returns the certifier identity. This can be a long term identity or a pseudonym depending // on the underlying token driver. -func (a *CertifierWallet) GetCertifierIdentity() (view.Identity, error) { +func (a *CertifierWallet) GetCertifierIdentity() (Identity, error) { return a.w.GetCertifierIdentity() } // GetSigner returns the signer bound to the passed certifier identity. -func (a *CertifierWallet) GetSigner(id view.Identity) (driver.Signer, error) { +func (a *CertifierWallet) GetSigner(id Identity) (driver.Signer, error) { return a.w.GetSigner(id) } @@ -234,12 +233,12 @@ type OwnerWallet struct { // GetRecipientIdentity returns the owner identity. This can be a long term identity or a pseudonym depending // on the underlying token driver. -func (o *OwnerWallet) GetRecipientIdentity() (view.Identity, error) { +func (o *OwnerWallet) GetRecipientIdentity() (Identity, error) { return o.w.GetRecipientIdentity() } // GetAuditInfo returns auditing information for the passed identity -func (o *OwnerWallet) GetAuditInfo(id view.Identity) ([]byte, error) { +func (o *OwnerWallet) GetAuditInfo(id Identity) ([]byte, error) { return o.w.GetAuditInfo(id) } @@ -254,7 +253,7 @@ func (o *OwnerWallet) GetTokenMetadataAuditInfo(token []byte) ([]byte, error) { } // GetSigner returns the signer bound to the passed owner identity. -func (o *OwnerWallet) GetSigner(identity view.Identity) (driver.Signer, error) { +func (o *OwnerWallet) GetSigner(identity Identity) (driver.Signer, error) { return o.w.GetSigner(identity) } @@ -305,12 +304,12 @@ type IssuerWallet struct { // GetIssuerIdentity returns the issuer identity. This can be a long term identity or a pseudonym depending // on the underlying token driver. -func (i *IssuerWallet) GetIssuerIdentity(tokenType string) (view.Identity, error) { +func (i *IssuerWallet) GetIssuerIdentity(tokenType string) (Identity, error) { return i.w.GetIssuerIdentity(tokenType) } // GetSigner returns the signer bound to the passed issuer identity. -func (i *IssuerWallet) GetSigner(identity view.Identity) (Signer, error) { +func (i *IssuerWallet) GetSigner(identity Identity) (Signer, error) { return i.w.GetSigner(identity) }