Propagate weight to parent's full/empty variants

This commit is contained in:
Michael Sproul
2026-03-19 11:38:05 +11:00
parent 46a909bfa8
commit ab1305d490

View File

@@ -432,14 +432,24 @@ impl ProtoArray {
// FULL/EMPTY virtual node based on the voter's `payload_present` // FULL/EMPTY virtual node based on the voter's `payload_present`
// flag, NOT based on which child the vote goes through. // flag, NOT based on which child the vote goes through.
// Propagate each child's full/empty deltas independently. // Propagate each child's full/empty deltas independently.
parent_delta.full_delta = parent_delta match node.parent_payload_status() {
.full_delta Ok(PayloadStatus::Full) => {
.checked_add(node_full_delta) parent_delta.full_delta = parent_delta
.ok_or(Error::DeltaOverflow(parent_index))?; .full_delta
parent_delta.empty_delta = parent_delta .checked_add(delta)
.empty_delta .ok_or(Error::DeltaOverflow(parent_index))?;
.checked_add(node_empty_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.
}
}
} }
} }