Skip to content

Commit 54e68ec

Browse files
foriequal0mergify[bot]
authored andcommitted
Fix not to include zero-valued entry in delegation
1 parent d20ffce commit 54e68ec

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

core/src/consensus/tendermint/stake/action_data.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@ impl<'a> Delegation<'a> {
162162
}
163163

164164
pub fn add_quantity(&mut self, delegatee: Address, quantity: StakeQuantity) -> StateResult<()> {
165+
if quantity == 0 {
166+
return Ok(())
167+
}
165168
*self.delegatees.entry(delegatee).or_insert(0) += quantity;
166169
Ok(())
167170
}
@@ -461,4 +464,41 @@ mod tests {
461464
assert_eq!(delegation.get_quantity(delegatee), delegation_amount[delegatee]);
462465
}
463466
}
467+
468+
#[test]
469+
fn delegation_zero_add_should_not_be_included() {
470+
let mut state = helpers::get_temp_state();
471+
472+
// Prepare
473+
let delegator = Address::random();
474+
let delegatee1 = Address::random();
475+
let delegatee2 = Address::random();
476+
477+
// Do delegate
478+
let mut delegation = Delegation::load_from_state(&state, &delegator).unwrap();
479+
delegation.add_quantity(delegatee1, 100).unwrap();
480+
delegation.add_quantity(delegatee2, 0).unwrap();
481+
delegation.save_to_state(&mut state).unwrap();
482+
483+
let delegation = Delegation::load_from_state(&state, &delegator).unwrap();
484+
let delegated = delegation.iter().collect::<Vec<_>>();
485+
assert_eq!(&delegated, &[(&delegatee1, &100)]);
486+
}
487+
488+
#[test]
489+
fn delegation_empty_removed_from_state() {
490+
let mut state = helpers::get_temp_state();
491+
492+
// Prepare
493+
let delegator = Address::random();
494+
let delegatee = Address::random();
495+
496+
// Do delegate
497+
let mut delegation = Delegation::load_from_state(&state, &delegator).unwrap();
498+
delegation.add_quantity(delegatee, 0).unwrap();
499+
delegation.save_to_state(&mut state).unwrap();
500+
501+
let result = state.action_data(&get_delegation_key(&delegator)).unwrap();
502+
assert_eq!(result, None);
503+
}
464504
}

0 commit comments

Comments
 (0)