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:
parent
1ee3e5d6a7
commit
d8e29f8b67
13 changed files with 6066 additions and 6 deletions
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue