@@ -8,6 +8,7 @@ package htlc
88
99import (
1010 "context"
11+ errors2 "errors"
1112
1213 "github.com/hyperledger-labs/fabric-smart-client/pkg/utils/errors"
1314 "github.com/hyperledger-labs/fabric-token-sdk/token/core/common/encoding/json"
@@ -165,17 +166,17 @@ func GetScriptSenderAndRecipient(id []byte) (sender, recipient driver.Identity,
165166 return script .Sender , script .Recipient , nil
166167}
167168
168- type SenderSignerDeserializer struct {
169+ type SignerDeserializer struct {
169170 manager idriver.SignerDeserializerManager
170171}
171172
172- func NewSenderSignerDeserializer (manager idriver.SignerDeserializerManager ) * SenderSignerDeserializer {
173- return & SenderSignerDeserializer {
173+ func NewSignerDeserializer (manager idriver.SignerDeserializerManager ) * SignerDeserializer {
174+ return & SignerDeserializer {
174175 manager : manager ,
175176 }
176177}
177178
178- func (d * SenderSignerDeserializer ) DeserializeSigner (ctx context.Context , typ idriver.IdentityType , raw []byte ) (driver.Signer , error ) {
179+ func (d * SignerDeserializer ) DeserializeSigner (ctx context.Context , typ idriver.IdentityType , raw []byte ) (driver.Signer , error ) {
179180 if typ != htlc .ScriptType {
180181 return nil , errors .Errorf ("invalid type, got [%s], expected [%s]" , typ , htlc .ScriptType )
181182 }
@@ -185,5 +186,14 @@ func (d *SenderSignerDeserializer) DeserializeSigner(ctx context.Context, typ id
185186 if err != nil {
186187 return nil , errors .Errorf ("failed to unmarshal TypedIdentity as an htlc script" )
187188 }
188- return d .manager .DeserializeSigner (ctx , script .Sender )
189+ s , err := d .manager .DeserializeSigner (ctx , script .Sender )
190+ if err != nil {
191+ // try the recipient
192+ var err2 error
193+ s , err2 = d .manager .DeserializeSigner (ctx , script .Recipient )
194+ if err2 != nil {
195+ return nil , errors .Wrapf (errors2 .Join (err , err2 ), "failed deserializing signer" )
196+ }
197+ }
198+ return s , nil
189199}
0 commit comments