From 6ede65610d82bd6e673f68039fad3612ea5bab8c Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Mon, 16 Mar 2020 19:52:28 +0300 Subject: [PATCH] core: add appropriate hashes to check for State TX These checks are important for proper transaction verification. --- pkg/core/blockchain.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index e9a45d4f5..f180f7116 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -1885,6 +1885,31 @@ func (bc *Blockchain) GetScriptHashesForVerifying(t *transaction.Transaction) ([ case transaction.EnrollmentType: etx := t.Data.(*transaction.EnrollmentTX) hashes[etx.PublicKey.GetScriptHash()] = true + case transaction.StateType: + stx := t.Data.(*transaction.StateTX) + for _, desc := range stx.Descriptors { + switch desc.Type { + case transaction.Account: + if desc.Field != "Votes" { + return nil, errors.New("bad account state descriptor") + } + hash, err := util.Uint160DecodeBytesBE(desc.Key) + if err != nil { + return nil, err + } + hashes[hash] = true + case transaction.Validator: + if desc.Field != "Registered" { + return nil, errors.New("bad validator state descriptor") + } + key := &keys.PublicKey{} + err := key.DecodeBytes(desc.Key) + if err != nil { + return nil, err + } + hashes[key.GetScriptHash()] = true + } + } } // convert hashes to []util.Uint160 hashesResult := make([]util.Uint160, 0, len(hashes))