mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Separate limits for collated data
This commit is contained in:
parent
3190c67f18
commit
103eb9aad5
5 changed files with 20 additions and 11 deletions
0
.github/workflows/macos-11.7-compile.yml
vendored
0
.github/workflows/macos-11.7-compile.yml
vendored
|
@ -678,10 +678,19 @@ bool BlockLimits::deserialize(vm::CellSlice& cs) {
|
||||||
}
|
}
|
||||||
// block_limits#5d
|
// block_limits#5d
|
||||||
// block_limits_v2#5e
|
// block_limits_v2#5e
|
||||||
return bytes.deserialize(cs) // bytes:ParamLimits
|
bool ok = bytes.deserialize(cs) // bytes:ParamLimits
|
||||||
&& gas.deserialize(cs) // gas:ParamLimits
|
&& gas.deserialize(cs) // gas:ParamLimits
|
||||||
&& lt_delta.deserialize(cs) // lt_delta:ParamLimits
|
&& lt_delta.deserialize(cs); // lt_delta:ParamLimits
|
||||||
&& (tag == 0x5d || imported_msg_queue.deserialize(cs)); // imported_msg_queue:ImportedMsgQueueLimits
|
if (!ok) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (tag == 0x5d) {
|
||||||
|
return collated_data.deserialize(cs) && // collated_data:ParamLimits
|
||||||
|
imported_msg_queue.deserialize(cs); // imported_msg_queue:ImportedMsgQueueLimits
|
||||||
|
} else {
|
||||||
|
collated_data = bytes;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int ParamLimits::classify(td::uint64 value) const {
|
int ParamLimits::classify(td::uint64 value) const {
|
||||||
|
@ -714,7 +723,7 @@ int BlockLimits::classify_lt(ton::LogicalTime lt) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
int BlockLimits::classify_collated_data_size(td::uint64 size) const {
|
int BlockLimits::classify_collated_data_size(td::uint64 size) const {
|
||||||
return bytes.classify(size); // TODO: Maybe separate limits in config
|
return collated_data.classify(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
int BlockLimits::classify(td::uint64 size, td::uint64 gas, ton::LogicalTime lt, td::uint64 collated_size) const {
|
int BlockLimits::classify(td::uint64 size, td::uint64 gas, ton::LogicalTime lt, td::uint64 collated_size) const {
|
||||||
|
@ -725,7 +734,7 @@ int BlockLimits::classify(td::uint64 size, td::uint64 gas, ton::LogicalTime lt,
|
||||||
bool BlockLimits::fits(unsigned cls, td::uint64 size, td::uint64 gas_value, ton::LogicalTime lt,
|
bool BlockLimits::fits(unsigned cls, td::uint64 size, td::uint64 gas_value, ton::LogicalTime lt,
|
||||||
td::uint64 collated_size) const {
|
td::uint64 collated_size) const {
|
||||||
return bytes.fits(cls, size) && gas.fits(cls, gas_value) && lt_delta.fits(cls, lt - start_lt) &&
|
return bytes.fits(cls, size) && gas.fits(cls, gas_value) && lt_delta.fits(cls, lt - start_lt) &&
|
||||||
bytes.fits(cls, collated_size);
|
collated_data.fits(cls, collated_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
td::uint64 BlockLimitStatus::estimate_block_size(const vm::NewCellStorageStat::Stat* extra) const {
|
td::uint64 BlockLimitStatus::estimate_block_size(const vm::NewCellStorageStat::Stat* extra) const {
|
||||||
|
@ -745,7 +754,7 @@ bool BlockLimitStatus::fits(unsigned cls) const {
|
||||||
return cls >= ParamLimits::limits_cnt ||
|
return cls >= ParamLimits::limits_cnt ||
|
||||||
(limits.gas.fits(cls, gas_used) && limits.lt_delta.fits(cls, cur_lt - limits.start_lt) &&
|
(limits.gas.fits(cls, gas_used) && limits.lt_delta.fits(cls, cur_lt - limits.start_lt) &&
|
||||||
limits.bytes.fits(cls, estimate_block_size()) &&
|
limits.bytes.fits(cls, estimate_block_size()) &&
|
||||||
limits.bytes.fits(cls, collated_data_stat.estimate_proof_size()));
|
limits.collated_data.fits(cls, collated_data_stat.estimate_proof_size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BlockLimitStatus::would_fit(unsigned cls, ton::LogicalTime end_lt, td::uint64 more_gas,
|
bool BlockLimitStatus::would_fit(unsigned cls, ton::LogicalTime end_lt, td::uint64 more_gas,
|
||||||
|
@ -753,7 +762,7 @@ bool BlockLimitStatus::would_fit(unsigned cls, ton::LogicalTime end_lt, td::uint
|
||||||
return cls >= ParamLimits::limits_cnt || (limits.gas.fits(cls, gas_used + more_gas) &&
|
return cls >= ParamLimits::limits_cnt || (limits.gas.fits(cls, gas_used + more_gas) &&
|
||||||
limits.lt_delta.fits(cls, std::max(cur_lt, end_lt) - limits.start_lt) &&
|
limits.lt_delta.fits(cls, std::max(cur_lt, end_lt) - limits.start_lt) &&
|
||||||
limits.bytes.fits(cls, estimate_block_size(extra)) &&
|
limits.bytes.fits(cls, estimate_block_size(extra)) &&
|
||||||
limits.bytes.fits(cls, collated_data_stat.estimate_proof_size()));
|
limits.collated_data.fits(cls, collated_data_stat.estimate_proof_size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// SETS: account_dict, shard_libraries_, mc_state_extra
|
// SETS: account_dict, shard_libraries_, mc_state_extra
|
||||||
|
|
|
@ -255,7 +255,7 @@ struct ParamLimits {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct BlockLimits {
|
struct BlockLimits {
|
||||||
ParamLimits bytes, gas, lt_delta;
|
ParamLimits bytes, gas, lt_delta, collated_data;
|
||||||
ton::LogicalTime start_lt{0};
|
ton::LogicalTime start_lt{0};
|
||||||
ImportedMsgQueueLimits imported_msg_queue;
|
ImportedMsgQueueLimits imported_msg_queue;
|
||||||
const vm::CellUsageTree* usage_tree{nullptr};
|
const vm::CellUsageTree* usage_tree{nullptr};
|
||||||
|
|
|
@ -708,7 +708,7 @@ imported_msg_queue_limits#d3 max_bytes:# max_msgs:# = ImportedMsgQueueLimits;
|
||||||
block_limits#5d bytes:ParamLimits gas:ParamLimits lt_delta:ParamLimits
|
block_limits#5d bytes:ParamLimits gas:ParamLimits lt_delta:ParamLimits
|
||||||
= BlockLimits;
|
= BlockLimits;
|
||||||
block_limits_v2#5e bytes:ParamLimits gas:ParamLimits lt_delta:ParamLimits
|
block_limits_v2#5e bytes:ParamLimits gas:ParamLimits lt_delta:ParamLimits
|
||||||
imported_msg_queue:ImportedMsgQueueLimits
|
collated_data:ParamLimits imported_msg_queue:ImportedMsgQueueLimits
|
||||||
= BlockLimits;
|
= BlockLimits;
|
||||||
|
|
||||||
config_mc_block_limits#_ BlockLimits = ConfigParam 22;
|
config_mc_block_limits#_ BlockLimits = ConfigParam 22;
|
||||||
|
|
|
@ -41,7 +41,6 @@ class NewCellStorageStat {
|
||||||
Stat(td::uint64 cells_, td::uint64 bits_, td::uint64 internal_refs_ = 0, td::uint64 external_refs_ = 0)
|
Stat(td::uint64 cells_, td::uint64 bits_, td::uint64 internal_refs_ = 0, td::uint64 external_refs_ = 0)
|
||||||
: cells(cells_), bits(bits_), internal_refs(internal_refs_), external_refs(external_refs_) {
|
: cells(cells_), bits(bits_), internal_refs(internal_refs_), external_refs(external_refs_) {
|
||||||
}
|
}
|
||||||
Stat(const Stat&) = default;
|
|
||||||
td::uint64 cells{0};
|
td::uint64 cells{0};
|
||||||
td::uint64 bits{0};
|
td::uint64 bits{0};
|
||||||
td::uint64 internal_refs{0};
|
td::uint64 internal_refs{0};
|
||||||
|
@ -53,6 +52,7 @@ class NewCellStorageStat {
|
||||||
bool operator==(const Stat& other) const {
|
bool operator==(const Stat& other) const {
|
||||||
return key() == other.key();
|
return key() == other.key();
|
||||||
}
|
}
|
||||||
|
Stat(const Stat& other) = default;
|
||||||
Stat& operator=(const Stat& other) = default;
|
Stat& operator=(const Stat& other) = default;
|
||||||
Stat& operator+=(const Stat& other) {
|
Stat& operator+=(const Stat& other) {
|
||||||
cells += other.cells;
|
cells += other.cells;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue