Skip to content

feat: add getaddednodeinfo rpc#1114

Open
jaoleal wants to merge 4 commits into
getfloresta:masterfrom
jaoleal:rpc/getaddednodeinfo
Open

feat: add getaddednodeinfo rpc#1114
jaoleal wants to merge 4 commits into
getfloresta:masterfrom
jaoleal:rpc/getaddednodeinfo

Conversation

@jaoleal

@jaoleal jaoleal commented Jun 2, 2026

Copy link
Copy Markdown
Member

Description and Notes

add get addednodeinfo rpc that returns info about the nodes that were manually added and their addresses and wheter theyre connected.

Split of #916

How to verify the changes you have done?

I tried to cover the basic cases so:
Read & Run integration tests.

@jaoleal jaoleal self-assigned this Jun 2, 2026
@jaoleal jaoleal added the RPC Changes something with our JSON-RPC interface label Jun 2, 2026
@jaoleal jaoleal added this to Floresta Jun 2, 2026
@jaoleal jaoleal added this to the Q2/2026 milestone Jun 2, 2026
@github-project-automation github-project-automation Bot moved this to Backlog in Floresta Jun 2, 2026
@jaoleal jaoleal moved this from Backlog to Needs review in Floresta Jun 2, 2026
let ip = addr_str
.parse::<IpAddr>()
.map_err(|_| JsonRpcError::InvalidAddress)?;
(ip, 8333)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I need #1116 landed to fix this.

@jaoleal

jaoleal commented Jun 3, 2026

Copy link
Copy Markdown
Member Author

Ill rebase after #1114 (comment)

@jaoleal jaoleal requested a review from Davidson-Souza June 3, 2026 16:02
@jaoleal jaoleal marked this pull request as draft June 3, 2026 17:59
@jaoleal jaoleal moved this from Needs review to In progress in Floresta Jun 3, 2026
@jaoleal jaoleal requested a review from moisesPompilio June 3, 2026 18:00
@jaoleal jaoleal force-pushed the rpc/getaddednodeinfo branch from 7cf11ba to a9319c4 Compare June 9, 2026 16:09
jaoleal added 4 commits June 9, 2026 13:31
Add the wire-layer plumbing for the getaddednodeinfo RPC:
- AddedNodeInfo struct in node_interface
- UserRequest::GetAddedNodeInfo and NodeResponse::GetAddedNodeInfo variants
- get_added_node_info() method on NodeInterface
- handle_get_added_node_info() implementation in peer_man
- Match arm in perform_user_request()
Register the getaddednodeinfo RPC endpoint in the JSON-RPC server:
- Add get_added_node_info() handler in network.rs
- Register "getaddednodeinfo" route in server.rs
- Add RPC documentation
Add getaddednodeinfo to the FlorestaRPC trait and its blanket
implementation for JSON-RPC clients. Wire the new method into
the floresta-cli binary as a subcommand.
Add Python integration test verifying getaddednodeinfo returns
correct information about manually added nodes, and add the
get_added_node_info() wrapper to the test framework.
@jaoleal jaoleal force-pushed the rpc/getaddednodeinfo branch from a9319c4 to 71aadb4 Compare June 9, 2026 16:31
@jaoleal

jaoleal commented Jun 9, 2026

Copy link
Copy Markdown
Member Author

Rebased

  • Moved wire logic to use BitcoinSocketAddress.
  • Moved to Corepctype variant.

@jaoleal jaoleal marked this pull request as ready for review June 9, 2026 16:40
.filter_map(|added| {
// If a node filter is specified, skip entries that don't match
if let Some(filter) = &node {
if &added.address != filter {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if &added.address != filter {
if added.address != *filter {

}

let connected = self.peers.values().any(|peer| {
peer.address.as_bitcoin_socket_addr() == &added.address

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
peer.address.as_bitcoin_socket_addr() == &added.address
*peer.address.as_bitcoin_socket_addr() == added.address

/// Information about a manually added node (via `addnode`).
pub struct AddedNodeInfo {
/// The address of the added node in "ip:port" format.
pub addednode: String,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BitcoinSocketAddr here

{
let mut cpc_addresses: Vec<AddedNodeAddress> = vec![];

for floresta_wire::node_interface::AddedNodeAddress { address, connected } in addresses

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
for floresta_wire::node_interface::AddedNodeAddress { address, connected } in addresses
AddedNodeAddress

Can't this function use combinators?

After adding a node via addnode and connecting, getaddednodeinfo should
report the node as connected with a populated addresses array.
"""
bitcoind = add_node_with_extra_args(NodeType.BITCOIND, ["-v2transport=0"])

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why no v2?

Comment on lines +58 to +59
bitcoind_a = add_node_with_extra_args(NodeType.BITCOIND, ["-v2transport=0"])
bitcoind_b = add_node_with_extra_args(NodeType.BITCOIND, ["-v2transport=0"])

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same

Comment on lines +396 to +403
def get_added_node_info(self, node: Optional[str] = None) -> list:
"""
Get information about manually added nodes.
node: optional filter — return only this added node's info
"""
params = [node] if node is not None else []
return self.perform_request("getaddednodeinfo", params)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think utreexod doesn't have this RPC

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

RPC Changes something with our JSON-RPC interface

Projects

Status: In progress

Development

Successfully merging this pull request may close these issues.

2 participants