Skip to content

Commit cc8a83b

Browse files
authored
docs: changelog for v0.46.0 (#2903)
Description --- Brings the v0.46.0 changelog entry up to date with every commit since #2826, folds in the `Unreleased` section, and dates the entry 2026-10-13. Motivation and Context --- The entry only covered commits up to #2825. The `Unreleased` notes about resetting networks started on 0.46.0 are reworded: 0.46.0 was never tagged, so the reset applies to every non-esmeralda network whose genesis moves to V2. How Has This Been Tested? --- `release_check.py` reports no blockers other than the then-uncommitted tree.
1 parent d5d1411 commit cc8a83b

1 file changed

Lines changed: 67 additions & 29 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 67 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,51 +3,89 @@
33
All notable changes to this project will be documented in this file.
44
See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
55

6-
## Unreleased
6+
## [0.46.0](https://github.com/tari-project/tari-ootle/compare/v0.45.0...v0.46.0) (2026-10-13)
77

8-
### ⚠️ Upgrade notes
9-
10-
- **Protocol V2 now also binds every substate proof to its shard**: each leaf of a block's state merkle root
11-
commits to its shard. No persistent network depends on V2 state roots yet: esmeralda has not scheduled V2.
12-
- **V2 state merkle roots change, so every network started on V2 must be reset.** Any non-esmeralda network or
13-
local database started on 0.46.0 (igor, nextnet, stagenet, mainnet, localnet) runs V2 from genesis; wipe its
14-
data directory before upgrading. `check_activation_schedule` does not detect this, because the genesis
15-
version is unchanged.
16-
- **Blocks bound the input bytes they pledge across shard groups and the foreign proposals they carry**:
17-
validators upgrade together, and a cross-shard transaction whose inputs in one shard group exceed 1.5 MiB now
18-
aborts with `INPUT_PLEDGE_TOO_LARGE`. (#2894)
19-
20-
## [0.46.0](https://github.com/tari-project/tari-ootle/compare/v0.45.0...v0.46.0) (2026-10-07)
21-
22-
Introduces protocol version V2, whose block headers commit to a transaction merkle root. Also fixes
23-
burn claims, bounds per-transaction and per-block state writes, and hardens networking, the indexer
24-
and the wallet against misbehaving peers.
8+
Introduces protocol version V2: block headers commit to a transaction merkle root, substate proofs
9+
bind to their shard, and foreign pledges are authenticated. Esmeralda activates V2 at epoch 12220.
10+
Validator storage moves hot consensus state into memory, and a broad hardening pass bounds what
11+
peers, templates and transactions can make a node do.
2512

2613
### ⚠️ Upgrade notes
2714

28-
- **Esmeralda activates protocol V2 at epoch 12220**; every other network starts at V2. All
29-
esmeralda validators and indexers must run 0.46.0 before that epoch. (#2804)
30-
- **A claimed burn UTXO is minted to the claim key, not the sealer.** (#2800)
15+
- **Esmeralda activates protocol V2 at epoch 12220.** All esmeralda validators and indexers must run
16+
0.46.0 before that epoch. (#2804, #2762, #2798)
17+
- **Every other network starts at V2 and must be reset**; wipe its data directory before
18+
upgrading. (#2804, #2867)
19+
- **Validator databases migrate on first start** and cannot then be opened by an older binary.
20+
(#2862, #2863, #2868, #2878)
21+
- **Template return values are no longer in transaction results** or dry runs; read component state
22+
or events instead, and use `TemplateTest::return_values()` in tests. (#2859)
23+
- **Publish fees change** and modules with too many functions or too much compile work are refused.
24+
(#2881)
25+
- **Cross-shard transactions whose inputs in one shard group exceed 1.5 MiB abort** with
26+
`INPUT_PLEDGE_TOO_LARGE`. (#2894)
3127
- **Transactions may persist at most 4 MiB of state**; larger ones fail. (#2821)
28+
- **m-of-n access rules that list a requirement twice are rejected.** (#2851)
29+
- **A claimed burn UTXO is minted to the claim key, not the sealer.** (#2800)
30+
- **Wallet daemon: only the wallet's own session can approve a transaction request.** API keys can no
31+
longer hold that grant, and WebRTC apps need walletd started with `--enable-webrtc`. (#2855)
3232

3333
### Features
3434

35-
- **Transaction merkle root in block headers** (V2), proving whether a block finalized a
36-
transaction. (#2804)
35+
- **Transaction merkle root in block headers**, proving whether a block finalized a transaction. (#2804)
36+
- **Shard-bound substate proofs and sound Down proofs.** (#2762, #2867)
37+
- **Wallet daemon signing requests** for out-of-band co-signing, with an approval page in the UI.
38+
(#2849, #2850)
39+
- **Faster validator storage**: substate locks, block diffs and pending state tree diffs are held in
40+
memory. (#2862, #2863, #2868, #2879)
3741

3842
### Bug fixes
3943

40-
- **consensus:** blocks bound the bytes they write per shard, so state sync can always progress. (#2821)
44+
- **consensus:** foreign pledge values and embedded foreign proposals are authenticated. (#2798, #2827)
45+
- **consensus:** blocks bound the bytes they write per shard and pledge across shard groups, and
46+
the foreign proposals they carry. (#2821, #2894)
47+
- **consensus:** proposals are packed in random order and oversized transactions get a capped share
48+
of a block. (#2866)
49+
- **consensus:** a timeout certificate is bound to its epoch and view, and the future-epoch sync
50+
probe to the local shard group. (#2835, #2836)
4151
- **consensus:** the leader-skip walk saturates at the top of the height range. (#2825)
4252
- **engine:** nested template calls share one WASM compute budget. (#2817)
53+
- **engine:** scanning and decoding call arguments, and handling return values, are charged. (#2858, #2888)
54+
- **engine:** template log output is bounded and reaches the host log only once the receipt keeps
55+
it. (#2882, #2884)
56+
- **engine:** event topics and view keys are validated in full. (#2880, #2895)
57+
- **transaction:** access rules and call arguments are bounded at decode, and the builder signs the
58+
finished body. (#2852, #2893)
59+
- **template_builtin:** the liquidity pool rejects confidential deposits, and the account vault map
60+
is bounded. (#2853, #2900)
61+
- **template_macros:** constructors returning a tuple compile. (#2871)
62+
- **state sync:** liveness is hardened, streamed state is proven only at proof points, and pruned
63+
blocks' state versions stay provable. (#2864, #2876, #2878)
64+
- **state sync:** batches split by encoded size. (#2812)
65+
- **storage:** down proofs, state version proofs and commit proofs are pruned once nothing cites
66+
them. (#2874, #2877)
67+
- **storage:** a block's commands are held in a validated canonical list, and a non-numeric block
68+
filter matches nothing. (#2869, #2897)
4369
- **epoch_manager:** committees are reassigned when the current epoch's hash is corrected. (#2810)
44-
- **networking:** idle RPC sessions close and inbound connections are capped. (#2816)
45-
- **validator:** state sync batches split by encoded size; the metrics server is split from JSON-RPC. (#2812, #2815)
46-
- **indexer:** remaining public read routes are rate limited and checkpoint pages capped at 20. (#2823)
70+
- **networking:** idle RPC sessions close, inbound connections and peer-learnt relays are capped,
71+
and direct messages decode in the consumer. (#2816, #2856, #2887, #2896)
72+
- **validator:** the metrics server is split from JSON-RPC. (#2815)
73+
- **indexer:** transaction results need committee agreement, verified substate reads need a recent
74+
anchor, and public read routes are rate limited. (#2823, #2838, #2885)
75+
- **indexer:** submit bursts no longer fail with "database is locked", and cached component state
76+
keeps null. (#2865, #2870)
4777
- **wallet:** indexer requests are bounded so an unresponsive indexer fails over, and substates
4878
whose value does not match their id are refused. (#2802, #2813)
49-
- **walletd:** a burn claim's revealed fee is capped at its local price, and a transfer proof's
50-
change nets out the revealed amount. (#2803, #2824)
79+
- **wallet:** confidential outputs finalize against the transaction diff, and paying a fee with a
80+
swap needs an explicit swap input. (#2837, #2898)
81+
- **walletd:** a burn claim's revealed fee is capped at its local price, a transfer proof's change
82+
nets out the revealed amount, `detect_inputs` refuses signed submissions, and pending WebAuthn
83+
sessions are bounded. (#2803, #2824, #2854, #2899)
84+
85+
### Dependencies
86+
87+
- **wasmer 7.5.0**; event-listener, cxx and gix-hash bumped to drop unsound or advisory-flagged
88+
releases. (#2828, #2829, #2830, #2831, #2834)
5189

5290
## [0.45.0](https://github.com/tari-project/tari-ootle/compare/v0.44.0...v0.45.0) (2026-10-06)
5391

0 commit comments

Comments
 (0)