Exclude internal functions in library ABIs

This commit is contained in:
Mathias Baumann
2019-03-11 16:33:44 +01:00
parent 189983a1b8
commit fbbd03dbd7
3 changed files with 31 additions and 28 deletions
+19
View File
@@ -26,12 +26,31 @@ using namespace std;
using namespace dev;
using namespace dev::solidity;
namespace
{
bool anyDataStoredInStorage(TypePointers const& _pointers)
{
for (TypePointer const& pointer: _pointers)
if (pointer->dataStoredIn(DataLocation::Storage))
return true;
return false;
}
}
Json::Value ABI::generate(ContractDefinition const& _contractDef)
{
Json::Value abi(Json::arrayValue);
for (auto it: _contractDef.interfaceFunctions())
{
if (
_contractDef.isLibrary() &&
(it.second->stateMutability() > StateMutability::View ||
anyDataStoredInStorage(it.second->parameterTypes() + it.second->returnParameterTypes()))
)
continue;
auto externalFunctionType = it.second->interfaceFunctionType();
solAssert(!!externalFunctionType, "");
Json::Value method;