smartcontract: improve manifest validness errors

It should be clear from error what's wrong with ABI
(specify bad method/event/parameter identifier).
This commit is contained in:
Anna Shaleva 2022-08-22 13:26:12 +03:00
parent 606597b9a1
commit 15732580eb
3 changed files with 8 additions and 5 deletions

View file

@ -2,6 +2,7 @@ package manifest
import ( import (
"errors" "errors"
"fmt"
"sort" "sort"
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
@ -53,12 +54,12 @@ func (a *ABI) GetEvent(name string) *Event {
// IsValid checks ABI consistency and correctness. // IsValid checks ABI consistency and correctness.
func (a *ABI) IsValid() error { func (a *ABI) IsValid() error {
if len(a.Methods) == 0 { if len(a.Methods) == 0 {
return errors.New("ABI contains no methods") return errors.New("no methods")
} }
for i := range a.Methods { for i := range a.Methods {
err := a.Methods[i].IsValid() err := a.Methods[i].IsValid()
if err != nil { if err != nil {
return err return fmt.Errorf("method %q/%d: %w", a.Methods[i].Name, len(a.Methods[i].Parameters), err)
} }
} }
if len(a.Methods) > 1 { if len(a.Methods) > 1 {
@ -92,7 +93,7 @@ func (a *ABI) IsValid() error {
for i := range a.Events { for i := range a.Events {
err := a.Events[i].IsValid() err := a.Events[i].IsValid()
if err != nil { if err != nil {
return err return fmt.Errorf("event %q/%d: %w", a.Events[i].Name, len(a.Events[i].Parameters), err)
} }
} }
if len(a.Events) > 1 { if len(a.Events) > 1 {

View file

@ -4,6 +4,7 @@ import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt"
"math" "math"
ojson "github.com/nspcc-dev/go-ordered-json" ojson "github.com/nspcc-dev/go-ordered-json"
@ -104,7 +105,7 @@ func (m *Manifest) IsValid(hash util.Uint160) error {
} }
err = m.ABI.IsValid() err = m.ABI.IsValid()
if err != nil { if err != nil {
return err return fmt.Errorf("ABI: %w", err)
} }
err = Groups(m.Groups).AreValid(hash) err = Groups(m.Groups).AreValid(hash)
if err != nil { if err != nil {

View file

@ -2,6 +2,7 @@ package manifest
import ( import (
"errors" "errors"
"fmt"
"sort" "sort"
"github.com/nspcc-dev/neo-go/pkg/smartcontract" "github.com/nspcc-dev/neo-go/pkg/smartcontract"
@ -75,7 +76,7 @@ func (p Parameters) AreValid() error {
for i := range p { for i := range p {
err := p[i].IsValid() err := p[i].IsValid()
if err != nil { if err != nil {
return err return fmt.Errorf("parameter #%d/%q: %w", i, p[i].Name, err)
} }
} }
if len(p) < 2 { if len(p) < 2 {