aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdward Ruchevits <ruchevits@gmail.com>2017-06-14 00:02:57 +0800
committerEdward Ruchevits <ruchevits@gmail.com>2017-06-14 00:03:17 +0800
commit2e816967d315185b930e3460d822f04bff061492 (patch)
tree55d04d99e3d23cbf7451731fa60399e72226a4e5
parent6b052249dac2bce9d3a87f21cbde3a6429428fc0 (diff)
downloaddexon-solidity-2e816967d315185b930e3460d822f04bff061492.tar
dexon-solidity-2e816967d315185b930e3460d822f04bff061492.tar.gz
dexon-solidity-2e816967d315185b930e3460d822f04bff061492.tar.bz2
dexon-solidity-2e816967d315185b930e3460d822f04bff061492.tar.lz
dexon-solidity-2e816967d315185b930e3460d822f04bff061492.tar.xz
dexon-solidity-2e816967d315185b930e3460d822f04bff061492.tar.zst
dexon-solidity-2e816967d315185b930e3460d822f04bff061492.zip
Allow including hashes of method signatures in --combined-json output
-rw-r--r--libsolidity/interface/CompilerStack.cpp8
-rw-r--r--libsolidity/interface/CompilerStack.h3
-rw-r--r--solc/CommandLineInterface.cpp3
3 files changed, 14 insertions, 0 deletions
diff --git a/libsolidity/interface/CompilerStack.cpp b/libsolidity/interface/CompilerStack.cpp
index aca9ce39..234539ea 100644
--- a/libsolidity/interface/CompilerStack.cpp
+++ b/libsolidity/interface/CompilerStack.cpp
@@ -481,6 +481,14 @@ Json::Value const& CompilerStack::natspec(Contract const& _contract, Documentati
return *(*doc);
}
+Json::Value CompilerStack::functionHashes(ContractDefinition const& _contract)
+{
+ Json::Value functionHashes(Json::objectValue);
+ for (auto const& it: _contract.interfaceFunctions())
+ functionHashes[toHex(it.first.ref())] = it.second->externalSignature();
+ return functionHashes;
+}
+
string const& CompilerStack::onChainMetadata(string const& _contractName) const
{
if (m_stackState != CompilationSuccessful)
diff --git a/libsolidity/interface/CompilerStack.h b/libsolidity/interface/CompilerStack.h
index bffdeabd..3250429b 100644
--- a/libsolidity/interface/CompilerStack.h
+++ b/libsolidity/interface/CompilerStack.h
@@ -177,6 +177,9 @@ public:
/// @param type The type of the documentation to get.
/// Can be one of 4 types defined at @c DocumentationType
Json::Value const& natspec(std::string const& _contractName, DocumentationType _type) const;
+
+ Json::Value functionHashes(ContractDefinition const& _contract);
+
std::string const& onChainMetadata(std::string const& _contractName) const;
void useMetadataLiteralSources(bool _metadataLiteralSources) { m_metadataLiteralSources = _metadataLiteralSources; }
diff --git a/solc/CommandLineInterface.cpp b/solc/CommandLineInterface.cpp
index cae05b18..4fbd3384 100644
--- a/solc/CommandLineInterface.cpp
+++ b/solc/CommandLineInterface.cpp
@@ -165,6 +165,7 @@ static set<string> const g_combinedJsonArgs
g_strNatspecUser,
g_strNatspecDev,
g_strOpcodes,
+ g_strSignatureHashes,
g_strSrcMap,
g_strSrcMapRuntime
};
@@ -887,6 +888,8 @@ void CommandLineInterface::handleCombinedJSON()
auto map = m_compiler->runtimeSourceMapping(contractName);
contractData[g_strSrcMapRuntime] = map ? *map : "";
}
+ if (requests.count(g_strSignatureHashes))
+ contractData[g_strSignatureHashes] = m_compiler->functionHashes(m_compiler->contractDefinition(contractName));
if (requests.count(g_strNatspecDev))
contractData[g_strNatspecDev] = dev::jsonCompactPrint(m_compiler->natspec(contractName, DocumentationType::NatspecDev));
if (requests.count(g_strNatspecUser))