Skip to content

Commit

Permalink
funding: track votes based on beneficiary + ik
Browse files Browse the repository at this point in the history
  • Loading branch information
erwanor committed Feb 6, 2025
1 parent b8e44eb commit c1125ba
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,14 @@ async fn get_voter_total(
epoch_index: u64,
asset: asset::Id,
voter: &Address,
validator: &IdentityKey,
) -> u64 {
state
.nonverifiable_get_proto(&state_key::lqt::v1::votes::by_voter::total::key(
epoch_index,
asset,
voter,
validator,
))
.await
.expect("should be able to read u64")
Expand All @@ -80,9 +82,10 @@ fn put_voter_total(
asset: asset::Id,
voter: &Address,
total: u64,
validator: &IdentityKey,
) {
state.nonverifiable_put_proto(
state_key::lqt::v1::votes::by_voter::total::key(epoch_index, asset, voter),
state_key::lqt::v1::votes::by_voter::total::key(epoch_index, asset, voter, validator),
total,
)
}
Expand All @@ -93,8 +96,8 @@ fn put_ranked_voter(
asset: asset::Id,
power: u64,
voter: &Address,
tx: TransactionId,
validator: &IdentityKey,
tx: TransactionId,
) {
state.nonverifiable_put(
state_key::lqt::v1::votes::by_voter::ranked::key(
Expand All @@ -114,12 +117,14 @@ fn delete_ranked_voter(
asset: asset::Id,
power: u64,
voter: &Address,
validator: &IdentityKey,
) {
state.nonverifiable_delete(state_key::lqt::v1::votes::by_voter::ranked::key(
epoch_index,
asset,
power,
voter,
validator,
));
}

Expand Down Expand Up @@ -174,7 +179,6 @@ fn add_power(total: u64, power: u64) -> u64 {

#[async_trait]
pub trait StateWriteExt: StateWrite + Sized {
// Keeping this as returning a result to not have to touch other code if it changes to return an error.
async fn tally(
&mut self,
epoch: u64,
Expand All @@ -199,11 +203,11 @@ pub trait StateWriteExt: StateWrite + Sized {
}
// Adjust voter indices.
{
let current = get_voter_total(&self, epoch, asset, voter).await;
delete_ranked_voter(&mut *self, epoch, asset, current, voter);
let current = get_voter_total(&self, epoch, asset, voter, &validator).await;
delete_ranked_voter(&mut *self, epoch, asset, current, voter, &validator);
let new = add_power(current, power);
put_voter_total(&mut *self, epoch, asset, voter, new);
put_ranked_voter(&mut self, epoch, asset, new, voter, tx, validator);
put_voter_total(&mut *self, epoch, asset, voter, new, &validator);
put_ranked_voter(&mut self, epoch, asset, new, voter, &validator, tx);
}
}
}
Expand Down
4 changes: 4 additions & 0 deletions crates/core/component/funding/src/component/state_key.rs
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,8 @@ pub mod lqt {

pub mod total {

use penumbra_sdk_stake::IdentityKey;

use super::*;

const PART2: &'static str = "total/";
Expand All @@ -149,6 +151,7 @@ pub mod lqt {
epoch_index: u64,
asset: asset::Id,
addr: &Address,
validator: &IdentityKey,
) -> Vec<u8> {
let mut bytes = Vec::with_capacity(KEY_LEN);

Expand All @@ -158,6 +161,7 @@ pub mod lqt {
bytes.extend_from_slice(PART2.as_bytes());
bytes.extend_from_slice(asset.to_bytes().as_slice());
bytes.extend_from_slice(addr.to_vec().as_slice());
bytes.extend_from_slice(validator.to_bytes().as_slice());

bytes
}
Expand Down

0 comments on commit c1125ba

Please sign in to comment.