mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
test: Properly clear storage dirty flag
Clear storage dirty flag between transactions in EVMHost. The EIP-2200 dirty flag should be persisted only in a single transaction.
This commit is contained in:
parent
d472c94ff6
commit
c4b6f5f00b
@ -174,10 +174,13 @@ void EVMHost::newTransactionFrame()
|
||||
{
|
||||
// Clear EIP-2929 account access indicator
|
||||
recorded_account_accesses.clear();
|
||||
// Clear EIP-2929 storage access indicator
|
||||
|
||||
for (auto& [address, account]: accounts)
|
||||
for (auto& [slot, value]: account.storage)
|
||||
value.access_status = EVMC_ACCESS_COLD;
|
||||
{
|
||||
value.access_status = EVMC_ACCESS_COLD; // Clear EIP-2929 storage access indicator
|
||||
value.dirty = false; // Clear EIP-2200 dirty slot flag
|
||||
}
|
||||
// Process selfdestruct list
|
||||
for (auto& [address, _]: recorded_selfdestructs)
|
||||
accounts.erase(address);
|
||||
|
@ -39,4 +39,4 @@ contract C is B {
|
||||
// ----
|
||||
// test() -> 5, 10
|
||||
// gas irOptimized: 87337
|
||||
// gas legacy: 98881
|
||||
// gas legacy: 104481
|
||||
|
@ -46,8 +46,8 @@ contract c {
|
||||
// storageEmpty -> 0
|
||||
// test_long() -> 67
|
||||
// gas irOptimized: 89148
|
||||
// gas legacy: 103039
|
||||
// gas legacyOptimized: 100493
|
||||
// gas legacy: 105839
|
||||
// gas legacyOptimized: 103293
|
||||
// storageEmpty -> 0
|
||||
// test_pop() -> 1780731860627700044960722568376592200742329637303199754547598369979433020
|
||||
// gas legacy: 61930
|
||||
|
@ -40,7 +40,7 @@ contract c {
|
||||
// gas legacyOptimized: 4548309
|
||||
// storageEmpty -> 1
|
||||
// clear() -> 0, 0
|
||||
// gas irOptimized: 4477223
|
||||
// gas legacy: 4410748
|
||||
// gas legacyOptimized: 4382489
|
||||
// gas irOptimized: 4517023
|
||||
// gas legacy: 4450548
|
||||
// gas legacyOptimized: 4422289
|
||||
// storageEmpty -> 1
|
||||
|
@ -44,6 +44,6 @@ contract Test {
|
||||
// test1() -> 3
|
||||
// test2() -> 6
|
||||
// test3() -> 24
|
||||
// gas irOptimized: 133260
|
||||
// gas legacy: 134283
|
||||
// gas legacyOptimized: 133393
|
||||
// gas irOptimized: 155660
|
||||
// gas legacy: 156683
|
||||
// gas legacyOptimized: 155793
|
||||
|
@ -21,21 +21,21 @@ contract c {
|
||||
// gas legacy: 124296
|
||||
// gas legacyOptimized: 119119
|
||||
// f(uint256): 32 -> 0x20, 0x20, 1780731860627700044960722568376592200742329637303199754547598369979440671
|
||||
// gas irOptimized: 118565
|
||||
// gas legacy: 135251
|
||||
// gas legacyOptimized: 130091
|
||||
// gas irOptimized: 124165
|
||||
// gas legacy: 140851
|
||||
// gas legacyOptimized: 135691
|
||||
// f(uint256): 33 -> 0x20, 33, 1780731860627700044960722568376592200742329637303199754547598369979440671, 0x2000000000000000000000000000000000000000000000000000000000000000
|
||||
// gas irOptimized: 125184
|
||||
// gas legacy: 142835
|
||||
// gas legacyOptimized: 137008
|
||||
// gas irOptimized: 130784
|
||||
// gas legacy: 148435
|
||||
// gas legacyOptimized: 142608
|
||||
// f(uint256): 63 -> 0x20, 0x3f, 1780731860627700044960722568376592200742329637303199754547598369979440671, 14532552714582660066924456880521368950258152170031413196862950297402215316992
|
||||
// gas irOptimized: 128584
|
||||
// gas legacy: 160875
|
||||
// gas legacyOptimized: 150938
|
||||
// gas irOptimized: 139784
|
||||
// gas legacy: 172075
|
||||
// gas legacyOptimized: 162138
|
||||
// f(uint256): 12 -> 0x20, 0x0c, 0x0102030405060708090a0b0000000000000000000000000000000000000000
|
||||
// gas legacy: 59345
|
||||
// gas legacyOptimized: 57279
|
||||
// f(uint256): 129 -> 0x20, 0x81, 1780731860627700044960722568376592200742329637303199754547598369979440671, 0x202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f, 29063324697304692433803953038474361308315562010425523193971352996434451193439, 0x606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f, -57896044618658097711785492504343953926634992332820282019728792003956564819968
|
||||
// gas irOptimized: 357699
|
||||
// gas legacy: 421674
|
||||
// gas legacyOptimized: 402977
|
||||
// gas irOptimized: 442899
|
||||
// gas legacy: 506874
|
||||
// gas legacyOptimized: 488177
|
||||
|
@ -39,8 +39,8 @@ contract C {
|
||||
// gas legacy: 181047
|
||||
// gas legacyOptimized: 180029
|
||||
// g() -> 0x40, 0xc0, 0x49, 0x3132333435363738393031323334353637383930313233343536373839303120, 0x3132333435363738393031323334353637383930313233343536373839303120, 0x3132333435363738390000000000000000000000000000000000000000000000, 0x11, 0x3132333435363738393233343536373839000000000000000000000000000000
|
||||
// gas irOptimized: 107097
|
||||
// gas legacy: 110201
|
||||
// gas legacyOptimized: 107353
|
||||
// gas irOptimized: 121097
|
||||
// gas legacy: 124201
|
||||
// gas legacyOptimized: 121353
|
||||
// h() -> 0x40, 0x60, 0x00, 0x00
|
||||
// storageEmpty -> 1
|
||||
|
@ -51,6 +51,6 @@ contract C {
|
||||
// gas legacyOptimized: 117021
|
||||
// test2() -> 0x20, 0x14, "[b called][a called]"
|
||||
// test3() -> 0x20, 0x14, "[b called][a called]"
|
||||
// gas irOptimized: 103256
|
||||
// gas legacy: 102814
|
||||
// gas legacyOptimized: 101706
|
||||
// gas irOptimized: 106056
|
||||
// gas legacy: 105614
|
||||
// gas legacyOptimized: 104506
|
||||
|
@ -19,6 +19,9 @@ contract c {
|
||||
// gas legacyOptimized: 517027
|
||||
// storageEmpty -> 0
|
||||
// halfClear() ->
|
||||
// gas irOptimized: 113961
|
||||
// gas legacy: 113257
|
||||
// gas legacyOptimized: 113120
|
||||
// storageEmpty -> 0
|
||||
// fullClear() ->
|
||||
// storageEmpty -> 1
|
||||
|
@ -17,4 +17,7 @@ contract c {
|
||||
// gas legacyOptimized: 467500
|
||||
// storageEmpty -> 0
|
||||
// clear() ->
|
||||
// gas irOptimized: 122148
|
||||
// gas legacy: 122440
|
||||
// gas legacyOptimized: 122259
|
||||
// storageEmpty -> 1
|
||||
|
@ -40,6 +40,9 @@ contract C {
|
||||
// copyFromStorageShort()
|
||||
// x() -> 0x20, 3, 0x6162630000000000000000000000000000000000000000000000000000000000
|
||||
// copyFromStorageLong()
|
||||
// gas irOptimized: 121130
|
||||
// gas legacy: 121930
|
||||
// gas legacyOptimized: 121408
|
||||
// x() -> 0x20, 0x25, 0x3132333435363738393031323334353637383930313233343536373839303132, 0x3334353637000000000000000000000000000000000000000000000000000000
|
||||
// copyToStorage()
|
||||
// x() -> 0x20, 0x25, 0x3132333435363738393031323334353637383930313233343536373839303132, 0x3334353637000000000000000000000000000000000000000000000000000000
|
||||
|
@ -23,7 +23,7 @@ contract c {
|
||||
}
|
||||
// ----
|
||||
// test() -> 1, 2, 3
|
||||
// gas irOptimized: 2280147
|
||||
// gas legacy: 2273434
|
||||
// gas legacyOptimized: 2261844
|
||||
// gas irOptimized: 2285747
|
||||
// gas legacy: 2279034
|
||||
// gas legacyOptimized: 2267444
|
||||
// storageEmpty -> 1
|
||||
|
@ -34,8 +34,8 @@ contract C {
|
||||
// ll(uint256): 0 -> 43
|
||||
// a(uint256,uint256): 0, 42 -> 64
|
||||
// f(uint256,uint256): 84, 128 ->
|
||||
// gas irOptimized: 116264
|
||||
// gas legacy: 107525
|
||||
// gas irOptimized: 119064
|
||||
// gas legacy: 110325
|
||||
// gas legacyOptimized: 96331
|
||||
// l() -> 2
|
||||
// ll(uint256): 1 -> 85
|
||||
|
@ -22,6 +22,9 @@ contract Test {
|
||||
// set(bytes): 0x20, 0
|
||||
// storageEmpty -> 1
|
||||
// set(bytes): 0x20, 66, "12345678901234567890123456789012", "12345678901234567890123456789012", "12"
|
||||
// gas irOptimized: 111897
|
||||
// gas legacy: 112756
|
||||
// gas legacyOptimized: 112116
|
||||
// storageEmpty -> 0
|
||||
// set(bytes): 0x20, 3, "abc"
|
||||
// storageEmpty -> 0
|
||||
|
@ -87,9 +87,9 @@ contract Test {
|
||||
// EVMVersion: >homestead
|
||||
// ----
|
||||
// test1() -> true
|
||||
// gas irOptimized: 150163
|
||||
// gas legacy: 150266
|
||||
// gas legacyOptimized: 149875
|
||||
// gas irOptimized: 152963
|
||||
// gas legacy: 153066
|
||||
// gas legacyOptimized: 152675
|
||||
// test2() -> true
|
||||
// test3() -> true
|
||||
// test4() -> true
|
||||
|
@ -31,6 +31,9 @@ contract c {
|
||||
// copy() -> true
|
||||
// storageEmpty -> 1
|
||||
// set(uint256,bytes,uint256): 12, 0x60, 13, 33, "12345678901234567890123456789012", "3" -> true
|
||||
// gas irOptimized: 133599
|
||||
// gas legacy: 134654
|
||||
// gas legacyOptimized: 133882
|
||||
// storageEmpty -> 0
|
||||
// del() -> true
|
||||
// storageEmpty -> 1
|
||||
|
@ -46,3 +46,6 @@ contract C {
|
||||
// gas legacy: 122132
|
||||
// gas legacyOptimized: 121500
|
||||
// g() ->
|
||||
// gas irOptimized: 145472
|
||||
// gas legacy: 145707
|
||||
// gas legacyOptimized: 144940
|
||||
|
@ -53,9 +53,9 @@ contract C {
|
||||
// gas legacy: 126150
|
||||
// gas legacyOptimized: 123163
|
||||
// test_g() -> true
|
||||
// gas irOptimized: 95980
|
||||
// gas legacy: 101281
|
||||
// gas legacyOptimized: 96566
|
||||
// gas irOptimized: 106138
|
||||
// gas legacy: 112481
|
||||
// gas legacyOptimized: 107706
|
||||
// addresses(uint256): 0 -> 0x18
|
||||
// addresses(uint256): 1 -> 0x19
|
||||
// addresses(uint256): 3 -> 0x1b
|
||||
|
@ -34,6 +34,6 @@ contract C {
|
||||
|
||||
// ----
|
||||
// f(bytes): 0x20, 0x5, "abcde" -> 0
|
||||
// gas irOptimized: 239090
|
||||
// gas legacy: 240541
|
||||
// gas legacyOptimized: 239654
|
||||
// gas irOptimized: 241890
|
||||
// gas legacy: 243341
|
||||
// gas legacyOptimized: 242454
|
||||
|
@ -16,33 +16,38 @@ contract C {
|
||||
// ----
|
||||
// test_indices(uint256): 1 ->
|
||||
// test_indices(uint256): 129 ->
|
||||
// gas irOptimized: 3018684
|
||||
// gas legacy: 3068883
|
||||
// gas legacyOptimized: 3011615
|
||||
// gas irOptimized: 3021484
|
||||
// gas legacy: 3071683
|
||||
// gas legacyOptimized: 3014415
|
||||
// test_indices(uint256): 5 ->
|
||||
// gas irOptimized: 372540
|
||||
// gas legacy: 369151
|
||||
// gas legacyOptimized: 366139
|
||||
// gas irOptimized: 722540
|
||||
// gas legacy: 719151
|
||||
// gas legacyOptimized: 716139
|
||||
// test_indices(uint256): 10 ->
|
||||
// gas irOptimized: 158407
|
||||
// gas legacy: 162657
|
||||
// gas legacyOptimized: 158422
|
||||
// test_indices(uint256): 15 ->
|
||||
// gas irOptimized: 72860
|
||||
// gas irOptimized: 173467
|
||||
// gas legacy: 179782
|
||||
// gas legacyOptimized: 173727
|
||||
// test_indices(uint256): 0xFF ->
|
||||
// gas irOptimized: 3410252
|
||||
// gas legacy: 3509577
|
||||
// gas legacyOptimized: 3397597
|
||||
// gas irOptimized: 5681652
|
||||
// gas legacy: 5780977
|
||||
// gas legacyOptimized: 5668997
|
||||
// test_indices(uint256): 1000 ->
|
||||
// gas irOptimized: 18206119
|
||||
// gas legacy: 18599999
|
||||
// gas legacyOptimized: 18176944
|
||||
// gas irOptimized: 18208919
|
||||
// gas legacy: 18602799
|
||||
// gas legacyOptimized: 18179744
|
||||
// test_indices(uint256): 129 ->
|
||||
// gas irOptimized: 2756952
|
||||
// gas legacy: 2770413
|
||||
// gas legacyOptimized: 2716289
|
||||
// gas irOptimized: 5198552
|
||||
// gas legacy: 5212013
|
||||
// gas legacyOptimized: 5157889
|
||||
// test_indices(uint256): 128 ->
|
||||
// gas irOptimized: 411900
|
||||
// gas legacy: 464968
|
||||
// gas legacyOptimized: 418168
|
||||
// gas irOptimized: 417500
|
||||
// gas legacy: 470568
|
||||
// gas legacyOptimized: 423768
|
||||
// test_indices(uint256): 1 ->
|
||||
// gas irOptimized: 368568
|
||||
// gas legacy: 363389
|
||||
// gas legacyOptimized: 361809
|
||||
// gas irOptimized: 726968
|
||||
// gas legacy: 721789
|
||||
// gas legacyOptimized: 720209
|
||||
|
@ -16,12 +16,12 @@ contract C {
|
||||
// test_boundary_check(uint256,uint256): 1, 1 -> FAILURE, hex"4e487b71", 0x32
|
||||
// test_boundary_check(uint256,uint256): 10, 10 -> FAILURE, hex"4e487b71", 0x32
|
||||
// test_boundary_check(uint256,uint256): 256, 256 -> FAILURE, hex"4e487b71", 0x32
|
||||
// gas irOptimized: 137831
|
||||
// gas legacy: 131830
|
||||
// gas legacyOptimized: 112054
|
||||
// gas irOptimized: 140631
|
||||
// gas legacy: 134630
|
||||
// gas legacyOptimized: 114854
|
||||
// test_boundary_check(uint256,uint256): 256, 255 -> 0
|
||||
// gas irOptimized: 139963
|
||||
// gas legacy: 134149
|
||||
// gas legacyOptimized: 114233
|
||||
// gas irOptimized: 142763
|
||||
// gas legacy: 136949
|
||||
// gas legacyOptimized: 117033
|
||||
// test_boundary_check(uint256,uint256): 256, 0xFFFF -> FAILURE, hex"4e487b71", 0x32
|
||||
// test_boundary_check(uint256,uint256): 256, 2 -> 0
|
||||
|
@ -52,18 +52,18 @@ contract C {
|
||||
// ----
|
||||
// test_zeroed_indicies(uint256): 1 ->
|
||||
// test_zeroed_indicies(uint256): 5 ->
|
||||
// gas irOptimized: 131174
|
||||
// gas legacy: 132301
|
||||
// gas legacyOptimized: 129539
|
||||
// gas irOptimized: 153874
|
||||
// gas legacy: 155001
|
||||
// gas legacyOptimized: 152239
|
||||
// test_zeroed_indicies(uint256): 10 ->
|
||||
// gas irOptimized: 174777
|
||||
// gas legacy: 177188
|
||||
// gas legacyOptimized: 172112
|
||||
// gas irOptimized: 277077
|
||||
// gas legacy: 279488
|
||||
// gas legacyOptimized: 274412
|
||||
// test_zeroed_indicies(uint256): 15 ->
|
||||
// gas irOptimized: 198022
|
||||
// gas legacy: 201738
|
||||
// gas legacyOptimized: 194427
|
||||
// gas irOptimized: 399822
|
||||
// gas legacy: 403538
|
||||
// gas legacyOptimized: 396227
|
||||
// test_zeroed_indicies(uint256): 0xFF ->
|
||||
// gas irOptimized: 6097912
|
||||
// gas legacy: 6159333
|
||||
// gas legacyOptimized: 6026177
|
||||
// gas irOptimized: 6399212
|
||||
// gas legacy: 6460633
|
||||
// gas legacyOptimized: 6327477
|
||||
|
@ -13,10 +13,10 @@ contract C {
|
||||
// set_get_length(uint256): 20 -> 20
|
||||
// set_get_length(uint256): 0xFF -> 0xFF
|
||||
// gas irOptimized: 96690
|
||||
// gas legacy: 126722
|
||||
// gas legacyOptimized: 107818
|
||||
// gas legacy: 129522
|
||||
// gas legacyOptimized: 110618
|
||||
// set_get_length(uint256): 0xFFF -> 0xFFF
|
||||
// gas irOptimized: 1217848
|
||||
// gas legacy: 1702119
|
||||
// gas legacyOptimized: 1398420
|
||||
// gas irOptimized: 1220648
|
||||
// gas legacy: 1704919
|
||||
// gas legacyOptimized: 1401220
|
||||
// set_get_length(uint256): 0xFFFFF -> FAILURE # Out-of-gas #
|
||||
|
@ -16,9 +16,9 @@ contract C {
|
||||
// gas legacy: 416903
|
||||
// gas legacyOptimized: 398280
|
||||
// pushEmpty(uint256): 256
|
||||
// gas irOptimized: 691026
|
||||
// gas legacy: 714315
|
||||
// gas legacyOptimized: 687372
|
||||
// gas irOptimized: 693826
|
||||
// gas legacy: 717115
|
||||
// gas legacyOptimized: 690172
|
||||
// pushEmpty(uint256): 38869 -> FAILURE # out-of-gas #
|
||||
// gas irOptimized: 100000000
|
||||
// gas legacy: 100000000
|
||||
|
@ -21,13 +21,13 @@ contract C {
|
||||
// gas legacy: 77730
|
||||
// gas legacyOptimized: 77162
|
||||
// set_get_length(uint256): 0xFF -> 0xFF
|
||||
// gas irOptimized: 141796
|
||||
// gas legacy: 678237
|
||||
// gas legacyOptimized: 115104
|
||||
// gas irOptimized: 161696
|
||||
// gas legacy: 698137
|
||||
// gas legacyOptimized: 135004
|
||||
// set_get_length(uint256): 0xFFF -> 0xFFF
|
||||
// gas irOptimized: 1801663
|
||||
// gas legacy: 9873774
|
||||
// gas legacyOptimized: 1398546
|
||||
// gas irOptimized: 1804463
|
||||
// gas legacy: 9876574
|
||||
// gas legacyOptimized: 1401346
|
||||
// set_get_length(uint256): 0xFFFFF -> FAILURE # Out-of-gas #
|
||||
// gas irOptimized: 100000000
|
||||
// gas legacyOptimized: 100000000
|
||||
|
@ -13,15 +13,15 @@ contract C {
|
||||
// set_get_length(uint256): 1 -> 0
|
||||
// set_get_length(uint256): 10 -> 0
|
||||
// set_get_length(uint256): 20 -> 0
|
||||
// gas irOptimized: 86331
|
||||
// gas legacy: 85822
|
||||
// gas legacyOptimized: 83608
|
||||
// gas irOptimized: 106222
|
||||
// gas legacy: 105722
|
||||
// gas legacyOptimized: 103508
|
||||
// set_get_length(uint256): 0xFF -> 0
|
||||
// gas irOptimized: 821872
|
||||
// gas legacy: 810327
|
||||
// gas legacyOptimized: 786258
|
||||
// gas irOptimized: 841772
|
||||
// gas legacy: 830227
|
||||
// gas legacyOptimized: 806158
|
||||
// set_get_length(uint256): 0xFFF -> 0
|
||||
// gas irOptimized: 12841084
|
||||
// gas legacy: 12649059
|
||||
// gas legacyOptimized: 12267870
|
||||
// gas irOptimized: 12860984
|
||||
// gas legacy: 12668959
|
||||
// gas legacyOptimized: 12287770
|
||||
// set_get_length(uint256): 0xFFFF -> FAILURE # Out-of-gas #
|
||||
|
Loading…
Reference in New Issue
Block a user