Skip to content

Commit

Permalink
bug: remove whole bonds in pairs (#103)
Browse files Browse the repository at this point in the history
  • Loading branch information
mateuszjasiuk authored Aug 20, 2024
1 parent 5a6e397 commit 8c733f3
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 15 deletions.
10 changes: 6 additions & 4 deletions chain/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -244,10 +244,12 @@ async fn crawling_fn(

// We first remove all the bonds that are not in the storage
// anymore
repository::pos::clear_bonds(
transaction_conn,
removed_bonds_addresses,
)?;
if !removed_bonds_addresses.is_empty() {
repository::pos::clear_bonds(
transaction_conn,
removed_bonds_addresses,
)?;
}
repository::pos::insert_bonds(transaction_conn, bonds_updates)?;

repository::pos::insert_unbonds(transaction_conn, unbonds)?;
Expand Down
25 changes: 14 additions & 11 deletions chain/src/repository/pos.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,22 @@ pub fn clear_bonds(
transaction_conn: &mut PgConnection,
addresses: Vec<(Id, Id)>,
) -> anyhow::Result<()> {
let (sources, validators): (Vec<String>, Vec<String>) = addresses
.into_iter()
.map(|(source, validator)| (source.to_string(), validator.to_string()))
.unzip();

diesel::delete(bonds::table)
.filter(bonds::address.eq_any(sources).and(
bonds::validator_id.eq_any(
validators::table.select(validators::columns::id).filter(
validators::columns::namada_address.eq_any(validators),
let mut query = diesel::delete(bonds::table).into_boxed();

for (source, validator) in addresses {
query = query.filter(
bonds::address.eq(source.to_string()).and(
bonds::validator_id.eq_any(
validators::table.select(validators::columns::id).filter(
validators::columns::namada_address
.eq(validator.to_string()),
),
),
),
))
);
}

query
.execute(transaction_conn)
.context("Failed to remove bonds from db")?;

Expand Down

0 comments on commit 8c733f3

Please sign in to comment.