Allow including hashes of method signatures in --combined-json output

This commit is contained in:
Edward Ruchevits 2017-06-13 17:02:57 +01:00
parent 6b052249da
commit 2e816967d3
3 changed files with 14 additions and 0 deletions

View File

@ -481,6 +481,14 @@ Json::Value const& CompilerStack::natspec(Contract const& _contract, Documentati
return *(*doc); 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 string const& CompilerStack::onChainMetadata(string const& _contractName) const
{ {
if (m_stackState != CompilationSuccessful) if (m_stackState != CompilationSuccessful)

View File

@ -177,6 +177,9 @@ public:
/// @param type The type of the documentation to get. /// @param type The type of the documentation to get.
/// Can be one of 4 types defined at @c DocumentationType /// Can be one of 4 types defined at @c DocumentationType
Json::Value const& natspec(std::string const& _contractName, DocumentationType _type) const; 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; std::string const& onChainMetadata(std::string const& _contractName) const;
void useMetadataLiteralSources(bool _metadataLiteralSources) { m_metadataLiteralSources = _metadataLiteralSources; } void useMetadataLiteralSources(bool _metadataLiteralSources) { m_metadataLiteralSources = _metadataLiteralSources; }

View File

@ -165,6 +165,7 @@ static set<string> const g_combinedJsonArgs
g_strNatspecUser, g_strNatspecUser,
g_strNatspecDev, g_strNatspecDev,
g_strOpcodes, g_strOpcodes,
g_strSignatureHashes,
g_strSrcMap, g_strSrcMap,
g_strSrcMapRuntime g_strSrcMapRuntime
}; };
@ -887,6 +888,8 @@ void CommandLineInterface::handleCombinedJSON()
auto map = m_compiler->runtimeSourceMapping(contractName); auto map = m_compiler->runtimeSourceMapping(contractName);
contractData[g_strSrcMapRuntime] = map ? *map : ""; 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)) if (requests.count(g_strNatspecDev))
contractData[g_strNatspecDev] = dev::jsonCompactPrint(m_compiler->natspec(contractName, DocumentationType::NatspecDev)); contractData[g_strNatspecDev] = dev::jsonCompactPrint(m_compiler->natspec(contractName, DocumentationType::NatspecDev));
if (requests.count(g_strNatspecUser)) if (requests.count(g_strNatspecUser))