Skip to content

Commit bf4d8bd

Browse files
authored
Merge pull request #198 from randomlogin/add-network-to-node-info
2 parents 49706c6 + 63e7184 commit bf4d8bd

10 files changed

Lines changed: 105 additions & 16 deletions

File tree

Cargo.lock

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

ldk-server-grpc/build.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ fn generate_protos() {
6969
"types.ClaimableAwaitingConfirmations.source",
7070
"#[cfg_attr(feature = \"serde\", serde(serialize_with = \"crate::serde_utils::serialize_balance_source\"))]",
7171
)
72+
.field_attribute(
73+
"api.GetNodeInfoResponse.network",
74+
"#[cfg_attr(feature = \"serde\", serde(serialize_with = \"crate::serde_utils::serialize_network\"))]",
75+
)
7276
.field_attribute(
7377
"api.UnifiedSendResponse.payment_result",
7478
"#[cfg_attr(feature = \"serde\", serde(flatten))]",

ldk-server-grpc/src/api.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ pub struct GetNodeInfoResponse {
7979
/// Will be empty if no announcement addresses are configured.
8080
#[prost(string, repeated, tag = "12")]
8181
pub node_uris: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
82+
/// The Bitcoin network the node is running on (e.g., "bitcoin", "testnet", "signet", "regtest").
83+
#[prost(enumeration = "super::types::Network", tag = "13")]
84+
#[cfg_attr(feature = "serde", serde(serialize_with = "crate::serde_utils::serialize_network"))]
85+
pub network: i32,
8286
}
8387
/// Retrieve a new on-chain funding address.
8488
/// See more: <https://docs.rs/ldk-node/latest/ldk_node/payment/struct.OnchainPayment.html#method.new_address>

ldk-server-grpc/src/proto/api.proto

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ message GetNodeInfoResponse {
7070
// These are constructed from the announcement addresses and the node's public key.
7171
// Will be empty if no announcement addresses are configured.
7272
repeated string node_uris = 12;
73+
74+
// The Bitcoin network the node is running on (e.g., "bitcoin", "testnet", "signet", "regtest").
75+
types.Network network = 13;
7376
}
7477

7578
// Retrieve a new on-chain funding address.

ldk-server-grpc/src/proto/types.proto

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,24 @@ enum PaymentStatus {
201201
FAILED = 2;
202202
}
203203

204+
// The Bitcoin network the node is running on.
205+
enum Network {
206+
// Mainnet Bitcoin.
207+
BITCOIN = 0;
208+
209+
// Bitcoin's testnet (testnet3) network.
210+
TESTNET = 1;
211+
212+
// Bitcoin's testnet4 network.
213+
TESTNET4 = 2;
214+
215+
// Bitcoin's signet network.
216+
SIGNET = 3;
217+
218+
// Bitcoin's regtest network.
219+
REGTEST = 4;
220+
}
221+
204222
// A forwarded payment through our node.
205223
// See more: https://docs.rs/ldk-node/latest/ldk_node/enum.Event.html#variant.PaymentForwarded
206224
message ForwardedPayment{

ldk-server-grpc/src/serde_utils.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ macro_rules! stringify_enum_serializer {
3737
stringify_enum_serializer!(serialize_payment_direction, crate::types::PaymentDirection);
3838
stringify_enum_serializer!(serialize_payment_status, crate::types::PaymentStatus);
3939
stringify_enum_serializer!(serialize_balance_source, crate::types::BalanceSource);
40+
stringify_enum_serializer!(serialize_network, crate::types::Network);
4041

4142
/// Serializes `Option<prost::bytes::Bytes>` as a hex string (or null).
4243
pub fn serialize_opt_bytes_hex<S>(

ldk-server-grpc/src/types.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1234,6 +1234,49 @@ impl PaymentStatus {
12341234
}
12351235
}
12361236
}
1237+
/// The Bitcoin network the node is running on.
1238+
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
1239+
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
1240+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1241+
#[repr(i32)]
1242+
pub enum Network {
1243+
/// Mainnet Bitcoin.
1244+
Bitcoin = 0,
1245+
/// Bitcoin's testnet (testnet3) network.
1246+
Testnet = 1,
1247+
/// Bitcoin's testnet4 network.
1248+
Testnet4 = 2,
1249+
/// Bitcoin's signet network.
1250+
Signet = 3,
1251+
/// Bitcoin's regtest network.
1252+
Regtest = 4,
1253+
}
1254+
impl Network {
1255+
/// String value of the enum field names used in the ProtoBuf definition.
1256+
///
1257+
/// The values are not transformed in any way and thus are considered stable
1258+
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
1259+
pub fn as_str_name(&self) -> &'static str {
1260+
match self {
1261+
Network::Bitcoin => "BITCOIN",
1262+
Network::Testnet => "TESTNET",
1263+
Network::Testnet4 => "TESTNET4",
1264+
Network::Signet => "SIGNET",
1265+
Network::Regtest => "REGTEST",
1266+
}
1267+
}
1268+
/// Creates an enum from field names used in the ProtoBuf definition.
1269+
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1270+
match value {
1271+
"BITCOIN" => Some(Self::Bitcoin),
1272+
"TESTNET" => Some(Self::Testnet),
1273+
"TESTNET4" => Some(Self::Testnet4),
1274+
"SIGNET" => Some(Self::Signet),
1275+
"REGTEST" => Some(Self::Regtest),
1276+
_ => None,
1277+
}
1278+
}
1279+
}
12371280
/// Indicates whether the balance is derived from a cooperative close, a force-close (for holder or counterparty),
12381281
/// or whether it is for an HTLC.
12391282
#[cfg_attr(feature = "serde", derive(serde::Serialize))]

ldk-server/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ version = "0.1.0"
44
edition = "2021"
55

66
[dependencies]
7-
ldk-node = { git = "https://github.com/lightningdevkit/ldk-node", rev = "21eea8c881790db7a90bcad4f7f45f341c72222b" }
7+
ldk-node = { git = "https://github.com/lightningdevkit/ldk-node", rev = "16eaa6f46308965f501904506be3ceecd293f358" }
88
serde = { version = "1.0.203", default-features = false, features = ["derive"] }
99
hyper = { version = "1", default-features = false, features = ["server", "http2"] }
1010
http-body-util = { version = "0.1", default-features = false }

ldk-server/src/api/get_node_info.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use ldk_server_grpc::types::BestBlock;
1414

1515
use crate::api::error::LdkServerError;
1616
use crate::service::Context;
17+
use crate::util::proto_adapter::network_to_proto;
1718

1819
pub(crate) async fn handle_get_node_info_request(
1920
context: Arc<Context>, _request: GetNodeInfoRequest,
@@ -49,6 +50,8 @@ pub(crate) async fn handle_get_node_info_request(
4950
};
5051
addrs.into_iter().map(|a| format!("{node_id}@{a}")).collect()
5152
};
53+
let network = network_to_proto(node_status.network) as i32;
54+
5255
let response = GetNodeInfoResponse {
5356
node_id,
5457
current_best_block: Some(best_block),
@@ -62,6 +65,7 @@ pub(crate) async fn handle_get_node_info_request(
6265
announcement_addresses,
6366
node_alias,
6467
node_uris,
68+
network,
6569
};
6670
Ok(response)
6771
}

ldk-server/src/util/proto_adapter.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use bytes::Bytes;
1111
use hex::prelude::*;
1212
use ldk_node::bitcoin::hashes::sha256;
1313
use ldk_node::bitcoin::secp256k1::PublicKey;
14+
use ldk_node::bitcoin::Network;
1415
use ldk_node::config::{ChannelConfig, MaxDustHTLCExposure};
1516
use ldk_node::lightning::chain::channelmonitor::BalanceSource;
1617
use ldk_node::lightning::ln::types::ChannelId;
@@ -510,3 +511,14 @@ pub(crate) fn graph_node_to_proto(node: NodeInfo) -> ldk_server_grpc::types::Gra
510511
announcement_info: node.announcement_info.map(graph_node_announcement_to_proto),
511512
}
512513
}
514+
515+
pub(crate) fn network_to_proto(network: Network) -> ldk_server_grpc::types::Network {
516+
use ldk_server_grpc::types::Network as ProtoNetwork;
517+
match network {
518+
Network::Bitcoin => ProtoNetwork::Bitcoin,
519+
Network::Testnet => ProtoNetwork::Testnet,
520+
Network::Testnet4 => ProtoNetwork::Testnet4,
521+
Network::Signet => ProtoNetwork::Signet,
522+
Network::Regtest => ProtoNetwork::Regtest,
523+
}
524+
}

0 commit comments

Comments
 (0)