neo-go/pkg/core/opcode_price.go
Evgenii Stratonikov c09ea04df3 core: add prices for TRY* opcodes
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
2020-07-29 13:41:08 +03:00

201 lines
5.1 KiB
Go

package core
import (
"github.com/nspcc-dev/neo-go/pkg/vm/opcode"
)
// opcodePrice returns the deployment prices of specified opcodes
func opcodePrice(opcodes ...opcode.Opcode) int64 {
var result int64
for _, op := range opcodes {
result += prices[op]
}
return result
}
var prices = map[opcode.Opcode]int64{
opcode.PUSHINT8: 30,
opcode.PUSHINT32: 30,
opcode.PUSHINT64: 30,
opcode.PUSHINT16: 30,
opcode.PUSHINT128: 120,
opcode.PUSHINT256: 120,
opcode.PUSHA: 120,
opcode.PUSHNULL: 30,
opcode.PUSHDATA1: 180,
opcode.PUSHDATA2: 13000,
opcode.PUSHDATA4: 110000,
opcode.PUSHM1: 30,
opcode.PUSH0: 30,
opcode.PUSH1: 30,
opcode.PUSH2: 30,
opcode.PUSH3: 30,
opcode.PUSH4: 30,
opcode.PUSH5: 30,
opcode.PUSH6: 30,
opcode.PUSH7: 30,
opcode.PUSH8: 30,
opcode.PUSH9: 30,
opcode.PUSH10: 30,
opcode.PUSH11: 30,
opcode.PUSH12: 30,
opcode.PUSH13: 30,
opcode.PUSH14: 30,
opcode.PUSH15: 30,
opcode.PUSH16: 30,
opcode.NOP: 30,
opcode.JMP: 70,
opcode.JMPL: 70,
opcode.JMPIF: 70,
opcode.JMPIFL: 70,
opcode.JMPIFNOT: 70,
opcode.JMPIFNOTL: 70,
opcode.JMPEQ: 70,
opcode.JMPEQL: 70,
opcode.JMPNE: 70,
opcode.JMPNEL: 70,
opcode.JMPGT: 70,
opcode.JMPGTL: 70,
opcode.JMPGE: 70,
opcode.JMPGEL: 70,
opcode.JMPLT: 70,
opcode.JMPLTL: 70,
opcode.JMPLE: 70,
opcode.JMPLEL: 70,
opcode.CALL: 22000,
opcode.CALLL: 22000,
opcode.CALLA: 22000,
opcode.ABORT: 30,
opcode.ASSERT: 30,
opcode.THROW: 22000,
opcode.TRY: 100,
opcode.TRYL: 100,
opcode.ENDTRY: 100,
opcode.ENDTRYL: 100,
opcode.ENDFINALLY: 100,
opcode.RET: 0,
opcode.SYSCALL: 0,
opcode.DEPTH: 60,
opcode.DROP: 60,
opcode.NIP: 60,
opcode.XDROP: 400,
opcode.CLEAR: 400,
opcode.DUP: 60,
opcode.OVER: 60,
opcode.PICK: 60,
opcode.TUCK: 60,
opcode.SWAP: 60,
opcode.ROT: 60,
opcode.ROLL: 400,
opcode.REVERSE3: 60,
opcode.REVERSE4: 60,
opcode.REVERSEN: 400,
opcode.INITSSLOT: 400,
opcode.INITSLOT: 800,
opcode.LDSFLD0: 60,
opcode.LDSFLD1: 60,
opcode.LDSFLD2: 60,
opcode.LDSFLD3: 60,
opcode.LDSFLD4: 60,
opcode.LDSFLD5: 60,
opcode.LDSFLD6: 60,
opcode.LDSFLD: 60,
opcode.STSFLD0: 60,
opcode.STSFLD1: 60,
opcode.STSFLD2: 60,
opcode.STSFLD3: 60,
opcode.STSFLD4: 60,
opcode.STSFLD5: 60,
opcode.STSFLD6: 60,
opcode.STSFLD: 60,
opcode.LDLOC0: 60,
opcode.LDLOC1: 60,
opcode.LDLOC2: 60,
opcode.LDLOC3: 60,
opcode.LDLOC4: 60,
opcode.LDLOC5: 60,
opcode.LDLOC6: 60,
opcode.LDLOC: 60,
opcode.STLOC0: 60,
opcode.STLOC1: 60,
opcode.STLOC2: 60,
opcode.STLOC3: 60,
opcode.STLOC4: 60,
opcode.STLOC5: 60,
opcode.STLOC6: 60,
opcode.STLOC: 60,
opcode.LDARG0: 60,
opcode.LDARG1: 60,
opcode.LDARG2: 60,
opcode.LDARG3: 60,
opcode.LDARG4: 60,
opcode.LDARG5: 60,
opcode.LDARG6: 60,
opcode.LDARG: 60,
opcode.STARG0: 60,
opcode.STARG1: 60,
opcode.STARG2: 60,
opcode.STARG3: 60,
opcode.STARG4: 60,
opcode.STARG5: 60,
opcode.STARG6: 60,
opcode.STARG: 60,
opcode.NEWBUFFER: 80000,
opcode.MEMCPY: 80000,
opcode.CAT: 80000,
opcode.SUBSTR: 80000,
opcode.LEFT: 80000,
opcode.RIGHT: 80000,
opcode.INVERT: 100,
opcode.AND: 200,
opcode.OR: 200,
opcode.XOR: 200,
opcode.EQUAL: 200,
opcode.NOTEQUAL: 200,
opcode.SIGN: 100,
opcode.ABS: 100,
opcode.NEGATE: 100,
opcode.INC: 100,
opcode.DEC: 100,
opcode.ADD: 200,
opcode.SUB: 200,
opcode.MUL: 300,
opcode.DIV: 300,
opcode.MOD: 300,
opcode.SHL: 300,
opcode.SHR: 300,
opcode.NOT: 100,
opcode.BOOLAND: 200,
opcode.BOOLOR: 200,
opcode.NZ: 100,
opcode.NUMEQUAL: 200,
opcode.NUMNOTEQUAL: 200,
opcode.LT: 200,
opcode.LTE: 200,
opcode.GT: 200,
opcode.GTE: 200,
opcode.MIN: 200,
opcode.MAX: 200,
opcode.WITHIN: 200,
opcode.PACK: 7000,
opcode.UNPACK: 7000,
opcode.NEWARRAY0: 400,
opcode.NEWARRAY: 15000,
opcode.NEWARRAYT: 15000,
opcode.NEWSTRUCT0: 400,
opcode.NEWSTRUCT: 15000,
opcode.NEWMAP: 200,
opcode.SIZE: 150,
opcode.HASKEY: 270000,
opcode.KEYS: 500,
opcode.VALUES: 7000,
opcode.PICKITEM: 270000,
opcode.APPEND: 15000,
opcode.SETITEM: 270000,
opcode.REVERSEITEMS: 500,
opcode.REMOVE: 500,
opcode.CLEARITEMS: 400,
opcode.ISNULL: 60,
opcode.ISTYPE: 60,
opcode.CONVERT: 80000,
}