Should a non-SegWit node be considered a full node?

Should a non-SegWit node be considered a full node?

·

2 min read

Before talking about this we should first discuss the differences between a non-Segwit node and a SegWit enabled node.

  1. Both of them receive unconfirmed transactions but the legacy nodes don't receive the Witness part of the transactions.
  2. Legacy nodes do not relay unconfirmed SegWit transactions. They see it as a non traditional script. They find it peculiar that the scriptSig is empty so they just skip on that transaction for the most part.
  3. And since they cannot interpret the transaction as something they know to proceed with, they cannot validate unconfirmed SegWit transactions. They don't have the witness part of the transaction which contains all the witness data including the signatures.
  4. On top of that they cannot verify the confirmed SegWit transactions in blocks.
  5. Since they don't receive the witness part of the transaction, they neither receive full-length block data nor do they store the full-length block data.

What is the consequence?

If a legacy node sent a stripped legacy block to a SegWit node(for syncing purposes), the block would get rejected as it is stripped and doesn't contain the data that SegWit nodes need which is the witness part.

So legacy nodes are not involved in:

  • Full validation of the blockchain
  • Full relay of the blockchain
  • Full sync of the blockchain
  • Full archival of the blockchain

and it depends upon the Newer SegWit enabled nodes for all these things.

https://bitcoincore.org/en/2016/10/27/segwit-upgrade-guide/#not-upgrading-1

In fact during the release of SegWit enabled Bitcoin Core software, it was also stated that:

please note that the older node, if it uses Bitcoin Core defaults, will not see transactions using segwit features until those transactions are included in a block.

Legacy nodes are on a sublayer and also not part of the full network relay sending out a stripped block to a full node will get rejected. you can only send a stripped block to a fellow downstream (legacy) node.

In my opinion legacy nodes should not be considered full nodes.