You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Summary or problem description
As recently there has been several discussions about problems in Opcode/Syscall price definition (#1911, #1877, #1875, #1863, #1855, etc), I did a test upon opcode time costs and the result is as follows.
Opcode
Time(microsecond)
Price
Price / Time
PUSHINT8
0.164
30
182.9268293
PUSHINT256
0.164
120
731.7073171
PUSHA
0.1834
120
654.3075245
PUSHNULL
0.0717
30
418.4100418
PUSHDATA1
0.151
180
1192.05298
PUSHDATA2
0.151
13000
86092.71523
PUSHDATA4
0.151
110000
728476.8212
PUSHM1
0.1631
30
183.9362354
NOP
0.0326
30
920.2453988
JMP
0.05
70
1400
JMP_L
0.0418
70
1674.641148
JMPIF
0.0684
70
1023.391813
JMPIF_L
0.07
70
1000
JMPIFNOT
0.0706
70
991.5014164
JMPIFNOT_L
0.0736
70
951.0869565
JMPEQ
0.1045
70
669.8564593
JMPEQ_L
0.1049
70
667.3021926
JMPNE
0.1074
70
651.7690875
JMPNE_L
0.1062
70
659.13371
CALL
0.0581
22000
378657.4871
CALL_L
0.0562
22000
391459.0747
CALLA
0.2749
22000
80029.10149
ABORT
NAN
30
NAN
ASSERT
0.0616
30
487.012987
THROW
0.461
22000
47722.34273
TRY
0.1836
100
544.6623094
ENDTRY
0.053
100
1886.792453
ENDFINALLY
0.461
100
216.9197397
RET
0.0265
0
0
SYSCALL
NAN
0
NAN
DEPTH
0.1545
60
388.3495146
DROP
0.061
60
983.6065574
NIP
0.0718
60
835.6545961
XDROP
33.21
400
12.04456489
CLEAR
18
400
22.22222222
DUP
0.0691
60
868.3068017
OVER
0.0749
60
801.0680908
PICK
0.083
60
722.8915663
TUCK
0.0847
60
708.3825266
SWAP
0.0886
60
677.2009029
ROT
0.0885
60
677.9661017
ROLL
0.1193
400
3352.891869
REVERSE3
0.0467
60
1284.796574
REVERSE4
0.049
60
1224.489796
REVERSEN
1.953125
400
204.8
INITSSLOT
3.805
400
105.1248357
INITSLOT
14.4598
800
55.3257998
LDSFLD
0.1064
60
563.9097744
STSFLD
0.1164
60
515.4639175
LDLOC
0.1031
60
581.9592629
STLOC
0.1153
60
520.3816132
LDARG
0.1081
60
555.0416281
STARG
0.1156
60
519.0311419
NEWBUFFER
9
80000
8888.888889
MEMCPY
135.5
80000
590.4059041
CAT
709.5
80000
112.7554616
SUBSTR
696.5
80000
114.8600144
LEFT
690
80000
115.942029
RIGHT
713.5
80000
112.1233357
INVERT
0.2681
100
372.9951511
AND
0.2627
200
761.324705
OR
0.268
200
746.2686567
XOR
0.2669
200
749.3443237
EQUAL(min)
0.11
200
1818.181818
EQUAL(max)
8
200
25
SIGN
0.2304
100
434.0277778
ABS
0.2345
100
426.4392324
NEGATE
0.2024
100
494.0711462
INC
0.2491
100
401.4452027
DEC
0.2477
100
403.7141704
ADD
0.3015
200
663.3499171
SUB
0.2981
200
670.9158001
MUL
0.3189
300
940.7337723
DIV
0.3155
300
950.8716323
MOD
0.2811
300
1067.235859
SHL
1.0208
300
293.8871473
SHR
1.5754
300
190.4278279
NOT
0.0806
100
1240.694789
BOOLAND
0.1065
200
1877.934272
BOOLOR
0.1032
200
1937.984496
NZ
0.0841
100
1189.060642
NUMEQUAL
0.1155
200
1731.601732
NUMNOTEQUAL
0.1133
200
1765.225066
LT
0.1154
200
1733.102253
LE
0.1154
200
1733.102253
GT
0.1185
200
1687.763713
GE
0.115
200
1739.130435
MIN
0.3261
200
613.308801
MAX
0.2834
200
705.716302
WITHIN
0.1428
200
1400.560224
PACK
126.3
7000
55.42359462
UNPACK
54
7000
129.6296296
NEWARRAY0
0.5639
400
709.3456287
NEWARRAY
61.8
15000
242.7184466
NEWARRAY_T
62.8
15000
238.8535032
NEWSTRUCT0
0.5716
400
699.790063
NEWSTRUCT
64
15000
234.375
NEWMAP
0.7854
200
254.6473135
SIZE
0.64
150
234.375
HASKEY
1.3
270000
207692.3077
KEYS
1.0354
500
482.9051574
VALUES
1400
7000
5
PICKITEM
0.8
270000
337500
APPEND
1134
15000
13.22751323
SETITEM
1037
270000
260.3664417
REVERSEITEMS
500
500
1
REMOVE
0.8
500
625
CLEARITEMS
300
400
1.333333333
ISNULL
0.15
60
400
ISTYPE
0.27
60
222.2222222
CONVERT
0.1229
80000
650935.7201
In this test, the time cost of each opcode is got from scenarios where they tend to cost as much time as possible under current limits. Besides, some opcodes which are similiar in functionality are omitted.
From the result we can see, Price / Time factor differs drastically between opcodes. Some differences are because of different RAM cost(i.e. PUSHDATA1 vs PUSHDATA4), some are because of system calls, but still many others are not seemingly reasonable.
Furthermore, we should focus on opcodes whose Price / Time factor is too high or below 100 (these opcodes violate "1 gas per second during Persist" rule defined here and can be used in DoS attacks).
Besides, the price of some SYSCALL (i.e. Vote in #1877) is also not reasonable.
Neo Version
Neo 3
Where in the software does this update applies to?
VM
The text was updated successfully, but these errors were encountered:
Summary or problem description
As recently there has been several discussions about problems in Opcode/Syscall price definition (#1911, #1877, #1875, #1863, #1855, etc), I did a test upon opcode time costs and the result is as follows.
In this test, the time cost of each opcode is got from scenarios where they tend to cost as much time as possible under current limits. Besides, some opcodes which are similiar in functionality are omitted.
From the result we can see,
Price / Time
factor differs drastically between opcodes. Some differences are because of different RAM cost(i.e.PUSHDATA1
vsPUSHDATA4
), some are because of system calls, but still many others are not seemingly reasonable.Furthermore, we should focus on opcodes whose
Price / Time
factor is too high or below 100 (these opcodes violate "1 gas per second during Persist" rule defined here and can be used in DoS attacks).Besides, the price of some SYSCALL (i.e. Vote in #1877) is also not reasonable.
Neo Version
Where in the software does this update applies to?
The text was updated successfully, but these errors were encountered: