| 1959 | }; |
| 1960 | |
| 1961 | bytes CompilerStack::createCBORMetadata(Contract const& _contract, bool _forIR) const |
| 1962 | { |
| 1963 | if (m_metadataFormat == MetadataFormat::NoMetadata) |
| 1964 | return bytes{}; |
| 1965 | |
| 1966 | bool const usesExperimentalSyntax = !_contract.contract->sourceUnit().annotation().experimentalFeatures.empty(); |
| 1967 | bool const onlySafeExperimentalFeatures = onlySafeExperimentalFeaturesActivated( |
| 1968 | _contract.contract->sourceUnit().annotation().experimentalFeatures |
| 1969 | ); |
| 1970 | |
| 1971 | if (m_eofVersion.has_value() || (usesExperimentalSyntax && !onlySafeExperimentalFeatures)) |
| 1972 | solAssert(m_experimental, "Experimental mode not enabled"); |
| 1973 | |
| 1974 | std::string meta = (_forIR == m_viaIR ? metadata(_contract) : createMetadata(_contract, _forIR)); |
| 1975 | |
| 1976 | MetadataCBOREncoder encoder; |
| 1977 | |
| 1978 | if (m_metadataHash == MetadataHash::IPFS) |
| 1979 | encoder.pushBytes("ipfs", util::ipfsHash(meta)); |
| 1980 | else if (m_metadataHash == MetadataHash::Bzzr1) |
| 1981 | encoder.pushBytes("bzzr1", util::bzzr1Hash(meta).asBytes()); |
| 1982 | else |
| 1983 | solAssert(m_metadataHash == MetadataHash::None, "Invalid metadata hash"); |
| 1984 | |
| 1985 | if (m_experimental) |
| 1986 | encoder.pushBool("experimental", true); |
| 1987 | if (m_metadataFormat == MetadataFormat::WithReleaseVersionTag) |
| 1988 | encoder.pushBytes("solc", VersionCompactBytes); |
| 1989 | else |
| 1990 | { |
| 1991 | solAssert( |
| 1992 | m_metadataFormat == MetadataFormat::WithPrereleaseVersionTag, |
| 1993 | "Invalid metadata format." |
| 1994 | ); |
| 1995 | encoder.pushString("solc", VersionStringStrict); |
| 1996 | } |
| 1997 | return encoder.serialise(); |
| 1998 | } |
| 1999 | |
| 2000 | namespace |
| 2001 | { |
nothing calls this directly
no test coverage detected