diff --git a/pkg/core/interop/context.go b/pkg/core/interop/context.go index 4a734ad42..0c7419284 100644 --- a/pkg/core/interop/context.go +++ b/pkg/core/interop/context.go @@ -207,7 +207,7 @@ func (c *ContractMD) AddMethod(md *MethodAndPrice, desc *manifest.Method) { index := sort.Search(len(c.Manifest.ABI.Methods), func(i int) bool { md := c.Manifest.ABI.Methods[i] if md.Name != desc.Name { - return md.Name >= desc.Name + return strings.ToLower(md.Name) >= strings.ToLower(desc.Name) } return len(md.Parameters) > len(desc.Parameters) }) @@ -236,7 +236,7 @@ func (c *ContractMD) GetMethodByOffset(offset int) (MethodAndPrice, bool) { func (c *ContractMD) GetMethod(name string, paramCount int) (MethodAndPrice, bool) { index := sort.Search(len(c.Methods), func(i int) bool { md := c.Methods[i] - res := strings.Compare(name, md.MD.Name) + res := strings.Compare(strings.ToLower(name), strings.ToLower(md.MD.Name)) switch res { case -1, 1: return res == -1 diff --git a/pkg/core/interop_system_core_test.go b/pkg/core/interop_system_core_test.go index 7beff0888..e0211922f 100644 --- a/pkg/core/interop_system_core_test.go +++ b/pkg/core/interop_system_core_test.go @@ -967,3 +967,18 @@ func TestRuntimeCheckWitness(t *testing.T) { }) }) } + +// TestNativeGetMethod is needed to ensure that methods list has the same sorting +// rule as we expect inside the `ContractMD.GetMethod`. +func TestNativeGetMethod(t *testing.T) { + cfg := config.ProtocolConfiguration{P2PSigExtensions: true} + cs := native.NewContracts(cfg) + for _, c := range cs.Contracts { + t.Run(c.Metadata().Name, func(t *testing.T) { + for _, m := range c.Metadata().Methods { + _, ok := c.Metadata().GetMethod(m.MD.Name, len(m.MD.Parameters)) + require.True(t, ok) + } + }) + } +}