diff --git a/pkg/core/fee/opcode.go b/pkg/core/fee/opcode.go index 806ee1a8d..b90893cd0 100644 --- a/pkg/core/fee/opcode.go +++ b/pkg/core/fee/opcode.go @@ -8,12 +8,12 @@ import ( func Opcode(base int64, opcodes ...opcode.Opcode) int64 { var result int64 for _, op := range opcodes { - result += coefficients[op] + result += int64(coefficients[op]) } return result * base } -var coefficients = map[opcode.Opcode]int64{ +var coefficients = [256]uint16{ opcode.PUSHINT8: 1 << 0, opcode.PUSHINT16: 1 << 0, opcode.PUSHINT32: 1 << 0, diff --git a/pkg/core/fee/opcode_test.go b/pkg/core/fee/opcode_test.go new file mode 100644 index 000000000..39edf3e5b --- /dev/null +++ b/pkg/core/fee/opcode_test.go @@ -0,0 +1,19 @@ +package fee + +import ( + "testing" + + "github.com/nspcc-dev/neo-go/pkg/vm/opcode" +) + +const feeFactor = 30 + +// The most common Opcode() use case is to get price for single opcode. +func BenchmarkOpcode1(t *testing.B) { + // Just so that we don't always test the same opcode. + script := []opcode.Opcode{opcode.NOP, opcode.ADD, opcode.SYSCALL, opcode.APPEND} + l := len(script) + for n := 0; n < t.N; n++ { + _ = Opcode(feeFactor, script[n%l]) + } +}