@@ -12,7 +12,6 @@ import (
1212
1313 math2 "github.com/IBM/mathlib"
1414 "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils"
15- "github.com/hyperledger-labs/fabric-token-sdk/token/core/common"
1615 v1 "github.com/hyperledger-labs/fabric-token-sdk/token/core/fabtoken/v1"
1716 "github.com/hyperledger-labs/fabric-token-sdk/token/core/fabtoken/v1/actions"
1817 "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/crypto/math"
@@ -31,31 +30,37 @@ var Precisions = map[token.Format]uint64{
3130 utils .MustGet (v1 .SupportedTokenFormat (64 )): 64 ,
3231}
3332
33+ //go:generate counterfeiter -o mock/id.go -fake-name IdentityDeserializer . IdentityDeserializer
34+
35+ type IdentityDeserializer interface {
36+ // Recipients returns the recipient identities from the given serialized representation
37+ Recipients (raw driver.Identity ) ([]driver.Identity , error )
38+ }
39+
3440type TokensService struct {
35- Logger logging.Logger
36- PublicParametersManager common. PublicParametersManager [ * setup.PublicParams ]
37- IdentityDeserializer driver. Deserializer
41+ Logger logging.Logger
42+ PublicParameters * setup.PublicParams
43+ IdentityDeserializer IdentityDeserializer
3844
3945 OutputTokenFormat token.Format
4046 SupportedTokenFormatList []token.Format
4147}
4248
43- func NewTokensService (logger logging.Logger , publicParametersManager common. PublicParametersManager [ * setup.PublicParams ] , identityDeserializer driver. Deserializer ) (* TokensService , error ) {
49+ func NewTokensService (logger logging.Logger , publicParams * setup.PublicParams , identityDeserializer IdentityDeserializer ) (* TokensService , error ) {
4450 // compute supported tokens
45- pp := publicParametersManager .PublicParams ()
46- maxPrecision := pp .RangeProofParams .BitLength
51+ maxPrecision := publicParams .Precision ()
4752
4853 // dlog without graph hiding
49- outputTokenFormat , err := supportedTokenFormat (pp , maxPrecision )
54+ outputTokenFormat , err := supportedTokenFormat (publicParams , maxPrecision )
5055 if err != nil {
5156 return nil , errors .Wrapf (err , "failed computing comm token types" )
5257 }
5358
54- supportedTokenFormatList := make ([]token.Format , 0 , 3 * len (pp .IdemixIssuerPublicKeys ))
59+ supportedTokenFormatList := make ([]token.Format , 0 , 3 * len (publicParams .IdemixIssuerPublicKeys ))
5560 for _ , precision := range setup .SupportedPrecisions {
5661 // these Precisions are supported directly
5762 if precision <= maxPrecision {
58- format , err := supportedTokenFormat (pp , precision )
63+ format , err := supportedTokenFormat (publicParams , precision )
5964 if err != nil {
6065 return nil , errors .Wrapf (err , "failed computing comm token types" )
6166 }
@@ -76,7 +81,7 @@ func NewTokensService(logger logging.Logger, publicParametersManager common.Publ
7681
7782 return & TokensService {
7883 Logger : logger ,
79- PublicParametersManager : publicParametersManager ,
84+ PublicParameters : publicParams ,
8085 IdentityDeserializer : identityDeserializer ,
8186 OutputTokenFormat : outputTokenFormat ,
8287 SupportedTokenFormatList : supportedTokenFormatList ,
@@ -173,13 +178,12 @@ func (s *TokensService) DeserializeToken(outputFormat token.Format, outputRaw []
173178 if ! ok {
174179 return nil , nil , nil , errors .Errorf ("unsupported token format [%s]" , outputFormat )
175180 }
176- fabToken , value , err := ParseFabtokenToken (outputRaw , precision , s .PublicParametersManager . PublicParams () .RangeProofParams .BitLength )
181+ fabToken , value , err := ParseFabtokenToken (outputRaw , precision , s .PublicParameters .RangeProofParams .BitLength )
177182 if err != nil {
178183 return nil , nil , nil , errors .Wrapf (err , "failed to unmarshal fabtoken token" )
179184 }
180- pp := s .PublicParametersManager .PublicParams ()
181- curve := math2 .Curves [pp .Curve ]
182- tokens , meta , err := GetTokensWithWitness ([]uint64 {value }, fabToken .Type , pp .PedersenGenerators , curve )
185+ curve := math2 .Curves [s .PublicParameters .Curve ]
186+ tokens , meta , err := GetTokensWithWitness ([]uint64 {value }, fabToken .Type , s .PublicParameters .PedersenGenerators , curve )
183187 if err != nil {
184188 return nil , nil , nil , errors .Wrapf (err , "failed to compute commitment" )
185189 }
@@ -226,9 +230,8 @@ func (s *TokensService) deserializeCommToken(outputRaw []byte, metadataRaw []byt
226230 if err != nil {
227231 return nil , nil , nil , errors .Wrapf (err , "failed to deserialize token metadata [%d][%v]" , len (metadataRaw ), metadataRaw )
228232 }
229- pp := s .PublicParametersManager .PublicParams ()
230233
231- tok , err := output .ToClear (metadata , pp )
234+ tok , err := output .ToClear (metadata , s . PublicParameters )
232235 if err != nil {
233236 return nil , nil , nil , errors .Wrap (err , "failed to deserialize token" )
234237 }
@@ -243,7 +246,7 @@ func (s *TokensService) getOutput(outputRaw []byte, checkOwner bool) (*Token, er
243246 if checkOwner && len (output .Owner ) == 0 {
244247 return nil , errors .Errorf ("token owner not found in output" )
245248 }
246- if err := math .CheckElement (output .Data , s .PublicParametersManager . PublicParams () .Curve ); err != nil {
249+ if err := math .CheckElement (output .Data , s .PublicParameters .Curve ); err != nil {
247250 return nil , errors .Wrap (err , "data in invalid in output" )
248251 }
249252 return output , nil
0 commit comments