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

@ -131,16 +131,27 @@ td::Result<TransactionEmulator::EmulationSuccess> TransactionEmulator::emulate_t
TRY_RESULT(emulation, emulate_transaction(std::move(account), msg_root, utime, lt, trans_type)); TRY_RESULT(emulation, emulate_transaction(std::move(account), msg_root, utime, lt, trans_type));
auto emulation_result = dynamic_cast<EmulationSuccess&>(*emulation); if (auto emulation_result_ptr = dynamic_cast<EmulationSuccess*>(emulation.get())) {
if (td::Bits256(emulation_result.transaction->get_hash().bits()) != td::Bits256(original_trans->get_hash().bits())) { auto& emulation_result = *emulation_result_ptr;
return td::Status::Error("transaction hash mismatch");
}
if (!check_state_update(emulation_result.account, record_trans)) { if (td::Bits256(emulation_result.transaction->get_hash().bits()) != td::Bits256(original_trans->get_hash().bits())) {
return td::Status::Error("account hash mismatch"); return td::Status::Error("transaction hash mismatch");
} }
return emulation_result; 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");
}
} }
td::Result<TransactionEmulator::EmulationChain> TransactionEmulator::emulate_transactions_chain(block::Account&& account, std::vector<td::Ref<vm::Cell>>&& original_transactions) { td::Result<TransactionEmulator::EmulationChain> TransactionEmulator::emulate_transactions_chain(block::Account&& account, std::vector<td::Ref<vm::Cell>>&& original_transactions) {