Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upstream sync #6

Merged
merged 115 commits into from
Oct 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
6250662
Merge pull request #1017 from ton-blockchain/master
EmelyanenkoK Jun 10, 2024
bd23029
Soft send message validation (#1021)
EmelyanenkoK Jun 11, 2024
773ebe0
Decrease catchain_max_block_delay to 0.4
EmelyanenkoK Jun 20, 2024
94c9fec
Fix TON compilation on Windows (github only) (#1020)
neodix42 Jun 24, 2024
c2e7278
Fix skipped action list order (#1036)
EmelyanenkoK Jun 25, 2024
c56e657
Doclinks that refer to docs.ton.org domain (#1029)
mercuriev Jun 27, 2024
2634e63
chore: fix typos (#980)
xiaoxianBoy Jun 27, 2024
11f39ac
Fix bug of broadcast stop on receiving the last FEC piece (#1040)
EmelyanenkoK Jun 27, 2024
38fc1d5
Added nullptr check for emulation_result (#1037)
dbaranovstonfi Jun 27, 2024
0daee1d
Merge message dispatch queue (#1030)
EmelyanenkoK Jun 27, 2024
06f503d
Tonlib: add methods smc.getRawFullAccountState and blocks.getOutMsgQu…
dungeon-master-666 Jun 27, 2024
fae7763
Fix typos (#998)
simlecode Jun 27, 2024
7f83701
fix: emulator bounce conditions (#974)
krigga Jun 27, 2024
0bf7feb
set correct config addr for emulator (#1028)
dungeon-master-666 Jul 2, 2024
c15d878
emulator fixes, add basic tests (#1042)
dungeon-master-666 Jul 2, 2024
d46261c
Fix reading state_serializer_enabled from config (#1045)
SpyCheese Jul 2, 2024
c54f095
Don't use user-provided fees for internal messages (#1050)
SpyCheese Jul 10, 2024
57f95cc
Add collator options (#1052)
EmelyanenkoK Jul 10, 2024
2792fc2
Improved Docker image (#1051)
neodix42 Jul 10, 2024
5380e6f
add test-emulator (#1048)
neodix42 Jul 10, 2024
00cd053
Fix processing dispatch queue (#1057)
EmelyanenkoK Jul 13, 2024
b9e89d4
"getcollatoroptionsjson" command in validator console (#1059)
SpyCheese Jul 17, 2024
015e2e5
Fix tonlib client crashing when block lookup error (#979)
hey-researcher Jul 17, 2024
58ca7b4
Add null check in manager.cpp (#1069)
SpyCheese Jul 23, 2024
1b93728
Make block overloaded if dispatch queue processing limit is reached (…
SpyCheese Jul 23, 2024
a5521a6
Fix incorrect gas consumption with verbosity > 3 (#1077)
dungeon-master-666 Jul 26, 2024
28f9a9b
More verbose vm logs, fix parsing slice literals (#1076)
SpyCheese Jul 26, 2024
679e6be
Remove rocksdb usage from fift (#1064)
neodix42 Jul 26, 2024
b3828f8
Print oldest celldb snapshot to stats (#1078)
EmelyanenkoK Jul 26, 2024
25386f5
Add method for fetching emulator version info (#1079)
dungeon-master-666 Jul 27, 2024
e7a26f5
Fix compilation error in test-tddb (#1083)
SpyCheese Jul 29, 2024
db1ba2e
Fix setting unixtime in test-emulator (#1084)
SpyCheese Jul 29, 2024
8714477
Add forgotten mutex lock on RocksDb::end_snapshot
EmelyanenkoK Jul 30, 2024
e985ac0
Add --fast-state-serializer flag and responding to AdnlMessageCreateC…
EmelyanenkoK Aug 7, 2024
489721e
Add github action for Ubuntu 24.04 (#1085)
neodix42 Aug 9, 2024
7cbe20c
Update changelog
EmelyanenkoK Aug 9, 2024
140320b
Merge pull request #1099 from ton-blockchain/testnet
EmelyanenkoK Aug 9, 2024
0cff1c8
Fix UB in blst aggregate verify (#1107)
SpyCheese Aug 15, 2024
77a816e
Improve creating channels in adnl (#1108)
SpyCheese Aug 15, 2024
9661676
Improve dht lookup in overlays (#1104)
SpyCheese Aug 15, 2024
06515c3
Limit the number of threads to 127 (#1111)
SpyCheese Aug 16, 2024
5bdcb5e
Disable testing and fuzzing for openssl when building WASM packages (…
krigga Aug 20, 2024
9c3dc22
Improve validator session stats (#1117)
SpyCheese Aug 20, 2024
9a10f79
Fix getting creator stats in lite-client (#1115)
SpyCheese Aug 20, 2024
908415d
Accelerator, part 1 (#1119)
SpyCheese Aug 23, 2024
1af2d37
* update links to docker image (#1109)
neodix42 Aug 23, 2024
cba9277
Fix adding overlay neighbor (#1121)
SpyCheese Aug 23, 2024
16a2ced
Set default state ttl to 86400, set serializer delay to up to 6h (#1125)
SpyCheese Aug 26, 2024
6038147
Disable state serializer on masterchain validators (#1129)
SpyCheese Aug 27, 2024
be55da5
Increase moderate misbehavior threshold
EmelyanenkoK Aug 27, 2024
f7e189f
Fix UB in blst aggregate verify (#1107)
SpyCheese Aug 15, 2024
6515136
Improve creating channels in adnl (#1108)
SpyCheese Aug 15, 2024
a71d413
Improve dht lookup in overlays (#1104)
SpyCheese Aug 15, 2024
622dc86
Limit the number of threads to 127 (#1111)
SpyCheese Aug 16, 2024
b70090d
Disable testing and fuzzing for openssl when building WASM packages (…
krigga Aug 20, 2024
dc26c3b
Improve validator session stats (#1117)
SpyCheese Aug 20, 2024
9803d00
Fix getting creator stats in lite-client (#1115)
SpyCheese Aug 20, 2024
18305ab
* update links to docker image (#1109)
neodix42 Aug 23, 2024
31840a7
Set default state ttl to 86400, set serializer delay to up to 6h (#1125)
SpyCheese Aug 26, 2024
b5fd8fa
Disable state serializer on masterchain validators (#1129)
SpyCheese Aug 27, 2024
e9bd482
Increase moderate misbehavior threshold
EmelyanenkoK Aug 27, 2024
48d94d5
Allow unlimited catchain.getBlock requests (#1132)
SpyCheese Aug 28, 2024
97c57c3
add gh action to create docker image with a specified branch. Branch …
neodix42 Aug 28, 2024
0c21ce2
Merge pull request #1139 from ton-blockchain/stable_testnet
EmelyanenkoK Aug 30, 2024
e081111
Dynamic catchain delays, state serialization improvements (#1140)
EmelyanenkoK Aug 30, 2024
b2b79fe
Ratelimit nochannel ADNL packets (#1147)
EmelyanenkoK Sep 3, 2024
e35b34d
Don't deserialize continuations in LS runSmcMethod (#1151)
SpyCheese Sep 4, 2024
cb69f30
Add "lastgcdmasterchainstate" to validator stats (#1154)
SpyCheese Sep 5, 2024
e32a74e
Collator: change deferring behavior when out queue size is big (#1135)
SpyCheese Sep 5, 2024
89e1cd9
Adapt test-adnl to rate limits
SpyCheese Sep 5, 2024
feff73c
Merge branch 'safe_features' into testnet-update
SpyCheese Sep 6, 2024
1bef6df
Merge pull request #1156 from ton-blockchain/safe_features
EmelyanenkoK Sep 9, 2024
e55c132
Merge pull request #1157 from SpyCheese/testnet-update
EmelyanenkoK Sep 9, 2024
1e5d84a
mintless-proof-generator
SpyCheese Sep 12, 2024
1a5bbf3
mintless-proof-generator (#1166)
EmelyanenkoK Sep 12, 2024
76cda01
mintless-proof-generator make_all_proofs
SpyCheese Sep 13, 2024
9f20389
Merge branch 'SpyCheese-mintless-util' into testnet
EmelyanenkoK Sep 13, 2024
b304b1c
LS getDispatchQueueInfo and getDispatchQueueMessages methods (#1161)
SpyCheese Sep 13, 2024
eea95ae
Add tonlib libraries for Android to release (#1169)
neodix42 Sep 13, 2024
b5734d2
Get rid of recursion in tvm continuations
SpyCheese Sep 20, 2024
e04965c
Fix setting original_balance in transaction.cpp
SpyCheese Sep 20, 2024
2cca7fd
Consume gas in VmState::jump_to
SpyCheese Sep 23, 2024
5f51d3d
Remove redundant linking dependencies (#1198)
neodix42 Sep 23, 2024
72020c0
celldb in-memory mode, stats for actors, perf counters, minor fix in …
birydrad Sep 23, 2024
b781993
Merge pull request #1202 from ton-blockchain/tvm-patch
EmelyanenkoK Sep 23, 2024
6755b83
Various changes in node (#1230)
SpyCheese Sep 30, 2024
921aa29
create complaints for master vals only for masterchain blocks (#1231)
yungwine Sep 30, 2024
fc5e71f
Merge pull request #1232 from ton-blockchain/master
EmelyanenkoK Oct 1, 2024
257cd8c
Fix estimating block size, repeat collation on error (#1178)
SpyCheese Oct 1, 2024
f94d1be
Extra currencies (#1122)
SpyCheese Oct 1, 2024
8364a24
Improve overlay stats (#1242)
SpyCheese Oct 4, 2024
1da94e6
Send only first block candidate optimistically (#1260)
EmelyanenkoK Oct 9, 2024
b69214b
Validator patch: state download, adnl stats (#1257)
SpyCheese Oct 9, 2024
fd1735f
[FunC] Fix a bug with << operator to zero value (#1262)
tolk-vm Oct 9, 2024
d04cdfa
Use parallel write to celldb (#1264)
EmelyanenkoK Oct 11, 2024
2ce2c8f
Count account_dict size in block size estimation (#1261)
SpyCheese Oct 12, 2024
8f55efb
fix openssl3 linking issues in portable binaries (#1247)
neodix42 Oct 12, 2024
97398b7
Fix null pointer error in validator group (#1271)
SpyCheese Oct 14, 2024
3e806bf
Limit RocksDB logs size (#1278)
dungeon-master-666 Oct 15, 2024
5920f80
Improve gas consumption in VmState::jump_to (#1276)
SpyCheese Oct 15, 2024
603d1d1
More precise calculation of expected shard blocks in checkload (#1279)
SpyCheese Oct 15, 2024
96ddbcd
Update changelog
EmelyanenkoK Oct 19, 2024
c1ee18c
Add state-init option to wallet-v3.fif script (#1282)
1IxI1 Oct 19, 2024
8daf5c3
Improve artifacts' stripping (#1286)
neodix42 Oct 19, 2024
66e81f5
Add credits to ret2happy
EmelyanenkoK Oct 22, 2024
f82827e
Fix failing tonlib compilation on ubuntu with nixpkgs (#1309)
neodix42 Oct 22, 2024
d4de286
Merge pull request #1288 from ton-blockchain/testnet
EmelyanenkoK Oct 22, 2024
0862cca
Fix updating neighbors in private overlays (#1314)
SpyCheese Oct 24, 2024
eed3153
Merge pull request #1316 from ton-blockchain/testnet
EmelyanenkoK Oct 24, 2024
62d447b
rebranding ton to ion
ice-hermes Mar 20, 2024
453f12c
changed share/ton to share/ion in crypto/CMakeLists.txt
ice-proteus Jun 20, 2024
148c2e8
rebase ton master
ice-hermes Mar 20, 2024
bf0026e
Use .ion in rldp proxy
ice-charon Sep 13, 2024
205a86e
rebranding ton to ion
ice-hermes Mar 20, 2024
dda011d
Merge branch 'master' into upstream-sync
ice-charon Oct 25, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build-ion-linux-android-tonlib.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,5 @@ jobs:
- name: Upload artifacts
uses: actions/upload-artifact@master
with:
name: tonlib-android
name: ton-android-tonlib
path: artifacts
6 changes: 6 additions & 0 deletions .github/workflows/build-ion-linux-x86-64-shared.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ jobs:
sudo apt-get update
sudo apt-get install -y build-essential git cmake ninja-build zlib1g-dev libsecp256k1-dev libmicrohttpd-dev libsodium-dev liblz4-dev libjemalloc-dev

- if: matrix.os == 'ubuntu-20.04'
run: |
sudo apt install -y manpages-dev software-properties-common
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update && sudo apt install gcc-11 g++-11

- if: matrix.os != 'ubuntu-24.04'
run: |
wget https://apt.llvm.org/llvm.sh
Expand Down
25 changes: 25 additions & 0 deletions .github/workflows/build-ton-macos-15-arm64-shared.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: MacOS-15 TON build (shared, arm64)

on: [push,workflow_dispatch,workflow_call]

jobs:
build:
runs-on: macos-15

steps:
- name: Check out repository
uses: actions/checkout@v3
with:
submodules: 'recursive'

- name: Build TON
run: |
cp assembly/native/build-macos-shared.sh .
chmod +x build-macos-shared.sh
./build-macos-shared.sh -t -a

- name: Upload artifacts
uses: actions/upload-artifact@master
with:
name: ton-binaries-macos-15
path: artifacts
2 changes: 1 addition & 1 deletion .github/workflows/build-ton-macos-arm64-shared.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: MacOS TON build (shared, arm64)
name: MacOS-14 TON build (shared, arm64)

on: [push,workflow_dispatch,workflow_call]

Expand Down
16 changes: 16 additions & 0 deletions .github/workflows/create-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,14 @@ jobs:
workflow_conclusion: success
skip_unpack: true

- name: Download Android Tonlib artifacts
uses: dawidd6/action-download-artifact@v2
with:
workflow: build-ton-linux-android-tonlib.yml
path: artifacts
workflow_conclusion: success
skip_unpack: true

- name: Show all artifacts
run: |
tree artifacts
Expand Down Expand Up @@ -486,3 +494,11 @@ jobs:
file: artifacts/ion-wasm-binaries.zip
asset_name: ion-wasm-binaries.zip
tag: ${{ steps.tag.outputs.TAG }}

- name: Upload Android Tonlib artifacts
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: artifacts/ton-android-tonlib.zip
asset_name: ton-android-tonlib.zip
tag: ${{ steps.tag.outputs.TAG }}
2 changes: 1 addition & 1 deletion .github/workflows/ion-ccpcheck.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
generate report: true

- name: Upload report
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@master
with:
name: ion-ccpcheck-report
path: output
8 changes: 7 additions & 1 deletion CMake/FindSodium.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -127,10 +127,16 @@ elseif (WIN32)
endif()
string(APPEND _PLATFORM_PATH "/$$CONFIG$$")

message(STATUS "MSVC_VERSION ${MSVC_VERSION}")
if (MSVC_VERSION LESS 1900)
math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 60")
else()
math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 50")
if (MSVC_VERSION EQUAL 1941)
math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 51")
else()
math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 50")
endif()

endif()
string(APPEND _PLATFORM_PATH "/v${_VS_VERSION}")

Expand Down
12 changes: 9 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ else()
set(HAVE_SSE42 FALSE)
endif()

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
set(CMAKE_CXX_EXTENSIONS FALSE)

Expand Down Expand Up @@ -333,6 +333,10 @@ add_cxx_compiler_flag("-Wno-sign-conversion")
add_cxx_compiler_flag("-Qunused-arguments")
add_cxx_compiler_flag("-Wno-unused-private-field")
add_cxx_compiler_flag("-Wno-redundant-move")

#add_cxx_compiler_flag("-Wno-unused-function")
#add_cxx_compiler_flag("-Wno-unused-variable")
#add_cxx_compiler_flag("-Wno-shorten-64-to-32")
#add_cxx_compiler_flag("-Werror")

#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem /usr/include/c++/v1")
Expand Down Expand Up @@ -484,10 +488,10 @@ target_link_libraries(test-net PRIVATE tdnet tdutils ${CMAKE_THREAD_LIBS_INIT})

#BEGIN tonlib
add_executable(test-tonlib ${TONLIB_ONLINE_TEST_SOURCE})
target_link_libraries(test-tonlib tdutils tdactor adnllite tl_api ton_crypto ton_block tl_tonlib_api tonlib)
target_link_libraries(test-tonlib tdactor adnllite tl_api ton_crypto tl_tonlib_api tonlib)

add_executable(test-tonlib-offline test/test-td-main.cpp ${TONLIB_OFFLINE_TEST_SOURCE})
target_link_libraries(test-tonlib-offline tdutils tdactor adnllite tl_api ton_crypto ton_block fift-lib tl_tonlib_api tonlib)
target_link_libraries(test-tonlib-offline tdactor adnllite tl_api ton_crypto fift-lib tl_tonlib_api tonlib)

if (NOT CMAKE_CROSSCOMPILING)
add_dependencies(test-tonlib-offline gen_fif)
Expand Down Expand Up @@ -529,6 +533,8 @@ target_link_libraries(test-rldp2 adnl adnltest dht rldp2 tl_api)
add_executable(test-validator-session-state test/test-validator-session-state.cpp)
target_link_libraries(test-validator-session-state adnl dht rldp validatorsession tl_api)

add_executable(test-overlay test/test-overlay.cpp)
target_link_libraries(test-overlay overlay tdutils tdactor adnl adnltest tl_api dht )
add_executable(test-catchain test/test-catchain.cpp)
target_link_libraries(test-catchain overlay tdutils tdactor adnl adnltest rldp tl_api dht
catchain )
Expand Down
16 changes: 16 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
## 2024.10 Update

1. Parallel write to celldb: substantial improvement of sync and GC speed, especially with slow disks.
2. Decreased network traffic: only first block candidate is sent optimistically.
3. Improved channel creation and dht lookups, introduction of semi-private overlays
4. New LS dispatch queue related methods and improvement security
5. Fixing recursion in TVM continuations
6. Improved stats for actors, validator sessions, perf counters, overlays, adnl, rocksdb
7. Migration to C++20
8. Improved block size estimates: account for depth in various structures
9. Fix bug with `<<` optimization in FunC
10. Minor changes of TVM which will be activated by `Config8.version >= 9`
11. Multiple minor improvements

Besides the work of the core team, this update is based on the efforts of @krigga (emulator), Arayz @ TonBit (LS security, TVM recursion), @ret2happy (UB in BLST).

## 2024.08 Update

1. Introduction of dispatch queues, message envelopes with transaction chain metadata, and explicitly stored msg_queue size, which will be activated by `Config8.version >= 8` and new `Config8.capabilities` bits: `capStoreOutMsgQueueSize`, `capMsgMetadata`, `capDeferMessages`.
Expand Down
8 changes: 3 additions & 5 deletions adnl/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,15 @@ target_link_libraries(adnl PUBLIC tdactor ton_crypto tl_api tdnet tddb keys keyr

add_executable(adnl-proxy ${ADNL_PROXY_SOURCE})
target_include_directories(adnl-proxy PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>)
target_link_libraries(adnl-proxy PUBLIC tdactor ton_crypto tl_api tdnet common
tl-utils git)
target_link_libraries(adnl-proxy PUBLIC tdactor ton_crypto tl_api tdnet common tl-utils git)

add_executable(adnl-pong adnl-pong.cpp)
target_include_directories(adnl-pong PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>)
target_link_libraries(adnl-pong PUBLIC tdactor ton_crypto tl_api tdnet common
tl-utils adnl dht git)
target_link_libraries(adnl-pong PUBLIC tdactor ton_crypto tl_api tdnet common tl-utils adnl dht git)

add_library(adnltest STATIC ${ADNL_TEST_SOURCE})
target_include_directories(adnltest PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>)
target_link_libraries(adnltest PUBLIC adnl )
target_link_libraries(adnltest PUBLIC adnl)

install(TARGETS adnl-proxy RUNTIME DESTINATION bin)
endif()
Expand Down
27 changes: 16 additions & 11 deletions adnl/adnl-local-id.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ void AdnlLocalId::update_packet(AdnlPacket packet, bool update_id, bool sign, td
}
}

void AdnlLocalId::get_stats(td::Promise<tl_object_ptr<ton_api::adnl_stats_localId>> promise) {
void AdnlLocalId::get_stats(bool all, td::Promise<tl_object_ptr<ton_api::adnl_stats_localId>> promise) {
auto stats = create_tl_object<ton_api::adnl_stats_localId>();
stats->short_id_ = short_id_.bits256_value();
for (auto &[ip, x] : inbound_rate_limiter_) {
Expand All @@ -317,22 +317,22 @@ void AdnlLocalId::get_stats(td::Promise<tl_object_ptr<ton_api::adnl_stats_localI
}
prepare_packet_stats();
stats->packets_recent_ = packet_stats_prev_.tl();
stats->packets_total_ = packet_stats_total_.tl();
stats->packets_total_ = packet_stats_total_.tl(all);
stats->packets_total_->ts_start_ = (double)Adnl::adnl_start_time();
stats->packets_total_->ts_end_ = td::Clocks::system();
promise.set_result(std::move(stats));
}

void AdnlLocalId::add_decrypted_packet_stats(td::IPAddress addr) {
prepare_packet_stats();
++packet_stats_cur_.decrypted_packets[addr];
++packet_stats_total_.decrypted_packets[addr];
packet_stats_cur_.decrypted_packets[addr].inc();
packet_stats_total_.decrypted_packets[addr].inc();
}

void AdnlLocalId::add_dropped_packet_stats(td::IPAddress addr) {
prepare_packet_stats();
++packet_stats_cur_.dropped_packets[addr];
++packet_stats_total_.dropped_packets[addr];
packet_stats_cur_.dropped_packets[addr].inc();
packet_stats_total_.dropped_packets[addr].inc();
}

void AdnlLocalId::prepare_packet_stats() {
Expand All @@ -351,17 +351,22 @@ void AdnlLocalId::prepare_packet_stats() {
}
}

tl_object_ptr<ton_api::adnl_stats_localIdPackets> AdnlLocalId::PacketStats::tl() const {
tl_object_ptr<ton_api::adnl_stats_localIdPackets> AdnlLocalId::PacketStats::tl(bool all) const {
double threshold = all ? -1.0 : td::Clocks::system() - 600.0;
auto obj = create_tl_object<ton_api::adnl_stats_localIdPackets>();
obj->ts_start_ = ts_start;
obj->ts_end_ = ts_end;
for (const auto &[ip, packets] : decrypted_packets) {
obj->decrypted_packets_.push_back(create_tl_object<ton_api::adnl_stats_ipPackets>(
ip.is_valid() ? PSTRING() << ip.get_ip_str() << ":" << ip.get_port() : "", packets));
if (packets.last_packet_ts >= threshold) {
obj->decrypted_packets_.push_back(create_tl_object<ton_api::adnl_stats_ipPackets>(
ip.is_valid() ? PSTRING() << ip.get_ip_str() << ":" << ip.get_port() : "", packets.packets));
}
}
for (const auto &[ip, packets] : dropped_packets) {
obj->dropped_packets_.push_back(create_tl_object<ton_api::adnl_stats_ipPackets>(
ip.is_valid() ? PSTRING() << ip.get_ip_str() << ":" << ip.get_port() : "", packets));
if (packets.last_packet_ts >= threshold) {
obj->dropped_packets_.push_back(create_tl_object<ton_api::adnl_stats_ipPackets>(
ip.is_valid() ? PSTRING() << ip.get_ip_str() << ":" << ip.get_port() : "", packets.packets));
}
}
return obj;
}
Expand Down
18 changes: 14 additions & 4 deletions adnl/adnl-local-id.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class AdnlLocalId : public td::actor::Actor {
void update_packet(AdnlPacket packet, bool update_id, bool sign, td::int32 update_addr_list_if,
td::int32 update_priority_addr_list_if, td::Promise<AdnlPacket> promise);

void get_stats(td::Promise<tl_object_ptr<ton_api::adnl_stats_localId>> promise);
void get_stats(bool all, td::Promise<tl_object_ptr<ton_api::adnl_stats_localId>> promise);

td::uint32 get_mode() {
return mode_;
Expand Down Expand Up @@ -111,10 +111,20 @@ class AdnlLocalId : public td::actor::Actor {
std::map<td::IPAddress, InboundRateLimiter> inbound_rate_limiter_;
struct PacketStats {
double ts_start = 0.0, ts_end = 0.0;
std::map<td::IPAddress, td::uint64> decrypted_packets;
std::map<td::IPAddress, td::uint64> dropped_packets;

tl_object_ptr<ton_api::adnl_stats_localIdPackets> tl() const;
struct Counter {
td::uint64 packets = 0;
double last_packet_ts = 0.0;

void inc() {
++packets;
last_packet_ts = td::Clocks::system();
}
};
std::map<td::IPAddress, Counter> decrypted_packets;
std::map<td::IPAddress, Counter> dropped_packets;

tl_object_ptr<ton_api::adnl_stats_localIdPackets> tl(bool all = true) const;
} packet_stats_cur_, packet_stats_prev_, packet_stats_total_;
void add_decrypted_packet_stats(td::IPAddress addr);
void add_dropped_packet_stats(td::IPAddress addr);
Expand Down
6 changes: 3 additions & 3 deletions adnl/adnl-peer-table.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,7 @@ void AdnlPeerTableImpl::get_conn_ip_str(AdnlNodeIdShort l_id, AdnlNodeIdShort p_
td::actor::send_closure(it->second, &AdnlPeer::get_conn_ip_str, l_id, std::move(promise));
}

void AdnlPeerTableImpl::get_stats(td::Promise<tl_object_ptr<ton_api::adnl_stats>> promise) {
void AdnlPeerTableImpl::get_stats(bool all, td::Promise<tl_object_ptr<ton_api::adnl_stats>> promise) {
class Cb : public td::actor::Actor {
public:
explicit Cb(td::Promise<tl_object_ptr<ton_api::adnl_stats>> promise) : promise_(std::move(promise)) {
Expand Down Expand Up @@ -440,7 +440,7 @@ void AdnlPeerTableImpl::get_stats(td::Promise<tl_object_ptr<ton_api::adnl_stats>

for (auto &[id, local_id] : local_ids_) {
td::actor::send_closure(callback, &Cb::inc_pending);
td::actor::send_closure(local_id.local_id, &AdnlLocalId::get_stats,
td::actor::send_closure(local_id.local_id, &AdnlLocalId::get_stats, all,
[id = id, callback](td::Result<tl_object_ptr<ton_api::adnl_stats_localId>> R) {
if (R.is_error()) {
VLOG(ADNL_NOTICE)
Expand All @@ -454,7 +454,7 @@ void AdnlPeerTableImpl::get_stats(td::Promise<tl_object_ptr<ton_api::adnl_stats>
for (auto &[id, peer] : peers_) {
td::actor::send_closure(callback, &Cb::inc_pending);
td::actor::send_closure(
peer, &AdnlPeer::get_stats,
peer, &AdnlPeer::get_stats, all,
[id = id, callback](td::Result<std::vector<tl_object_ptr<ton_api::adnl_stats_peerPair>>> R) {
if (R.is_error()) {
VLOG(ADNL_NOTICE) << "failed to get stats for peer " << id << " : " << R.move_as_error();
Expand Down
2 changes: 1 addition & 1 deletion adnl/adnl-peer-table.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ class AdnlPeerTableImpl : public AdnlPeerTable {
td::Promise<std::pair<td::actor::ActorOwn<AdnlTunnel>, AdnlAddress>> promise) override;
void get_conn_ip_str(AdnlNodeIdShort l_id, AdnlNodeIdShort p_id, td::Promise<td::string> promise) override;

void get_stats(td::Promise<tl_object_ptr<ton_api::adnl_stats>> promise) override;
void get_stats(bool all, td::Promise<tl_object_ptr<ton_api::adnl_stats>> promise) override;

struct PrintId {};
PrintId print_id() const {
Expand Down
18 changes: 14 additions & 4 deletions adnl/adnl-peer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -808,7 +808,15 @@ void AdnlPeerPairImpl::get_conn_ip_str(td::Promise<td::string> promise) {
promise.set_value("undefined");
}

void AdnlPeerPairImpl::get_stats(td::Promise<tl_object_ptr<ton_api::adnl_stats_peerPair>> promise) {
void AdnlPeerPairImpl::get_stats(bool all, td::Promise<tl_object_ptr<ton_api::adnl_stats_peerPair>> promise) {
if (!all) {
double threshold = td::Clocks::system() - 600.0;
if (last_in_packet_ts_ < threshold && last_out_packet_ts_ < threshold) {
promise.set_value(nullptr);
return;
}
}

auto stats = create_tl_object<ton_api::adnl_stats_peerPair>();
stats->local_id_ = local_id_.bits256_value();
stats->peer_id_ = peer_id_short_.bits256_value();
Expand Down Expand Up @@ -993,15 +1001,17 @@ void AdnlPeerImpl::update_addr_list(AdnlNodeIdShort local_id, td::uint32 local_m
td::actor::send_closure(it->second, &AdnlPeerPair::update_addr_list, std::move(addr_list));
}

void AdnlPeerImpl::get_stats(td::Promise<std::vector<tl_object_ptr<ton_api::adnl_stats_peerPair>>> promise) {
void AdnlPeerImpl::get_stats(bool all, td::Promise<std::vector<tl_object_ptr<ton_api::adnl_stats_peerPair>>> promise) {
class Cb : public td::actor::Actor {
public:
explicit Cb(td::Promise<std::vector<tl_object_ptr<ton_api::adnl_stats_peerPair>>> promise)
: promise_(std::move(promise)) {
}

void got_peer_pair_stats(tl_object_ptr<ton_api::adnl_stats_peerPair> peer_pair) {
result_.push_back(std::move(peer_pair));
if (peer_pair) {
result_.push_back(std::move(peer_pair));
}
dec_pending();
}

Expand All @@ -1027,7 +1037,7 @@ void AdnlPeerImpl::get_stats(td::Promise<std::vector<tl_object_ptr<ton_api::adnl

for (auto &[local_id, peer_pair] : peer_pairs_) {
td::actor::send_closure(callback, &Cb::inc_pending);
td::actor::send_closure(peer_pair, &AdnlPeerPair::get_stats,
td::actor::send_closure(peer_pair, &AdnlPeerPair::get_stats, all,
[local_id = local_id, peer_id = peer_id_short_,
callback](td::Result<tl_object_ptr<ton_api::adnl_stats_peerPair>> R) {
if (R.is_error()) {
Expand Down
4 changes: 2 additions & 2 deletions adnl/adnl-peer.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class AdnlPeerPair : public td::actor::Actor {
virtual void update_peer_id(AdnlNodeIdFull id) = 0;
virtual void update_addr_list(AdnlAddressList addr_list) = 0;
virtual void get_conn_ip_str(td::Promise<td::string> promise) = 0;
virtual void get_stats(td::Promise<tl_object_ptr<ton_api::adnl_stats_peerPair>> promise) = 0;
virtual void get_stats(bool all, td::Promise<tl_object_ptr<ton_api::adnl_stats_peerPair>> promise) = 0;

static td::actor::ActorOwn<AdnlPeerPair> create(td::actor::ActorId<AdnlNetworkManager> network_manager,
td::actor::ActorId<AdnlPeerTable> peer_table, td::uint32 local_mode,
Expand Down Expand Up @@ -101,7 +101,7 @@ class AdnlPeer : public td::actor::Actor {
td::actor::ActorId<AdnlLocalId> local_actor, AdnlAddressList addr_list) = 0;
virtual void update_dht_node(td::actor::ActorId<dht::Dht> dht_node) = 0;
virtual void get_conn_ip_str(AdnlNodeIdShort l_id, td::Promise<td::string> promise) = 0;
virtual void get_stats(td::Promise<std::vector<tl_object_ptr<ton_api::adnl_stats_peerPair>>> promise) = 0;
virtual void get_stats(bool all, td::Promise<std::vector<tl_object_ptr<ton_api::adnl_stats_peerPair>>> promise) = 0;
};

} // namespace adnl
Expand Down
Loading
Loading