Skip to content

Commit 28df741

Browse files
author
ton
committed
updated tonlib
1. updated tonlib 2. fixed bug in state download
1 parent f40822b commit 28df741

File tree

17 files changed

+362
-115
lines changed

17 files changed

+362
-115
lines changed

crypto/block/check-proof.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@ td::Result<Transaction::Info> Transaction::validate() {
258258
}
259259
Info res;
260260
res.blkid = blkid;
261+
res.now = trans.now;
261262
res.prev_trans_lt = trans.prev_trans_lt;
262263
res.prev_trans_hash = trans.prev_trans_hash;
263264
res.transaction = root;
@@ -281,6 +282,8 @@ td::Result<TransactionList::Info> TransactionList::validate() const {
281282
Info res;
282283
auto current_lt = lt;
283284
auto current_hash = hash;
285+
res.lt = lt;
286+
res.hash = hash;
284287
for (auto& root : list) {
285288
const auto& blkid = blkids[c++];
286289
Transaction transaction;

crypto/block/check-proof.h

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ struct Transaction {
6060

6161
struct Info {
6262
ton::BlockIdExt blkid;
63+
td::uint32 now;
6364
ton::LogicalTime prev_trans_lt;
6465
ton::Bits256 prev_trans_hash;
6566
td::Ref<vm::Cell> transaction;
@@ -74,21 +75,12 @@ struct TransactionList {
7475
td::BufferSlice transactions_boc;
7576

7677
struct Info {
78+
ton::LogicalTime lt;
79+
ton::Bits256 hash;
7780
std::vector<Transaction::Info> transactions;
7881
};
7982

8083
td::Result<Info> validate() const;
8184
};
8285

83-
struct BlockChain {
84-
ton::BlockIdExt from;
85-
ton::BlockIdExt to;
86-
td::int32 mode;
87-
td::BufferSlice proof;
88-
89-
using Info = std::unique_ptr<block::BlockProofChain>;
90-
91-
td::Result<Info> validate() const;
92-
};
93-
9486
} // namespace block

tdutils/td/utils/filesystem.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,20 @@ SecureString create_empty<SecureString>(size_t size) {
5353
template <class T>
5454
Result<T> read_file_impl(CSlice path, int64 size, int64 offset) {
5555
TRY_RESULT(from_file, FileFd::open(path, FileFd::Read));
56+
TRY_RESULT(file_size, from_file.get_size());
57+
if (offset < 0 || offset > file_size) {
58+
return Status::Error("Failed to read file: invalid offset");
59+
}
5660
if (size == -1) {
57-
TRY_RESULT(file_size, from_file.get_size());
58-
size = file_size;
61+
size = file_size - offset;
62+
} else if (size >= 0) {
63+
if (size + offset > file_size) {
64+
size = file_size - offset;
65+
}
5966
}
6067
if (size < 0) {
6168
return Status::Error("Failed to read file: invalid size");
6269
}
63-
if (offset < 0 || offset > size) {
64-
return Status::Error("Failed to read file: invalid offset");
65-
}
66-
size -= offset;
6770
auto content = create_empty<T>(narrow_cast<size_t>(size));
6871
TRY_RESULT(got_size, from_file.pread(as_mutable_slice(content), offset));
6972
if (got_size != static_cast<size_t>(size)) {

third-party/wingetopt/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ cmake_minimum_required(VERSION 2.8)
33

44
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
55
add_library(wingetopt src/getopt.c src/getopt.h)
6-
target_include_directories(wingetopt PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src)
6+
target_include_directories(wingetopt PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>)
77

tl/generate/scheme/tonlib_api.tl

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ vector {t:Type} # [ t ] = Vector t;
1616
error code:int32 message:string = Error;
1717
ok = Ok;
1818

19-
options config:string keystore_directory:string = Options;
19+
options config:string keystore_directory:string use_callbacks_for_network:Bool = Options;
2020

2121
key public_key:string secret:secureBytes = Key;
2222
inputKey key:key local_password:secureBytes = InputKey;
@@ -31,17 +31,17 @@ accountAddress account_address:string = AccountAddress;
3131
internal.transactionId lt:int64 hash:bytes = internal.TransactionId;
3232

3333
raw.initialAccountState code:bytes data:bytes = raw.InitialAccountState;
34-
raw.accountState balance:int64 code:bytes data:bytes last_transaction_id:internal.transactionId = raw.AccountState;
34+
raw.accountState balance:int64 code:bytes data:bytes last_transaction_id:internal.transactionId sync_utime:int53 = raw.AccountState;
3535
raw.message source:string destination:string value:int64 = raw.Message;
36-
raw.transaction data:bytes previous_transaction_id:internal.transactionId fee:int64 in_msg:raw.message out_msgs:vector<raw.message> = raw.Transaction;
37-
raw.transactions transactions:vector<raw.Transaction> = raw.Transactions;
36+
raw.transaction utime:int53 data:bytes transaction_id:internal.transactionId fee:int64 in_msg:raw.message out_msgs:vector<raw.message> = raw.Transaction;
37+
raw.transactions transactions:vector<raw.Transaction> previous_transaction_id:internal.transactionId = raw.Transactions;
3838

3939
testWallet.initialAccountState public_key:string = testWallet.InitialAccountState;
40-
testWallet.accountState balance:int64 seqno:int32 last_transaction_id:internal.transactionId = testWallet.AccountState;
40+
testWallet.accountState balance:int64 seqno:int32 last_transaction_id:internal.transactionId sync_utime:int53 = testWallet.AccountState;
4141

42-
testGiver.accountState balance:int64 seqno:int32 last_transaction_id:internal.transactionId = testGiver.AccountState;
42+
testGiver.accountState balance:int64 seqno:int32 last_transaction_id:internal.transactionId sync_utime:int53= testGiver.AccountState;
4343

44-
uninited.accountState balance:int64 = uninited.AccountState;
44+
uninited.accountState balance:int64 last_transaction_id:internal.transactionId sync_utime:int53 = uninited.AccountState;
4545

4646
generic.initialAccountStateRaw initital_account_state:raw.initialAccountState = generic.InitialAccountState;
4747
generic.initialAccountStateTestWallet initital_account_state:testWallet.initialAccountState = generic.InitialAccountState;
@@ -51,6 +51,8 @@ generic.accountStateTestWallet account_state:testWallet.accountState = generic.A
5151
generic.accountStateTestGiver account_state:testGiver.accountState = generic.AccountState;
5252
generic.accountStateUninited account_state:uninited.accountState = generic.AccountState;
5353

54+
updateSendLiteServerQuery id:int64 data:bytes = Update;
55+
5456
---functions---
5557

5658
init options:options = Ok;
@@ -89,5 +91,7 @@ testGiver.sendGrams destination:accountAddress seqno:int32 amount:int64 = Ok;
8991
generic.getAccountState account_address:accountAddress = generic.AccountState;
9092
generic.sendGrams private_key:inputKey source:accountAddress destination:accountAddress amount:int64 = Ok;
9193

92-
runTests dir:string = Ok;
94+
onLiteServerQueryResult id:int64 bytes:bytes = Ok;
95+
onLiteServerQueryError id:int64 error:error = Ok;
9396

97+
runTests dir:string = Ok;

tl/generate/scheme/tonlib_api.tlo

724 Bytes
Binary file not shown.

tonlib/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ set(TONLIB_SOURCE
99
tonlib/Config.cpp
1010
tonlib/ExtClient.cpp
1111
tonlib/ExtClientLazy.cpp
12+
tonlib/ExtClientOutbound.cpp
1213
tonlib/GenericAccount.cpp
1314
tonlib/KeyStorage.cpp
1415
tonlib/LastBlock.cpp
@@ -21,6 +22,7 @@ set(TONLIB_SOURCE
2122
tonlib/Config.h
2223
tonlib/ExtClient.h
2324
tonlib/ExtClientLazy.h
25+
tonlib/ExtClientOutbound.h
2426
tonlib/GenericAccount.h
2527
tonlib/KeyStorage.h
2628
tonlib/LastBlock.h

tonlib/test/offline.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,16 +172,17 @@ TEST(Tonlib, InitClose) {
172172
{
173173
Client client;
174174
sync_send(client, make_object<tonlib_api::close>()).ensure();
175-
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>("", "."))).ensure_error();
175+
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>("", ".", false))).ensure_error();
176176
}
177177
{
178178
Client client;
179179
sync_send(client, make_object<tonlib_api::init>(nullptr)).ensure_error();
180-
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>("fdajkfldsjkafld", ".")))
180+
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>("fdajkfldsjkafld", ".", false)))
181181
.ensure_error();
182-
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>("", "fdhskfds"))).ensure_error();
183-
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>("", "."))).ensure();
184-
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>("", "."))).ensure_error();
182+
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>("", "fdhskfds", false)))
183+
.ensure_error();
184+
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>("", ".", false))).ensure();
185+
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>("", ".", false))).ensure_error();
185186

186187
td::Slice bad_config = R"abc(
187188
{
@@ -194,7 +195,7 @@ TEST(Tonlib, InitClose) {
194195
sync_send(client, make_object<tonlib_api::testGiver_getAccountState>()).ensure_error();
195196
sync_send(client, make_object<tonlib_api::close>()).ensure();
196197
sync_send(client, make_object<tonlib_api::close>()).ensure_error();
197-
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>("", "."))).ensure_error();
198+
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>("", ".", false))).ensure_error();
198199
}
199200
}
200201

@@ -289,7 +290,7 @@ TEST(Tonlib, KeysApi) {
289290
Client client;
290291

291292
// init
292-
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>("", "."))).ensure();
293+
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>("", ".", false))).ensure();
293294
auto local_password = td::SecureString("local password");
294295
auto mnemonic_password = td::SecureString("mnemonic password");
295296
{

tonlib/test/online.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,12 +170,12 @@ void dump_transaction_history(Client& client, std::string address) {
170170
make_object<tonlib_api::accountAddress>(address), std::move(tid)))
171171
.move_as_ok();
172172
CHECK(got_transactions->transactions_.size() > 0);
173-
CHECK(got_transactions->transactions_[0]->previous_transaction_id_->lt_ < lt);
173+
CHECK(got_transactions->previous_transaction_id_->lt_ < lt);
174174
for (auto& txn : got_transactions->transactions_) {
175175
LOG(ERROR) << to_string(txn);
176176
cnt++;
177177
}
178-
tid = std::move(got_transactions->transactions_.back()->previous_transaction_id_);
178+
tid = std::move(got_transactions->previous_transaction_id_);
179179
}
180180
LOG(ERROR) << cnt;
181181
}
@@ -196,7 +196,8 @@ int main(int argc, char* argv[]) {
196196

197197
Client client;
198198
{
199-
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>(global_config_str, "."))).ensure();
199+
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>(global_config_str, ".", false)))
200+
.ensure();
200201
}
201202
//dump_transaction_history(client, get_test_giver_address(client));
202203
auto wallet_a = create_wallet(client);
@@ -208,7 +209,8 @@ int main(int argc, char* argv[]) {
208209
return 0;
209210
{
210211
// init
211-
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>(global_config_str, "."))).ensure();
212+
sync_send(client, make_object<tonlib_api::init>(make_object<tonlib_api::options>(global_config_str, ".", false)))
213+
.ensure();
212214

213215
auto key = sync_send(client, make_object<tonlib_api::createNewKey>(
214216
td::SecureString("local"), td::SecureString("mnemonic"), td::SecureString()))

tonlib/tonlib/ExtClient.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@
2121
#include "tonlib/LastBlock.h"
2222

2323
namespace tonlib {
24-
void ExtClient::with_last_block(td::Promise<ton::BlockIdExt> promise) {
24+
void ExtClient::with_last_block(td::Promise<LastBlockInfo> promise) {
2525
auto query_id = last_block_queries_.create(std::move(promise));
26-
td::Promise<ton::BlockIdExt> P = [query_id, self = this,
27-
actor_id = td::actor::actor_id()](td::Result<ton::BlockIdExt> result) {
26+
td::Promise<LastBlockInfo> P = [query_id, self = this,
27+
actor_id = td::actor::actor_id()](td::Result<LastBlockInfo> result) {
2828
send_lambda(actor_id, [self, query_id, result = std::move(result)]() mutable {
2929
self->last_block_queries_.extract(query_id).set_result(std::move(result));
3030
});

0 commit comments

Comments
 (0)