|
|
@ -2,7 +2,6 @@ from ethereum.abi import encode_abi, encode_int |
|
|
|
from ethereum.utils import zpad |
|
|
|
from ethereum.utils import zpad |
|
|
|
from ethereum.abi import method_id |
|
|
|
from ethereum.abi import method_id |
|
|
|
from mythril.exceptions import CompilerError |
|
|
|
from mythril.exceptions import CompilerError |
|
|
|
import subprocess |
|
|
|
|
|
|
|
from subprocess import Popen, PIPE |
|
|
|
from subprocess import Popen, PIPE |
|
|
|
import binascii |
|
|
|
import binascii |
|
|
|
import os |
|
|
|
import os |
|
|
@ -17,10 +16,12 @@ def safe_decode(hex_encoded_string): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def compile_solidity(solc_binary, file): |
|
|
|
def compile_solidity(solc_binary, file): |
|
|
|
|
|
|
|
|
|
|
|
try: |
|
|
|
try: |
|
|
|
p = Popen(["solc", "--bin-runtime", file], stdout=PIPE, stderr=PIPE) |
|
|
|
p = Popen([solc_binary, "--bin-runtime", file], stdout=PIPE, stderr=PIPE) |
|
|
|
stdout, stderr = p.communicate() |
|
|
|
stdout, stderr = p.communicate() |
|
|
|
|
|
|
|
ret = p.returncode |
|
|
|
|
|
|
|
if ret < 0: |
|
|
|
|
|
|
|
raise CompilerError("The Solidity compiler experienced a fatal error (code %d). Please check the Solidity compiler." % ret) |
|
|
|
except FileNotFoundError: |
|
|
|
except FileNotFoundError: |
|
|
|
raise CompilerError("Compiler not found. Make sure that solc is installed and in PATH, or set the SOLC environment variable.") |
|
|
|
raise CompilerError("Compiler not found. Make sure that solc is installed and in PATH, or set the SOLC environment variable.") |
|
|
|
|
|
|
|
|
|
|
@ -30,8 +31,6 @@ def compile_solidity(solc_binary, file): |
|
|
|
err = "Error compiling input file. Solc returned:\n" + stderr.decode("UTF-8") |
|
|
|
err = "Error compiling input file. Solc returned:\n" + stderr.decode("UTF-8") |
|
|
|
raise CompilerError(err) |
|
|
|
raise CompilerError(err) |
|
|
|
|
|
|
|
|
|
|
|
# out = out.replace("[\n\s]", "") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m = re.search(r":(.*?) =======\nBinary of the runtime part: \n([0-9a-f]+)\n", out) |
|
|
|
m = re.search(r":(.*?) =======\nBinary of the runtime part: \n([0-9a-f]+)\n", out) |
|
|
|
return [m.group(1), m.group(2)] |
|
|
|
return [m.group(1), m.group(2)] |
|
|
|
|
|
|
|
|
|
|
|