Fix/toncore get pool data empty dicts#151
Merged
mrnkslv merged 8 commits intoMay 18, 2026
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Fixes TONCore pool-data parsing and validator participation recovery after empty dict / transient pool address failures, plus extends singlehost top-up waits for slower localnets.
Changes:
- Adds optional TONCore dict parsing for
get_pool_datanominators and withdraw requests. - Retries pool address caching when a previous election tick failed to resolve it.
- Increases top-up polling and subprocess timeouts for singlehost E2E bootstrap.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
src/node-control/common/src/tvm_stack_parser.rs |
Adds dict_cell_opt helper and tests for empty/non-empty dict encodings. |
src/node-control/contracts/src/nominator/ton_core_nominator.rs |
Uses dict_cell_opt for TONCore get_pool_data dict fields. |
src/node-control/service/src/elections/runner.rs |
Retries unresolved pool address caching on subsequent ticks. |
src/node/tests/test_load_net/scripts/topup.ts |
Extends balance wait timeout to 600 seconds. |
src/node/tests/test_run_net_py/run_singlehost_nodectl.py |
Raises default Bun top-up subprocess timeout to match the longer poll. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+91
to
+92
| if entry.number().is_some() { | ||
| return Ok(None); |
Comment on lines
+557
to
+560
| match p.address().await { | ||
| Ok(addr) => { | ||
| tracing::info!("node [{}] pool address cached: {}", node_id, addr); | ||
| node.pool_addr_cache = Some(addr); |
Contributor
There was a problem hiding this comment.
We will test it manually. The test will be added later.
Keshoid
approved these changes
May 18, 2026
Comment on lines
+557
to
+560
| match p.address().await { | ||
| Ok(addr) => { | ||
| tracing::info!("node [{}] pool address cached: {}", node_id, addr); | ||
| node.pool_addr_cache = Some(addr); |
Contributor
There was a problem hiding this comment.
We will test it manually. The test will be added later.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes TONCore validator participation on singlehost after regressions from #139:
empty pool dict fields no longer break
get_pool_data, and elections recover pooladdresses after transient RPC/parse failures. Extends wallet top-up timeouts so
phase 10/11 bootstrap does not fail on slow localnets.
Changes
nodectl
dict_cell_optfor optional dict stack entries; wired into TONCoreget_pool_data.pool_addr_cachewhen pool is set but cache is empty.singlehost E2E
topup.ts: balance wait 300s → 600s.run_singlehost_nodectl.py:BUN_TOPUP_TIMEOUT_SECONDSdefault 400 → 720.