Skip to content

Commit 62823ea

Browse files
authored
Merge pull request #50 from fedimint/v0.4.3
2 parents 0747ec6 + ca34571 commit 62823ea

33 files changed

+690
-682
lines changed

Cargo.lock

Lines changed: 572 additions & 550 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ members = ["multimint", "fedimint-clientd", "fedimint-nwc"]
33
resolver = "2"
44

55
[workspace.package]
6-
version = "0.3.7"
6+
version = "0.4.0"
77
edition = "2021"
88
repository = "https://github.com/fedimint/fedimint-clientd"
99
keywords = ["fedimint", "bitcoin", "lightning", "ecash"]
@@ -12,13 +12,14 @@ readme = "README.md"
1212
authors = ["The Fedimint Developers"]
1313

1414
[workspace.dependencies]
15-
fedimint-client = "0.3.3"
16-
fedimint-core = "0.3.3"
17-
fedimint-wallet-client = "0.3.3"
18-
fedimint-mint-client = "0.3.3"
19-
fedimint-ln-client = "0.3.3"
20-
fedimint-ln-common = "0.3.3"
21-
fedimint-rocksdb = "0.3.3"
15+
fedimint-api-client = "0.4.2"
16+
fedimint-client = "0.4.2"
17+
fedimint-core = "0.4.2"
18+
fedimint-wallet-client = "0.4.2"
19+
fedimint-mint-client = "0.4.2"
20+
fedimint-ln-client = "0.4.2"
21+
fedimint-ln-common = "0.4.2"
22+
fedimint-rocksdb = "0.4.2"
2223

2324
# Config for 'cargo dist'
2425
[workspace.metadata.dist]

fedimint-clientd/Cargo.toml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,18 @@ url = "2.5.0"
2424
lazy_static = "1.4.0"
2525
async-utility = "0.2.0"
2626
tower-http = { version = "0.5.2", features = ["cors", "auth", "trace"] }
27-
bitcoin = "0.29.2"
2827
itertools = "0.12.0"
2928
lnurl-rs = { version = "0.5.0", features = ["async"], default-features = false }
3029
reqwest = { version = "0.12.3", features = [
3130
"json",
3231
"rustls-tls",
3332
], default-features = false }
34-
lightning-invoice = { version = "0.26.0", features = ["serde"] }
35-
bitcoin_hashes = "0.13.0"
33+
bitcoin = "0.30.2"
3634
time = { version = "0.3.25", features = ["formatting"] }
3735
chrono = "0.4.31"
3836
futures-util = "0.3.30"
3937
clap = { version = "3", features = ["derive", "env"] }
40-
multimint = { version = "0.3.8" }
38+
multimint = { version = "0.4.0" }
4139
# multimint = { path = "../multimint" }
4240
hex = "0.4.3"
4341

fedimint-clientd/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use axum::response::IntoResponse;
1111
use futures::future::TryFutureExt;
1212
use futures::try_join;
1313
use metrics_exporter_prometheus::{Matcher, PrometheusBuilder, PrometheusHandle};
14-
use multimint::fedimint_core::api::InviteCode;
14+
use multimint::fedimint_core::invite_code::InviteCode;
1515
use router::handlers::{admin, ln, mint, onchain};
1616
use router::ws::websocket_handler;
1717
use tower_http::cors::{Any, CorsLayer};

fedimint-clientd/src/router/handlers/admin/config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::state::AppState;
1111
async fn _config(multimint: MultiMint) -> Result<Value, AppError> {
1212
let mut config = HashMap::new();
1313
for (id, client) in multimint.clients.lock().await.iter() {
14-
config.insert(*id, client.get_config_json());
14+
config.insert(*id, client.config().await.to_json());
1515
}
1616
Ok(serde_json::to_value(config)
1717
.map_err(|e| anyhow::anyhow!("Client config is serializable: {e}"))?)
Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,32 @@
11
use std::collections::HashMap;
22

33
use axum::extract::State;
4-
use axum::http::StatusCode;
54
use axum::Json;
65
use multimint::MultiMint;
7-
use serde::Deserialize;
86
use serde_json::{json, Value};
97

108
use crate::error::AppError;
119
use crate::state::AppState;
1210

13-
#[derive(Debug, Clone, Deserialize)]
14-
pub struct DiscoverVersionRequest {
15-
threshold: Option<usize>,
16-
}
17-
18-
async fn _discover_version(
19-
multimint: MultiMint,
20-
threshold: Option<usize>,
21-
) -> Result<Value, AppError> {
11+
async fn _discover_version(multimint: MultiMint) -> Result<Value, AppError> {
2212
let mut api_versions = HashMap::new();
2313
for (id, client) in multimint.clients.lock().await.iter() {
2414
api_versions.insert(
2515
*id,
26-
json!({"version" : client.discover_common_api_version(threshold).await?}),
16+
json!({"version" : client.load_and_refresh_common_api_version().await?}),
2717
);
2818
}
2919
Ok(json!(api_versions))
3020
}
3121

32-
pub async fn handle_ws(state: AppState, v: Value) -> Result<Value, AppError> {
33-
let v = serde_json::from_value::<DiscoverVersionRequest>(v).map_err(|e| {
34-
AppError::new(
35-
StatusCode::BAD_REQUEST,
36-
anyhow::anyhow!("Invalid request: {}", e),
37-
)
38-
})?;
39-
let version = _discover_version(state.multimint, v.threshold).await?;
22+
pub async fn handle_ws(state: AppState) -> Result<Value, AppError> {
23+
let version = _discover_version(state.multimint).await?;
4024
let version_json = json!(version);
4125
Ok(version_json)
4226
}
4327

4428
#[axum_macros::debug_handler]
45-
pub async fn handle_rest(
46-
State(state): State<AppState>,
47-
Json(req): Json<DiscoverVersionRequest>,
48-
) -> Result<Json<Value>, AppError> {
49-
let version = _discover_version(state.multimint, req.threshold).await?;
29+
pub async fn handle_rest(State(state): State<AppState>) -> Result<Json<Value>, AppError> {
30+
let version = _discover_version(state.multimint).await?;
5031
Ok(Json(version))
5132
}

fedimint-clientd/src/router/handlers/admin/info.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use anyhow::Error;
44
use axum::extract::State;
55
use axum::Json;
66
use multimint::fedimint_core::config::FederationId;
7-
use multimint::fedimint_core::{Amount, TieredSummary};
7+
use multimint::fedimint_core::{Amount, TieredCounts};
88
use multimint::fedimint_mint_client::MintClientModule;
99
use multimint::fedimint_wallet_client::WalletClientModule;
1010
use multimint::MultiMint;
@@ -21,7 +21,7 @@ pub struct InfoResponse {
2121
pub meta: BTreeMap<String, String>,
2222
pub total_amount_msat: Amount,
2323
pub total_num_notes: usize,
24-
pub denominations_msat: TieredSummary,
24+
pub denominations_msat: TieredCounts,
2525
}
2626

2727
async fn _info(multimint: MultiMint) -> Result<HashMap<FederationId, InfoResponse>, Error> {
@@ -44,7 +44,7 @@ async fn _info(multimint: MultiMint) -> Result<HashMap<FederationId, InfoRespons
4444
*id,
4545
InfoResponse {
4646
network: wallet_client.get_network().to_string(),
47-
meta: client.get_config().global.meta.clone(),
47+
meta: client.config().await.global.meta.clone(),
4848
total_amount_msat: summary.total_amount(),
4949
total_num_notes: summary.count_items(),
5050
denominations_msat: summary,

fedimint-clientd/src/router/handlers/admin/join.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ use anyhow::{anyhow, Error};
44
use axum::extract::State;
55
use axum::http::StatusCode;
66
use axum::Json;
7-
use multimint::fedimint_core::api::InviteCode;
87
use multimint::fedimint_core::config::FederationId;
8+
use multimint::fedimint_core::invite_code::InviteCode;
99
use multimint::MultiMint;
1010
use serde::{Deserialize, Serialize};
1111
use serde_json::{json, Value};

fedimint-clientd/src/router/handlers/admin/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ pub async fn _get_note_summary(client: &ClientHandleArc) -> anyhow::Result<InfoR
2727
.await;
2828
Ok(InfoResponse {
2929
network: wallet_client.get_network().to_string(),
30-
meta: client.get_config().global.meta.clone(),
30+
meta: client.config().await.global.meta.clone(),
3131
total_amount_msat: summary.total_amount(),
3232
total_num_notes: summary.count_items(),
3333
denominations_msat: summary,

fedimint-clientd/src/router/handlers/ln/await_invoice.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ async fn _await_invoice(
3737
.await?
3838
.into_stream();
3939
info!(
40-
"Created await invoice stream for operation id: {}",
40+
"Created await invoice stream for operation id: {:?}",
4141
req.operation_id
4242
);
4343
while let Some(update) = updates.next().await {

fedimint-clientd/src/router/handlers/ln/claim_external_receive_tweaked.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@ use anyhow::anyhow;
22
use axum::extract::State;
33
use axum::http::StatusCode;
44
use axum::Json;
5-
use bitcoin::secp256k1::{Secp256k1, SecretKey};
6-
use bitcoin::util::key::KeyPair;
75
use futures_util::StreamExt;
86
use multimint::fedimint_client::ClientHandleArc;
97
use multimint::fedimint_core::config::FederationId;
8+
use multimint::fedimint_core::secp256k1::{KeyPair, Secp256k1, SecretKey};
109
use multimint::fedimint_ln_client::{LightningClientModule, LnReceiveState};
1110
use serde::{Deserialize, Serialize};
1211
use serde_json::{json, Value};
@@ -46,7 +45,7 @@ async fn _await_claim_external_receive_tweaked(
4645
.await?
4746
.into_stream();
4847
info!(
49-
"Created claim external receive tweaked stream for operation id: {}",
48+
"Created claim external receive tweaked stream for operation id: {:?}",
5049
operation_id
5150
);
5251
while let Some(update) = updates.next().await {

fedimint-clientd/src/router/handlers/ln/invoice.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ use anyhow::anyhow;
22
use axum::extract::State;
33
use axum::http::StatusCode;
44
use axum::Json;
5-
use bitcoin::secp256k1::PublicKey;
6-
use lightning_invoice::{Bolt11InvoiceDescription, Description};
75
use multimint::fedimint_client::ClientHandleArc;
86
use multimint::fedimint_core::config::FederationId;
97
use multimint::fedimint_core::core::OperationId;
8+
use multimint::fedimint_core::secp256k1::PublicKey;
109
use multimint::fedimint_core::Amount;
1110
use multimint::fedimint_ln_client::LightningClientModule;
11+
use multimint::fedimint_ln_common::lightning_invoice::{Bolt11InvoiceDescription, Description};
1212
use serde::{Deserialize, Serialize};
1313
use serde_json::{json, Value};
1414
use tracing::error;

fedimint-clientd/src/router/handlers/ln/invoice_external_pubkey_tweaked.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ use anyhow::anyhow;
22
use axum::extract::State;
33
use axum::http::StatusCode;
44
use axum::Json;
5-
use bitcoin::secp256k1::PublicKey;
6-
use lightning_invoice::{Bolt11InvoiceDescription, Description};
75
use multimint::fedimint_client::ClientHandleArc;
86
use multimint::fedimint_core::config::FederationId;
97
use multimint::fedimint_core::core::OperationId;
8+
use multimint::fedimint_core::secp256k1::PublicKey;
109
use multimint::fedimint_core::Amount;
1110
use multimint::fedimint_ln_client::LightningClientModule;
11+
use multimint::fedimint_ln_common::lightning_invoice::{Bolt11InvoiceDescription, Description};
1212
use serde::{Deserialize, Serialize};
1313
use serde_json::{json, Value};
1414
use tracing::error;

fedimint-clientd/src/router/handlers/ln/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ use std::str::FromStr;
22

33
use anyhow::{bail, Context};
44
use futures_util::StreamExt;
5-
use lightning_invoice::Bolt11Invoice;
65
use multimint::fedimint_client::ClientHandleArc;
76
use multimint::fedimint_core::Amount;
87
use multimint::fedimint_ln_client::{InternalPayState, LightningClientModule, LnPayState, PayType};
8+
use multimint::fedimint_ln_common::lightning_invoice::Bolt11Invoice;
99
use tracing::{debug, info};
1010

1111
use self::pay::{LnPayRequest, LnPayResponse};
@@ -137,11 +137,11 @@ pub async fn wait_for_ln_payment(
137137
LnPayState::Canceled => {
138138
Err(anyhow::anyhow!("Payment was canceled"))?;
139139
}
140+
LnPayState::Funded { block_height: _ } if return_on_funding => return Ok(None),
140141
LnPayState::Created
141142
| LnPayState::AwaitingChange
142-
| LnPayState::WaitingForRefund { .. } => {}
143-
LnPayState::Funded if return_on_funding => return Ok(None),
144-
LnPayState::Funded => {}
143+
| LnPayState::WaitingForRefund { .. }
144+
| LnPayState::Funded { block_height: _ } => {}
145145
LnPayState::UnexpectedError { error_message } => {
146146
bail!("UnexpectedError: {error_message}")
147147
}

fedimint-clientd/src/router/handlers/ln/pay.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ use anyhow::anyhow;
22
use axum::extract::State;
33
use axum::http::StatusCode;
44
use axum::Json;
5-
use bitcoin::secp256k1::PublicKey;
65
use multimint::fedimint_client::ClientHandleArc;
76
use multimint::fedimint_core::config::FederationId;
87
use multimint::fedimint_core::core::OperationId;
8+
use multimint::fedimint_core::secp256k1::PublicKey;
99
use multimint::fedimint_core::Amount;
1010
use multimint::fedimint_ln_client::{LightningClientModule, OutgoingLightningPayment, PayType};
1111
use serde::{Deserialize, Serialize};
@@ -59,7 +59,7 @@ async fn _pay(client: ClientHandleArc, req: LnPayRequest) -> Result<LnPayRespons
5959
.pay_bolt11_invoice(Some(gateway), bolt11, ())
6060
.await?;
6161
let operation_id = payment_type.operation_id();
62-
info!("Gateway fee: {fee}, payment operation id: {operation_id}");
62+
info!("Gateway fee: {fee}, payment operation id: {operation_id:?}");
6363

6464
wait_for_ln_payment(&client, payment_type, contract_id.to_string(), false)
6565
.await?

fedimint-clientd/src/router/handlers/mint/spend.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ async fn _spend(client: ClientHandleArc, req: SpendRequest) -> Result<SpendRespo
7070
)
7171
.await?
7272
};
73-
info!("Spend e-cash operation: {operation}");
73+
info!("Spend e-cash operation: {:?}", operation);
7474
Ok(SpendResponse { operation, notes })
7575
}
7676

fedimint-clientd/src/router/handlers/mint/validate.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ async fn _validate(
2929
) -> Result<ValidateResponse, AppError> {
3030
let amount_msat = client
3131
.get_first_module::<MintClientModule>()
32-
.validate_notes(req.notes)
33-
.await?;
32+
.validate_notes(&req.notes)?;
3433

3534
Ok(ValidateResponse { amount_msat })
3635
}

fedimint-clientd/src/router/handlers/onchain/await_deposit.rs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use futures_util::StreamExt;
66
use multimint::fedimint_client::ClientHandleArc;
77
use multimint::fedimint_core::config::FederationId;
88
use multimint::fedimint_core::core::OperationId;
9-
use multimint::fedimint_wallet_client::{DepositState, WalletClientModule};
9+
use multimint::fedimint_wallet_client::{DepositStateV2, WalletClientModule};
1010
use serde::{Deserialize, Serialize};
1111
use serde_json::{json, Value};
1212

@@ -23,7 +23,7 @@ pub struct AwaitDepositRequest {
2323
#[derive(Debug, Serialize)]
2424
#[serde(rename_all = "camelCase")]
2525
pub struct AwaitDepositResponse {
26-
pub status: DepositState,
26+
pub status: DepositStateV2,
2727
}
2828

2929
async fn _await_deposit(
@@ -32,23 +32,35 @@ async fn _await_deposit(
3232
) -> Result<AwaitDepositResponse, AppError> {
3333
let mut updates = client
3434
.get_first_module::<WalletClientModule>()
35-
.subscribe_deposit_updates(req.operation_id)
35+
.subscribe_deposit(req.operation_id)
3636
.await?
3737
.into_stream();
3838

3939
while let Some(update) = updates.next().await {
4040
match update {
41-
DepositState::Confirmed(tx) => {
41+
DepositStateV2::Confirmed {
42+
btc_deposited,
43+
btc_out_point,
44+
} => {
4245
return Ok(AwaitDepositResponse {
43-
status: DepositState::Confirmed(tx),
46+
status: DepositStateV2::Confirmed {
47+
btc_deposited,
48+
btc_out_point,
49+
},
4450
})
4551
}
46-
DepositState::Claimed(tx) => {
52+
DepositStateV2::Claimed {
53+
btc_deposited,
54+
btc_out_point,
55+
} => {
4756
return Ok(AwaitDepositResponse {
48-
status: DepositState::Claimed(tx),
57+
status: DepositStateV2::Claimed {
58+
btc_deposited,
59+
btc_out_point,
60+
},
4961
})
5062
}
51-
DepositState::Failed(reason) => {
63+
DepositStateV2::Failed(reason) => {
5264
return Err(AppError::new(
5365
StatusCode::INTERNAL_SERVER_ERROR,
5466
anyhow!(reason),

0 commit comments

Comments
 (0)