core,cli: disallow verify methods with non-bool returns

This commit is contained in:
Evgeniy Stratonikov 2021-01-26 18:00:08 +03:00
parent 73f888f02e
commit dd1e2cefe4
2 changed files with 5 additions and 3 deletions

View file

@ -13,6 +13,7 @@ import (
"github.com/nspcc-dev/neo-go/pkg/core/native/nativenames" "github.com/nspcc-dev/neo-go/pkg/core/native/nativenames"
"github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/crypto/keys"
"github.com/nspcc-dev/neo-go/pkg/encoding/address" "github.com/nspcc-dev/neo-go/pkg/encoding/address"
"github.com/nspcc-dev/neo-go/pkg/smartcontract"
"github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest"
"github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/util"
"github.com/nspcc-dev/neo-go/pkg/wallet" "github.com/nspcc-dev/neo-go/pkg/wallet"
@ -420,8 +421,8 @@ func importDeployed(ctx *cli.Context) error {
return cli.NewExitError(fmt.Errorf("can't fetch contract info: %w", err), 1) return cli.NewExitError(fmt.Errorf("can't fetch contract info: %w", err), 1)
} }
md := cs.Manifest.ABI.GetMethod(manifest.MethodVerify, -1) md := cs.Manifest.ABI.GetMethod(manifest.MethodVerify, -1)
if md == nil { if md == nil || md.ReturnType != smartcontract.BoolType {
return cli.NewExitError("contract has no `verify` method", 1) return cli.NewExitError("contract has no `verify` method with boolean return", 1)
} }
acc.Address = address.Uint160ToString(cs.Hash) acc.Address = address.Uint160ToString(cs.Hash)
acc.Contract.Script = cs.NEF.Script acc.Contract.Script = cs.NEF.Script

View file

@ -28,6 +28,7 @@ import (
"github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/crypto/keys"
"github.com/nspcc-dev/neo-go/pkg/encoding/bigint" "github.com/nspcc-dev/neo-go/pkg/encoding/bigint"
"github.com/nspcc-dev/neo-go/pkg/io" "github.com/nspcc-dev/neo-go/pkg/io"
"github.com/nspcc-dev/neo-go/pkg/smartcontract"
"github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag"
"github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest"
"github.com/nspcc-dev/neo-go/pkg/smartcontract/trigger" "github.com/nspcc-dev/neo-go/pkg/smartcontract/trigger"
@ -1668,7 +1669,7 @@ func (bc *Blockchain) initVerificationVM(ic *interop.Context, hash util.Uint160,
return ErrUnknownVerificationContract return ErrUnknownVerificationContract
} }
md := cs.Manifest.ABI.GetMethod(manifest.MethodVerify, -1) md := cs.Manifest.ABI.GetMethod(manifest.MethodVerify, -1)
if md == nil { if md == nil || md.ReturnType != smartcontract.BoolType {
return ErrInvalidVerificationContract return ErrInvalidVerificationContract
} }
initMD := cs.Manifest.ABI.GetMethod(manifest.MethodInit, 0) initMD := cs.Manifest.ABI.GetMethod(manifest.MethodInit, 0)