diff options
author | Edward Ruchevits <ruchevits@gmail.com> | 2017-06-14 00:02:57 +0800 |
---|---|---|
committer | Edward Ruchevits <ruchevits@gmail.com> | 2017-06-14 00:03:17 +0800 |
commit | 2e816967d315185b930e3460d822f04bff061492 (patch) | |
tree | 55d04d99e3d23cbf7451731fa60399e72226a4e5 | |
parent | 6b052249dac2bce9d3a87f21cbde3a6429428fc0 (diff) | |
download | dexon-solidity-2e816967d315185b930e3460d822f04bff061492.tar.gz 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.cpp | 8 | ||||
-rw-r--r-- | libsolidity/interface/CompilerStack.h | 3 | ||||
-rw-r--r-- | solc/CommandLineInterface.cpp | 3 |
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)) |