Skip to content

Commit

Permalink
Valset: Reverse ListJailedValidators query so that first iteration go…
Browse files Browse the repository at this point in the history
…es through list of all jailed validators
  • Loading branch information
ueco-jb committed Feb 9, 2022
1 parent 334a6e8 commit e9e5ec4
Showing 1 changed file with 18 additions and 17 deletions.
35 changes: 18 additions & 17 deletions contracts/tgrade-valset/src/contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -540,30 +540,31 @@ fn list_jailed_validators(
let start_after = maybe_addr(deps.api, start_after)?;
let start = start_after.map(|addr| Bound::exclusive(addr.as_str()));

let validators: Vec<OperatorResponse> = operators()
let validators = JAIL
.range(deps.storage, start, None, Order::Ascending)
.map(|r| {
let (operator, info) = r?;

let jailed_until = JAIL
.may_load(deps.storage, &Addr::unchecked(&operator))?
.filter(|expires| !(cfg.auto_unjail && expires.is_expired(&env.block)));
match jailed_until {
Some(jailed_into) => Ok(Some(OperatorResponse {
operator: operator.into(),
metadata: info.metadata,
pubkey: info.pubkey.into(),
jailed_until: Some(jailed_into),
active_validator: info.active_validator,
})),
None => Ok(None),
.map(|jail| {
let (addr, jailing_period) = jail?;
if !(cfg.auto_unjail && jailing_period.is_expired(&env.block)) {
Ok(Some((addr, jailing_period)))
} else {
Ok(None)
}
})
.collect::<Result<Vec<Option<_>>, ContractError>>()?
.into_iter()
.flatten()
.map(|(addr, jailing_period)| {
let info = operators().load(deps.storage, &Addr::unchecked(&addr))?;
Ok(OperatorResponse {
operator: addr.into(),
metadata: info.metadata,
pubkey: info.pubkey.into(),
jailed_until: Some(jailing_period),
active_validator: info.active_validator,
})
})
.take(limit)
.collect();
.collect::<Result<Vec<OperatorResponse>, ContractError>>()?;

Ok(ListValidatorResponse { validators })
}
Expand Down

0 comments on commit e9e5ec4

Please sign in to comment.