1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-03-09 15:40:10 +00:00

TON Validation Contest: Reference solution and grader

This commit is contained in:
SpyCheese 2025-01-14 14:37:45 +03:00
parent 1ee3e5d6a7
commit d8e29f8b67
13 changed files with 6066 additions and 6 deletions

View file

@ -1957,9 +1957,10 @@ bool unpack_block_prev_blk(Ref<vm::Cell> block_root, const ton::BlockIdExt& id,
td::Status unpack_block_prev_blk_try(Ref<vm::Cell> block_root, const ton::BlockIdExt& id,
std::vector<ton::BlockIdExt>& prev, ton::BlockIdExt& mc_blkid, bool& after_split,
ton::BlockIdExt* fetch_blkid) {
ton::BlockIdExt* fetch_blkid, bool ignore_root_hash) {
try {
return unpack_block_prev_blk_ext(std::move(block_root), id, prev, mc_blkid, after_split, fetch_blkid);
return unpack_block_prev_blk_ext(std::move(block_root), id, prev, mc_blkid, after_split, fetch_blkid,
ignore_root_hash);
} catch (vm::VmError err) {
return td::Status::Error(std::string{"error while processing Merkle proof: "} + err.get_msg());
} catch (vm::VmVirtError err) {
@ -1969,7 +1970,7 @@ td::Status unpack_block_prev_blk_try(Ref<vm::Cell> block_root, const ton::BlockI
td::Status unpack_block_prev_blk_ext(Ref<vm::Cell> block_root, const ton::BlockIdExt& id,
std::vector<ton::BlockIdExt>& prev, ton::BlockIdExt& mc_blkid, bool& after_split,
ton::BlockIdExt* fetch_blkid) {
ton::BlockIdExt* fetch_blkid, bool ignore_root_hash) {
block::gen::Block::Record blk;
block::gen::BlockInfo::Record info;
block::gen::ExtBlkRef::Record mcref; // _ ExtBlkRef = BlkMasterInfo;
@ -1988,7 +1989,7 @@ td::Status unpack_block_prev_blk_ext(Ref<vm::Cell> block_root, const ton::BlockI
if (id.id != hdr_id) {
return td::Status::Error("block header contains block id "s + hdr_id.to_str() + ", expected " + id.id.to_str());
}
if (id.root_hash != block_root->get_hash().bits()) {
if (id.root_hash != block_root->get_hash().bits() && !ignore_root_hash) {
return td::Status::Error("block header has incorrect root hash "s + block_root->get_hash().bits().to_hex(256) +
" instead of expected " + id.root_hash.to_hex());
}

View file

@ -725,10 +725,10 @@ bool unpack_block_prev_blk(Ref<vm::Cell> block_root, const ton::BlockIdExt& id,
ton::BlockIdExt& mc_blkid, bool& after_split, ton::BlockIdExt* fetch_blkid = nullptr);
td::Status unpack_block_prev_blk_ext(Ref<vm::Cell> block_root, const ton::BlockIdExt& id,
std::vector<ton::BlockIdExt>& prev, ton::BlockIdExt& mc_blkid, bool& after_split,
ton::BlockIdExt* fetch_blkid = nullptr);
ton::BlockIdExt* fetch_blkid = nullptr, bool ignore_root_hash = false);
td::Status unpack_block_prev_blk_try(Ref<vm::Cell> block_root, const ton::BlockIdExt& id,
std::vector<ton::BlockIdExt>& prev, ton::BlockIdExt& mc_blkid, bool& after_split,
ton::BlockIdExt* fetch_blkid = nullptr);
ton::BlockIdExt* fetch_blkid = nullptr, bool ignore_root_hash = false);
td::Status check_block_header(Ref<vm::Cell> block_root, const ton::BlockIdExt& id,
ton::Bits256* store_shard_hash_to = nullptr);

View file

@ -473,6 +473,11 @@ block#11ef55aa global_id:int32
state_update:^(MERKLE_UPDATE ShardState)
extra:^BlockExtra = Block;
block_relaxed#11ef55aa global_id:int32
info:^BlockInfo value_flow:^ValueFlow
state_update:^Cell
extra:^BlockExtra = BlockRelaxed;
block_extra in_msg_descr:^InMsgDescr
out_msg_descr:^OutMsgDescr
account_blocks:^ShardAccountBlocks
@ -853,6 +858,7 @@ top_block_descr#d5 proof_for:BlockIdExt signatures:(Maybe ^BlockSignatures)
// COLLATED DATA
//
top_block_descr_set#4ac789f3 collection:(HashmapE 96 ^TopBlockDescr) = TopBlockDescrSet;
extra_collated_data#ea59be4c underload:Bool overload:Bool proc_info:ProcessedInfo = ExtraCollatedData;
//
// VALIDATOR MISBEHAVIOR COMPLAINTS