mirror of
https://github.com/aljazceru/cdk.git
synced 2025-12-20 14:14:49 +01:00
feat(mint): issued and redeamed by keyset
This commit is contained in:
@@ -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)?;
|
||||
|
||||
Reference in New Issue
Block a user