@@ -518,20 +518,16 @@ func signedTxnWithAdToTransaction(stxn *sdk.SignedTxnWithAD, extra rowData) (gen
518518 }
519519 if len (stxn .ApplyData .EvalDelta .LocalDeltas ) > 0 {
520520 keys := make ([]tuple , 0 )
521+
521522 for k := range stxn .ApplyData .EvalDelta .LocalDeltas {
522- if k == 0 {
523- keys = append (keys , tuple {
524- key : 0 ,
525- address : stxn .Txn .Sender ,
526- })
527- } else {
528- addr := sdk.Address {}
529- copy (addr [:], stxn .Txn .Accounts [k - 1 ][:])
530- keys = append (keys , tuple {
531- key : k ,
532- address : addr ,
533- })
523+ addr , err := edIndexToAddress (k , stxn .Txn , stxn .ApplyData .EvalDelta .SharedAccounts )
524+ if err != nil {
525+ return generated.Transaction {}, err
534526 }
527+ keys = append (keys , tuple {
528+ key : k ,
529+ address : addr ,
530+ })
535531 }
536532 sort .Slice (keys , func (i , j int ) bool { return keys [i ].key < keys [j ].key })
537533 d := make ([]generated.AccountStateDelta , 0 )
@@ -629,6 +625,20 @@ func signedTxnWithAdToTransaction(stxn *sdk.SignedTxnWithAD, extra rowData) (gen
629625 return txn , nil
630626}
631627
628+ func edIndexToAddress (index uint64 , txn sdk.Transaction , shared []sdk.Address ) (sdk.Address , error ) {
629+ // index into [Sender, txn.Accounts[0], txn.Accounts[1], ..., shared[0], shared[1], ...]
630+ switch {
631+ case index == 0 :
632+ return txn .Sender , nil
633+ case int (index - 1 ) < len (txn .Accounts ):
634+ return txn .Accounts [index - 1 ], nil
635+ case int (index - 1 )- len (txn .Accounts ) < len (shared ):
636+ return shared [int (index - 1 )- len (txn .Accounts )], nil
637+ default :
638+ return sdk.Address {}, fmt .Errorf ("invalid Account Index %d in LocalDelta" , index )
639+ }
640+ }
641+
632642func (si * ServerImplementation ) assetParamsToAssetQuery (params generated.SearchForAssetsParams ) (idb.AssetsQuery , error ) {
633643 creator , errorArr := decodeAddress (params .Creator , "creator" , make ([]string , 0 ))
634644 if len (errorArr ) != 0 {
0 commit comments