mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Implemented block.basefee
in Solidilty and basefee()
in Yul.
Also added basefee to Yul grammar.
This commit is contained in:
parent
d92b211a2f
commit
95091f6b58
@ -284,7 +284,8 @@ YulEVMBuiltin:
|
|||||||
| 'returndatacopy' | 'extcodehash' | 'create' | 'create2' | 'call' | 'callcode'
|
| 'returndatacopy' | 'extcodehash' | 'create' | 'create2' | 'call' | 'callcode'
|
||||||
| 'delegatecall' | 'staticcall' | 'return' | 'revert' | 'selfdestruct' | 'invalid'
|
| 'delegatecall' | 'staticcall' | 'return' | 'revert' | 'selfdestruct' | 'invalid'
|
||||||
| 'log0' | 'log1' | 'log2' | 'log3' | 'log4' | 'chainid' | 'origin' | 'gasprice'
|
| 'log0' | 'log1' | 'log2' | 'log3' | 'log4' | 'chainid' | 'origin' | 'gasprice'
|
||||||
| 'blockhash' | 'coinbase' | 'timestamp' | 'number' | 'difficulty' | 'gaslimit';
|
| 'blockhash' | 'coinbase' | 'timestamp' | 'number' | 'difficulty' | 'gaslimit'
|
||||||
|
| 'basefee';
|
||||||
|
|
||||||
YulLBrace: '{' -> pushMode(YulMode);
|
YulLBrace: '{' -> pushMode(YulMode);
|
||||||
YulRBrace: '}' -> popMode;
|
YulRBrace: '}' -> popMode;
|
||||||
|
@ -2947,6 +2947,12 @@ bool TypeChecker::visit(MemberAccess const& _memberAccess)
|
|||||||
_memberAccess.location(),
|
_memberAccess.location(),
|
||||||
"\"chainid\" is not supported by the VM version."
|
"\"chainid\" is not supported by the VM version."
|
||||||
);
|
);
|
||||||
|
else if (magicType->kind() == MagicType::Kind::Block && memberName == "basefee" && !m_evmVersion.hasBaseFee())
|
||||||
|
m_errorReporter.typeError(
|
||||||
|
5921_error,
|
||||||
|
_memberAccess.location(),
|
||||||
|
"\"basefee\" is not supported by the VM version."
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
|
@ -3892,7 +3892,8 @@ MemberList::MemberMap MagicType::nativeMembers(ASTNode const*) const
|
|||||||
{"difficulty", TypeProvider::uint256()},
|
{"difficulty", TypeProvider::uint256()},
|
||||||
{"number", TypeProvider::uint256()},
|
{"number", TypeProvider::uint256()},
|
||||||
{"gaslimit", TypeProvider::uint256()},
|
{"gaslimit", TypeProvider::uint256()},
|
||||||
{"chainid", TypeProvider::uint256()}
|
{"chainid", TypeProvider::uint256()},
|
||||||
|
{"basefee", TypeProvider::uint256()}
|
||||||
});
|
});
|
||||||
case Kind::Message:
|
case Kind::Message:
|
||||||
return MemberList::MemberMap({
|
return MemberList::MemberMap({
|
||||||
|
@ -1731,6 +1731,8 @@ bool ExpressionCompiler::visit(MemberAccess const& _memberAccess)
|
|||||||
m_context << Instruction::GASPRICE;
|
m_context << Instruction::GASPRICE;
|
||||||
else if (member == "chainid")
|
else if (member == "chainid")
|
||||||
m_context << Instruction::CHAINID;
|
m_context << Instruction::CHAINID;
|
||||||
|
else if (member == "basefee")
|
||||||
|
m_context << Instruction::BASEFEE;
|
||||||
else if (member == "data")
|
else if (member == "data")
|
||||||
m_context << u256(0) << Instruction::CALLDATASIZE;
|
m_context << u256(0) << Instruction::CALLDATASIZE;
|
||||||
else if (member == "sig")
|
else if (member == "sig")
|
||||||
|
@ -1733,6 +1733,8 @@ void IRGeneratorForStatements::endVisit(MemberAccess const& _memberAccess)
|
|||||||
define(_memberAccess) << "gasprice()\n";
|
define(_memberAccess) << "gasprice()\n";
|
||||||
else if (member == "chainid")
|
else if (member == "chainid")
|
||||||
define(_memberAccess) << "chainid()\n";
|
define(_memberAccess) << "chainid()\n";
|
||||||
|
else if (member == "basefee")
|
||||||
|
define(_memberAccess) << "basefee()\n";
|
||||||
else if (member == "data")
|
else if (member == "data")
|
||||||
{
|
{
|
||||||
IRVariable var(_memberAccess);
|
IRVariable var(_memberAccess);
|
||||||
|
@ -695,6 +695,8 @@ bool AsmAnalyzer::validateInstructions(evmasm::Instruction _instr, SourceLocatio
|
|||||||
errorForVM(1561_error, "only available for Istanbul-compatible");
|
errorForVM(1561_error, "only available for Istanbul-compatible");
|
||||||
else if (_instr == evmasm::Instruction::SELFBALANCE && !m_evmVersion.hasSelfBalance())
|
else if (_instr == evmasm::Instruction::SELFBALANCE && !m_evmVersion.hasSelfBalance())
|
||||||
errorForVM(7721_error, "only available for Istanbul-compatible");
|
errorForVM(7721_error, "only available for Istanbul-compatible");
|
||||||
|
else if (_instr == evmasm::Instruction::BASEFEE && !m_evmVersion.hasBaseFee())
|
||||||
|
errorForVM(5430_error, "only available for London-compatible");
|
||||||
else if (_instr == evmasm::Instruction::PC)
|
else if (_instr == evmasm::Instruction::PC)
|
||||||
m_errorReporter.error(
|
m_errorReporter.error(
|
||||||
2450_error,
|
2450_error,
|
||||||
|
Loading…
Reference in New Issue
Block a user