aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2017-07-13 07:47:15 +0800
committerAlex Beregszaszi <alex@rtfs.hu>2017-07-19 21:56:40 +0800
commitc617336587b976afc3dbe388ebaa8605c3d6fe54 (patch)
treeef4cb11997d22a005124fc50f176b0127d1fb625
parented592d6ccb9a8a088dc8153baae78f771304a257 (diff)
downloaddexon-solidity-c617336587b976afc3dbe388ebaa8605c3d6fe54.tar.gz
dexon-solidity-c617336587b976afc3dbe388ebaa8605c3d6fe54.tar.zst
dexon-solidity-c617336587b976afc3dbe388ebaa8605c3d6fe54.zip
Only include files usde in metadata
-rw-r--r--Changelog.md1
-rw-r--r--libsolidity/interface/CompilerStack.cpp9
2 files changed, 10 insertions, 0 deletions
diff --git a/Changelog.md b/Changelog.md
index 91ec7d0e..55d1a7ba 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -4,6 +4,7 @@ Features:
* C API (``jsonCompiler``): Export the ``license`` method.
* Inline Assembly: Show useful error message if trying to access calldata variables.
* Inline Assembly: Support variable declaration without initial value (defaults to 0).
+ * Metadata: Only include files which were used to compile the given contract.
* Type Checker: Disallow value transfers to contracts without a payable fallback function.
* Type Checker: Include types in explicit conversion error message.
* Type Checker: Raise proper error for arrays too large for ABI encoding.
diff --git a/libsolidity/interface/CompilerStack.cpp b/libsolidity/interface/CompilerStack.cpp
index 7a87875c..9b630c31 100644
--- a/libsolidity/interface/CompilerStack.cpp
+++ b/libsolidity/interface/CompilerStack.cpp
@@ -780,9 +780,18 @@ string CompilerStack::createMetadata(Contract const& _contract) const
meta["language"] = "Solidity";
meta["compiler"]["version"] = VersionStringStrict;
+ /// All the source files (including self), which should be included in the metadata.
+ set<string> referencedSources;
+ referencedSources.insert(_contract.contract->sourceUnit().annotation().path);
+ for (auto const sourceUnit: _contract.contract->sourceUnit().referencedSourceUnits(true))
+ referencedSources.insert(sourceUnit->annotation().path);
+
meta["sources"] = Json::objectValue;
for (auto const& s: m_sources)
{
+ if (!referencedSources.count(s.first))
+ continue;
+
solAssert(s.second.scanner, "Scanner not available");
meta["sources"][s.first]["keccak256"] =
"0x" + toHex(dev::keccak256(s.second.scanner->source()).asBytes());