feat(mint): issued and redeamed by keyset

This commit is contained in:
thesimplekid
2024-07-25 08:43:14 -04:00
parent 53c75a4d15
commit ba19663531
5 changed files with 163 additions and 12 deletions

View File

@@ -573,6 +573,35 @@ WHERE y=?;
Ok(states)
}
async fn get_proofs_by_keyset_id(
&self,
keyset_id: &Id,
) -> Result<(Proofs, Vec<Option<State>>), Self::Err> {
let rec = sqlx::query(
r#"
SELECT *
FROM proof
WHERE keyset_id=?;
"#,
)
.bind(keyset_id.to_string())
.fetch_all(&self.pool)
.await
.map_err(Error::from)?;
let mut proofs_for_id = vec![];
let mut states = vec![];
for row in rec {
let (proof, state) = sqlite_row_to_proof_with_state(row)?;
proofs_for_id.push(proof);
states.push(state);
}
Ok((proofs_for_id, states))
}
async fn update_proofs_states(
&self,
ys: &[PublicKey],
@@ -657,7 +686,7 @@ VALUES (?, ?, ?, ?);
Ok(())
}
async fn get_blinded_signatures(
async fn get_blind_signatures(
&self,
blinded_messages: &[PublicKey],
) -> Result<Vec<Option<BlindSignature>>, Self::Err> {
@@ -686,7 +715,7 @@ WHERE y=?;
Ok(signatures)
}
async fn get_blinded_signatures_for_keyset(
async fn get_blind_signatures_for_keyset(
&self,
keyset_id: &Id,
) -> Result<Vec<BlindSignature>, Self::Err> {
@@ -811,6 +840,30 @@ fn sqlite_row_to_proof(row: SqliteRow) -> Result<Proof, Error> {
})
}
fn sqlite_row_to_proof_with_state(row: SqliteRow) -> Result<(Proof, Option<State>), Error> {
let row_amount: i64 = row.try_get("amount").map_err(Error::from)?;
let keyset_id: String = row.try_get("keyset_id").map_err(Error::from)?;
let row_secret: String = row.try_get("secret").map_err(Error::from)?;
let row_c: Vec<u8> = row.try_get("c").map_err(Error::from)?;
let row_witness: Option<String> = row.try_get("witness").map_err(Error::from)?;
let row_state: Option<String> = row.try_get("state").map_err(Error::from)?;
let state = row_state.and_then(|s| State::from_str(&s).ok());
Ok((
Proof {
amount: Amount::from(row_amount as u64),
keyset_id: Id::from_str(&keyset_id)?,
secret: Secret::from_str(&row_secret)?,
c: PublicKey::from_slice(&row_c)?,
witness: row_witness.and_then(|w| serde_json::from_str(&w).ok()),
dleq: None,
},
state,
))
}
fn sqlite_row_to_blind_signature(row: SqliteRow) -> Result<BlindSignature, Error> {
let row_amount: i64 = row.try_get("amount").map_err(Error::from)?;
let keyset_id: String = row.try_get("keyset_id").map_err(Error::from)?;