manifest/standard: check Safe flag in Comply()

This commit is contained in:
Evgenii Stratonikov 2020-12-08 13:47:05 +03:00
parent b7e86fa6a3
commit ea4d14d20d
2 changed files with 12 additions and 0 deletions

View file

@ -14,6 +14,7 @@ var (
ErrInvalidReturnType = errors.New("invalid return type")
ErrInvalidParameterCount = errors.New("invalid parameter count")
ErrInvalidParameterType = errors.New("invalid parameter type")
ErrSafeMethodMismatch = errors.New("method has wrong safe flag")
)
var checks = map[string]*manifest.Manifest{
@ -55,6 +56,9 @@ func Comply(m, st *manifest.Manifest) error {
name, i, stm.Parameters[i].Type, md.Parameters[i].Type)
}
}
if stm.Safe != md.Safe {
return fmt.Errorf("%w: expected %t", ErrSafeMethodMismatch, stm.Safe)
}
}
for _, ste := range st.ABI.Events {
name := ste.Name

View file

@ -20,6 +20,7 @@ func fooMethodBarEvent() *manifest.Manifest {
{Type: smartcontract.PublicKeyType},
},
ReturnType: smartcontract.IntegerType,
Safe: true,
},
},
Events: []manifest.Event{
@ -87,6 +88,13 @@ func TestMissingEvent(t *testing.T) {
require.True(t, errors.Is(err, ErrEventMissing))
}
func TestSafeFlag(t *testing.T) {
m := fooMethodBarEvent()
m.ABI.GetMethod("foo").Safe = false
err := Comply(m, fooMethodBarEvent())
require.True(t, errors.Is(err, ErrSafeMethodMismatch))
}
func TestComplyValid(t *testing.T) {
m := fooMethodBarEvent()
m.ABI.Methods = append(m.ABI.Methods, manifest.Method{