zoukankan      html  css  js  c++  java
  • evm指令集手册

    evm指令集手册

    Opcodes

    结果列为"-"表示没有运算结果(不会在栈上产生值),为"*"是特殊情况,其他都表示运算产生唯一值,并放在栈顶.

    mem[a...b] 表示内存中a到b(不包含b)个字节
    storage[p] 表示从p开始的32个字节
    谨记evm虚拟机的word(字)是256位32字节

    操作码结果注释
    stop - stop execution, identical to return(0,0)
    add(x, y)   x + y
    sub(x, y)   x - y
    mul(x, y)   x * y
    div(x, y)   x / y
    sdiv(x, y)   x / y, for signed numbers in two’s complement
    mod(x, y)   x % y
    smod(x, y)   x % y, for signed numbers in two’s complement
    exp(x, y)   x to the power of y
    not(x)   ~x, every bit of x is negated
    lt(x, y)   1 if x < y, 0 otherwise
    gt(x, y)   1 if x > y, 0 otherwise
    slt(x, y)   1 if x < y, 0 otherwise, for signed numbers in two’s complement
    sgt(x, y)   1 if x > y, 0 otherwise, for signed numbers in two’s complement
    eq(x, y)   1 if x == y, 0 otherwise
    iszero(x)   1 if x == 0, 0 otherwise
    and(x, y)   bitwise and of x and y
    or(x, y)   bitwise or of x and y
    xor(x, y)   bitwise xor of x and y
    byte(n, x)   nth byte of x, where the most significant byte is the 0th byte
    addmod(x, y, m)   (x + y) % m with arbitrary precision arithmetics
    mulmod(x, y, m)   (x * y) % m with arbitrary precision arithmetics
    signextend(i, x)   sign extend from (i*8+7)th bit counting from least significant
    keccak256(p, n)   keccak(mem[p...(p+n)))
    sha3(p, n)   keccak(mem[p...(p+n)))
    jump(label) - jump to label / code position
    jumpi(label, cond) - jump to label if cond is nonzero
    pc   current position in code
    pop(x) - remove the element pushed by x
    dup1 ... dup16   copy ith stack slot to the top (counting from top)
    swap1 ... swap16 * swap topmost and ith stack slot below it
    mload(p)   mem[p..(p+32))
    mstore(p, v) - mem[p..(p+32)) := v
    mstore8(p, v) - mem[p] := v & 0xff - only modifies a single byte
    sload(p)   storage[p]
    sstore(p, v) - storage[p] := v
    msize   size of memory, i.e. largest accessed memory index
    gas   gas still available to execution
    address   address of the current contract / execution context
    balance(a)   wei balance at address a
    caller   call sender (excluding delegatecall)
    callvalue   wei sent together with the current call
    calldataload(p)   call data starting from position p (32 bytes)
    calldatasize   size of call data in bytes
    calldatacopy(t, f, s) - copy s bytes from calldata at position f to mem at position t
    codesize   size of the code of the current contract / execution context
    codecopy(t, f, s) - copy s bytes from code at position f to mem at position t
    extcodesize(a)   size of the code at address a
    extcodecopy(a, t, f, s) - like codecopy(t, f, s) but take code at address a
    returndatasize   size of the last returndata
    returndatacopy(t, f, s) - copy s bytes from returndata at position f to mem at position t
    create(v, p, s)   create new contract with code mem[p..(p+s)) and send v wei and return the new address
    create2(v, n, p, s)   create new contract with code mem[p..(p+s)) at address keccak256( . n . keccak256(mem[p..(p+s))) and send v wei and return the new address
    call(g, a, v, in, insize, out, outsize)   call contract at address a with input mem[in..(in+insize)) providing g gas and v wei and output area mem[out..(out+outsize)) returning 0 on error (eg. out of gas) and 1 on success
    callcode(g, a, v, in, insize, out, outsize)   identical to call but only use the code from a and stay in the context of the current contract otherwise
    delegatecall(g, a, in, insize, out, outsize)   identical to callcode but also keep caller and callvalue
    staticcall(g, a, in, insize, out, outsize)   identical to call(g, a, 0, in, insize, out, outsize) but do not allow state modifications
    return(p, s) - end execution, return data mem[p..(p+s))
    revert(p, s) - end execution, revert state changes, return data mem[p..(p+s))
    selfdestruct(a) - end execution, destroy current contract and send funds to a
    invalid - end execution with invalid instruction
    log0(p, s) - log without topics and data mem[p..(p+s))
    log1(p, s, t1) - log with topic t1 and data mem[p..(p+s))
    log2(p, s, t1, t2) - log with topics t1, t2 and data mem[p..(p+s))
    log3(p, s, t1, t2, t3) - log with topics t1, t2, t3 and data mem[p..(p+s))
    log4(p, s, t1, t2, t3, t4) - log with topics t1, t2, t3, t4 and data mem[p..(p+s))
    origin   transaction sender
    gasprice   gas price of the transaction
    blockhash(b)   hash of block nr b - only for last 256 blocks excluding current
    coinbase   current mining beneficiary
    timestamp   timestamp of the current block in seconds since the epoch
    number   current block number
    difficulty   difficulty of the current block
    gaslimit   block gas limit of the current block

    其中call,callcode,delegatecall,staticcall非常重要,要搞清楚,才能理解evm的执行模型.

  • 相关阅读:
    MD5加密
    HDU 1800 Flying to the Mars(Trie字典树 upper_bound)
    POJ 3624 Charm Bracelet(01背包 基础)
    hdu 1005 (规律 循环节)
    ZOJ 3710 friends(暴力 枚举 水)
    zoj 3714 Java Beans(枚举 水)
    hdu 1108 最小公倍数(数论基础 水)
    POJ 1797 Heavy Transportation(dijkstra )
    poj 3984 迷宫问题(bfs 打印路径)
    报数游戏(模拟 枚举)
  • 原文地址:https://www.cnblogs.com/405845829qq/p/10108664.html
Copyright © 2011-2022 走看看