mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-11-27 03:58:06 +00:00
7acf5b2841
closes #831
202 lines
5 KiB
Go
202 lines
5 KiB
Go
package core
|
|
|
|
import (
|
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
|
"github.com/nspcc-dev/neo-go/pkg/vm/opcode"
|
|
)
|
|
|
|
// opcodePrice returns the deployment prices of specified opcodes
|
|
func opcodePrice(opcodes ...opcode.Opcode) util.Fixed8 {
|
|
var result util.Fixed8
|
|
for _, op := range opcodes {
|
|
result += util.Fixed8(prices[op])
|
|
}
|
|
return result
|
|
}
|
|
|
|
var prices = map[opcode.Opcode]int{
|
|
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,
|
|
}
|