diff --git a/data/transactions/logic/assembler.go b/data/transactions/logic/assembler.go index ddadd606d0..29569e9542 100644 --- a/data/transactions/logic/assembler.go +++ b/data/transactions/logic/assembler.go @@ -1254,9 +1254,12 @@ func disBnz(dis *disassembleState) { dis.nextpc = dis.pc + 3 offset := (uint(dis.program[dis.pc+1]) << 8) | uint(dis.program[dis.pc+2]) target := int(offset) + dis.pc + 3 - dis.labelCount++ - label := fmt.Sprintf("label%d", dis.labelCount) - dis.putLabel(label, target) + label, labelExists := dis.pendingLabels[target] + if !labelExists { + dis.labelCount++ + label = fmt.Sprintf("label%d", dis.labelCount) + dis.putLabel(label, target) + } _, dis.err = fmt.Fprintf(dis.out, "bnz %s\n", label) } diff --git a/data/transactions/logic/assembler_test.go b/data/transactions/logic/assembler_test.go index 584b6b03e4..7888cc3810 100644 --- a/data/transactions/logic/assembler_test.go +++ b/data/transactions/logic/assembler_test.go @@ -270,16 +270,19 @@ len arg 5 len + +bnz label1 global MinTxnFee global MinBalance global MaxTxnLife txn Sender txn Fee +bnz label1 txn FirstValid txn LastValid txn Note txn Receiver txn Amount +label1: txn CloseRemainderTo txn VotePK txn SelectionPK