mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #6155 from ethereum/defaultToPetersburg
Set default EVM version to petersburg
This commit is contained in:
commit
9c80f0fc76
@ -6,7 +6,7 @@ Language Features:
|
|||||||
|
|
||||||
|
|
||||||
Compiler Features:
|
Compiler Features:
|
||||||
* Support ``petersburg`` as ``evmVersion``.
|
* Support ``petersburg`` as ``evmVersion`` and set as default.
|
||||||
* Inline Assembly: Consider ``extcodehash`` as part of Constantinople.
|
* Inline Assembly: Consider ``extcodehash`` as part of Constantinople.
|
||||||
* Inline Assembly: Instructions unavailable to the currently configured EVM are errors now.
|
* Inline Assembly: Instructions unavailable to the currently configured EVM are errors now.
|
||||||
* SMTChecker: Do not report underflow/overflow if they always revert. This removes false positives when using ``SafeMath``.
|
* SMTChecker: Do not report underflow/overflow if they always revert. This removes false positives when using ``SafeMath``.
|
||||||
|
@ -112,7 +112,7 @@ at each version. Backward compatibility is not guaranteed between each version.
|
|||||||
- All gas sent by default for external calls, previously a certain amount had to be retained.
|
- All gas sent by default for external calls, previously a certain amount had to be retained.
|
||||||
- ``spuriousDragon``
|
- ``spuriousDragon``
|
||||||
- Gas cost for the ``exp`` opcode increased, relevant for gas estimation and the optimizer.
|
- Gas cost for the ``exp`` opcode increased, relevant for gas estimation and the optimizer.
|
||||||
- ``byzantium`` (**default**)
|
- ``byzantium``
|
||||||
- Opcodes ``returndatacopy``, ``returndatasize`` and ``staticcall`` are available in assembly.
|
- Opcodes ``returndatacopy``, ``returndatasize`` and ``staticcall`` are available in assembly.
|
||||||
- The ``staticcall`` opcode is used when calling non-library view or pure functions, which prevents the functions from modifying state at the EVM level, i.e., even applies when you use invalid type conversions.
|
- The ``staticcall`` opcode is used when calling non-library view or pure functions, which prevents the functions from modifying state at the EVM level, i.e., even applies when you use invalid type conversions.
|
||||||
- It is possible to access dynamic data returned from function calls.
|
- It is possible to access dynamic data returned from function calls.
|
||||||
@ -120,7 +120,7 @@ at each version. Backward compatibility is not guaranteed between each version.
|
|||||||
- ``constantinople``
|
- ``constantinople``
|
||||||
- Opcodes ``create2`, ``extcodehash``, ``shl``, ``shr`` and ``sar`` are available in assembly.
|
- Opcodes ``create2`, ``extcodehash``, ``shl``, ``shr`` and ``sar`` are available in assembly.
|
||||||
- Shifting operators use shifting opcodes and thus need less gas.
|
- Shifting operators use shifting opcodes and thus need less gas.
|
||||||
- ``petersburg``
|
- ``petersburg`` (**default**)
|
||||||
- The compiler behaves the same way as with constantinople.
|
- The compiler behaves the same way as with constantinople.
|
||||||
|
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ private:
|
|||||||
|
|
||||||
EVMVersion(Version _version): m_version(_version) {}
|
EVMVersion(Version _version): m_version(_version) {}
|
||||||
|
|
||||||
Version m_version = Version::Byzantium;
|
Version m_version = Version::Petersburg;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -325,7 +325,7 @@ bool ReferencesResolver::visit(InlineAssembly const& _inlineAssembly)
|
|||||||
analysisInfo,
|
analysisInfo,
|
||||||
errorsIgnored,
|
errorsIgnored,
|
||||||
errorTypeForLoose,
|
errorTypeForLoose,
|
||||||
yul::EVMDialect::looseAssemblyForEVM(EVMVersion::petersburg()),
|
yul::EVMDialect::looseAssemblyForEVM(EVMVersion{}),
|
||||||
resolver
|
resolver
|
||||||
).analyze(_inlineAssembly.operations());
|
).analyze(_inlineAssembly.operations());
|
||||||
return false;
|
return false;
|
||||||
|
@ -1042,7 +1042,7 @@ ASTPointer<InlineAssembly> Parser::parseInlineAssembly(ASTPointer<ASTString> con
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Using latest EVM Version for now, it will be run again later.
|
// Using latest EVM Version for now, it will be run again later.
|
||||||
yul::Parser asmParser(m_errorReporter, yul::EVMDialect::looseAssemblyForEVM(EVMVersion::petersburg()));
|
yul::Parser asmParser(m_errorReporter, yul::EVMDialect::looseAssemblyForEVM(EVMVersion{}));
|
||||||
shared_ptr<yul::Block> block = asmParser.parse(m_scanner, true);
|
shared_ptr<yul::Block> block = asmParser.parse(m_scanner, true);
|
||||||
if (block == nullptr)
|
if (block == nullptr)
|
||||||
BOOST_THROW_EXCEPTION(FatalError());
|
BOOST_THROW_EXCEPTION(FatalError());
|
||||||
|
@ -607,7 +607,7 @@ Allowed options)",
|
|||||||
(
|
(
|
||||||
g_strEVMVersion.c_str(),
|
g_strEVMVersion.c_str(),
|
||||||
po::value<string>()->value_name("version"),
|
po::value<string>()->value_name("version"),
|
||||||
"Select desired EVM version. Either homestead, tangerineWhistle, spuriousDragon, byzantium (default), constantinople or petersburg."
|
"Select desired EVM version. Either homestead, tangerineWhistle, spuriousDragon, byzantium, constantinople or petersburg (default)."
|
||||||
)
|
)
|
||||||
(g_argOptimize.c_str(), "Enable bytecode optimizer.")
|
(g_argOptimize.c_str(), "Enable bytecode optimizer.")
|
||||||
(
|
(
|
||||||
|
@ -2,6 +2,6 @@
|
|||||||
======= data_storage/input.sol:C =======
|
======= data_storage/input.sol:C =======
|
||||||
Gas estimation:
|
Gas estimation:
|
||||||
construction:
|
construction:
|
||||||
306 + 264400 = 264706
|
300 + 258600 = 258900
|
||||||
external:
|
external:
|
||||||
f(): 263
|
f(): 258
|
@ -2,11 +2,11 @@
|
|||||||
======= gas_test_abiv2/input.sol:C =======
|
======= gas_test_abiv2/input.sol:C =======
|
||||||
Gas estimation:
|
Gas estimation:
|
||||||
construction:
|
construction:
|
||||||
1154 + 1109000 = 1110154
|
1147 + 1103200 = 1104347
|
||||||
external:
|
external:
|
||||||
a(): 535
|
a(): 530
|
||||||
b(uint256): 1129
|
b(uint256): 1124
|
||||||
f1(uint256): 591
|
f1(uint256): 586
|
||||||
f2(uint256[],string[],uint16,address): infinite
|
f2(uint256[],string[],uint16,address): infinite
|
||||||
f3(uint16[],string[],uint16,address): infinite
|
f3(uint16[],string[],uint16,address): infinite
|
||||||
f4(uint32[],string[12],bytes[2][],address): infinite
|
f4(uint32[],string[12],bytes[2][],address): infinite
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
======= gas_test_abiv2_optimize_yul/input.sol:C =======
|
======= gas_test_abiv2_optimize_yul/input.sol:C =======
|
||||||
Gas estimation:
|
Gas estimation:
|
||||||
construction:
|
construction:
|
||||||
676 + 641600 = 642276
|
651 + 617600 = 618251
|
||||||
external:
|
external:
|
||||||
a(): 434
|
a(): 429
|
||||||
b(uint256): 892
|
b(uint256): 887
|
||||||
f1(uint256): 356
|
f1(uint256): 351
|
||||||
f2(uint256[],string[],uint16,address): infinite
|
f2(uint256[],string[],uint16,address): infinite
|
||||||
f3(uint16[],string[],uint16,address): infinite
|
f3(uint16[],string[],uint16,address): infinite
|
||||||
f4(uint32[],string[12],bytes[2][],address): infinite
|
f4(uint32[],string[12],bytes[2][],address): infinite
|
||||||
|
@ -2,52 +2,52 @@
|
|||||||
======= gas_test_dispatch/input.sol:Large =======
|
======= gas_test_dispatch/input.sol:Large =======
|
||||||
Gas estimation:
|
Gas estimation:
|
||||||
construction:
|
construction:
|
||||||
1034 + 998400 = 999434
|
683 + 650600 = 651283
|
||||||
external:
|
external:
|
||||||
a(): 456
|
a(): 451
|
||||||
b(uint256): 857
|
b(uint256): 852
|
||||||
f0(uint256): 438
|
f0(uint256): 433
|
||||||
f1(uint256): 40781
|
f1(uint256): 40764
|
||||||
f2(uint256): 20722
|
f2(uint256): 20705
|
||||||
f3(uint256): 20810
|
f3(uint256): 20793
|
||||||
f4(uint256): 20788
|
f4(uint256): 20771
|
||||||
f5(uint256): 20766
|
f5(uint256): 20749
|
||||||
f6(uint256): 20789
|
f6(uint256): 20772
|
||||||
f7(uint256): 20701
|
f7(uint256): 20684
|
||||||
f8(uint256): 20701
|
f8(uint256): 20684
|
||||||
f9(uint256): 20723
|
f9(uint256): 20706
|
||||||
g0(uint256): 324
|
g0(uint256): 319
|
||||||
g1(uint256): 40736
|
g1(uint256): 40719
|
||||||
g2(uint256): 20699
|
g2(uint256): 20682
|
||||||
g3(uint256): 20787
|
g3(uint256): 20770
|
||||||
g4(uint256): 20765
|
g4(uint256): 20748
|
||||||
g5(uint256): 20721
|
g5(uint256): 20704
|
||||||
g6(uint256): 20744
|
g6(uint256): 20727
|
||||||
g7(uint256): 20743
|
g7(uint256): 20726
|
||||||
g8(uint256): 20721
|
g8(uint256): 20704
|
||||||
g9(uint256): 20678
|
g9(uint256): 20661
|
||||||
|
|
||||||
======= gas_test_dispatch/input.sol:Medium =======
|
======= gas_test_dispatch/input.sol:Medium =======
|
||||||
Gas estimation:
|
Gas estimation:
|
||||||
construction:
|
construction:
|
||||||
411 + 376600 = 377011
|
300 + 256800 = 257100
|
||||||
external:
|
external:
|
||||||
a(): 433
|
a(): 428
|
||||||
b(uint256): 857
|
b(uint256): 852
|
||||||
f1(uint256): 40692
|
f1(uint256): 40675
|
||||||
f2(uint256): 20722
|
f2(uint256): 20705
|
||||||
f3(uint256): 20766
|
f3(uint256): 20749
|
||||||
g0(uint256): 324
|
g0(uint256): 319
|
||||||
g7(uint256): 20721
|
g7(uint256): 20704
|
||||||
g8(uint256): 20699
|
g8(uint256): 20682
|
||||||
g9(uint256): 20655
|
g9(uint256): 20638
|
||||||
|
|
||||||
======= gas_test_dispatch/input.sol:Small =======
|
======= gas_test_dispatch/input.sol:Small =======
|
||||||
Gas estimation:
|
Gas estimation:
|
||||||
construction:
|
construction:
|
||||||
153 + 107800 = 107953
|
129 + 83000 = 83129
|
||||||
external:
|
external:
|
||||||
fallback: 123
|
fallback: 118
|
||||||
a(): 388
|
a(): 383
|
||||||
b(uint256): 813
|
b(uint256): 808
|
||||||
f1(uint256): 40692
|
f1(uint256): 40675
|
||||||
|
@ -2,52 +2,52 @@
|
|||||||
======= gas_test_dispatch_optimize/input.sol:Large =======
|
======= gas_test_dispatch_optimize/input.sol:Large =======
|
||||||
Gas estimation:
|
Gas estimation:
|
||||||
construction:
|
construction:
|
||||||
300 + 262000 = 262300
|
300 + 259200 = 259500
|
||||||
external:
|
external:
|
||||||
a(): 463
|
a(): 398
|
||||||
b(uint256): 1173
|
b(uint256): 1108
|
||||||
f0(uint256): 399
|
f0(uint256): 334
|
||||||
f1(uint256): 41164
|
f1(uint256): 40898
|
||||||
f2(uint256): 21224
|
f2(uint256): 20958
|
||||||
f3(uint256): 21312
|
f3(uint256): 21046
|
||||||
f4(uint256): 21290
|
f4(uint256): 21024
|
||||||
f5(uint256): 21268
|
f5(uint256): 21002
|
||||||
f6(uint256): 21180
|
f6(uint256): 20914
|
||||||
f7(uint256): 20960
|
f7(uint256): 20694
|
||||||
f8(uint256): 21092
|
f8(uint256): 20826
|
||||||
f9(uint256): 21114
|
f9(uint256): 20848
|
||||||
g0(uint256): 639
|
g0(uint256): 574
|
||||||
g1(uint256): 40876
|
g1(uint256): 40610
|
||||||
g2(uint256): 20958
|
g2(uint256): 20692
|
||||||
g3(uint256): 21046
|
g3(uint256): 20780
|
||||||
g4(uint256): 21024
|
g4(uint256): 20758
|
||||||
g5(uint256): 21112
|
g5(uint256): 20846
|
||||||
g6(uint256): 20892
|
g6(uint256): 20626
|
||||||
g7(uint256): 21002
|
g7(uint256): 20736
|
||||||
g8(uint256): 20980
|
g8(uint256): 20714
|
||||||
g9(uint256): 20826
|
g9(uint256): 20560
|
||||||
|
|
||||||
======= gas_test_dispatch_optimize/input.sol:Medium =======
|
======= gas_test_dispatch_optimize/input.sol:Medium =======
|
||||||
Gas estimation:
|
Gas estimation:
|
||||||
construction:
|
construction:
|
||||||
190 + 143000 = 143190
|
183 + 140200 = 140383
|
||||||
external:
|
external:
|
||||||
a(): 463
|
a(): 398
|
||||||
b(uint256): 931
|
b(uint256): 866
|
||||||
f1(uint256): 40944
|
f1(uint256): 40678
|
||||||
f2(uint256): 20982
|
f2(uint256): 20716
|
||||||
f3(uint256): 21026
|
f3(uint256): 20760
|
||||||
g0(uint256): 397
|
g0(uint256): 332
|
||||||
g7(uint256): 20892
|
g7(uint256): 20626
|
||||||
g8(uint256): 20870
|
g8(uint256): 20604
|
||||||
g9(uint256): 20826
|
g9(uint256): 20560
|
||||||
|
|
||||||
======= gas_test_dispatch_optimize/input.sol:Small =======
|
======= gas_test_dispatch_optimize/input.sol:Small =======
|
||||||
Gas estimation:
|
Gas estimation:
|
||||||
construction:
|
construction:
|
||||||
117 + 67400 = 67517
|
117 + 64600 = 64717
|
||||||
external:
|
external:
|
||||||
fallback: 183
|
fallback: 118
|
||||||
a(): 441
|
a(): 376
|
||||||
b(uint256): 821
|
b(uint256): 756
|
||||||
f1(uint256): 40878
|
f1(uint256): 40612
|
||||||
|
@ -1 +1 @@
|
|||||||
{"contracts":{"A":{"C":{"evm":{"gasEstimates":{"creation":{"codeDepositCost":"25600","executionCost":"75","totalCost":"25675"},"external":{"f()":"127"}}}}}},"sources":{"A":{"id":0}}}
|
{"contracts":{"A":{"C":{"evm":{"gasEstimates":{"creation":{"codeDepositCost":"19800","executionCost":"75","totalCost":"19875"},"external":{"f()":"122"}}}}}},"sources":{"A":{"id":0}}}
|
||||||
|
@ -105,4 +105,6 @@ test_truffle Zeppelin https://github.com/OpenZeppelin/openzeppelin-solidity.git
|
|||||||
# Disabled temporarily as it needs to be updated to latest Truffle first.
|
# Disabled temporarily as it needs to be updated to latest Truffle first.
|
||||||
#test_truffle Gnosis https://github.com/axic/pm-contracts.git solidity-050
|
#test_truffle Gnosis https://github.com/axic/pm-contracts.git solidity-050
|
||||||
|
|
||||||
test_truffle GnosisSafe https://github.com/gnosis/safe-contracts.git development
|
# Disabled temporarily because it is incompatible with petersburg EVM and
|
||||||
|
# there is no easy way to set the EVM version in truffle pre 5.0.
|
||||||
|
#test_truffle GnosisSafe https://github.com/gnosis/safe-contracts.git development
|
||||||
|
@ -855,7 +855,7 @@ BOOST_AUTO_TEST_CASE(evm_version)
|
|||||||
BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].asString().find("\"evmVersion\":\"petersburg\"") != string::npos);
|
BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].asString().find("\"evmVersion\":\"petersburg\"") != string::npos);
|
||||||
// test default
|
// test default
|
||||||
result = compile(inputForVersion(""));
|
result = compile(inputForVersion(""));
|
||||||
BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].asString().find("\"evmVersion\":\"byzantium\"") != string::npos);
|
BOOST_CHECK(result["contracts"]["fileA"]["A"]["metadata"].asString().find("\"evmVersion\":\"petersburg\"") != string::npos);
|
||||||
// test invalid
|
// test invalid
|
||||||
result = compile(inputForVersion("\"evmVersion\": \"invalid\","));
|
result = compile(inputForVersion("\"evmVersion\": \"invalid\","));
|
||||||
BOOST_CHECK(result["errors"][0]["message"].asString() == "Invalid EVM version requested.");
|
BOOST_CHECK(result["errors"][0]["message"].asString() == "Invalid EVM version requested.");
|
||||||
|
@ -206,7 +206,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
ErrorList m_errors;
|
ErrorList m_errors;
|
||||||
shared_ptr<yul::Block> m_ast;
|
shared_ptr<yul::Block> m_ast;
|
||||||
shared_ptr<Dialect> m_dialect{EVMDialect::strictAssemblyForEVMObjects(EVMVersion::petersburg())};
|
shared_ptr<Dialect> m_dialect{EVMDialect::strictAssemblyForEVMObjects(EVMVersion{})};
|
||||||
shared_ptr<AsmAnalysisInfo> m_analysisInfo;
|
shared_ptr<AsmAnalysisInfo> m_analysisInfo;
|
||||||
shared_ptr<NameDispenser> m_nameDispenser;
|
shared_ptr<NameDispenser> m_nameDispenser;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user