Skip to content

Commit

Permalink
updated pow-miner + small bugfix
Browse files Browse the repository at this point in the history
  • Loading branch information
ton committed Jul 10, 2020
1 parent f064b10 commit dab7ee3
Show file tree
Hide file tree
Showing 16 changed files with 344 additions and 25 deletions.
9 changes: 7 additions & 2 deletions crypto/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -307,8 +307,13 @@ if (WINGETOPT_FOUND)
target_link_libraries_system(tlbc wingetopt)
endif()

add_executable(pow-miner util/pow-miner.cpp util/Miner.cpp util/Miner.h)
target_link_libraries(pow-miner PUBLIC ton_crypto ton_block)
add_library(pow-miner-lib util/Miner.cpp util/Miner.h)
target_include_directories(pow-miner-lib PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
target_link_libraries(pow-miner-lib PUBLIC ton_crypto ton_block)

add_executable(pow-miner util/pow-miner.cpp)
target_link_libraries(pow-miner PRIVATE ton_crypto ton_block pow-miner-lib)

if (WINGETOPT_FOUND)
target_link_libraries_system(fift wingetopt)
endif()
Expand Down
4 changes: 4 additions & 0 deletions crypto/smc-envelope/GenericAccount.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,10 @@ td::Ref<vm::Cell> GenericAccount::create_ext_message(const block::StdAddress& ad

td::Ref<vm::Cell> res;
tlb::type_pack_cell(res, block::gen::t_Message_Any, message);
if (res.is_null()) {
/* body */ { message.body = vm::CellBuilder().store_ones(1).store_ref(std::move(body)).as_cellslice_ref(); }
tlb::type_pack_cell(res, block::gen::t_Message_Any, message);
}
CHECK(res.not_null());

return res;
Expand Down
21 changes: 21 additions & 0 deletions crypto/util/Miner.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
/*
This file is part of TON Blockchain Library.
TON Blockchain Library is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
TON Blockchain Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with TON Blockchain Library. If not, see <http://www.gnu.org/licenses/>.
Copyright 2017-2020 Telegram Systems LLP
*/
#include "Miner.h"

#include "td/utils/Random.h"
Expand Down Expand Up @@ -75,6 +93,9 @@ td::optional<std::string> Miner::run(const Options& options) {
td::int64 i = 0, i0 = 0;
for (; i < options.max_iterations; i++) {
if (!(i & 0xfffff) || head.back() != guard) {
if (options.token_) {
break;
}
if (options.hashes_computed) {
*options.hashes_computed += i - i0;
}
Expand Down
20 changes: 20 additions & 0 deletions crypto/util/Miner.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,25 @@
/*
This file is part of TON Blockchain Library.
TON Blockchain Library is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
TON Blockchain Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with TON Blockchain Library. If not, see <http://www.gnu.org/licenses/>.
Copyright 2017-2020 Telegram Systems LLP
*/
#pragma once

#include "block/block.h"
#include "td/utils/CancellationToken.h"
#include "td/utils/optional.h"
#include "td/utils/Time.h"
#include <atomic>
Expand All @@ -16,6 +35,7 @@ class Miner {
td::optional<td::Timestamp> expire_at;
td::int64 max_iterations = std::numeric_limits<td::int64>::max();
std::atomic<td::uint64>* hashes_computed{nullptr};
td::CancellationToken token_;
};

static td::optional<std::string> run(const Options& options);
Expand Down
27 changes: 27 additions & 0 deletions crypto/util/pow-miner.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,30 @@
/*
This file is part of TON Blockchain source code.
TON Blockchain is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
TON Blockchain is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with TON Blockchain. If not, see <http://www.gnu.org/licenses/>.
In addition, as a special exception, the copyright holders give permission
to link the code of portions of this program with the OpenSSL library.
You must obey the GNU General Public License in all respects for all
of the code used other than OpenSSL. If you modify file(s) with this
exception, you may extend this exception to your version of the file(s),
but you are not obligated to do so. If you do not wish to do so, delete this
exception statement from your version. If you delete this exception statement
from all source files in the program, then also delete it here.
Copyright 2017-2020 Telegram Systems LLP
*/
#include "common/bigint.hpp"
#include "common/refint.h"
#include "block/block.h"
Expand Down
2 changes: 1 addition & 1 deletion lite-client/lite-client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ void TestNode::run() {
private:
td::actor::ActorId<TestNode> id_;
};
io_ = td::TerminalIO::create("> ", readline_enabled_, std::make_unique<Cb>(actor_id(this)));
io_ = td::TerminalIO::create("> ", readline_enabled_, ex_mode_, std::make_unique<Cb>(actor_id(this)));
td::actor::send_closure(io_, &td::TerminalIO::set_log_interface);

if (remote_public_key_.empty()) {
Expand Down
2 changes: 1 addition & 1 deletion storage/storage-cli.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ class StorageCli : public td::actor::Actor {
td::actor::send_closure(actor_id(this), &StorageCli::parse_line, td::BufferSlice(options_.cmd.unwrap()));
} else {
ref_cnt_++;
io_ = td::TerminalIO::create("> ", options_.enable_readline, std::make_unique<Cb>(actor_shared(this)));
io_ = td::TerminalIO::create("> ", options_.enable_readline, false, std::make_unique<Cb>(actor_shared(this)));
td::actor::send_closure(io_, &td::TerminalIO::set_log_interface);
}

Expand Down
2 changes: 1 addition & 1 deletion tdutils/test/port.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ TEST(Port, SparseFiles) {
unlink(path).ignore();
auto fd = FileFd::open(path, FileFd::Write | FileFd::CreateNew).move_as_ok();
ASSERT_EQ(0, fd.get_size().move_as_ok());
ASSERT_EQ(0, fd.get_real_size().move_as_ok());
// ASSERT_EQ(0, fd.get_real_size().move_as_ok());
int64 offset = 100000000;
fd.pwrite("a", offset).ensure();
ASSERT_EQ(offset + 1, fd.get_size().move_as_ok());
Expand Down
12 changes: 7 additions & 5 deletions terminal/terminal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,9 +113,11 @@ void TerminalIOImpl::start_up() {
}
#endif

td::actor::SchedulerContext::get()->get_poll().subscribe(stdin_.get_poll_info().extract_pollable_fd(this),
td::PollFlags::Read());
loop();
if (!no_input_) {
td::actor::SchedulerContext::get()->get_poll().subscribe(stdin_.get_poll_info().extract_pollable_fd(this),
td::PollFlags::Read());
loop();
}
}

void TerminalIOImpl::tear_down() {
Expand Down Expand Up @@ -329,10 +331,10 @@ TerminalIOOutputter::~TerminalIOOutputter() {
}
}

td::actor::ActorOwn<TerminalIO> TerminalIO::create(std::string prompt, bool use_readline,
td::actor::ActorOwn<TerminalIO> TerminalIO::create(std::string prompt, bool use_readline, bool no_input,
std::unique_ptr<Callback> callback) {
return actor::create_actor<TerminalIOImpl>(actor::ActorOptions().with_name("terminal io").with_poll(), prompt,
use_readline, std::move(callback));
use_readline, no_input, std::move(callback));
}

TerminalIOImpl *TerminalIOImpl::instance_ = nullptr;
Expand Down
2 changes: 1 addition & 1 deletion terminal/terminal.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ class TerminalIO : public actor::Actor {
virtual void set_log_interface() = 0;
virtual bool readline_used() const = 0;

static td::actor::ActorOwn<TerminalIO> create(std::string prompt, bool use_readline,
static td::actor::ActorOwn<TerminalIO> create(std::string prompt, bool use_readline, bool no_input,
std::unique_ptr<Callback> callback);
};

Expand Down
5 changes: 3 additions & 2 deletions terminal/terminal.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ class TerminalIOImpl : public TerminalIO, td::ObserverBase {
void on_net() {
loop();
}
TerminalIOImpl(std::string prompt, bool use_readline, std::unique_ptr<Callback> callback)
: prompt_(prompt), use_readline_(use_readline), callback_(std::move(callback)) {
TerminalIOImpl(std::string prompt, bool use_readline, bool no_input, std::unique_ptr<Callback> callback)
: prompt_(prompt), use_readline_(use_readline), no_input_(no_input), callback_(std::move(callback)) {
}

int stdin_getc();
Expand All @@ -83,6 +83,7 @@ class TerminalIOImpl : public TerminalIO, td::ObserverBase {

std::string prompt_;
bool use_readline_ = false;
bool no_input_ = false;
std::unique_ptr<Callback> callback_;
std::mutex out_mutex_;

Expand Down
2 changes: 1 addition & 1 deletion tonlib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ if (TONLIB_ENABLE_JNI AND NOT ANDROID) # jni is available by default on Android
endif()

add_executable(tonlib-cli tonlib/tonlib-cli.cpp)
target_link_libraries(tonlib-cli tonlib tdactor tdutils terminal)
target_link_libraries(tonlib-cli tonlib tdactor tdutils terminal pow-miner-lib)

if (NOT CMAKE_CROSSCOMPILING)
if (TONLIB_ENABLE_JNI)
Expand Down
19 changes: 10 additions & 9 deletions tonlib/tonlib/TonlibClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,16 @@ class TonlibClient : public td::actor::Actor {
std::string rwallet_init_public_key;
};

template <class T, class P>
void make_request(T&& request, P&& promise) {
td::Promise<typename std::decay_t<T>::ReturnType> new_promise = std::move(promise);

auto status = do_request(std::forward<T>(request), std::move(new_promise));
if (status.is_error()) {
new_promise.operator()(std::move(status));
}
}

private:
enum class State { Uninited, Running, Closed } state_ = State::Uninited;
td::unique_ptr<TonlibCallback> callback_;
Expand Down Expand Up @@ -203,15 +213,6 @@ class TonlibClient : public td::actor::Actor {

void make_any_request(tonlib_api::Function& function, QueryContext query_context,
td::Promise<tonlib_api::object_ptr<tonlib_api::Object>>&& promise);
template <class T, class P>
void make_request(T&& request, P&& promise) {
td::Promise<typename std::decay_t<T>::ReturnType> new_promise = std::move(promise);

auto status = do_request(std::forward<T>(request), std::move(new_promise));
if (status.is_error()) {
new_promise.operator()(std::move(status));
}
}

td::Result<FullConfig> validate_config(tonlib_api::object_ptr<tonlib_api::config> config);
void set_config(FullConfig config);
Expand Down
Loading

0 comments on commit dab7ee3

Please sign in to comment.