mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Store compiler version in CBOR metadata
This commit is contained in:
committed by
Daniel Kirchner
parent
4037da9575
commit
e121c8f3c7
@@ -1177,6 +1177,10 @@ bytes CompilerStack::createCBORMetadata(string const& _metadata, bool _experimen
|
||||
encoder.pushBytes("bzzr0", dev::swarmHash(_metadata).asBytes());
|
||||
if (_experimentalMode)
|
||||
encoder.pushBool("experimental", true);
|
||||
if (VersionIsRelease)
|
||||
encoder.pushBytes("solc", VersionCompactBytes);
|
||||
else
|
||||
encoder.pushString("solc", VersionStringStrict);
|
||||
return encoder.serialise();
|
||||
}
|
||||
|
||||
|
||||
@@ -44,36 +44,10 @@ string const dev::solidity::VersionStringStrict =
|
||||
(string(SOL_VERSION_PRERELEASE).empty() ? "" : "-" + string(SOL_VERSION_PRERELEASE)) +
|
||||
(string(SOL_VERSION_COMMIT).empty() ? "" : "+" + string(SOL_VERSION_COMMIT));
|
||||
|
||||
bytes dev::solidity::binaryVersion()
|
||||
{
|
||||
bytes ret{0};
|
||||
size_t i = 0;
|
||||
auto parseDecimal = [&]()
|
||||
{
|
||||
size_t ret = 0;
|
||||
solAssert('0' <= VersionString[i] && VersionString[i] <= '9', "");
|
||||
for (; i < VersionString.size() && '0' <= VersionString[i] && VersionString[i] <= '9'; ++i)
|
||||
ret = ret * 10 + (VersionString[i] - '0');
|
||||
return ret;
|
||||
};
|
||||
ret.push_back(uint8_t(parseDecimal()));
|
||||
solAssert(i < VersionString.size() && VersionString[i] == '.', "");
|
||||
++i;
|
||||
ret.push_back(uint8_t(parseDecimal()));
|
||||
solAssert(i < VersionString.size() && VersionString[i] == '.', "");
|
||||
++i;
|
||||
ret.push_back(uint8_t(parseDecimal()));
|
||||
solAssert(i < VersionString.size() && (VersionString[i] == '-' || VersionString[i] == '+'), "");
|
||||
++i;
|
||||
size_t commitpos = VersionString.find("commit.");
|
||||
solAssert(commitpos != string::npos, "");
|
||||
i = commitpos + 7;
|
||||
solAssert(i + 7 < VersionString.size(), "");
|
||||
bytes commitHash = fromHex(VersionString.substr(i, 8));
|
||||
solAssert(!commitHash.empty(), "");
|
||||
ret += commitHash;
|
||||
solAssert(ret.size() == 1 + 3 + 4, "");
|
||||
|
||||
return ret;
|
||||
}
|
||||
bytes const dev::solidity::VersionCompactBytes = {
|
||||
ETH_PROJECT_VERSION_MAJOR,
|
||||
ETH_PROJECT_VERSION_MINOR,
|
||||
ETH_PROJECT_VERSION_PATCH
|
||||
};
|
||||
|
||||
bool const dev::solidity::VersionIsRelease = string(SOL_VERSION_PRERELEASE).empty();
|
||||
|
||||
@@ -33,11 +33,8 @@ namespace solidity
|
||||
extern char const* VersionNumber;
|
||||
extern std::string const VersionString;
|
||||
extern std::string const VersionStringStrict;
|
||||
|
||||
/// @returns a binary form of the version string, where A.B.C-HASH is encoded such that
|
||||
/// the first byte is zero, the following three bytes encode A B and C (interpreted as decimals)
|
||||
/// and HASH is interpreted as 8 hex digits and encoded into the last four bytes.
|
||||
bytes binaryVersion();
|
||||
extern bytes const VersionCompactBytes;
|
||||
extern bool const VersionIsRelease;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user