I'm trying to fill a few gaps in my understanding of transaction verification and would appreciate any insight.
Without SegWit
- Miners broadcast new blocks which contain the signature(s) with every transaction.
- Miners can choose to decide whether or not to verify every transaction in the block. They're incentivized to verify every transaction because otherwise the block may be invalid and they would lose their reward.
- Full nodes store all the blockchain data and can optionally verify the transactions as well.
Q1: Do full nodes have any incentive to validate transactions they're not directly benefiting from? How often do full nodes actually validate transactions?
With SegWit
- Miners broadcast new blocks which may or may not contain the witness.
- As before, miners are incentivized to validate the transaction but are also incentivized to omit the witness when broadcasting new blocks to minimize bandwidth.
- Full nodes may or may not store the witness data as part of the full blockchain.
Q2: If a full node wanted to validate a transaction but the miner didn't broadcast the witness as part of the new block, who would the full node request the signature from? As far as I understand, there are plans to do witness "pruning" in the long-term to minimize the size of the full blockchain, but what enforces keeping the signatures around in the short-term?