From 4fe1aad30f79616ad1bf3f8da96d185048df31a4 Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Tue, 25 Oct 2022 11:06:56 +0300 Subject: [PATCH] [#1966] neofs-adm: Fix signature creation for multiactor scenario `SignTx` from neo-go appended verification script only if `Scripts` array was not completely filled. ``` can't persist transactions: transaction b9cd02fb81721c7316c908687301eeaf8ef384e381476632c24a77bdf9ffacd5 failed to verify: witness #1: unknown verification contract ``` Signed-off-by: Evgenii Stratonikov --- .../internal/modules/morph/initialize_transfer.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/cmd/neofs-adm/internal/modules/morph/initialize_transfer.go b/cmd/neofs-adm/internal/modules/morph/initialize_transfer.go index af488984..9a0c57b6 100644 --- a/cmd/neofs-adm/internal/modules/morph/initialize_transfer.go +++ b/cmd/neofs-adm/internal/modules/morph/initialize_transfer.go @@ -130,13 +130,15 @@ func (c *initializeContext) multiSign(tx *transaction.Transaction, accType strin return fmt.Errorf("incomplete signature: %w", err) } - if len(tx.Scripts) == 0 { - tx.Scripts = make([]transaction.Witness, len(tx.Signers)) - } - for i := range tx.Signers { if tx.Signers[i].Account == h { - tx.Scripts[i] = *w + if i < len(tx.Scripts) { + tx.Scripts[i] = *w + } else if i == len(tx.Scripts) { + tx.Scripts = append(tx.Scripts, *w) + } else { + panic("BUG: invalid signing order") + } return nil } }