github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/core/fee/opcode.go (about) 1 package fee 2 3 import ( 4 "github.com/nspcc-dev/neo-go/pkg/vm/opcode" 5 ) 6 7 // Opcode returns the deployment coefficients of the specified opcodes. 8 func Opcode(base int64, opcodes ...opcode.Opcode) int64 { 9 var result int64 10 for _, op := range opcodes { 11 result += int64(coefficients[op]) 12 } 13 return result * base 14 } 15 16 var coefficients = [256]uint16{ 17 opcode.PUSHINT8: 1 << 0, 18 opcode.PUSHINT16: 1 << 0, 19 opcode.PUSHINT32: 1 << 0, 20 opcode.PUSHINT64: 1 << 0, 21 opcode.PUSHINT128: 1 << 2, 22 opcode.PUSHINT256: 1 << 2, 23 opcode.PUSHT: 1 << 0, 24 opcode.PUSHF: 1 << 0, 25 opcode.PUSHA: 1 << 2, 26 opcode.PUSHNULL: 1 << 0, 27 opcode.PUSHDATA1: 1 << 3, 28 opcode.PUSHDATA2: 1 << 9, 29 opcode.PUSHDATA4: 1 << 12, 30 opcode.PUSHM1: 1 << 0, 31 opcode.PUSH0: 1 << 0, 32 opcode.PUSH1: 1 << 0, 33 opcode.PUSH2: 1 << 0, 34 opcode.PUSH3: 1 << 0, 35 opcode.PUSH4: 1 << 0, 36 opcode.PUSH5: 1 << 0, 37 opcode.PUSH6: 1 << 0, 38 opcode.PUSH7: 1 << 0, 39 opcode.PUSH8: 1 << 0, 40 opcode.PUSH9: 1 << 0, 41 opcode.PUSH10: 1 << 0, 42 opcode.PUSH11: 1 << 0, 43 opcode.PUSH12: 1 << 0, 44 opcode.PUSH13: 1 << 0, 45 opcode.PUSH14: 1 << 0, 46 opcode.PUSH15: 1 << 0, 47 opcode.PUSH16: 1 << 0, 48 opcode.NOP: 1 << 0, 49 opcode.JMP: 1 << 1, 50 opcode.JMPL: 1 << 1, 51 opcode.JMPIF: 1 << 1, 52 opcode.JMPIFL: 1 << 1, 53 opcode.JMPIFNOT: 1 << 1, 54 opcode.JMPIFNOTL: 1 << 1, 55 opcode.JMPEQ: 1 << 1, 56 opcode.JMPEQL: 1 << 1, 57 opcode.JMPNE: 1 << 1, 58 opcode.JMPNEL: 1 << 1, 59 opcode.JMPGT: 1 << 1, 60 opcode.JMPGTL: 1 << 1, 61 opcode.JMPGE: 1 << 1, 62 opcode.JMPGEL: 1 << 1, 63 opcode.JMPLT: 1 << 1, 64 opcode.JMPLTL: 1 << 1, 65 opcode.JMPLE: 1 << 1, 66 opcode.JMPLEL: 1 << 1, 67 opcode.CALL: 1 << 9, 68 opcode.CALLL: 1 << 9, 69 opcode.CALLA: 1 << 9, 70 opcode.CALLT: 1 << 15, 71 opcode.ABORT: 0, 72 opcode.ASSERT: 1 << 0, 73 opcode.ABORTMSG: 0, // TODO 74 opcode.ASSERTMSG: 1 << 0, // TODO 75 opcode.THROW: 1 << 9, 76 opcode.TRY: 1 << 2, 77 opcode.TRYL: 1 << 2, 78 opcode.ENDTRY: 1 << 2, 79 opcode.ENDTRYL: 1 << 2, 80 opcode.ENDFINALLY: 1 << 2, 81 opcode.RET: 0, 82 opcode.SYSCALL: 0, 83 opcode.DEPTH: 1 << 1, 84 opcode.DROP: 1 << 1, 85 opcode.NIP: 1 << 1, 86 opcode.XDROP: 1 << 4, 87 opcode.CLEAR: 1 << 4, 88 opcode.DUP: 1 << 1, 89 opcode.OVER: 1 << 1, 90 opcode.PICK: 1 << 1, 91 opcode.TUCK: 1 << 1, 92 opcode.SWAP: 1 << 1, 93 opcode.ROT: 1 << 1, 94 opcode.ROLL: 1 << 4, 95 opcode.REVERSE3: 1 << 1, 96 opcode.REVERSE4: 1 << 1, 97 opcode.REVERSEN: 1 << 4, 98 opcode.INITSSLOT: 1 << 4, 99 opcode.INITSLOT: 1 << 6, 100 opcode.LDSFLD0: 1 << 1, 101 opcode.LDSFLD1: 1 << 1, 102 opcode.LDSFLD2: 1 << 1, 103 opcode.LDSFLD3: 1 << 1, 104 opcode.LDSFLD4: 1 << 1, 105 opcode.LDSFLD5: 1 << 1, 106 opcode.LDSFLD6: 1 << 1, 107 opcode.LDSFLD: 1 << 1, 108 opcode.STSFLD0: 1 << 1, 109 opcode.STSFLD1: 1 << 1, 110 opcode.STSFLD2: 1 << 1, 111 opcode.STSFLD3: 1 << 1, 112 opcode.STSFLD4: 1 << 1, 113 opcode.STSFLD5: 1 << 1, 114 opcode.STSFLD6: 1 << 1, 115 opcode.STSFLD: 1 << 1, 116 opcode.LDLOC0: 1 << 1, 117 opcode.LDLOC1: 1 << 1, 118 opcode.LDLOC2: 1 << 1, 119 opcode.LDLOC3: 1 << 1, 120 opcode.LDLOC4: 1 << 1, 121 opcode.LDLOC5: 1 << 1, 122 opcode.LDLOC6: 1 << 1, 123 opcode.LDLOC: 1 << 1, 124 opcode.STLOC0: 1 << 1, 125 opcode.STLOC1: 1 << 1, 126 opcode.STLOC2: 1 << 1, 127 opcode.STLOC3: 1 << 1, 128 opcode.STLOC4: 1 << 1, 129 opcode.STLOC5: 1 << 1, 130 opcode.STLOC6: 1 << 1, 131 opcode.STLOC: 1 << 1, 132 opcode.LDARG0: 1 << 1, 133 opcode.LDARG1: 1 << 1, 134 opcode.LDARG2: 1 << 1, 135 opcode.LDARG3: 1 << 1, 136 opcode.LDARG4: 1 << 1, 137 opcode.LDARG5: 1 << 1, 138 opcode.LDARG6: 1 << 1, 139 opcode.LDARG: 1 << 1, 140 opcode.STARG0: 1 << 1, 141 opcode.STARG1: 1 << 1, 142 opcode.STARG2: 1 << 1, 143 opcode.STARG3: 1 << 1, 144 opcode.STARG4: 1 << 1, 145 opcode.STARG5: 1 << 1, 146 opcode.STARG6: 1 << 1, 147 opcode.STARG: 1 << 1, 148 opcode.NEWBUFFER: 1 << 8, 149 opcode.MEMCPY: 1 << 11, 150 opcode.CAT: 1 << 11, 151 opcode.SUBSTR: 1 << 11, 152 opcode.LEFT: 1 << 11, 153 opcode.RIGHT: 1 << 11, 154 opcode.INVERT: 1 << 2, 155 opcode.AND: 1 << 3, 156 opcode.OR: 1 << 3, 157 opcode.XOR: 1 << 3, 158 opcode.EQUAL: 1 << 5, 159 opcode.NOTEQUAL: 1 << 5, 160 opcode.SIGN: 1 << 2, 161 opcode.ABS: 1 << 2, 162 opcode.NEGATE: 1 << 2, 163 opcode.INC: 1 << 2, 164 opcode.DEC: 1 << 2, 165 opcode.ADD: 1 << 3, 166 opcode.SUB: 1 << 3, 167 opcode.MUL: 1 << 3, 168 opcode.DIV: 1 << 3, 169 opcode.MOD: 1 << 3, 170 opcode.POW: 1 << 6, 171 opcode.SQRT: 1 << 6, 172 opcode.MODMUL: 1 << 5, 173 opcode.MODPOW: 1 << 11, 174 opcode.SHL: 1 << 3, 175 opcode.SHR: 1 << 3, 176 opcode.NOT: 1 << 2, 177 opcode.BOOLAND: 1 << 3, 178 opcode.BOOLOR: 1 << 3, 179 opcode.NZ: 1 << 2, 180 opcode.NUMEQUAL: 1 << 3, 181 opcode.NUMNOTEQUAL: 1 << 3, 182 opcode.LT: 1 << 3, 183 opcode.LE: 1 << 3, 184 opcode.GT: 1 << 3, 185 opcode.GE: 1 << 3, 186 opcode.MIN: 1 << 3, 187 opcode.MAX: 1 << 3, 188 opcode.WITHIN: 1 << 3, 189 opcode.PACKMAP: 1 << 11, 190 opcode.PACKSTRUCT: 1 << 11, 191 opcode.PACK: 1 << 11, 192 opcode.UNPACK: 1 << 11, 193 opcode.NEWARRAY0: 1 << 4, 194 opcode.NEWARRAY: 1 << 9, 195 opcode.NEWARRAYT: 1 << 9, 196 opcode.NEWSTRUCT0: 1 << 4, 197 opcode.NEWSTRUCT: 1 << 9, 198 opcode.NEWMAP: 1 << 3, 199 opcode.SIZE: 1 << 2, 200 opcode.HASKEY: 1 << 6, 201 opcode.KEYS: 1 << 4, 202 opcode.VALUES: 1 << 13, 203 opcode.PICKITEM: 1 << 6, 204 opcode.APPEND: 1 << 13, 205 opcode.SETITEM: 1 << 13, 206 opcode.REVERSEITEMS: 1 << 13, 207 opcode.REMOVE: 1 << 4, 208 opcode.CLEARITEMS: 1 << 4, 209 opcode.POPITEM: 1 << 4, 210 opcode.ISNULL: 1 << 1, 211 opcode.ISTYPE: 1 << 1, 212 opcode.CONVERT: 1 << 13, 213 }