Skip to content

Commit

Permalink
Added nullptr check for emulation_result (#1037)
Browse files Browse the repository at this point in the history
* Added nullptr check for emulation_result

* Typo

* added cast to EmulationExternalNotAccepted and diagnostic message

* formatting

* formatting

* removed unnecessary nesting

---------

Co-authored-by: dbaranov34 <[email protected]>
  • Loading branch information
dbaranovstonfi and dbaranov34 authored Jun 27, 2024
1 parent 11f39ac commit 38fc1d5
Showing 1 changed file with 19 additions and 8 deletions.
27 changes: 19 additions & 8 deletions emulator/transaction-emulator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}

if (!check_state_update(emulation_result.account, record_trans)) {
return td::Status::Error("account hash mismatch");
}
return emulation_result;

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");
}
}

td::Result<TransactionEmulator::EmulationChain> TransactionEmulator::emulate_transactions_chain(block::Account&& account, std::vector<td::Ref<vm::Cell>>&& original_transactions) {
Expand Down

0 comments on commit 38fc1d5

Please sign in to comment.