refactor: wallet for nut04 v1

This commit is contained in:
thesimplekid
2023-12-14 19:33:21 +00:00
parent 681828b947
commit 4191ea68d2
5 changed files with 28 additions and 28 deletions

View File

@@ -4,8 +4,8 @@ use async_trait::async_trait;
#[cfg(feature = "nut09")]
use cashu::nuts::MintInfo;
use cashu::nuts::{
BlindedMessage, Keys, MeltBolt11Request, MeltBolt11Response, MintRequest, PostMintResponse,
PreMintSecrets, Proof, RequestMintResponse, SplitRequest, SplitResponse, *,
BlindedMessage, Keys, MeltBolt11Request, MeltBolt11Response, MintBolt11Request,
MintBolt11Response, PreMintSecrets, Proof, RequestMintResponse, SplitRequest, SplitResponse, *,
};
#[cfg(feature = "nut07")]
use cashu::nuts::{CheckSpendableRequest, CheckSpendableResponse};
@@ -88,13 +88,13 @@ impl Client for HttpClient {
async fn post_mint(
&self,
mint_url: Url,
quote: &str,
premint_secrets: PreMintSecrets,
hash: &str,
) -> Result<PostMintResponse, Error> {
let mut url = join_url(mint_url, "mint")?;
url.query_pairs_mut().append_pair("hash", hash);
) -> Result<MintBolt11Response, Error> {
let url = join_url(mint_url, "mint")?;
let request = MintRequest {
let request = MintBolt11Request {
quote: quote.to_string(),
outputs: premint_secrets.blinded_messages(),
};
@@ -108,7 +108,7 @@ impl Client for HttpClient {
.await
.map_err(|err| Error::Gloo(err.to_string()))?;
let response: Result<PostMintResponse, serde_json::Error> =
let response: Result<MintBolt11Response, serde_json::Error> =
serde_json::from_value(res.clone());
match response {

View File

@@ -6,8 +6,8 @@ use async_trait::async_trait;
#[cfg(feature = "nut09")]
use cashu::nuts::MintInfo;
use cashu::nuts::{
BlindedMessage, Keys, MeltBolt11Request, MeltBolt11Response, MintRequest, PostMintResponse,
PreMintSecrets, Proof, RequestMintResponse, SplitRequest, SplitResponse, *,
BlindedMessage, Keys, MeltBolt11Request, MeltBolt11Response, MintBolt11Request,
MintBolt11Response, PreMintSecrets, Proof, RequestMintResponse, SplitRequest, SplitResponse, *,
};
#[cfg(feature = "nut07")]
use cashu::nuts::{CheckSpendableRequest, CheckSpendableResponse};
@@ -71,13 +71,13 @@ impl Client for HttpClient {
async fn post_mint(
&self,
mint_url: Url,
quote: &str,
premint_secrets: PreMintSecrets,
hash: &str,
) -> Result<PostMintResponse, Error> {
let mut url = join_url(mint_url, "mint")?;
url.query_pairs_mut().append_pair("hash", hash);
) -> Result<MintBolt11Response, Error> {
let url = join_url(mint_url, "mint")?;
let request = MintRequest {
let request = MintBolt11Request {
quote: quote.to_string(),
outputs: premint_secrets.blinded_messages(),
};
@@ -86,7 +86,7 @@ impl Client for HttpClient {
.send()?
.json::<Value>()?;
let response: Result<PostMintResponse, serde_json::Error> =
let response: Result<MintBolt11Response, serde_json::Error> =
serde_json::from_value(res.clone());
match response {

View File

@@ -8,7 +8,7 @@ use cashu::nuts::CheckSpendableResponse;
#[cfg(feature = "nut09")]
use cashu::nuts::MintInfo;
use cashu::nuts::{
BlindedMessage, Keys, KeysetResponse, MeltBolt11Response, PostMintResponse, PreMintSecrets,
BlindedMessage, Keys, KeysetResponse, MeltBolt11Response, MintBolt11Response, PreMintSecrets,
Proof, RequestMintResponse, SplitRequest, SplitResponse,
};
use cashu::{utils, Amount};
@@ -99,9 +99,9 @@ pub trait Client {
async fn post_mint(
&self,
mint_url: Url,
quote: &str,
premint_secrets: PreMintSecrets,
hash: &str,
) -> Result<PostMintResponse, Error>;
) -> Result<MintBolt11Response, Error>;
async fn post_melt(
&self,

View File

@@ -105,16 +105,16 @@ impl Mint {
pub fn process_mint_request(
&mut self,
mint_request: nut04::MintRequest,
) -> Result<nut04::PostMintResponse, Error> {
mint_request: nut04::MintBolt11Request,
) -> Result<nut04::MintBolt11Response, Error> {
let mut blind_signatures = Vec::with_capacity(mint_request.outputs.len());
for blinded_message in mint_request.outputs {
blind_signatures.push(self.blind_sign(&blinded_message)?);
}
Ok(nut04::PostMintResponse {
promises: blind_signatures,
Ok(nut04::MintBolt11Response {
signatures: blind_signatures,
})
}

View File

@@ -94,31 +94,31 @@ impl<C: Client> Wallet<C> {
pub async fn mint_token(
&self,
amount: Amount,
hash: &str,
quote: &str,
memo: Option<String>,
unit: Option<CurrencyUnit>,
) -> Result<Token, Error> {
let proofs = self.mint(amount, hash).await?;
let proofs = self.mint(amount, quote).await?;
let token = Token::new(self.mint_url.clone(), proofs, memo, unit);
Ok(token?)
}
/// Mint Proofs
pub async fn mint(&self, amount: Amount, hash: &str) -> Result<Proofs, Error> {
pub async fn mint(&self, amount: Amount, quote: &str) -> Result<Proofs, Error> {
let premint_secrets = PreMintSecrets::random((&self.mint_keys).into(), amount)?;
let mint_res = self
.client
.post_mint(
self.mint_url.clone().try_into()?,
quote,
premint_secrets.clone(),
hash,
)
.await?;
let proofs = construct_proofs(
mint_res.promises,
mint_res.signatures,
premint_secrets.rs(),
premint_secrets.secrets(),
&self.mint_keys,