|
3 | 3 | All notable changes to this project will be documented in this file. |
4 | 4 | See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. |
5 | 5 |
|
6 | | -## Unreleased |
| 6 | +## [0.46.0](https://github.com/tari-project/tari-ootle/compare/v0.45.0...v0.46.0) (2026-10-13) |
7 | 7 |
|
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. |
25 | 12 |
|
26 | 13 | ### ⚠️ Upgrade notes |
27 | 14 |
|
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) |
31 | 27 | - **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) |
32 | 32 |
|
33 | 33 | ### Features |
34 | 34 |
|
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) |
37 | 41 |
|
38 | 42 | ### Bug fixes |
39 | 43 |
|
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) |
41 | 51 | - **consensus:** the leader-skip walk saturates at the top of the height range. (#2825) |
42 | 52 | - **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) |
43 | 69 | - **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) |
47 | 77 | - **wallet:** indexer requests are bounded so an unresponsive indexer fails over, and substates |
48 | 78 | 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) |
51 | 89 |
|
52 | 90 | ## [0.45.0](https://github.com/tari-project/tari-ootle/compare/v0.44.0...v0.45.0) (2026-10-06) |
53 | 91 |
|
|
0 commit comments