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  }