Gas and ink costs
This reference provides the latest gas and ink costs for specific WASM opcodes and host I/Os when using Stylus. For a conceptual introduction to Stylus gas and ink, see Gas and ink (Stylus).
This document is currently in public preview and may change significantly as feedback is captured from readers like you. Click the Request an update button at the top of this document or join the Arbitrum Discord to share your feedback.
Opcode costs
The Stylus VM charges for WASM opcodes according to the following table, which was determined via a conservative statistical analysis and is expected to change as Stylus matures. Prices may fluctuate across upgrades as our analysis evolves and optimizations are made.
Hex | Opcode | Ink | Gas | Notes |
---|---|---|---|---|
0x00 | Unreachable | 1 | 0.0001 | |
0x01 | Nop | 1 | 0.0001 | |
0x02 | Block | 1 | 0.0001 | |
0x03 | Loop | 1 | 0.0001 | |
0x04 | If | 765 | 0.0765 | |
0x05 | Else | 1 | 0.0001 | |
0x0b | End | 1 | 0.0001 | |
0x0c | Br | 765 | 0.0765 | |
0x0d | BrIf | 765 | 0.0765 | |
0x0e | BrTable | 2400 + 325x | 0.24 + 0.0325x | Cost varies with table size |
0x0f | Return | 1 | 0.0001 | |
0x10 | Call | 3800 | 0.38 | |
0x11 | CallIndirect | 13610 + 650x | 1.361 + 0.065x | Cost varies with no. of args |
0x1a | Drop | 9 | 0.0009 | |
0x1b | Select | 1250 | 0.125 | |
0x20 | LocalGet | 75 | 0.0075 | |
0x21 | LocalSet | 210 | 0.0210 | |
0x22 | LocalTee | 75 | 0.0075 | |
0x23 | GlobalGet | 225 | 0.0225 | |
0x24 | GlobalSet | 575 | 0.0575 | |
0x28 | I32Load | 670 | 0.067 | |
0x29 | I64Load | 680 | 0.068 | |
0x2c | I32Load8S | 670 | 0.067 | |
0x2d | I32Load8U | 670 | 0.067 | |
0x2e | I32Load16S | 670 | 0.067 | |
0x2f | I32Load16U | 670 | 0.067 | |
0x30 | I64Load8S | 680 | 0.068 | |
0x31 | I64Load8U | 680 | 0.068 | |
0x32 | I64Load16S | 680 | 0.068 | |
0x33 | I64Load16U | 680 | 0.068 | |
0x34 | I64Load32S | 680 | 0.068 | |
0x35 | I64Load32U | 680 | 0.068 | |
0x36 | I32Store | 825 | 0.0825 | |
0x37 | I64Store | 950 | 0.095 | |
0x3a | I32Store8 | 825 | 0.0825 | |
0x3b | I32Store16 | 825 | 0.0825 | |
0x3c | I64Store8 | 950 | 0.095 | |
0x3d | I64Store16 | 950 | 0.095 | |
0x3e | I64Store32 | 950 | 0.095 | |
0x3f | MemorySize | 3000 | 0.3 | |
0x40 | MemoryGrow | 8050 | 0.805 | |
0x41 | I32Const | 1 | 0.0001 | |
0x42 | I64Const | 1 | 0.0001 | |
0x45 | I32Eqz | 170 | 0.017 | |
0x46 | I32Eq | 170 | 0.017 | |
0x47 | I32Ne | 170 | 0.017 | |
0x48 | I32LtS | 170 | 0.017 | |
0x49 | I32LtU | 170 | 0.017 | |
0x4a | I32GtS | 170 | 0.017 | |
0x4b | I32GtU | 170 | 0.017 | |
0x4c | I32LeS | 170 | 0.017 | |
0x4d | I32LeU | 170 | 0.017 | |
0x4e | I32GeS | 170 | 0.017 | |
0x4f | I32GeU | 170 | 0.017 | |
0x50 | I64Eqz | 225 | 0.0225 | |
0x51 | I64Eq | 225 | 0.0225 | |
0x52 | I64Ne | 225 | 0.0225 | |
0x53 | I64LtS | 225 | 0.0225 | |
0x54 | I64LtU | 225 | 0.0225 | |
0x55 | I64GtS | 225 | 0.0225 | |
0x56 | I64GtU | 225 | 0.0225 | |
0x57 | I64LeS | 225 | 0.0225 | |
0x58 | I64LeU | 225 | 0.0225 | |
0x59 | I64GeS | 225 | 0.0225 | |
0x5a | I64GeU | 225 | 0.0225 | |
0x67 | I32Clz | 210 | 0.021 | |
0x68 | I32Ctz | 210 | 0.021 | |
0x69 | I32Popcnt | 2650 | 0.265 | |
0x6a | I32Add | 70 | 0.007 | |
0x6b | I32Sub | 70 | 0.007 | |
0x6c | I32Mul | 160 | 0.016 | |
0x6d | I32DivS | 1120 | 0.112 | |
0x6e | I32DivU | 1120 | 0.112 | |
0x6f | I32RemS | 1120 | 0.112 | |
0x70 | I32RemU | 1120 | 0.112 | |
0x71 | I32And | 70 | 0.007 | |
0x72 | I32Or | 70 | 0.007 | |
0x73 | I32Xor | 70 | 0.007 | |
0x74 | I32Shl | 70 | 0.007 | |
0x75 | I32ShrS | 70 | 0.007 | |
0x76 | I32ShrU | 70 | 0.007 | |
0x77 | I32Rotl | 70 | 0.007 | |
0x78 | I32Rotr | 70 | 0.007 | |
0x79 | I64Clz | 210 | 0.021 | |
0x7a | I64Ctz | 210 | 0.012 | |
0x7b | I64Popcnt | 6000 | 0.6 | |
0x7c | I64Add | 100 | 0.01 | |
0x7d | I64Sub | 100 | 0.01 | |
0x7e | I64Mul | 160 | 0.016 | |
0x7f | I64DivS | 1270 | 0.127 | |
0x80 | I64DivU | 1270 | 0.127 | |
0x81 | I64RemS | 1270 | 0.127 | |
0x82 | I64RemU | 1270 | 0.127 | |
0x83 | I64And | 100 | 0.01 | |
0x84 | I64Or | 100 | 0.01 | |
0x85 | I64Xor | 100 | 0.01 | |
0x86 | I64Shl | 100 | 0.01 | |
0x87 | I64ShrS | 100 | 0.01 | |
0x88 | I64ShrU | 100 | 0.01 | |
0x89 | I64Rotl | 100 | 0.01 | |
0x8a | I64Rotr | 100 | 0.01 | |
0xa7 | I32WrapI64 | 100 | 0.01 | |
0xac | I64ExtendI32S | 100 | 0.01 | |
0xad | I64ExtendI32U | 100 | 0.01 | |
0xc0 | I32Extend8S | 100 | 0.01 | |
0xc1 | I32Extend16S | 100 | 0.01 | |
0xc2 | I64Extend8S | 100 | 0.01 | |
0xc3 | I64Extend16S | 100 | 0.01 | |
0xc4 | I64Extend32S | 100 | 0.01 | |
0xfc0a | MemoryCopy | 950 + 100x | 0.095 + 0.01x | Cost varies with no. of bytes |
0xfc0b | MemoryFill | 950 + 100x | 0.095 + 0.01x | Cost varies with no. of bytes |
Host I/O costs
Certain operations require suspending WASM execution so that the Stylus VM can perform tasks natively in the host. This costs about 0.84 gas
to do. Though we’ll publish a full specification later, the following table details the costs of simple operations that run in the host.
Note that the values in this table were determined via a conservative statistical analysis and are expected to change as Stylus matures. Prices may fluctuate across upgrades as our analysis evolves and optimizations are made.
Host I/O | Ink | Gas | Notes |
---|---|---|---|
read_args | 8400 + 5040b | 0.84 + 0.504b | b = bytes after first 32 |
write_result | 8400 + 16381b | 0.84 + 1.6381b | b = bytes after first 32 |
keccak | 121800 + 21000w | 12.18 + 2.1w | w = EVM words |
block_basefee | 13440 | 1.344 | |
block_coinbase | 13440 | 1.344 | |
block_gas_limit | 8400 | 0.84 | |
block_number | 8400 | 0.84 | |
block_timestmap | 8400 | 0.84 | |
chain_id | 8400 | 0.84 | |
contract_address | 13440 | 1.344 | |
evm_gas_left | 8400 | 0.84 | |
evm_ink_left | 8400 | 0.84 | |
msg_reentrant | 8400 | 0.84 | |
msg_sender | 13440 | 1.344 | |
msg_value | 13440 | 1.344 | |
return_data_size | 8400 | 0.84 | |
tx_ink_price | 8400 | 0.84 | |
tx_gas_price | 13440 | 1.344 | |
tx_origin | 13440 | 1.344 | |
console_log_text | 0 | 0 | debug-only |
console_log | 0 | 0 | debug-only |
console_tee | 0 | 0 | debug-only |
null_host | 0 | 0 | debug-only |
See also
- Gas and ink (Stylus): A conceptual introduction to the "gas" and "ink" primitives