mirror of https://github.com/ConsenSys/mythril
commit
566a994710
@ -0,0 +1,94 @@ |
|||||||
|
# This pyethereum opcodes file with added opcodes |
||||||
|
from typing import Dict, Tuple |
||||||
|
|
||||||
|
opcodes = { |
||||||
|
0x00: ("STOP", 0, 0, 0), |
||||||
|
0x01: ("ADD", 2, 1, 3), |
||||||
|
0x02: ("MUL", 2, 1, 5), |
||||||
|
0x03: ("SUB", 2, 1, 3), |
||||||
|
0x04: ("DIV", 2, 1, 5), |
||||||
|
0x05: ("SDIV", 2, 1, 5), |
||||||
|
0x06: ("MOD", 2, 1, 5), |
||||||
|
0x07: ("SMOD", 2, 1, 5), |
||||||
|
0x08: ("ADDMOD", 3, 1, 8), |
||||||
|
0x09: ("MULMOD", 3, 1, 8), |
||||||
|
0x0A: ("EXP", 2, 1, 10), |
||||||
|
0x0B: ("SIGNEXTEND", 2, 1, 5), |
||||||
|
0x10: ("LT", 2, 1, 3), |
||||||
|
0x11: ("GT", 2, 1, 3), |
||||||
|
0x12: ("SLT", 2, 1, 3), |
||||||
|
0x13: ("SGT", 2, 1, 3), |
||||||
|
0x14: ("EQ", 2, 1, 3), |
||||||
|
0x15: ("ISZERO", 1, 1, 3), |
||||||
|
0x16: ("AND", 2, 1, 3), |
||||||
|
0x17: ("OR", 2, 1, 3), |
||||||
|
0x18: ("XOR", 2, 1, 3), |
||||||
|
0x19: ("NOT", 1, 1, 3), |
||||||
|
0x1A: ("BYTE", 2, 1, 3), |
||||||
|
0x1B: ("SHL", 2, 1, 3), |
||||||
|
0x1C: ("SHR", 2, 1, 3), |
||||||
|
0x1D: ("SAR", 2, 1, 3), |
||||||
|
0x20: ("SHA3", 2, 1, 30), |
||||||
|
0x30: ("ADDRESS", 0, 1, 2), |
||||||
|
0x31: ("BALANCE", 1, 1, 20), # now 400 |
||||||
|
0x32: ("ORIGIN", 0, 1, 2), |
||||||
|
0x33: ("CALLER", 0, 1, 2), |
||||||
|
0x34: ("CALLVALUE", 0, 1, 2), |
||||||
|
0x35: ("CALLDATALOAD", 1, 1, 3), |
||||||
|
0x36: ("CALLDATASIZE", 0, 1, 2), |
||||||
|
0x37: ("CALLDATACOPY", 3, 0, 3), |
||||||
|
0x38: ("CODESIZE", 0, 1, 2), |
||||||
|
0x39: ("CODECOPY", 3, 0, 3), |
||||||
|
0x3A: ("GASPRICE", 0, 1, 2), |
||||||
|
0x3B: ("EXTCODESIZE", 1, 1, 20), # now 700 |
||||||
|
0x3C: ("EXTCODECOPY", 4, 0, 20), # now 700 |
||||||
|
0x3D: ("RETURNDATASIZE", 0, 1, 2), |
||||||
|
0x3E: ("RETURNDATACOPY", 3, 0, 3), |
||||||
|
0x3F: ("EXTCODEHASH", 3, 0, 3), |
||||||
|
0x40: ("BLOCKHASH", 1, 1, 20), |
||||||
|
0x41: ("COINBASE", 0, 1, 2), |
||||||
|
0x42: ("TIMESTAMP", 0, 1, 2), |
||||||
|
0x43: ("NUMBER", 0, 1, 2), |
||||||
|
0x44: ("DIFFICULTY", 0, 1, 2), |
||||||
|
0x45: ("GASLIMIT", 0, 1, 2), |
||||||
|
0x50: ("POP", 1, 0, 2), |
||||||
|
0x51: ("MLOAD", 1, 1, 3), |
||||||
|
0x52: ("MSTORE", 2, 0, 3), |
||||||
|
0x53: ("MSTORE8", 2, 0, 3), |
||||||
|
0x54: ("SLOAD", 1, 1, 50), # 200 now |
||||||
|
0x55: ("SSTORE", 2, 0, 0), |
||||||
|
0x56: ("JUMP", 1, 0, 8), |
||||||
|
0x57: ("JUMPI", 2, 0, 10), |
||||||
|
0x58: ("PC", 0, 1, 2), |
||||||
|
0x59: ("MSIZE", 0, 1, 2), |
||||||
|
0x5A: ("GAS", 0, 1, 2), |
||||||
|
0x5B: ("JUMPDEST", 0, 0, 1), |
||||||
|
0xA0: ("LOG0", 2, 0, 375), |
||||||
|
0xA1: ("LOG1", 3, 0, 750), |
||||||
|
0xA2: ("LOG2", 4, 0, 1125), |
||||||
|
0xA3: ("LOG3", 5, 0, 1500), |
||||||
|
0xA4: ("LOG4", 6, 0, 1875), |
||||||
|
0xF0: ("CREATE", 3, 1, 32000), |
||||||
|
0xF1: ("CALL", 7, 1, 40), # 700 now |
||||||
|
0xF2: ("CALLCODE", 7, 1, 40), # 700 now |
||||||
|
0xF3: ("RETURN", 2, 0, 0), |
||||||
|
0xF4: ("DELEGATECALL", 6, 1, 40), # 700 now |
||||||
|
0xF5: ("CREATE2", 3, 1, 32000), |
||||||
|
0xFA: ("STATICCALL", 6, 1, 40), |
||||||
|
0xFD: ("REVERT", 2, 0, 0), |
||||||
|
0xFF: ("SUICIDE", 1, 0, 0), # 5000 now |
||||||
|
} # type: Dict[int, Tuple[str, int, int, int]] |
||||||
|
|
||||||
|
opcodesMetropolis = {0x3D, 0x3E, 0xFA, 0xFD} |
||||||
|
|
||||||
|
for i in range(1, 33): |
||||||
|
opcodes[0x5F + i] = ("PUSH" + str(i), 0, 1, 3) |
||||||
|
|
||||||
|
for i in range(1, 17): |
||||||
|
opcodes[0x7F + i] = ("DUP" + str(i), i, i + 1, 3) |
||||||
|
opcodes[0x8F + i] = ("SWAP" + str(i), i + 1, i + 1, 3) |
||||||
|
|
||||||
|
reverse_opcodes = {} |
||||||
|
for o in opcodes: |
||||||
|
vars()[opcodes[o][0]] = opcodes[o] |
||||||
|
reverse_opcodes[opcodes[o][0]] = o |
@ -0,0 +1,148 @@ |
|||||||
|
import pytest |
||||||
|
|
||||||
|
from mythril.disassembler.disassembly import Disassembly |
||||||
|
from mythril.laser.ethereum.state.environment import Environment |
||||||
|
from mythril.laser.ethereum.state.account import Account |
||||||
|
from mythril.laser.ethereum.state.machine_state import MachineState |
||||||
|
from mythril.laser.ethereum.state.global_state import GlobalState |
||||||
|
from mythril.laser.ethereum.state.world_state import WorldState |
||||||
|
from mythril.laser.ethereum.instructions import Instruction |
||||||
|
from mythril.laser.ethereum.transaction.transaction_models import MessageCallTransaction |
||||||
|
from mythril.laser.smt import symbol_factory, simplify |
||||||
|
|
||||||
|
|
||||||
|
def get_state(): |
||||||
|
active_account = Account("0x0", code=Disassembly("60606040")) |
||||||
|
environment = Environment(active_account, None, None, None, None, None) |
||||||
|
state = GlobalState(None, environment, None, MachineState(gas_limit=8000000)) |
||||||
|
state.transaction_stack.append( |
||||||
|
(MessageCallTransaction(world_state=WorldState(), gas_limit=8000000), None) |
||||||
|
) |
||||||
|
return state |
||||||
|
|
||||||
|
|
||||||
|
BVV = symbol_factory.BitVecVal |
||||||
|
BV = symbol_factory.BitVecSym |
||||||
|
|
||||||
|
test_data = ( |
||||||
|
([BVV(-1, 256), BVV(1, 256)], BVV(-1, 256)), |
||||||
|
([BVV(23, 256), BVV(257, 256)], BVV(0, 256)), |
||||||
|
([BVV(23, 256), BVV(30, 256)], BVV(23 >> 30, 256)), |
||||||
|
([BVV(-10, 256), BVV(10, 256)], BVV(-1, 256)), |
||||||
|
([BV("a", 256), BV("b", 256)], BV("a", 256) >> BV("b", 256)), |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("inputs,output", test_data) |
||||||
|
def test_sar(inputs, output): |
||||||
|
# Arrange |
||||||
|
state = get_state() |
||||||
|
|
||||||
|
state.mstate.stack = inputs |
||||||
|
instruction = Instruction("sar", dynamic_loader=None) |
||||||
|
|
||||||
|
# Act |
||||||
|
new_state = instruction.evaluate(state)[0] |
||||||
|
|
||||||
|
# Assert |
||||||
|
assert simplify(new_state.mstate.stack[-1]) == output |
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( |
||||||
|
# Test cases from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md#sar-arithmetic-shift-right |
||||||
|
"val1, val2, expected ", |
||||||
|
( |
||||||
|
( |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000001", |
||||||
|
"0x00", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000001", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000001", |
||||||
|
"0x01", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x8000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
"0x01", |
||||||
|
"0xc000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x8000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
"0xff", |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x8000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
"0x0100", |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x8000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
"0x0101", |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
), |
||||||
|
( |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0x00", |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
), |
||||||
|
( |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0x01", |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
), |
||||||
|
( |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0xff", |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
), |
||||||
|
( |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0x0100", |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
"0x01", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x4000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
"0xfe", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000001", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0xf8", |
||||||
|
"0x000000000000000000000000000000000000000000000000000000000000007f", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0xfe", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000001", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0xff", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0x0100", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
), |
||||||
|
) |
||||||
|
def test_concrete_sar(val1, val2, expected): |
||||||
|
# Arrange |
||||||
|
state = get_state() |
||||||
|
state.mstate.stack = [BVV(int(val1, 16), 256), BVV(int(val2, 16), 256)] |
||||||
|
expected = BVV(int(expected, 16), 256) |
||||||
|
instruction = Instruction("sar", dynamic_loader=None) |
||||||
|
|
||||||
|
# Act |
||||||
|
new_state = instruction.evaluate(state)[0] |
||||||
|
|
||||||
|
# Assert |
||||||
|
assert simplify(new_state.mstate.stack[-1]) == expected |
@ -0,0 +1,123 @@ |
|||||||
|
import pytest |
||||||
|
|
||||||
|
from mythril.disassembler.disassembly import Disassembly |
||||||
|
from mythril.laser.ethereum.state.environment import Environment |
||||||
|
from mythril.laser.ethereum.state.account import Account |
||||||
|
from mythril.laser.ethereum.state.machine_state import MachineState |
||||||
|
from mythril.laser.ethereum.state.global_state import GlobalState |
||||||
|
from mythril.laser.ethereum.state.world_state import WorldState |
||||||
|
from mythril.laser.ethereum.instructions import Instruction |
||||||
|
from mythril.laser.ethereum.transaction.transaction_models import MessageCallTransaction |
||||||
|
from mythril.laser.smt import symbol_factory, simplify |
||||||
|
|
||||||
|
|
||||||
|
def get_state(): |
||||||
|
active_account = Account("0x0", code=Disassembly("60606040")) |
||||||
|
environment = Environment(active_account, None, None, None, None, None) |
||||||
|
state = GlobalState(None, environment, None, MachineState(gas_limit=8000000)) |
||||||
|
state.transaction_stack.append( |
||||||
|
(MessageCallTransaction(world_state=WorldState(), gas_limit=8000000), None) |
||||||
|
) |
||||||
|
return state |
||||||
|
|
||||||
|
|
||||||
|
BVV = symbol_factory.BitVecVal |
||||||
|
BV = symbol_factory.BitVecSym |
||||||
|
|
||||||
|
test_data = ( |
||||||
|
([BVV(2, 256), BVV(2, 256)], BVV(8, 256)), |
||||||
|
([BVV(23, 256), BVV(257, 256)], BVV(0, 256)), |
||||||
|
([BVV(23, 256), BVV(30, 256)], BVV(23 * (1 << 30), 256)), |
||||||
|
([BV("a", 256), BVV(270, 256)], 0), |
||||||
|
([BV("a", 256), BV("b", 256)], BV("a", 256) << BV("b", 256)), |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("inputs,output,", test_data) |
||||||
|
def test_shl(inputs, output): |
||||||
|
# Arrange |
||||||
|
state = get_state() |
||||||
|
|
||||||
|
state.mstate.stack = inputs |
||||||
|
instruction = Instruction("shl", dynamic_loader=None) |
||||||
|
|
||||||
|
# Act |
||||||
|
new_state = instruction.evaluate(state)[0] |
||||||
|
|
||||||
|
# Assert |
||||||
|
assert simplify(new_state.mstate.stack[-1]) == output |
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( |
||||||
|
# Testcases from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md#shl-shift-left |
||||||
|
"val1, val2, expected", |
||||||
|
( |
||||||
|
( |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000001", |
||||||
|
"0x00", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000001", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000001", |
||||||
|
"0x01", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000002", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000001", |
||||||
|
"0xff", |
||||||
|
"0x8000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000001", |
||||||
|
"0x0100", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000001", |
||||||
|
"0x0101", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
( |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0x00", |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
), |
||||||
|
( |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0x01", |
||||||
|
"0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", |
||||||
|
), |
||||||
|
( |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0xff", |
||||||
|
"0x8000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
( |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0x0100", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
"0x01", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0x01", |
||||||
|
"0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", |
||||||
|
), |
||||||
|
), |
||||||
|
) |
||||||
|
def test_concrete_shl(val1, val2, expected): |
||||||
|
# Arrange |
||||||
|
state = get_state() |
||||||
|
state.mstate.stack = [BVV(int(val1, 16), 256), BVV(int(val2, 16), 256)] |
||||||
|
expected = BVV(int(expected, 16), 256) |
||||||
|
instruction = Instruction("shl", dynamic_loader=None) |
||||||
|
|
||||||
|
# Act |
||||||
|
new_state = instruction.evaluate(state)[0] |
||||||
|
|
||||||
|
# Assert |
||||||
|
assert simplify(new_state.mstate.stack[-1]) == expected |
@ -0,0 +1,125 @@ |
|||||||
|
import pytest |
||||||
|
|
||||||
|
from mythril.disassembler.disassembly import Disassembly |
||||||
|
from mythril.laser.ethereum.state.environment import Environment |
||||||
|
from mythril.laser.ethereum.state.account import Account |
||||||
|
from mythril.laser.ethereum.state.machine_state import MachineState |
||||||
|
from mythril.laser.ethereum.state.global_state import GlobalState |
||||||
|
from mythril.laser.ethereum.state.world_state import WorldState |
||||||
|
from mythril.laser.ethereum.instructions import Instruction |
||||||
|
from mythril.laser.ethereum.transaction.transaction_models import MessageCallTransaction |
||||||
|
from mythril.laser.smt import symbol_factory, simplify, LShR |
||||||
|
|
||||||
|
|
||||||
|
def get_state(): |
||||||
|
active_account = Account("0x0", code=Disassembly("60606040")) |
||||||
|
environment = Environment(active_account, None, None, None, None, None) |
||||||
|
state = GlobalState(None, environment, None, MachineState(gas_limit=8000000)) |
||||||
|
state.transaction_stack.append( |
||||||
|
(MessageCallTransaction(world_state=WorldState(), gas_limit=8000000), None) |
||||||
|
) |
||||||
|
return state |
||||||
|
|
||||||
|
|
||||||
|
BVV = symbol_factory.BitVecVal |
||||||
|
BV = symbol_factory.BitVecSym |
||||||
|
|
||||||
|
test_data = ( |
||||||
|
([BVV(33, 256), BVV(4, 256)], BVV(2, 256)), |
||||||
|
([BVV(1 << 100, 256), BVV(257, 256)], BVV(0, 256)), |
||||||
|
([BVV(23233, 256), BVV(10, 256)], BVV(23233 // (1 << 10), 256)), |
||||||
|
([BV("a", 256), BVV(270, 256)], 0), |
||||||
|
( |
||||||
|
[BV("a", 256), BV("b", 256)], |
||||||
|
LShR(BV("a", 256), BV("b", 256)), |
||||||
|
), # Current approximate specs |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("inputs,output,", test_data) |
||||||
|
def test_shr(inputs, output): |
||||||
|
# Arrange |
||||||
|
state = get_state() |
||||||
|
|
||||||
|
state.mstate.stack = inputs |
||||||
|
instruction = Instruction("shr", dynamic_loader=None) |
||||||
|
|
||||||
|
# Act |
||||||
|
new_state = instruction.evaluate(state)[0] |
||||||
|
|
||||||
|
# Assert |
||||||
|
assert simplify(new_state.mstate.stack[-1]) == output |
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize( |
||||||
|
# Cases: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md#shr-logical-shift-right |
||||||
|
"val1, val2, expected", |
||||||
|
( |
||||||
|
( |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000001", |
||||||
|
"0x00", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000001", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000001", |
||||||
|
"0x01", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x8000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
"0x01", |
||||||
|
"0x4000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x8000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
"0xff", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000001", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x8000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
"0x0100", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x8000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
"0x0101", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
( |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0x00", |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
), |
||||||
|
( |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0x01", |
||||||
|
"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
), |
||||||
|
( |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0xff", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000001", |
||||||
|
), |
||||||
|
( |
||||||
|
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", |
||||||
|
"0x0100", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
( |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
"0x01", |
||||||
|
"0x0000000000000000000000000000000000000000000000000000000000000000", |
||||||
|
), |
||||||
|
), |
||||||
|
) |
||||||
|
def test_concrete_shr(val1, val2, expected): |
||||||
|
state = get_state() |
||||||
|
state.mstate.stack = [BVV(int(val1, 16), 256), BVV(int(val2, 16), 256)] |
||||||
|
expected = BVV(int(expected, 16), 256) |
||||||
|
instruction = Instruction("shr", dynamic_loader=None) |
||||||
|
|
||||||
|
# Act |
||||||
|
new_state = instruction.evaluate(state)[0] |
||||||
|
|
||||||
|
# Assert |
||||||
|
assert simplify(new_state.mstate.stack[-1]) == expected |
@ -1,150 +1 @@ |
|||||||
[ |
[{"issues": [{"description": {"head": "The contract executes an external message call.", "tail": "An external function call to a fixed contract address is executed. Make sure that the callee contract has been reviewed carefully."}, "extra": {}, "locations": [{"sourceMap": "661:1:0"}], "severity": "Low", "swcID": "SWC-107", "swcTitle": "Reentrancy"}, {"description": {"head": "The contract executes an external message call.", "tail": "An external function call to a fixed contract address is executed. Make sure that the callee contract has been reviewed carefully."}, "extra": {}, "locations": [{"sourceMap": "779:1:0"}], "severity": "Low", "swcID": "SWC-107", "swcTitle": "Reentrancy"}, {"description": {"head": "The contract executes an external message call.", "tail": "An external function call to a fixed contract address is executed. Make sure that the callee contract has been reviewed carefully."}, "extra": {}, "locations": [{"sourceMap": "858:1:0"}], "severity": "Low", "swcID": "SWC-107", "swcTitle": "Reentrancy"}, {"description": {"head": "A call to a user-supplied address is executed.", "tail": "The callee address of an external message call can be set by the caller. Note that the callee can contain arbitrary code and may re-enter any function in this contract. Review the business logic carefully to prevent averse effects on the contract state."}, "extra": {}, "locations": [{"sourceMap": "912:1:0"}], "severity": "Medium", "swcID": "SWC-107", "swcTitle": "Reentrancy"}, {"description": {"head": "The return value of a message call is not checked.", "tail": "External calls return a boolean value. If the callee contract halts with an exception, 'false' is returned and execution continues in the caller. It is usually recommended to wrap external calls into a require statement to prevent unexpected states."}, "extra": {}, "locations": [{"sourceMap": "661:1:0"}], "severity": "Low", "swcID": "SWC-104", "swcTitle": "Unchecked Call Return Value"}, {"description": {"head": "The return value of a message call is not checked.", "tail": "External calls return a boolean value. If the callee contract halts with an exception, 'false' is returned and execution continues in the caller. It is usually recommended to wrap external calls into a require statement to prevent unexpected states."}, "extra": {}, "locations": [{"sourceMap": "779:1:0"}], "severity": "Low", "swcID": "SWC-104", "swcTitle": "Unchecked Call Return Value"}, {"description": {"head": "The return value of a message call is not checked.", "tail": "External calls return a boolean value. If the callee contract halts with an exception, 'false' is returned and execution continues in the caller. It is usually recommended to wrap external calls into a require statement to prevent unexpected states."}, "extra": {}, "locations": [{"sourceMap": "858:1:0"}], "severity": "Low", "swcID": "SWC-104", "swcTitle": "Unchecked Call Return Value"}, {"description": {"head": "The return value of a message call is not checked.", "tail": "External calls return a boolean value. If the callee contract halts with an exception, 'false' is returned and execution continues in the caller. It is usually recommended to wrap external calls into a require statement to prevent unexpected states."}, "extra": {}, "locations": [{"sourceMap": "912:1:0"}], "severity": "Low", "swcID": "SWC-104", "swcTitle": "Unchecked Call Return Value"}], "meta": {}, "sourceFormat": "evm-byzantium-bytecode", "sourceList": ["0x7cbb77986c6b1bf6e945cd3fba06d3ea3d28cfc49cdfdc9571ec30703ac5862f"], "sourceType": "raw-bytecode"}] |
||||||
{ |
|
||||||
"issues": [ |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "The contract executes an external message call.", |
|
||||||
"tail": "An external function call to a fixed contract address is executed. Make sure that the callee contract has been reviewed carefully." |
|
||||||
}, |
|
||||||
"extra": { |
|
||||||
|
|
||||||
}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "661:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-107", |
|
||||||
"swcTitle": "Reentrancy" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "The contract executes an external message call.", |
|
||||||
"tail": "An external function call to a fixed contract address is executed. Make sure that the callee contract has been reviewed carefully." |
|
||||||
}, |
|
||||||
"extra": { |
|
||||||
|
|
||||||
}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "779:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-107", |
|
||||||
"swcTitle": "Reentrancy" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "The contract executes an external message call.", |
|
||||||
"tail": "An external function call to a fixed contract address is executed. Make sure that the callee contract has been reviewed carefully." |
|
||||||
}, |
|
||||||
"extra": { |
|
||||||
|
|
||||||
}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "858:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-107", |
|
||||||
"swcTitle": "Reentrancy" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "A call to a user-supplied address is executed.", |
|
||||||
"tail": "The callee address of an external message call can be set by the caller. Note that the callee can contain arbitrary code and may re-enter any function in this contract. Review the business logic carefully to prevent averse effects on the contract state." |
|
||||||
}, |
|
||||||
"extra": { |
|
||||||
|
|
||||||
}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "912:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "Medium", |
|
||||||
"swcID": "SWC-107", |
|
||||||
"swcTitle": "Reentrancy" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "The return value of a message call is not checked.", |
|
||||||
"tail": "External calls return a boolean value. If the callee contract halts with an exception, 'false' is returned and execution continues in the caller. It is usually recommended to wrap external calls into a require statement to prevent unexpected states." |
|
||||||
}, |
|
||||||
"extra": { |
|
||||||
|
|
||||||
}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "661:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-104", |
|
||||||
"swcTitle": "Unchecked Call Return Value" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "The return value of a message call is not checked.", |
|
||||||
"tail": "External calls return a boolean value. If the callee contract halts with an exception, 'false' is returned and execution continues in the caller. It is usually recommended to wrap external calls into a require statement to prevent unexpected states." |
|
||||||
}, |
|
||||||
"extra": { |
|
||||||
|
|
||||||
}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "779:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-104", |
|
||||||
"swcTitle": "Unchecked Call Return Value" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "The return value of a message call is not checked.", |
|
||||||
"tail": "External calls return a boolean value. If the callee contract halts with an exception, 'false' is returned and execution continues in the caller. It is usually recommended to wrap external calls into a require statement to prevent unexpected states." |
|
||||||
}, |
|
||||||
"extra": { |
|
||||||
|
|
||||||
}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "858:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-104", |
|
||||||
"swcTitle": "Unchecked Call Return Value" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "The return value of a message call is not checked.", |
|
||||||
"tail": "External calls return a boolean value. If the callee contract halts with an exception, 'false' is returned and execution continues in the caller. It is usually recommended to wrap external calls into a require statement to prevent unexpected states." |
|
||||||
}, |
|
||||||
"extra": { |
|
||||||
|
|
||||||
}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "912:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-104", |
|
||||||
"swcTitle": "Unchecked Call Return Value" |
|
||||||
} |
|
||||||
], |
|
||||||
"meta": { |
|
||||||
|
|
||||||
}, |
|
||||||
"sourceFormat": "evm-byzantium-bytecode", |
|
||||||
"sourceList": [ |
|
||||||
"0x7cbb77986c6b1bf6e945cd3fba06d3ea3d28cfc49cdfdc9571ec30703ac5862f" |
|
||||||
], |
|
||||||
"sourceType": "raw-bytecode" |
|
||||||
} |
|
||||||
] |
|
@ -1,9 +1 @@ |
|||||||
[ |
[{"issues": [], "meta": {}, "sourceFormat": "evm-byzantium-bytecode", "sourceList": [], "sourceType": "raw-bytecode"}] |
||||||
{ |
|
||||||
"issues": [], |
|
||||||
"meta": {}, |
|
||||||
"sourceFormat": "evm-byzantium-bytecode", |
|
||||||
"sourceList": [], |
|
||||||
"sourceType": "raw-bytecode" |
|
||||||
} |
|
||||||
] |
|
@ -1,72 +1 @@ |
|||||||
[ |
[{"issues": [{"description": {"head": "A reachable exception has been detected.", "tail": "It is possible to trigger an exception (opcode 0xfe). Exceptions can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. Note that explicit `assert()` should only be used to check invariants. Use `require()` for regular input checking."}, "extra": {}, "locations": [{"sourceMap": "446:1:0"}], "severity": "Low", "swcID": "SWC-110", "swcTitle": "Assert Violation"}, {"description": {"head": "A reachable exception has been detected.", "tail": "It is possible to trigger an exception (opcode 0xfe). Exceptions can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. Note that explicit `assert()` should only be used to check invariants. Use `require()` for regular input checking."}, "extra": {}, "locations": [{"sourceMap": "484:1:0"}], "severity": "Low", "swcID": "SWC-110", "swcTitle": "Assert Violation"}, {"description": {"head": "A reachable exception has been detected.", "tail": "It is possible to trigger an exception (opcode 0xfe). Exceptions can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. Note that explicit `assert()` should only be used to check invariants. Use `require()` for regular input checking."}, "extra": {}, "locations": [{"sourceMap": "506:1:0"}], "severity": "Low", "swcID": "SWC-110", "swcTitle": "Assert Violation"}, {"description": {"head": "A reachable exception has been detected.", "tail": "It is possible to trigger an exception (opcode 0xfe). Exceptions can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. Note that explicit `assert()` should only be used to check invariants. Use `require()` for regular input checking."}, "extra": {}, "locations": [{"sourceMap": "531:1:0"}], "severity": "Low", "swcID": "SWC-110", "swcTitle": "Assert Violation"}], "meta": {}, "sourceFormat": "evm-byzantium-bytecode", "sourceList": ["0x4a773a86bc6fb269f88bf09bb3094de29b6073cf13b1760e9d01d957f50a9dfd"], "sourceType": "raw-bytecode"}] |
||||||
{ |
|
||||||
"issues": [ |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "A reachable exception has been detected.", |
|
||||||
"tail": "It is possible to trigger an exception (opcode 0xfe). Exceptions can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. Note that explicit `assert()` should only be used to check invariants. Use `require()` for regular input checking." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "446:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-110", |
|
||||||
"swcTitle": "Assert Violation" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "A reachable exception has been detected.", |
|
||||||
"tail": "It is possible to trigger an exception (opcode 0xfe). Exceptions can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. Note that explicit `assert()` should only be used to check invariants. Use `require()` for regular input checking." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "484:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-110", |
|
||||||
"swcTitle": "Assert Violation" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "A reachable exception has been detected.", |
|
||||||
"tail": "It is possible to trigger an exception (opcode 0xfe). Exceptions can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. Note that explicit `assert()` should only be used to check invariants. Use `require()` for regular input checking." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "506:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-110", |
|
||||||
"swcTitle": "Assert Violation" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "A reachable exception has been detected.", |
|
||||||
"tail": "It is possible to trigger an exception (opcode 0xfe). Exceptions can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. Note that explicit `assert()` should only be used to check invariants. Use `require()` for regular input checking." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "531:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-110", |
|
||||||
"swcTitle": "Assert Violation" |
|
||||||
} |
|
||||||
], |
|
||||||
"meta": {}, |
|
||||||
"sourceFormat": "evm-byzantium-bytecode", |
|
||||||
"sourceList": [ |
|
||||||
"0x4a773a86bc6fb269f88bf09bb3094de29b6073cf13b1760e9d01d957f50a9dfd" |
|
||||||
], |
|
||||||
"sourceType": "raw-bytecode" |
|
||||||
} |
|
||||||
] |
|
@ -1,67 +1 @@ |
|||||||
[{ |
[{"issues": [{"description": {"head": "Use of callcode is deprecated.", "tail": "The callcode method executes code of another contract in the context of the caller account. Due to a bug in the implementation it does not persist sender and value over the call. It was therefore deprecated and may be removed in the future. Use the delegatecall method instead."}, "extra": {}, "locations": [{"sourceMap": "618:1:0"}], "severity": "Medium", "swcID": "SWC-111", "swcTitle": "Use of Deprecated Solidity Functions"}, {"description": {"head": "A call to a user-supplied address is executed.", "tail": "The callee address of an external message call can be set by the caller. Note that the callee can contain arbitrary code and may re-enter any function in this contract. Review the business logic carefully to prevent averse effects on the contract state."}, "extra": {}, "locations": [{"sourceMap": "1038:1:0"}], "severity": "Medium", "swcID": "SWC-107", "swcTitle": "Reentrancy"}, {"description": {"head": "The return value of a message call is not checked.", "tail": "External calls return a boolean value. If the callee contract halts with an exception, 'false' is returned and execution continues in the caller. It is usually recommended to wrap external calls into a require statement to prevent unexpected states."}, "extra": {}, "locations": [{"sourceMap": "618:1:0"}], "severity": "Low", "swcID": "SWC-104", "swcTitle": "Unchecked Call Return Value"}, {"description": {"head": "The return value of a message call is not checked.", "tail": "External calls return a boolean value. If the callee contract halts with an exception, 'false' is returned and execution continues in the caller. It is usually recommended to wrap external calls into a require statement to prevent unexpected states."}, "extra": {}, "locations": [{"sourceMap": "849:1:0"}], "severity": "Low", "swcID": "SWC-104", "swcTitle": "Unchecked Call Return Value"}, {"description": {"head": "The return value of a message call is not checked.", "tail": "External calls return a boolean value. If the callee contract halts with an exception, 'false' is returned and execution continues in the caller. It is usually recommended to wrap external calls into a require statement to prevent unexpected states."}, "extra": {}, "locations": [{"sourceMap": "1038:1:0"}], "severity": "Low", "swcID": "SWC-104", "swcTitle": "Unchecked Call Return Value"}], "meta": {}, "sourceFormat": "evm-byzantium-bytecode", "sourceList": ["0x6daec61d05d8f1210661e7e7d1ed6d72bd6ade639398fac1e867aff50abfc1c1"], "sourceType": "raw-bytecode"}] |
||||||
"issues": [{ |
|
||||||
"description": { |
|
||||||
"head": "Use of callcode is deprecated.", |
|
||||||
"tail": "The callcode method executes code of another contract in the context of the caller account. Due to a bug in the implementation it does not persist sender and value over the call. It was therefore deprecated and may be removed in the future. Use the delegatecall method instead." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [{ |
|
||||||
"sourceMap": "618:1:0" |
|
||||||
}], |
|
||||||
"severity": "Medium", |
|
||||||
"swcID": "SWC-111", |
|
||||||
"swcTitle": "Use of Deprecated Solidity Functions" |
|
||||||
}, { |
|
||||||
"description": { |
|
||||||
"head": "A call to a user-supplied address is executed.", |
|
||||||
"tail": "The callee address of an external message call can be set by the caller. Note that the callee can contain arbitrary code and may re-enter any function in this contract. Review the business logic carefully to prevent averse effects on the contract state." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [{ |
|
||||||
"sourceMap": "1038:1:0" |
|
||||||
}], |
|
||||||
"severity": "Medium", |
|
||||||
"swcID": "SWC-107", |
|
||||||
"swcTitle": "Reentrancy" |
|
||||||
}, { |
|
||||||
"description": { |
|
||||||
"head": "The return value of a message call is not checked.", |
|
||||||
"tail": "External calls return a boolean value. If the callee contract halts with an exception, 'false' is returned and execution continues in the caller. It is usually recommended to wrap external calls into a require statement to prevent unexpected states." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [{ |
|
||||||
"sourceMap": "618:1:0" |
|
||||||
}], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-104", |
|
||||||
"swcTitle": "Unchecked Call Return Value" |
|
||||||
}, { |
|
||||||
"description": { |
|
||||||
"head": "The return value of a message call is not checked.", |
|
||||||
"tail": "External calls return a boolean value. If the callee contract halts with an exception, 'false' is returned and execution continues in the caller. It is usually recommended to wrap external calls into a require statement to prevent unexpected states." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [{ |
|
||||||
"sourceMap": "849:1:0" |
|
||||||
}], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-104", |
|
||||||
"swcTitle": "Unchecked Call Return Value" |
|
||||||
}, { |
|
||||||
"description": { |
|
||||||
"head": "The return value of a message call is not checked.", |
|
||||||
"tail": "External calls return a boolean value. If the callee contract halts with an exception, 'false' is returned and execution continues in the caller. It is usually recommended to wrap external calls into a require statement to prevent unexpected states." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [{ |
|
||||||
"sourceMap": "1038:1:0" |
|
||||||
}], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-104", |
|
||||||
"swcTitle": "Unchecked Call Return Value" |
|
||||||
}], |
|
||||||
"meta": {}, |
|
||||||
"sourceFormat": "evm-byzantium-bytecode", |
|
||||||
"sourceList": ["0x6daec61d05d8f1210661e7e7d1ed6d72bd6ade639398fac1e867aff50abfc1c1"], |
|
||||||
"sourceType": "raw-bytecode" |
|
||||||
}] |
|
@ -1,9 +1 @@ |
|||||||
[ |
[{"issues": [], "meta": {}, "sourceFormat": "evm-byzantium-bytecode", "sourceList": [], "sourceType": "raw-bytecode"}] |
||||||
{ |
|
||||||
"issues": [], |
|
||||||
"meta": {}, |
|
||||||
"sourceFormat": "evm-byzantium-bytecode", |
|
||||||
"sourceList": [], |
|
||||||
"sourceType": "raw-bytecode" |
|
||||||
} |
|
||||||
] |
|
@ -1,27 +1 @@ |
|||||||
[ |
[{"issues": [{"description": {"head": "Anyone can withdraw ETH from the contract account.", "tail": "Arbitrary senders other than the contract creator can withdraw ETH from the contract account without previously having sent an equivalent amount of ETH to it. This is likely to be a vulnerability."}, "extra": {}, "locations": [{"sourceMap": "142:1:0"}], "severity": "High", "swcID": "SWC-105", "swcTitle": "Unprotected Ether Withdrawal"}], "meta": {}, "sourceFormat": "evm-byzantium-bytecode", "sourceList": ["0xbc9c3d9db56d20cf4ca3b6fd88ff9215cf728a092cca1ed8edb83272b933ff5b"], "sourceType": "raw-bytecode"}] |
||||||
{ |
|
||||||
"issues": [ |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "Anyone can withdraw ETH from the contract account.", |
|
||||||
"tail": "Arbitrary senders other than the contract creator can withdraw ETH from the contract account without previously having sent an equivalent amount of ETH to it. This is likely to be a vulnerability." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "142:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "High", |
|
||||||
"swcID": "SWC-105", |
|
||||||
"swcTitle": "Unprotected Ether Withdrawal" |
|
||||||
} |
|
||||||
], |
|
||||||
"meta": {}, |
|
||||||
"sourceFormat": "evm-byzantium-bytecode", |
|
||||||
"sourceList": [ |
|
||||||
"0xbc9c3d9db56d20cf4ca3b6fd88ff9215cf728a092cca1ed8edb83272b933ff5b" |
|
||||||
], |
|
||||||
"sourceType": "raw-bytecode" |
|
||||||
} |
|
||||||
] |
|
@ -1,9 +1 @@ |
|||||||
[ |
[{"issues": [], "meta": {}, "sourceFormat": "evm-byzantium-bytecode", "sourceList": [], "sourceType": "raw-bytecode"}] |
||||||
{ |
|
||||||
"issues": [], |
|
||||||
"meta": {}, |
|
||||||
"sourceFormat": "evm-byzantium-bytecode", |
|
||||||
"sourceList": [], |
|
||||||
"sourceType": "raw-bytecode" |
|
||||||
} |
|
||||||
] |
|
@ -1,27 +1 @@ |
|||||||
[ |
[{"issues": [{"description": {"head": "Use of tx.origin is deprecated.", "tail": "The smart contract retrieves the transaction origin (tx.origin) using msg.origin. Use of msg.origin is deprecated and the instruction may be removed in the future. Use msg.sender instead.\nSee also: https://solidity.readthedocs.io/en/develop/security-considerations.html#tx-origin"}, "extra": {}, "locations": [{"sourceMap": "317:1:0"}], "severity": "Medium", "swcID": "SWC-111", "swcTitle": "Use of Deprecated Solidity Functions"}], "meta": {}, "sourceFormat": "evm-byzantium-bytecode", "sourceList": ["0x25b20ef097dfc0aa56a932c4e09f06ee02a69c005767df86877f48c6c2412f03"], "sourceType": "raw-bytecode"}] |
||||||
{ |
|
||||||
"issues": [ |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "Use of tx.origin is deprecated.", |
|
||||||
"tail": "The smart contract retrieves the transaction origin (tx.origin) using msg.origin. Use of msg.origin is deprecated and the instruction may be removed in the future. Use msg.sender instead.\nSee also: https://solidity.readthedocs.io/en/develop/security-considerations.html#tx-origin" |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "317:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "Medium", |
|
||||||
"swcID": "SWC-111", |
|
||||||
"swcTitle": "Use of Deprecated Solidity Functions" |
|
||||||
} |
|
||||||
], |
|
||||||
"meta": {}, |
|
||||||
"sourceFormat": "evm-byzantium-bytecode", |
|
||||||
"sourceList": [ |
|
||||||
"0x25b20ef097dfc0aa56a932c4e09f06ee02a69c005767df86877f48c6c2412f03" |
|
||||||
], |
|
||||||
"sourceType": "raw-bytecode" |
|
||||||
} |
|
||||||
] |
|
@ -1,42 +1 @@ |
|||||||
[ |
[{"issues": [{"description": {"head": "The binary subtraction can underflow.", "tail": "The operands of the subtraction operation are not sufficiently constrained. The subtraction could therefore result in an integer underflow. Prevent the underflow by checking inputs or ensure sure that the underflow is caught by an assertion."}, "extra": {}, "locations": [{"sourceMap": "567:1:0"}], "severity": "High", "swcID": "SWC-101", "swcTitle": "Integer Overflow and Underflow"}, {"description": {"head": "The binary subtraction can underflow.", "tail": "The operands of the subtraction operation are not sufficiently constrained. The subtraction could therefore result in an integer underflow. Prevent the underflow by checking inputs or ensure sure that the underflow is caught by an assertion."}, "extra": {}, "locations": [{"sourceMap": "649:1:0"}], "severity": "High", "swcID": "SWC-101", "swcTitle": "Integer Overflow and Underflow"}], "meta": {}, "sourceFormat": "evm-byzantium-bytecode", "sourceList": ["0xf230bec502569e8b7e7737616d0ad0f200c436624e3c223e5398c0615cd2d6b9"], "sourceType": "raw-bytecode"}] |
||||||
{ |
|
||||||
"issues": [ |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "The binary subtraction can underflow.", |
|
||||||
"tail": "The operands of the subtraction operation are not sufficiently constrained. The subtraction could therefore result in an integer underflow. Prevent the underflow by checking inputs or ensure sure that the underflow is caught by an assertion." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "567:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "High", |
|
||||||
"swcID": "SWC-101", |
|
||||||
"swcTitle": "Integer Overflow and Underflow" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "The binary subtraction can underflow.", |
|
||||||
"tail": "The operands of the subtraction operation are not sufficiently constrained. The subtraction could therefore result in an integer underflow. Prevent the underflow by checking inputs or ensure sure that the underflow is caught by an assertion." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "649:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "High", |
|
||||||
"swcID": "SWC-101", |
|
||||||
"swcTitle": "Integer Overflow and Underflow" |
|
||||||
} |
|
||||||
], |
|
||||||
"meta": {}, |
|
||||||
"sourceFormat": "evm-byzantium-bytecode", |
|
||||||
"sourceList": [ |
|
||||||
"0xf230bec502569e8b7e7737616d0ad0f200c436624e3c223e5398c0615cd2d6b9" |
|
||||||
], |
|
||||||
"sourceType": "raw-bytecode" |
|
||||||
} |
|
||||||
] |
|
@ -1,57 +1 @@ |
|||||||
[ |
[{"issues": [{"description": {"head": "The contract executes an external message call.", "tail": "An external function call to a fixed contract address is executed. Make sure that the callee contract has been reviewed carefully."}, "extra": {}, "locations": [{"sourceMap": "196:1:0"}], "severity": "Low", "swcID": "SWC-107", "swcTitle": "Reentrancy"}, {"description": {"head": "The contract executes an external message call.", "tail": "An external function call to a fixed contract address is executed. Make sure that the callee contract has been reviewed carefully."}, "extra": {}, "locations": [{"sourceMap": "285:1:0"}], "severity": "Low", "swcID": "SWC-107", "swcTitle": "Reentrancy"}, {"description": {"head": "The return value of a message call is not checked.", "tail": "External calls return a boolean value. If the callee contract halts with an exception, 'false' is returned and execution continues in the caller. It is usually recommended to wrap external calls into a require statement to prevent unexpected states."}, "extra": {}, "locations": [{"sourceMap": "285:1:0"}], "severity": "Low", "swcID": "SWC-104", "swcTitle": "Unchecked Call Return Value"}], "meta": {}, "sourceFormat": "evm-byzantium-bytecode", "sourceList": ["0xb191cf6cc0d8cc37a91c9d88019cc011b932169fb5776df616e2bb9cd93b4039"], "sourceType": "raw-bytecode"}] |
||||||
{ |
|
||||||
"issues": [ |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "The contract executes an external message call.", |
|
||||||
"tail": "An external function call to a fixed contract address is executed. Make sure that the callee contract has been reviewed carefully." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "196:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-107", |
|
||||||
"swcTitle": "Reentrancy" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "The contract executes an external message call.", |
|
||||||
"tail": "An external function call to a fixed contract address is executed. Make sure that the callee contract has been reviewed carefully." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "285:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-107", |
|
||||||
"swcTitle": "Reentrancy" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "The return value of a message call is not checked.", |
|
||||||
"tail": "External calls return a boolean value. If the callee contract halts with an exception, 'false' is returned and execution continues in the caller. It is usually recommended to wrap external calls into a require statement to prevent unexpected states." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "285:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "Low", |
|
||||||
"swcID": "SWC-104", |
|
||||||
"swcTitle": "Unchecked Call Return Value" |
|
||||||
} |
|
||||||
], |
|
||||||
"meta": {}, |
|
||||||
"sourceFormat": "evm-byzantium-bytecode", |
|
||||||
"sourceList": [ |
|
||||||
"0xb191cf6cc0d8cc37a91c9d88019cc011b932169fb5776df616e2bb9cd93b4039" |
|
||||||
], |
|
||||||
"sourceType": "raw-bytecode" |
|
||||||
} |
|
||||||
] |
|
@ -1,27 +1 @@ |
|||||||
[ |
[{"issues": [{"description": {"head": "The contract can be killed by anyone.", "tail": "Anyone can kill this contract and withdraw its balance to an arbitrary address."}, "extra": {}, "locations": [{"sourceMap": "146:1:0"}], "severity": "High", "swcID": "SWC-106", "swcTitle": "Unprotected SELFDESTRUCT Instruction"}], "meta": {}, "sourceFormat": "evm-byzantium-bytecode", "sourceList": ["0x2fb801366b61a05b30550481a1c8f7d5f20de0b93d9f2f2ce2b28c4e322033c9"], "sourceType": "raw-bytecode"}] |
||||||
{ |
|
||||||
"issues" : [ |
|
||||||
{ |
|
||||||
"swcTitle" : "Unprotected SELFDESTRUCT Instruction", |
|
||||||
"locations" : [ |
|
||||||
{ |
|
||||||
"sourceMap" : "146:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"extra" : {}, |
|
||||||
"description" : { |
|
||||||
"tail" : "Anyone can kill this contract and withdraw its balance to an arbitrary address.", |
|
||||||
"head" : "The contract can be killed by anyone." |
|
||||||
}, |
|
||||||
"severity" : "High", |
|
||||||
"swcID" : "SWC-106" |
|
||||||
} |
|
||||||
], |
|
||||||
"sourceFormat" : "evm-byzantium-bytecode", |
|
||||||
"meta" : {}, |
|
||||||
"sourceType" : "raw-bytecode", |
|
||||||
"sourceList" : [ |
|
||||||
"0x2fb801366b61a05b30550481a1c8f7d5f20de0b93d9f2f2ce2b28c4e322033c9" |
|
||||||
] |
|
||||||
} |
|
||||||
] |
|
@ -1,42 +1 @@ |
|||||||
[ |
[{"issues": [{"description": {"head": "The binary subtraction can underflow.", "tail": "The operands of the subtraction operation are not sufficiently constrained. The subtraction could therefore result in an integer underflow. Prevent the underflow by checking inputs or ensure sure that the underflow is caught by an assertion."}, "extra": {}, "locations": [{"sourceMap": "567:1:0"}], "severity": "High", "swcID": "SWC-101", "swcTitle": "Integer Overflow and Underflow"}, {"description": {"head": "The binary subtraction can underflow.", "tail": "The operands of the subtraction operation are not sufficiently constrained. The subtraction could therefore result in an integer underflow. Prevent the underflow by checking inputs or ensure sure that the underflow is caught by an assertion."}, "extra": {}, "locations": [{"sourceMap": "649:1:0"}], "severity": "High", "swcID": "SWC-101", "swcTitle": "Integer Overflow and Underflow"}], "meta": {}, "sourceFormat": "evm-byzantium-bytecode", "sourceList": ["0xabef56740bf7795a9f8732e4781ebd27f2977f8a4997e3ff11cee79a4ba6c0ce"], "sourceType": "raw-bytecode"}] |
||||||
{ |
|
||||||
"issues": [ |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "The binary subtraction can underflow.", |
|
||||||
"tail": "The operands of the subtraction operation are not sufficiently constrained. The subtraction could therefore result in an integer underflow. Prevent the underflow by checking inputs or ensure sure that the underflow is caught by an assertion." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "567:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "High", |
|
||||||
"swcID": "SWC-101", |
|
||||||
"swcTitle": "Integer Overflow and Underflow" |
|
||||||
}, |
|
||||||
{ |
|
||||||
"description": { |
|
||||||
"head": "The binary subtraction can underflow.", |
|
||||||
"tail": "The operands of the subtraction operation are not sufficiently constrained. The subtraction could therefore result in an integer underflow. Prevent the underflow by checking inputs or ensure sure that the underflow is caught by an assertion." |
|
||||||
}, |
|
||||||
"extra": {}, |
|
||||||
"locations": [ |
|
||||||
{ |
|
||||||
"sourceMap": "649:1:0" |
|
||||||
} |
|
||||||
], |
|
||||||
"severity": "High", |
|
||||||
"swcID": "SWC-101", |
|
||||||
"swcTitle": "Integer Overflow and Underflow" |
|
||||||
} |
|
||||||
], |
|
||||||
"meta": {}, |
|
||||||
"sourceFormat": "evm-byzantium-bytecode", |
|
||||||
"sourceList": [ |
|
||||||
"0xabef56740bf7795a9f8732e4781ebd27f2977f8a4997e3ff11cee79a4ba6c0ce" |
|
||||||
], |
|
||||||
"sourceType": "raw-bytecode" |
|
||||||
} |
|
||||||
] |
|
Loading…
Reference in new issue