Skip to content

Commit

Permalink
module structure inside state key file
Browse files Browse the repository at this point in the history
  • Loading branch information
TalDerei committed Jan 31, 2025
1 parent 4679c39 commit cedfc5f
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 34 deletions.
1 change: 1 addition & 0 deletions crates/core/component/funding/src/component.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use penumbra_sdk_asset::{Value, STAKING_TOKEN_ASSET_ID};
use penumbra_sdk_proto::{DomainType, StateWriteProto};
use penumbra_sdk_stake::component::validator_handler::ValidatorDataRead;
pub use view::{StateReadExt, StateWriteExt};
pub(crate) mod liquidity_tournament;

use std::sync::Arc;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pub mod nullifier;
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
use async_trait::async_trait;
use penumbra_sdk_txhash::TransactionId;

use crate::component::state_key;
use cnidarium::{StateRead, StateWrite};
use penumbra_sdk_proto::{StateReadProto, StateWriteProto};
use penumbra_sdk_sct::{component::clock::EpochRead, Nullifier};

#[async_trait]
pub trait NullifierRead: StateRead {
/// Gets the transaction id associated with the given nullifier from the JMT.
async fn get_txid_from_nullifier(&self, nullifier: Nullifier) -> Option<TransactionId> {
// Grab the ambient epoch index.
let epoch_index = self
.get_current_epoch()
.await
.expect("epoch is always set")
.index;

let nullifier_key = &state_key::lqt::v1::nf::by_epoch::lqt_nullifier_lookup_for_txid(
epoch_index,
&nullifier,
);

let tx_id: Option<TransactionId> = self
.nonverifiable_get(&nullifier_key.as_bytes())
.await
.expect("infallible");

tx_id
}
}

impl<T: StateRead + ?Sized> NullifierRead for T {}

#[async_trait]
pub trait NullifierWrite: StateWrite {
/// Sets the LQT nullifier in the JMT.
fn put_lqt_nullifier(&mut self, epoch_index: u64, nullifier: Nullifier, tx_id: TransactionId) {
let nullifier_key = state_key::lqt::v1::nf::by_epoch::lqt_nullifier_lookup_for_txid(
epoch_index,
&nullifier,
);

self.put(nullifier_key, tx_id);
}
}

impl<T: StateWrite + ?Sized> NullifierWrite for T {}
19 changes: 15 additions & 4 deletions crates/core/component/funding/src/component/state_key.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,20 @@
use penumbra_sdk_sct::Nullifier;

pub fn staking_funding_parameters() -> &'static str {
"funding/parameters"
}

pub fn lqt_nullifier_lookup_for_txid(epoch_index: u64, nullifier: &Nullifier) -> String {
format!("funding/lqt/v1/nf/by_epoch/{epoch_index:020}/lookup/{nullifier}")
pub mod lqt {
pub mod v1 {
pub mod nf {
pub mod by_epoch {
use penumbra_sdk_sct::Nullifier;

pub(crate) fn lqt_nullifier_lookup_for_txid(
epoch_index: u64,
nullifier: &Nullifier,
) -> String {
format!("funding/lqt/v1/nf/by_epoch/{epoch_index:020}/lookup/{nullifier}")
}
}
}
}
}
31 changes: 1 addition & 30 deletions crates/core/component/funding/src/component/view.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
use async_trait::async_trait;
use penumbra_sdk_txhash::TransactionId;

use crate::{component::state_key, params::FundingParameters};
use anyhow::Result;
use async_trait::async_trait;
use cnidarium::{StateRead, StateWrite};
use penumbra_sdk_proto::{StateReadProto, StateWriteProto};
use penumbra_sdk_sct::{component::clock::EpochRead, Nullifier};

#[async_trait]
pub trait StateReadExt: StateRead {
Expand All @@ -15,25 +12,6 @@ pub trait StateReadExt: StateRead {
.await?
.ok_or_else(|| anyhow::anyhow!("Missing FundingParameters"))
}

/// Gets the transaction id associated with the given nullifier from the JMT.
async fn get_txid_from_nullifier(&self, nullifier: Nullifier) -> Option<TransactionId> {
// Grab the ambient epoch index.
let epoch_index = self
.get_current_epoch()
.await
.expect("epoch is always set")
.index;

let nullifier_key = &state_key::lqt_nullifier_lookup_for_txid(epoch_index, &nullifier);

let tx_id: Option<TransactionId> = self
.nonverifiable_get(&nullifier_key.as_bytes())
.await
.expect("infallible");

tx_id
}
}

impl<T: StateRead + ?Sized> StateReadExt for T {}
Expand All @@ -44,12 +22,5 @@ pub trait StateWriteExt: StateWrite + StateReadExt {
fn put_staking_funding_params(&mut self, params: FundingParameters) {
self.put(state_key::staking_funding_parameters().into(), params)
}

// Sets the LQT nullifier in the JMT.
fn put_lqt_nullifier(&mut self, epoch_index: u64, nullifier: Nullifier, tx_id: TransactionId) {
let nullifier_key = state_key::lqt_nullifier_lookup_for_txid(epoch_index, &nullifier);

self.put(nullifier_key, tx_id);
}
}
impl<T: StateWrite + ?Sized> StateWriteExt for T {}

0 comments on commit cedfc5f

Please sign in to comment.