Skip to content

Commit 92d3361

Browse files
committed
Add Impl for CloseChannel Api
1 parent e63d1ae commit 92d3361

File tree

3 files changed

+36
-6
lines changed

3 files changed

+36
-6
lines changed

server/src/api/close_channel.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
use ldk_node::bitcoin::secp256k1::PublicKey;
2+
use ldk_node::{Node, UserChannelId};
3+
use protos::{CloseChannelRequest, CloseChannelResponse};
4+
use std::str::FromStr;
5+
use std::sync::Arc;
6+
7+
pub(crate) const CLOSE_CHANNEL_PATH: &str = "CloseChannel";
8+
9+
pub(crate) fn handle_close_channel_request(
10+
node: Arc<Node>, request: CloseChannelRequest,
11+
) -> Result<CloseChannelResponse, ldk_node::NodeError> {
12+
//TODO: Should this be string?
13+
let mut user_channel_id_bytes = [0u8; 16];
14+
user_channel_id_bytes.copy_from_slice(&request.user_channel_id);
15+
let user_channel_id = UserChannelId(u128::from_be_bytes(user_channel_id_bytes));
16+
let counterparty_node_id = PublicKey::from_str(&request.counterparty_node_id)
17+
.map_err(|_| ldk_node::NodeError::InvalidPublicKey)?;
18+
19+
match request.force_close {
20+
Some(true) => node.force_close_channel(&user_channel_id, counterparty_node_id)?,
21+
_ => node.close_channel(&user_channel_id, counterparty_node_id)?,
22+
};
23+
24+
let response = CloseChannelResponse {};
25+
Ok(response)
26+
}

server/src/api/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ pub(crate) mod bolt11_receive;
22
pub(crate) mod bolt11_send;
33
pub(crate) mod bolt12_receive;
44
pub(crate) mod bolt12_send;
5+
pub(crate) mod close_channel;
56
pub(crate) mod onchain_receive;
67
pub(crate) mod onchain_send;
78
pub(crate) mod open_channel;

server/src/service.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,22 @@ use std::future::Future;
1111
use std::pin::Pin;
1212
use std::sync::Arc;
1313

14-
use crate::api::onchain_receive::handle_onchain_receive_request;
15-
use crate::api::onchain_receive::ONCHAIN_RECEIVE_PATH;
16-
use crate::api::onchain_send::handle_onchain_send_request;
17-
use crate::api::onchain_send::ONCHAIN_SEND_PATH;
1814
use crate::api::bolt11_receive::handle_bolt11_receive_request;
1915
use crate::api::bolt11_receive::BOLT11_RECEIVE_PATH;
20-
use crate::api::open_channel::handle_open_channel;
21-
use crate::api::open_channel::OPEN_CHANNEL_PATH;
2216
use crate::api::bolt11_send::handle_bolt11_send_request;
2317
use crate::api::bolt11_send::BOLT11_SEND_PATH;
2418
use crate::api::bolt12_receive::handle_bolt12_receive_request;
2519
use crate::api::bolt12_receive::BOLT12_RECEIVE_PATH;
2620
use crate::api::bolt12_send::handle_bolt12_send_request;
2721
use crate::api::bolt12_send::BOLT12_SEND_PATH;
22+
use crate::api::close_channel::handle_close_channel_request;
23+
use crate::api::close_channel::CLOSE_CHANNEL_PATH;
24+
use crate::api::onchain_receive::handle_onchain_receive_request;
25+
use crate::api::onchain_receive::ONCHAIN_RECEIVE_PATH;
26+
use crate::api::onchain_send::handle_onchain_send_request;
27+
use crate::api::onchain_send::ONCHAIN_SEND_PATH;
28+
use crate::api::open_channel::handle_open_channel;
29+
use crate::api::open_channel::OPEN_CHANNEL_PATH;
2830

2931
#[derive(Clone)]
3032
pub struct NodeService {
@@ -58,6 +60,7 @@ impl Service<Request<Incoming>> for NodeService {
5860
},
5961
BOLT12_SEND_PATH => Box::pin(handle_request(node, req, handle_bolt12_send_request)),
6062
OPEN_CHANNEL_PATH => Box::pin(handle_request(node, req, handle_open_channel)),
63+
CLOSE_CHANNEL_PATH => Box::pin(handle_request(node, req, handle_close_channel_request)),
6164
path => {
6265
let error = format!("Unknown request: {}", path).into_bytes();
6366
Box::pin(async {

0 commit comments

Comments
 (0)