ton-blockchain / ton

Main TON monorepo
Other
3.1k stars 984 forks source link

Emulation hash mismatch on several TXs per account in block #914

Open tvorogme opened 9 months ago

tvorogme commented 9 months ago

There's one type of errors that can be in emulator when you emulate several TXs per one block in one account:

TX Example: 52307C3D0F75FBD336814E39A3B349EFC1F15CAF03C22A6AD00DF8407531E293 Diff: {'dictionary_item_removed': [root['description']['storage_ph']['value']['storage_fees_due']['value']], 'values_changed': {"root['end_status']": {'new_value': 0, 'old_value': 3}, "root['total_fees']['grams']['amount']['len']": {'new_value': 0, 'old_value': 1}, "root['total_fees']['grams']['amount']['value']": {'new_value': 0, 'old_value': 1}, "root['state_update']['new_hash']": {'new_value': '4C552ACCDED7CB781DBA43143C216048C7087DF17948C30E5E3F2673585BC310', 'old_value': '90AEC8965AFABB16EBC3CB9B408EBAE71B618D78788BC80D09843593CAC98DA4'}, "root['description']['storage_ph']['value']['storage_fees_collected']['amount']['len']": {'new_value': 0, 'old_value': 1}, "root['description']['storage_ph']['value']['storage_fees_collected']['amount']['value']": {'new_value': 0, 'old_value': 1}}}

The main reason here is that emulator calls Account::new which rewrites last_paid which cause hash mismatch.

stenolog commented 8 months ago

@tvorogme , could you please provide a reproducer, ideally in the form of