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.TRY_L: 100, //opcode.ENDTRY: 100, //opcode.ENDTRY_L: 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, }