aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/interface/StandardCompiler.cpp
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2018-11-23 19:23:27 +0800
committerGitHub <noreply@github.com>2018-11-23 19:23:27 +0800
commit616ef8bca8515d565cd9ce24329056c0828e6853 (patch)
tree03a8798bca8f2ef221d77fc8a4c6c5390105800c /libsolidity/interface/StandardCompiler.cpp
parent9217fbb58d085325ce37ed6ca37f76e8b8de9d90 (diff)
parent0ff4cbe51ba653397a1937c8c08b3d09541492ef (diff)
downloaddexon-solidity-616ef8bca8515d565cd9ce24329056c0828e6853.tar
dexon-solidity-616ef8bca8515d565cd9ce24329056c0828e6853.tar.gz
dexon-solidity-616ef8bca8515d565cd9ce24329056c0828e6853.tar.bz2
dexon-solidity-616ef8bca8515d565cd9ce24329056c0828e6853.tar.lz
dexon-solidity-616ef8bca8515d565cd9ce24329056c0828e6853.tar.xz
dexon-solidity-616ef8bca8515d565cd9ce24329056c0828e6853.tar.zst
dexon-solidity-616ef8bca8515d565cd9ce24329056c0828e6853.zip
Merge pull request #3073 from ethereum/smtlib2_via_standardio
Inject SMTLIB2 queries and responses via standard-json-io.
Diffstat (limited to 'libsolidity/interface/StandardCompiler.cpp')
-rw-r--r--libsolidity/interface/StandardCompiler.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/libsolidity/interface/StandardCompiler.cpp b/libsolidity/interface/StandardCompiler.cpp
index 291a1071..bf33b789 100644
--- a/libsolidity/interface/StandardCompiler.cpp
+++ b/libsolidity/interface/StandardCompiler.cpp
@@ -319,6 +319,27 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input)
return formatFatalError("JSONError", "Invalid input source specified.");
}
+ Json::Value const& auxInputs = _input["auxiliaryInput"];
+ if (!!auxInputs)
+ {
+ Json::Value const& smtlib2Responses = auxInputs["smtlib2responses"];
+ if (!!smtlib2Responses)
+ for (auto const& hashString: smtlib2Responses.getMemberNames())
+ {
+ h256 hash;
+ try
+ {
+ hash = h256(hashString);
+ }
+ catch (dev::BadHexCharacter const&)
+ {
+ return formatFatalError("JSONError", "Invalid hex encoding of SMTLib2 auxiliary input.");
+ }
+
+ m_compilerStack.addSMTLib2Response(hash, smtlib2Responses[hashString].asString());
+ }
+ }
+
Json::Value const& settings = _input.get("settings", Json::Value());
if (settings.isMember("evmVersion"))
@@ -518,6 +539,10 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input)
if (errors.size() > 0)
output["errors"] = errors;
+ if (!m_compilerStack.unhandledSMTLib2Queries().empty())
+ for (string const& query: m_compilerStack.unhandledSMTLib2Queries())
+ output["auxiliaryInputRequested"]["smtlib2queries"]["0x" + keccak256(query).hex()] = query;
+
output["sources"] = Json::objectValue;
unsigned sourceIndex = 0;
for (string const& sourceName: analysisSuccess ? m_compilerStack.sourceNames() : vector<string>())