@@ -5673,6 +5673,26 @@ td::Status TonlibClient::do_request(const tonlib_api::blocks_lookupBlock& reques
56735673td::Status check_lookup_block_proof (lite_api_ptr<ton::lite_api::liteServer_lookupBlockResult>& result, int mode, ton::BlockId blkid, ton::BlockIdExt client_mc_blkid, td::uint64 lt, td::uint32 utime) {
56745674 try {
56755675 ton::BlockIdExt cur_id = ton::create_block_id (result->mc_block_id_ );
5676+ if (!cur_id.is_masterchain_ext ()) {
5677+ return td::Status::Error (" invalid response: mc block id is not from masterchain" );
5678+ }
5679+ if (client_mc_blkid != cur_id) {
5680+ auto state = block::check_extract_state_proof (client_mc_blkid, result->client_mc_state_proof_ .as_slice (),
5681+ result->mc_block_proof_ .as_slice ());
5682+ if (state.is_error ()) {
5683+ LOG (WARNING) << " cannot check state proof: " << state.move_as_error ().to_string ();
5684+ return state.move_as_error ();
5685+ }
5686+ auto state_root = state.move_as_ok ();
5687+ auto prev_blocks_dict = block::get_prev_blocks_dict (state_root);
5688+ if (!prev_blocks_dict) {
5689+ return td::Status::Error (" cannot extract prev blocks dict from state" );
5690+ }
5691+
5692+ if (!block::check_old_mc_block_id (*prev_blocks_dict, cur_id)) {
5693+ return td::Status::Error (" couldn't check old mc block id" );
5694+ }
5695+ }
56765696 try {
56775697 for (auto & link : result->shard_links_ ) {
56785698 ton::BlockIdExt prev_id = create_block_id (link->id_ );
@@ -5686,23 +5706,6 @@ td::Status check_lookup_block_proof(lite_api_ptr<ton::lite_api::liteServer_looku
56865706 return td::Status::Error (" invalid block hash in proof" );
56875707 }
56885708 if (cur_id.is_masterchain ()) {
5689- if (client_mc_blkid != cur_id) {
5690- auto state = block::check_extract_state_proof (client_mc_blkid, result->client_mc_state_proof_ .as_slice (),
5691- result->mc_block_proof_ .as_slice ());
5692- if (state.is_error ()) {
5693- LOG (WARNING) << " cannot check state proof: " << state.move_as_error ().to_string ();
5694- return state.move_as_error ();
5695- }
5696- auto state_root = state.move_as_ok ();
5697- auto prev_blocks_dict = block::get_prev_blocks_dict (state_root);
5698- if (!prev_blocks_dict) {
5699- return td::Status::Error (" cannot extract prev blocks dict from state" );
5700- }
5701-
5702- if (!block::check_old_mc_block_id (*prev_blocks_dict, cur_id)) {
5703- return td::Status::Error (" couldn't check old mc block id" );
5704- }
5705- }
57065709 block::gen::Block::Record blk;
57075710 block::gen::BlockExtra::Record extra;
57085711 block::gen::McBlockExtra::Record mc_extra;
0 commit comments