@@ -144,27 +144,27 @@ func (s *TransferService) Transfer(ctx context.Context, txID string, _ driver.Ow
144144 // return for each output its information in the clear
145145 start := time .Now ()
146146 span .AddEvent ("start_generate_zk_transfer" )
147- action , outputMetadata , err := sender .GenerateZKTransfer (ctx , values , owners )
147+ transfer , outputsMetadata , err := sender .GenerateZKTransfer (ctx , values , owners )
148148 span .AddEvent ("end_generate_zk_transfer" )
149149 duration := time .Since (start )
150150 if err != nil {
151151 return nil , nil , errors .Wrapf (err , "failed to generate zkatdlog transfer action for txid [%s]" , txID )
152152 }
153153 s .Metrics .zkTransferDuration .Observe (float64 (duration .Milliseconds ()))
154154
155- // add transfer action's metadata
156- action .Metadata = meta .TransferActionMetadata (opts .Attributes )
155+ // add transfer action's transferMetadata
156+ transfer .Metadata = meta .TransferActionMetadata (opts .Attributes )
157157
158158 // add upgrade witness
159- action .InputUpgradeWitness = make ([]* token.UpgradeWitness , len (action .InputTokens ))
160- for i := range action .InputTokens {
161- action .InputUpgradeWitness [i ] = prepareInputs [i ].UpgradeWitness
159+ transfer .InputUpgradeWitness = make ([]* token.UpgradeWitness , len (transfer .InputTokens ))
160+ for i := range transfer .InputTokens {
161+ transfer .InputUpgradeWitness [i ] = prepareInputs [i ].UpgradeWitness
162162 }
163163
164- // prepare metadata
164+ // prepare transferMetadata
165165 ws := s .WalletService
166166
167- var inputsMetadata []* driver.TransferInputMetadata
167+ var transferInputsMetadata []* driver.TransferInputMetadata
168168 tokens := prepareInputs .Tokens ()
169169 senderAuditInfos := make ([][]byte , 0 , len (tokens ))
170170 for i , t := range tokens {
@@ -175,7 +175,7 @@ func (s *TransferService) Transfer(ctx context.Context, txID string, _ driver.Ow
175175 if len (auditInfo ) == 0 {
176176 s .Logger .Errorf ("empty audit info for the owner [%s] of the i^th token [%s]" , tokenIDs [i ], driver .Identity (t .Owner ))
177177 }
178- inputsMetadata = append (inputsMetadata , & driver.TransferInputMetadata {
178+ transferInputsMetadata = append (transferInputsMetadata , & driver.TransferInputMetadata {
179179 TokenID : tokenIDs [i ],
180180 Senders : []* driver.AuditableIdentity {
181181 {
@@ -186,58 +186,65 @@ func (s *TransferService) Transfer(ctx context.Context, txID string, _ driver.Ow
186186 })
187187 }
188188
189- var outputsMetadata []* driver.TransferOutputMetadata
189+ var transferOutputsMetadata []* driver.TransferOutputMetadata
190190 for i , output := range outputTokens {
191- transferOutputMetadata := & driver. TransferOutputMetadata {}
191+ var outputAudiInfo [] byte
192192 var receivers []driver.Identity
193193 var receiversAuditInfo [][]byte
194+ var outputReceivers []* driver.AuditableIdentity
195+
194196 if len (output .Owner ) == 0 { // redeem
197+ outputAudiInfo = nil
195198 receivers = append (receivers , output .Owner )
196199 receiversAuditInfo = append (receiversAuditInfo , []byte {})
200+ outputReceivers = make ([]* driver.AuditableIdentity , 0 , 1 )
197201 } else {
202+ outputAudiInfo , err = s .IdentityDeserializer .GetOwnerAuditInfo (output .Owner , ws )
203+ if err != nil {
204+ return nil , nil , errors .Wrapf (err , "failed getting audit info for sender identity [%s]" , driver .Identity (output .Owner ))
205+ }
198206 recipients , err := s .IdentityDeserializer .Recipients (output .Owner )
199207 if err != nil {
200208 return nil , nil , errors .Wrap (err , "failed getting recipients" )
201209 }
202210 receivers = append (receivers , recipients ... )
203211 for _ , receiver := range receivers {
204- auditInfo , err := s .IdentityDeserializer .GetOwnerAuditInfo (receiver , ws )
212+ receiverAudiInfo , err := s .IdentityDeserializer .GetOwnerAuditInfo (receiver , ws )
205213 if err != nil {
206- return nil , nil , errors .Wrapf (err , "failed getting audit info for sender identity [%s]" , driver . Identity ( receiver ) )
214+ return nil , nil , errors .Wrapf (err , "failed getting audit info for receiver identity [%s]" , receiver )
207215 }
208- receiversAuditInfo = append (receiversAuditInfo , auditInfo )
216+ receiversAuditInfo = append (receiversAuditInfo , receiverAudiInfo )
209217 }
210- auditInfo , err := s .IdentityDeserializer .GetOwnerAuditInfo (output .Owner , s .WalletService )
211- if err != nil {
212- return nil , nil , errors .Wrapf (err , "failed getting audit info for sender identity [%s]" , driver .Identity (output .Owner ).String ())
213- }
214- transferOutputMetadata .OutputAuditInfo = auditInfo
218+ outputReceivers = make ([]* driver.AuditableIdentity , 0 , len (recipients ))
215219 }
216- for j , receiver := range receivers {
217- transferOutputMetadata . Receivers = append (transferOutputMetadata . Receivers , & driver.AuditableIdentity {
220+ for i , receiver := range receivers {
221+ outputReceivers = append (outputReceivers , & driver.AuditableIdentity {
218222 Identity : receiver ,
219- AuditInfo : receiversAuditInfo [j ],
223+ AuditInfo : receiversAuditInfo [i ],
220224 })
221225 }
222226
223- raw , err := outputMetadata [i ].Serialize ()
227+ outputMetadata , err := outputsMetadata [i ].Serialize ()
224228 if err != nil {
225229 return nil , nil , errors .WithMessage (err , "failed serializing token info for zkatdlog transfer action" )
226230 }
227- transferOutputMetadata .OutputMetadata = raw
228231
229- outputsMetadata = append (outputsMetadata , transferOutputMetadata )
232+ transferOutputsMetadata = append (transferOutputsMetadata , & driver.TransferOutputMetadata {
233+ OutputMetadata : outputMetadata ,
234+ OutputAuditInfo : outputAudiInfo ,
235+ Receivers : outputReceivers ,
236+ })
230237 }
231238
232- s .Logger .Debugf ("Transfer Action Prepared [id:%s,ins:%d:%d,outs:%d]" , txID , len (tokenIDs ), len (senderAuditInfos ), action .NumOutputs ())
239+ s .Logger .Debugf ("Transfer Action Prepared [id:%s,ins:%d:%d,outs:%d]" , txID , len (tokenIDs ), len (senderAuditInfos ), transfer .NumOutputs ())
233240
234- metadata := & driver.TransferMetadata {
235- Inputs : inputsMetadata ,
236- Outputs : outputsMetadata ,
241+ transferMetadata := & driver.TransferMetadata {
242+ Inputs : transferInputsMetadata ,
243+ Outputs : transferOutputsMetadata ,
237244 ExtraSigners : nil ,
238245 }
239246
240- return action , metadata , nil
247+ return transfer , transferMetadata , nil
241248}
242249
243250// VerifyTransfer checks the outputs in the TransferActionMetadata against the passed metadata
0 commit comments