Skip to content

[Enhancement] getchaintips support for e.g. fork-observer monitoring support #858

@0xB10C

Description

@0xB10C

Describe the enhancement

As per #839, the getchaintips RPC is not yet implemented. While it's tracked there, I'm opening this issue to document a use-case and my interest for having getchaintips.

Use case
Monitoring tools like https://forkmonitor.info and https://fork.observer periodically fetch getchaintips to figure out which block header the node considers to be the tip and to learn which other branches of the chain the node knows about. This is useful for monitoring for stuck nodes, chain splits which can happen due to e.g. network problems (e.g. no bridge nodes avaliable), or due to consensus bugs, ...

Additional context

Bitcoin Core has the following RPC result. Personally, I don't require the exact same format, but I think the data included there has proven to be useful.

$ bitcoin-cli help getchaintips
getchaintips

Return information about all known tips in the block tree, including the main chain as well as orphaned branches.

Result:
[                        (json array)
  {                      (json object)
    "height" : n,        (numeric) height of the chain tip
    "hash" : "hex",      (string) block hash of the tip
    "branchlen" : n,     (numeric) zero for main chain, otherwise length of branch connecting the tip to the main chain
    "status" : "str"     (string) status of the chain, "active" for the main chain
                         Possible values for status:
                         1.  "invalid"               This branch contains at least one invalid block
                         2.  "headers-only"          Not all blocks for this branch are available, but the headers are valid
                         3.  "valid-headers"         All blocks are available for this branch, but they were never fully validated
                         4.  "valid-fork"            This branch is not part of the active chain, but is fully validated
                         5.  "active"                This is the tip of the active main chain, which is certainly valid
  },
  ...
]

Examples:
> bitcoin-cli getchaintips 
> curl --user myusername --data-binary '{"jsonrpc": "2.0", "id": "curltest", "method": "getchaintips", "params": []}' -H 'content-type: application/json' http://127.0.0.1:8332/

Metadata

Metadata

Assignees

Labels

enhancementNew feature or requestnew rpcThis issue/PR implements a new json-rpc endpoint

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions