XTB Testnet release notes (xtcn 0.10.40 / console 0.8.91)
Included
- Console 0.8.91 Forensics: wider window, full addresses, copy icon next to each address and tx hash.
- Console 0.8.90 Forensics window: tabs (Search results / Verify export / Snapshots), results scroll inside their own panel with a filter box, so long histories no longer push the other tools out of view.
- 0.10.40 crash-safe state files: snapshot and registries are flushed before replacing the old file, the previous good copy is kept as
.bak, a damaged snapshot falls back to it, and a node never silently starts a new chain over live account data. Rebuild delegates and coordinators.
- 0.10.39 old transactions can be found by hash:
eth_getTransactionByHash / eth_getTransactionReceipt fall back to the forensics archive (shard delegates with history_mode = "archive"). Rebuild xtcn and xtgw.
- 0.10.38
recent_blocks_window minimum is 86,400 (one day). Smaller values are raised with a warning.
- 0.10.37
history_retention_blocks minimum is 86,400 (one day). Smaller values are raised with a warning.
- 0.10.36 recent-block window: delegates keep the last 86,400 blocks (24 h) for peer catch-up instead of 3,600 (1 h). The window now lives in its own folder
blocks-db-<chain>-<index>/ instead of inside the chain snapshot, so the snapshot stays small. Set recent_blocks_window in node.toml to change it. Old snapshots migrate on first start.
- 0.10.35 state snapshot for forensics:
xt_stateSnapshot(address) returns a delegate-signed snapshot of one account or contract as it is now (balance, nonce, code, every storage slot, block number and hash). Inspect it offline with xtcn --show-snapshot file [--trusted-keys f] [--all] and compare two snapshots with xtcn --diff-snapshots old.json new.json. Slots are vouched for by the delegate's signature, not by a Merkle proof (the header's state root is not a state trie), and nodes keep no past states. Portal: Address history -> Download state snapshot. Console: Tools -> Forensics -> Save state snapshot / Show snapshot.
- 0.10.34 forensics, completed: the history archive now lives in an on-disk database (
history-db-<chain>-<index>/), so memory stays flat however long the history grows; a 0.10.33 history-….bin is imported on first start. It also keeps the full signed block of every recorded transaction, and with history_trace = true the internal calls (contract-to-contract calls and creates). New xt_exportHistory returns a delegate-signed bundle with Merkle inclusion proofs, block header, proposer signature and quorum votes; xtcn --verify-export file --trusted-keys keys.txt checks it offline.
- 0.10.34 live backup:
xtcn --hot-backup node.toml out.xtbak [--include-secrets] backs up a running node (consistent RocksDB checkpoints, no downtime); the offline --backup / --verify-backup / --restore-backup remain. Backups now include the history archive.
- Console 0.8.79: new Tools → Forensics screen (also a Forensics button in Developer mode): address history, internal calls, Save signed export, and offline Verify with an optional trusted-keys file. Instance details gain a Backup box (live backup when the instance runs, offline when stopped, optional keys, and Verify a backup). Portal: Address history gains per-transaction "calls" and "Download signed export".
- 0.10.33 forensics: with
history_mode = "archive" a delegate keeps a persistent index of every finalized transaction by address and by hash (history-<chain>-<index>.bin, optional history_retention_blocks). xtgw answers xt_addressHistory(address, {fromBlock, toBlock, limit}) across all shards; the portal's Explorer has an Address history table with CSV download. History is recorded from the moment the archive is switched on.
- 0.10.33 backup and restore:
xtcn --backup node.toml out.xtbak [--include-secrets], xtcn --verify-backup file, xtcn --restore-backup file dir [--force]. Offline (refuses while the node runs), every file hash-checked, restore never overwrites silently. Keys are not included unless asked, and the file is not encrypted.
- Console 0.8.78: a contract-call Value field that is not a whole number of wei is now reported clearly (it used to surface as an
xtcn --sign-eth-tx usage panic); manuals updated.
- 0.10.32 event history length: the delegate keeps events for
event_log_retention_blocks blocks (default 86,400, about a day at 1 s blocks) up to event_log_max_entries logs (default 500,000), both settable in node.toml; the index is organised by block number so range queries stay fast, and delegates apply address/topic filters themselves. eth_getLogs answers with an error asking you to narrow the range when more than 10,000 logs match on a shard. Upgrade all delegates and xtgw together.
- 0.10.31 event index persistence: each delegate appends its event logs to
event-logs-<chain>-<index>.bin next to its chain state and reloads them at startup, so eth_getLogs keeps its history across restarts. Fork auto-recovery moves the file into the fork backup with the rest of the state. Upgrade all delegates and xtgw together.
- 0.10.30 events and gas: contract events appear in receipts and in
eth_getLogs; receipts report the real gasUsed. Fixes a bug where the proposing delegate had no receipt data for its own blocks, so a receipt answered by the leader could show success and 0 gas even for a reverted transaction. All delegates and xtgw must run 0.10.30 (new messages). receipts_root is unchanged, so existing chains keep validating. The portal shows gas used and decoded events after a write.
- 0.10.29 developer portal: every xtgw serves a web page at its RPC port (
http://<xtgw-host>:<rpc-port>/) with wallet, contract deploy (shard-aligning self-transfers are sent automatically), contract call/read, explorer (blocks, transactions, addresses, 2PC records) and faucet. Developers need no delegate, no Console and no MetaMask setup. Deploy contracts with the portal or the Console only; use MetaMask for transfers and calls.
- 0.10.29 xtgw faucet (testnet only): set
faucet_private_key_hex (optional faucet_drip_wei, default 1 XTT; faucet_cooldown_secs, default 3600) in the chain's [[chains]] entry of xtgw.toml. Network-map-driven gateways (no [[chains]] entry) put the same three faucet_* lines at the TOP LEVEL of xtgw.toml, before the first [table]/[[table]] header. The key sits in plain text; use a dedicated account holding only test funds. The account must be funded at genesis or by a transfer, and its own shard must be reachable.
- Console 0.8.77 Developer mode (top-bar toggle): hides node-management screens (instances, New chain, Tools, Connect, Add operator) and shows the portal for a gateway address, plus Keys, Shard lookup and Manuals.
- Wallet txs (MetaMask/Remix) work end to end: eth_chain_id auto-derived on delegates, receipts with contractAddress, eth_getCode, xtgw relay logging.
- Fork auto-recovery (backup + state-sync, 3 attempts) instead of permanent halt; requires auto-restart.
- No built-in per-block synthetic txs for new chains (
synthetic_txs = false).
- Console: constructor args, log search, bulk auto-restart, Faucet, Explorer Checkpoints panel, Cross-shard (2PC) tool (per-shard transfers or contract calls with ABI builder, shard and balance checks).
- Console Contract deploy/call and Faucet go through the xtgw RPC (wallet-style signing); no delegate selection. Needs xtcn 0.10.24+ on the Console machine.
- xtgw rejects wallet contract deployments whose address would hash to another shard (error tells which nonce to use).
- From 0.10.24 every node checks
zero_gas_mode / fee_market_enabled / treasury against the signed genesis manifest on EVERY start (before, only on a fresh start), and refuses to start on a mismatch.
- From 0.10.28: a delegate whose election view disagrees with the group (rejects a quorum-verified block as "proposer N is not a legitimate leader") now runs the fork auto-recovery (state sync) instead of retrying forever; xtgw reads each shard from a delegate at the majority-committed tip and warns about delegates that are behind; the "inert value-only call" WARNING only appears for calls with calldata.
- From 0.10.28: xtgw
eth_estimateGas returns a realistic value for contract creation and calls with calldata (it used to always answer 21000, so Console deploys got "gas limit 27300", ran out of gas and never created the contract).
- Console 0.8.75: Contract deploy/call modals have a "Refresh balance" button next to each wallet balance.
- From 0.10.28: xtgw sends each wallet-signed transaction to EVERY delegate of the sender's shard (a delegate only proposes from its own mempool; a standby/suspended one used to hold the tx forever, so deploys and transfers were never mined).
- Gas fix: empty-data call to a contract gets 300k gas.
Known limitations
- Events:
eth_getLogs and receipt logs work (address/topic filters, shard block numbers), but cover about a day per shard by default (configurable, persisted on disk since 0.10.31, absent for blocks a delegate only synced); no blockHash filter, no eth_newFilter/subscriptions, logsBloom is zero. Plain transfers report gasUsed 0.
- Contracts deployed via wallets may hash to another shard than the deployer -> inert calls (use console deploy).
- Receipts/tx locations are in-memory (lost on restart).
- All delegates must run the same version.