mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Added nullptr check for emulation_result (#1037)
* Added nullptr check for emulation_result * Typo * added cast to EmulationExternalNotAccepted and diagnostic message * formatting * formatting * removed unnecessary nesting --------- Co-authored-by: dbaranov34 <baranov34@gmail.com>
This commit is contained in:
parent
11f39acef5
commit
38fc1d5456
1 changed files with 20 additions and 9 deletions
|
@ -130,17 +130,28 @@ td::Result<TransactionEmulator::EmulationSuccess> TransactionEmulator::emulate_t
|
|||
}
|
||||
|
||||
TRY_RESULT(emulation, emulate_transaction(std::move(account), msg_root, utime, lt, trans_type));
|
||||
|
||||
if (auto emulation_result_ptr = dynamic_cast<EmulationSuccess*>(emulation.get())) {
|
||||
auto& emulation_result = *emulation_result_ptr;
|
||||
|
||||
if (td::Bits256(emulation_result.transaction->get_hash().bits()) != td::Bits256(original_trans->get_hash().bits())) {
|
||||
return td::Status::Error("transaction hash mismatch");
|
||||
}
|
||||
|
||||
auto emulation_result = dynamic_cast<EmulationSuccess&>(*emulation);
|
||||
if (td::Bits256(emulation_result.transaction->get_hash().bits()) != td::Bits256(original_trans->get_hash().bits())) {
|
||||
return td::Status::Error("transaction hash mismatch");
|
||||
if (!check_state_update(emulation_result.account, record_trans)) {
|
||||
return td::Status::Error("account hash mismatch");
|
||||
}
|
||||
|
||||
return emulation_result;
|
||||
|
||||
} else if (auto emulation_not_accepted_ptr = dynamic_cast<EmulationExternalNotAccepted*>(emulation.get())) {
|
||||
return td::Status::Error( PSTRING()
|
||||
<< "VM Log: " << emulation_not_accepted_ptr->vm_log
|
||||
<< ", VM Exit Code: " << emulation_not_accepted_ptr->vm_exit_code
|
||||
<< ", Elapsed Time: " << emulation_not_accepted_ptr->elapsed_time);
|
||||
} else {
|
||||
return td::Status::Error("emulation failed");
|
||||
}
|
||||
|
||||
if (!check_state_update(emulation_result.account, record_trans)) {
|
||||
return td::Status::Error("account hash mismatch");
|
||||
}
|
||||
|
||||
return emulation_result;
|
||||
}
|
||||
|
||||
td::Result<TransactionEmulator::EmulationChain> TransactionEmulator::emulate_transactions_chain(block::Account&& account, std::vector<td::Ref<vm::Cell>>&& original_transactions) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue