login

The services field is an 8 byte little-endian-serialized bitfield that described peer capabilities. The following capabilities are defined, by bit position:

  • 0: NODE_NETWORK
    The node is capable of serving the complete block chain. It is currently set by all full nodes, and is unset by SPV clients or other peers that just want network services but don’t provide them.

  • 1: NODE_GETUTXO
    The node is capable of responding to the getutxo protocol request. See BIP 64 for details on how this is implemented. Supported by Bitcoin XT only

  • 2: NODE_BLOOM
    The node is capable and willing to handle bloom-filtered connections.

  • 3: NODE_WITNESS
    Indicates that a node can be asked for blocks and transactions including witness data.
    Bitcoin Cash nodes do not have witness data so this flag should be ignored on receipt and set to 0 when sent

  • 4: NODE_XTHIN
    The node supports Xtreme Thinblocks
    Supported by Bitcoin Unlimited only

  • 5: NODE_BITCOIN_CASH
    The node supports the BCH chain. This is intended to be just a temporary service bit until the BTC/BCH fork actually happens.

  • 6: NODE_GRAPHENE
    The node supports Graphene blocks. If this is turned off then the node will not service graphene requests nor make graphene requests.
    Supported by Bitcoin Unlimited only

  • 7: NODE_WEAKBLOCKS
    The node supports Storm weak block (currently no node supports these in production, so this is a placeholder).

  • 8: NODE_CF
    Indicates the node is capable of serving compact block filters to SPV clients, AKA the “Neutrino” protocol (BIP157, and BIP158).

  • 9: NODE_NETWORK_LIMITED
    This means the same as NODE_NETWORK with the limitation of only serving a small subset of the blockchain. See BIP159 for details on how this is implemented.

  • 24-31: Experimental
    These bits are reserved for temporary experiments. Just pick a bit that isn’t getting used, or one not being used much, and notify the community. Remember that service bits are just unauthenticated advertisements, so your code must be robust against collisions and other cases where nodes may be advertising a service they do not actually support.