mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Add swarm hash to the end of the bytecode.
This commit is contained in:
@@ -65,6 +65,7 @@ SourceUnitAnnotation& SourceUnit::annotation() const
|
||||
|
||||
string Declaration::sourceUnitName() const
|
||||
{
|
||||
solAssert(!!m_scope, "");
|
||||
ASTNode const* scope = m_scope;
|
||||
while (dynamic_cast<Declaration const*>(scope) && dynamic_cast<Declaration const*>(scope)->m_scope)
|
||||
scope = dynamic_cast<Declaration const*>(scope)->m_scope;
|
||||
|
||||
@@ -36,6 +36,7 @@ void Compiler::compileContract(
|
||||
{
|
||||
ContractCompiler runtimeCompiler(nullptr, m_runtimeContext, m_optimize);
|
||||
runtimeCompiler.compileContract(_contract, _contracts);
|
||||
m_runtimeContext.appendAuxiliaryData(_metadataHash.asBytes());
|
||||
|
||||
// This might modify m_runtimeContext because it can access runtime functions at
|
||||
// creation time.
|
||||
@@ -43,9 +44,6 @@ void Compiler::compileContract(
|
||||
m_runtimeSub = creationCompiler.compileConstructor(_contract, _contracts);
|
||||
|
||||
m_context.optimise(m_optimize, m_optimizeRuns);
|
||||
|
||||
solAssert(m_runtimeSub != size_t(-1), "");
|
||||
m_context.injectMetadataHashIntoSub(m_runtimeSub, _metadataHash);
|
||||
}
|
||||
|
||||
void Compiler::compileClone(
|
||||
|
||||
@@ -227,13 +227,6 @@ void CompilerContext::injectVersionStampIntoSub(size_t _subIndex)
|
||||
sub.injectStart(fromBigEndian<u256>(binaryVersion()));
|
||||
}
|
||||
|
||||
void CompilerContext::injectMetadataHashIntoSub(size_t _subIndex, h256 const& _metadataHash)
|
||||
{
|
||||
eth::Assembly& sub = m_asm->sub(_subIndex);
|
||||
sub.injectStart(Instruction::POP);
|
||||
sub.injectStart(u256(_metadataHash));
|
||||
}
|
||||
|
||||
FunctionDefinition const& CompilerContext::resolveVirtualFunction(
|
||||
FunctionDefinition const& _function,
|
||||
vector<ContractDefinition const*>::const_iterator _searchStart
|
||||
|
||||
@@ -155,8 +155,8 @@ public:
|
||||
/// Prepends "PUSH <compiler version number> POP"
|
||||
void injectVersionStampIntoSub(size_t _subIndex);
|
||||
|
||||
/// Prepends "PUSH <metadata hash> POP"
|
||||
void injectMetadataHashIntoSub(size_t _subIndex, h256 const& _metadataHash);
|
||||
/// Appends arbitrary data to the end of the bytecode.
|
||||
void appendAuxiliaryData(bytes const& _data) { m_asm->appendAuxiliaryDataToEnd(_data); }
|
||||
|
||||
void optimise(bool _fullOptimsation, unsigned _runs = 200) { m_asm->optimise(_fullOptimsation, true, _runs); }
|
||||
|
||||
|
||||
@@ -375,6 +375,7 @@ Json::Value const& CompilerStack::metadata(Contract const& _contract, Documentat
|
||||
if (!m_parseSuccessful)
|
||||
BOOST_THROW_EXCEPTION(CompilerError() << errinfo_comment("Parsing was not successful."));
|
||||
|
||||
solAssert(_contract.contract, "");
|
||||
std::unique_ptr<Json::Value const>* doc;
|
||||
|
||||
// checks wheather we already have the documentation
|
||||
|
||||
Reference in New Issue
Block a user