Merge identifier query methods into one

This commit is contained in:
Marenz
2022-02-08 17:44:21 +01:00
parent 9e62f21b25
commit 3e7c68d9b0
9 changed files with 43 additions and 48 deletions
+9 -24
View File
@@ -1014,46 +1014,31 @@ Json::Value const& CompilerStack::natspecDev(Contract const& _contract) const
return _contract.devDocumentation.init([&]{ return Natspec::devDocumentation(*_contract.contract); });
}
Json::Value CompilerStack::methodIdentifiers(string const& _contractName) const
Json::Value CompilerStack::contractIdentifiers(string const& _contractName) const
{
if (m_stackState < AnalysisPerformed)
solThrow(CompilerError, "Analysis was not successful.");
Json::Value methodIdentifiers(Json::objectValue);
Json::Value contractIdentifiers(Json::objectValue);
// Always have a methods object
contractIdentifiers["methods"] = Json::objectValue;
for (auto const& it: contractDefinition(_contractName).interfaceFunctions())
methodIdentifiers[it.second->externalSignature()] = it.first.hex();
return methodIdentifiers;
}
Json::Value CompilerStack::errorIdentifiers(string const& _contractName) const
{
if (m_stackState < AnalysisPerformed)
solThrow(CompilerError, "Analysis was not successful.");
Json::Value errorIdentifiers(Json::objectValue);
contractIdentifiers["methods"][it.second->externalSignature()] = it.first.hex();
for (ErrorDefinition const* error: contractDefinition(_contractName).interfaceErrors())
{
string signature = error->functionType(true)->externalSignature();
errorIdentifiers[signature] = toHex(toCompactBigEndian(selectorFromSignature32(signature), 4));
contractIdentifiers["errors"][signature] = toHex(toCompactBigEndian(selectorFromSignature32(signature), 4));
}
return errorIdentifiers;
}
Json::Value CompilerStack::eventIdentifiers(string const& _contractName) const
{
if (m_stackState < AnalysisPerformed)
solThrow(CompilerError, "Analysis was not successful.");
Json::Value eventIdentifiers(Json::objectValue);
for (EventDefinition const* event: contractDefinition(_contractName).interfaceEvents())
if (!event->isAnonymous())
{
string signature = event->functionType(true)->externalSignature();
eventIdentifiers[signature] = toHex(u256(h256::Arith(keccak256(signature))));
contractIdentifiers["events"][signature] = toHex(u256(h256::Arith(keccak256(signature))));
}
return eventIdentifiers;
return contractIdentifiers;
}
bytes CompilerStack::cborMetadata(string const& _contractName, bool _forIR) const
+2 -8
View File
@@ -327,14 +327,8 @@ public:
/// Prerequisite: Successful call to parse or compile.
Json::Value const& natspecDev(std::string const& _contractName) const;
/// @returns a JSON representing a map of method identifiers (hashes) to function names.
Json::Value methodIdentifiers(std::string const& _contractName) const;
/// @returns a JSON representing a map of error identifiers (hashes) to error names.
Json::Value errorIdentifiers(std::string const& _contractName) const;
/// @returns a JSON representing a map of event identifiers (hashes) to event names.
Json::Value eventIdentifiers(std::string const& _contractName) const;
/// @returns a JSON object with the three members ``methods``, ``events``, ``errors``. Each is a map, mapping identifiers (hashes) to function names.
Json::Value contractIdentifiers(std::string const& _contractName) const;
/// @returns the Contract Metadata matching the pipeline selected using the viaIR setting.
std::string const& metadata(std::string const& _contractName) const { return metadata(contract(_contractName)); }
+1 -1
View File
@@ -1298,7 +1298,7 @@ Json::Value StandardCompiler::compileSolidity(StandardCompiler::InputsAndSetting
if (compilationSuccess && isArtifactRequested(_inputsAndSettings.outputSelection, file, name, "evm.legacyAssembly", wildcardMatchesExperimental))
evmData["legacyAssembly"] = compilerStack.assemblyJSON(contractName);
if (isArtifactRequested(_inputsAndSettings.outputSelection, file, name, "evm.methodIdentifiers", wildcardMatchesExperimental))
evmData["methodIdentifiers"] = compilerStack.methodIdentifiers(contractName);
evmData["methodIdentifiers"] = compilerStack.contractIdentifiers(contractName)["methods"];
if (compilationSuccess && isArtifactRequested(_inputsAndSettings.outputSelection, file, name, "evm.gasEstimates", wildcardMatchesExperimental))
evmData["gasEstimates"] = compilerStack.gasEstimates(contractName);