1
0
Fork 0
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:
dbaranovstonfi 2024-06-27 16:45:59 +04:00 committed by GitHub
parent 11f39acef5
commit 38fc1d5456
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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) {