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

updated tonlib, fixed bugs

updated tonlib
fixed bugs in func
validator: partial support for hardforks
liteserver: support for waitMasterchainBlock prefix
transactions: support for gas flat rate
This commit is contained in:
ton 2019-10-03 17:04:52 +04:00
parent 841d5ebac2
commit 7ea00ebfcf
89 changed files with 1922 additions and 608 deletions

View file

@ -56,6 +56,20 @@ void WaitBlockData::start_up() {
alarm_timestamp() = timeout_;
CHECK(handle_);
if (!handle_->id().is_masterchain()) {
start();
} else {
auto P = td::PromiseCreator::lambda([SelfId = actor_id(this)](td::Result<bool> R) {
R.ensure();
auto value = R.move_as_ok();
td::actor::send_closure(SelfId, &WaitBlockData::set_is_hardfork, value);
});
td::actor::send_closure(manager_, &ValidatorManager::check_is_hardfork, handle_->id(), std::move(P));
}
}
void WaitBlockData::set_is_hardfork(bool value) {
is_hardfork_ = value;
start();
}
@ -76,6 +90,18 @@ void WaitBlockData::start() {
});
td::actor::send_closure(manager_, &ValidatorManager::get_block_data_from_db, handle_, std::move(P));
} else if (try_read_static_file_.is_in_past() && (is_hardfork_ || !handle_->id().is_masterchain())) {
try_read_static_file_ = td::Timestamp::in(30.0);
auto P = td::PromiseCreator::lambda([SelfId = actor_id(this)](td::Result<td::BufferSlice> R) {
if (R.is_error()) {
td::actor::send_closure(SelfId, &WaitBlockData::start);
} else {
td::actor::send_closure(SelfId, &WaitBlockData::got_static_file, R.move_as_ok());
}
});
td::actor::send_closure(manager_, &ValidatorManager::try_get_static_file, handle_->id().file_hash, std::move(P));
} else {
auto P = td::PromiseCreator::lambda([SelfId = actor_id(this)](td::Result<ReceivedBlock> R) {
if (R.is_error()) {
@ -149,6 +175,29 @@ void WaitBlockData::force_read_from_db() {
td::actor::send_closure(manager_, &ValidatorManager::get_block_data_from_db, handle_, std::move(P));
}
void WaitBlockData::got_static_file(td::BufferSlice data) {
CHECK(td::sha256_bits256(data.as_slice()) == handle_->id().file_hash);
auto R = create_block(handle_->id(), std::move(data));
if (R.is_error()) {
LOG(ERROR) << "bad static file block: " << R.move_as_error();
start();
return;
}
data_ = R.move_as_ok();
CHECK(is_hardfork_ || !handle_->id().is_masterchain());
auto P = td::PromiseCreator::lambda([SelfId = actor_id(this)](td::Result<td::Unit> R) {
if (R.is_error()) {
td::actor::send_closure(SelfId, &WaitBlockData::abort_query, R.move_as_error_prefix("bad static file block: "));
} else {
td::actor::send_closure(SelfId, &WaitBlockData::finish_query);
}
});
run_hardfork_accept_block_query(handle_->id(), data_, manager_, std::move(P));
}
} // namespace validator
} // namespace ton