From ab1305d49063cf5baa6df082e9c54083018c894a Mon Sep 17 00:00:00 2001 From: Michael Sproul Date: Thu, 19 Mar 2026 11:38:05 +1100 Subject: [PATCH] Propagate weight to parent's full/empty variants --- consensus/proto_array/src/proto_array.rs | 26 ++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/consensus/proto_array/src/proto_array.rs b/consensus/proto_array/src/proto_array.rs index a42a1891cb..50249430c9 100644 --- a/consensus/proto_array/src/proto_array.rs +++ b/consensus/proto_array/src/proto_array.rs @@ -432,14 +432,24 @@ impl ProtoArray { // FULL/EMPTY virtual node based on the voter's `payload_present` // flag, NOT based on which child the vote goes through. // Propagate each child's full/empty deltas independently. - parent_delta.full_delta = parent_delta - .full_delta - .checked_add(node_full_delta) - .ok_or(Error::DeltaOverflow(parent_index))?; - parent_delta.empty_delta = parent_delta - .empty_delta - .checked_add(node_empty_delta) - .ok_or(Error::DeltaOverflow(parent_index))?; + match node.parent_payload_status() { + Ok(PayloadStatus::Full) => { + parent_delta.full_delta = parent_delta + .full_delta + .checked_add(delta) + .ok_or(Error::DeltaOverflow(parent_index))?; + } + Ok(PayloadStatus::Empty) => { + parent_delta.empty_delta = parent_delta + .empty_delta + .checked_add(delta) + .ok_or(Error::DeltaOverflow(parent_index))?; + } + Ok(PayloadStatus::Pending) | Err(..) => { + // Pending is not reachable. Parent payload status must be Full or Empty. + // TODO(gloas): add ParentPayloadStatus = Full | Empty. + } + } } }