diff --git a/lnbits/nodes/lndrest.py b/lnbits/nodes/lndrest.py index bc01e9e04..18a58ad6d 100644 --- a/lnbits/nodes/lndrest.py +++ b/lnbits/nodes/lndrest.py @@ -220,10 +220,21 @@ class LndRestNode(Node): async def get_channel(self, channel_id: str) -> Optional[NodeChannel]: channel_info = await self.get(f"/v1/graph/edge/{channel_id}") - peer_id = channel_info["node2_pub"] + info = await self.get("/v1/getinfo") + if info["identity_pubkey"] == channel_info["node1_pub"]: + my_node_key = "node1" + peer_node_key = "node2" + else: + my_node_key = "node2" + peer_node_key = "node1" + peer_id = channel_info[f"{peer_node_key}_pub"] peer_b64 = _encode_urlsafe_bytes(peer_id) channels = await self.get(f"/v1/channels?peer={peer_b64}") if "error" in channel_info and "error" in channels: + logger.debug("LND get_channel", channels) + return None + if len(channels["channels"]) == 0: + logger.debug(f"LND get_channel no channels founds with id {peer_b64}") return None for channel in channels["channels"]: if channel["chan_id"] == channel_id: @@ -238,8 +249,12 @@ class LndRestNode(Node): if channel["active"] else ChannelState.INACTIVE ), - fee_ppm=channel_info["node1_policy"]["fee_rate_milli_msat"], - fee_base_msat=channel_info["node1_policy"]["fee_base_msat"], + fee_ppm=channel_info[f"{my_node_key}_policy"][ + "fee_rate_milli_msat" + ], + fee_base_msat=channel_info[f"{my_node_key}_policy"][ + "fee_base_msat" + ], point=_parse_channel_point(channel["channel_point"]), balance=ChannelBalance( local_msat=msat(channel["local_balance"]), diff --git a/tests/regtest/test_x_node_api.py b/tests/regtest/test_x_node_api.py index 30e0b7fbe..ff759baae 100644 --- a/tests/regtest/test_x_node_api.py +++ b/tests/regtest/test_x_node_api.py @@ -106,14 +106,12 @@ async def test_get_channel(node_client): response = await node_client.get("/node/api/v1/channels") assert response.status_code == 200 channels = parse_obj_as(list[NodeChannel], response.json()) - ch = random.choice( [channel for channel in channels if channel.state == ChannelState.ACTIVE] ) assert ch, "No active channel found" assert ch.point, "No channel point found" - await asyncio.sleep(3) response = await node_client.get(f"/node/api/v1/channels/{ch.id}") assert response.status_code == 200 @@ -140,7 +138,6 @@ async def test_set_channel_fees(node_client): ) assert response.status_code == 200 - await asyncio.sleep(3) response = await node_client.get(f"/node/api/v1/channels/{ch.id}") assert response.status_code == 200 channel = parse_obj_as(NodeChannel, response.json())