stop |
- |
F |
停止执行,与 return(0,0) 等价 |
add(x, y) |
|
F |
x + y |
sub(x, y) |
|
F |
x - y |
mul(x, y) |
|
F |
x * y |
div(x, y) |
|
F |
x / y |
sdiv(x, y) |
|
F |
x / y,以二进制补码作为符号 |
mod(x, y) |
|
F |
x % y |
smod(x, y) |
|
F |
x % y,以二进制补码作为符号 |
exp(x, y) |
|
F |
x 的 y 次幂 |
not(x) |
|
F |
~x,对 x 按位取反 |
lt(x, y) |
|
F |
如果 x < y 为 1,否则为 0 |
gt(x, y) |
|
F |
如果 x > y 为 1,否则为 0 |
slt(x, y) |
|
F |
如果 x < y 为 1,否则为 0,以二进制补码作为符号 |
sgt(x, y) |
|
F |
如果 x > y 为 1,否则为 0,以二进制补码作为符号 |
eq(x, y) |
|
F |
如果 x == y 为 1,否则为 0 |
iszero(x) |
|
F |
如果 x == 0 为 1,否则为 0 |
and(x, y) |
|
F |
x 和 y 的按位与 |
or(x, y) |
|
F |
x 和 y 的按位或 |
xor(x, y) |
|
F |
x 和 y 的按位异或 |
byte(n, x) |
|
F |
x 的第 n 个字节,这个索引是从 0 开始的 |
shl(x, y) |
|
C |
将 y 逻辑左移 x 位 |
shr(x, y) |
|
C |
将 y 逻辑右移 x 位 |
sar(x, y) |
|
C |
将 y 算术右移 x 位 |
addmod(x, y, m) |
|
F |
任意精度的 (x + y) % m |
mulmod(x, y, m) |
|
F |
任意精度的 (x * y) % m |
signextend(i, x) |
|
F |
对 x 的最低位到第 (i * 8 + 7) 进行符号扩展 |
keccak256(p, n) |
|
F |
keccak(mem[p…(p + n))) |
jump(label) |
- |
F |
跳转到标签 / 代码位置 |
jumpi(label, cond) |
- |
F |
如果条件为非零,跳转到标签 |
pc |
|
F |
当前代码位置 |
pop(x) |
- |
F |
删除(弹出)栈顶的 x 个元素 |
dup1 … dup16 |
|
F |
将栈内第 i 个元素(从栈顶算起)复制到栈顶 |
swap1 … swap16 |
* |
F |
将栈顶元素和其下第 i 个元素互换 |
mload(p) |
|
F |
mem[p…(p + 32)) |
mstore(p, v) |
- |
F |
mem[p…(p + 32)) := v |
mstore8(p, v) |
- |
F |
mem[p] := v & 0xff (仅修改一个字节) |
sload(p) |
|
F |
storage[p] |
sstore(p, v) |
- |
F |
storage[p] := v |
msize |
|
F |
内存大小,即最大可访问内存索引 |
gas |
|
F |
执行可用的 gas |
address |
|
F |
当前合约 / 执行上下文的地址 |
balance(a) |
|
F |
地址 a 的余额,以 wei 为单位 |
caller |
|
F |
调用发起者(不包括 delegatecall ) |
callvalue |
|
F |
随调用发送的 Wei 的数量 |
calldataload(p) |
|
F |
位置 p 的调用数据(32 字节) |
calldatasize |
|
F |
调用数据的字节数大小 |
calldatacopy(t, f, s) |
- |
F |
从调用数据的位置 f 的拷贝 s 个字节到内存的位置 t |
codesize |
|
F |
当前合约 / 执行上下文地址的代码大小 |
codecopy(t, f, s) |
- |
F |
从代码的位置 f 开始拷贝 s 个字节到内存的位置 t |
extcodesize(a) |
|
F |
地址 a 的代码大小 |
extcodecopy(a, t, f, s) |
- |
F |
和 codecopy(t, f, s) 类似,但从地址 a 获取代码 |
returndatasize |
|
B |
最后一个 returndata 的大小 |
returndatacopy(t, f, s) |
- |
B |
从 returndata 的位置 f 拷贝 s 个字节到内存的位置 t |
create(v, p, s) |
|
F |
用 mem[p…(p + s)) 中的代码创建一个新合约、发送 v wei 并返回 新地址 |
create2(v, n, p, s) |
|
C |
用 mem[p…(p + s)) 中的代码,在地址 keccak256( . n . keccak256(mem[p…(p + s))) 上 创建新合约、发送 v wei 并返回新地址 |
call(g, a, v, in, insize, out, outsize) |
|
F |
使用 mem[in…(in + insize)) 作为输入数据, 提供 g gas 和 v wei 对地址 a 发起消息调用, 输出结果数据保存在 mem[out…(out + outsize)), 发生错误(比如 gas 不足)时返回 0,正确结束返回 1 |
callcode(g, a, v, in, insize, out, outsize) |
|
F |
与 call 等价,但仅使用地址 a 中的代码 且保持当前合约的执行上下文 |
delegatecall(g, a, in, insize, out, outsize) |
|
F |
与 callcode 等价且保留 caller 和 callvalue |
staticcall(g, a, in, insize, out, outsize) |
|
F |
与 call(g, a, 0, in, insize, out, outsize) 等价 但不允许状态修改 |
return(p, s) |
- |
F |
终止运行,返回 mem[p…(p + s)) 的数据 |
revert(p, s) |
- |
B |
终止运行,撤销状态变化,返回 mem[p…(p + s)) 的数据 |
selfdestruct(a) |
- |
F |
终止运行,销毁当前合约并且把资金发送到地址 a |
invalid |
- |
F |
以无效指令终止运行 |
log0(p, s) |
- |
F |
以 mem[p…(p + s)) 的数据产生不带 topic 的日志 |
log1(p, s, t1) |
- |
F |
以 mem[p…(p + s)) 的数据和 topic t1 产生日志 |
log2(p, s, t1, t2) |
- |
F |
以 mem[p…(p + s)) 的数据和 topic t1、t2 产生日志 |
log3(p, s, t1, t2, t3) |
- |
F |
以 mem[p…(p + s)) 的数据和 topic t1、t2、t3 产生日志 |
log4(p, s, t1, t2, t3, t4) |
- |
F |
以 mem[p…(p + s)) 的数据和 topic t1、t2、t3 和 t4 产生日志 |
origin |
|
F |
交易发起者地址 |
gasprice |
|
F |
交易所指定的 gas 价格 |
blockhash(b) |
|
F |
区块号 b 的哈希 - 目前仅适用于不包括当前区块的最后 256 个区块 |
coinbase |
|
F |
当前的挖矿收益者地址 |
timestamp |
|
F |
从当前 epoch 开始的当前区块时间戳(以秒为单位) |
number |
|
F |
当前区块号 |
difficulty |
|
F |
当前区块难度 |
gaslimit |
|
F |
当前区块的 gas 上限 |