| 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 上限 |