Add new gas price for deployed bytecode (EIP2028)

This commit is contained in:
Alex Beregszaszi
2019-11-19 17:09:18 +01:00
parent 21312f52f2
commit 840aba8929
9 changed files with 44 additions and 32 deletions
+13 -9
View File
@@ -19,6 +19,7 @@
*/
#include <test/libsolidity/SolidityExecutionFramework.h>
#include <liblangutil/EVMVersion.h>
#include <libdevcore/SwarmHash.h>
#include <libevmasm/GasMeter.h>
@@ -37,10 +38,10 @@ namespace solidity
namespace test
{
#define CHECK_DEPLOY_GAS(_gasNoOpt, _gasOpt) \
#define CHECK_DEPLOY_GAS(_gasNoOpt, _gasOpt, _evmVersion) \
do \
{ \
u256 bzzr1Cost = GasMeter::dataGas(dev::bzzr1Hash(m_compiler.metadata(m_compiler.lastContractName())).asBytes(), true); \
u256 bzzr1Cost = GasMeter::dataGas(dev::bzzr1Hash(m_compiler.metadata(m_compiler.lastContractName())).asBytes(), true, _evmVersion); \
u256 gasOpt{_gasOpt}; \
u256 gasNoOpt{_gasNoOpt}; \
u256 gas = m_optimiserSettings == OptimiserSettings::minimal() ? gasNoOpt : gasOpt; \
@@ -95,22 +96,25 @@ BOOST_AUTO_TEST_CASE(string_storage)
m_compiler.overwriteReleaseFlag(true);
compileAndRun(sourceCode);
if (Options::get().evmVersion() <= EVMVersion::byzantium())
CHECK_DEPLOY_GAS(134071, 130763);
auto evmVersion = dev::test::Options::get().evmVersion();
if (evmVersion <= EVMVersion::byzantium())
CHECK_DEPLOY_GAS(134071, 130763, evmVersion);
// This is only correct on >=Constantinople.
else if (Options::get().useABIEncoderV2)
{
if (Options::get().optimizeYul)
CHECK_DEPLOY_GAS(151455, 127653);
CHECK_DEPLOY_GAS(151455, 127653, evmVersion);
else
CHECK_DEPLOY_GAS(151455, 135371);
CHECK_DEPLOY_GAS(151455, 135371, evmVersion);
}
else
CHECK_DEPLOY_GAS(126861, 119591);
if (Options::get().evmVersion() >= EVMVersion::byzantium())
CHECK_DEPLOY_GAS(126861, 119591, evmVersion);
if (evmVersion >= EVMVersion::byzantium())
{
callContractFunction("f()");
if (Options::get().evmVersion() == EVMVersion::byzantium())
if (evmVersion == EVMVersion::byzantium())
CHECK_GAS(21551, 21526, 20);
// This is only correct on >=Constantinople.
else if (Options::get().useABIEncoderV2)
+2 -1
View File
@@ -114,9 +114,10 @@ public:
static GasMeter::GasConsumption gasForTransaction(bytes const& _data, bool _isCreation)
{
auto evmVersion = dev::test::Options::get().evmVersion();
GasMeter::GasConsumption gas = _isCreation ? GasCosts::txCreateGas : GasCosts::txGas;
for (auto i: _data)
gas += i != 0 ? GasCosts::txDataNonZeroGas : GasCosts::txDataZeroGas;
gas += i != 0 ? GasCosts::txDataNonZeroGas(evmVersion) : GasCosts::txDataZeroGas;
return gas;
}