What does a full node store & do?

I’m reading up the white paper and got a few questions about what a full node is expected to store. Would be great if you could shed some light.

  1. What does a full node verify? I suppose it calls Verify{Block, ChainSummary}. Correct me if I’m wrong.

  2. Then my question is about the claim that “a full node need not store the entire state, but can verify account balances efficiently given only the state commitment in the latest block header.” How is this done? Is some stateless design employed? But as I read on, this doesn’t seem to be the case—the protocol in Fig 5 seems to contradict. There, the VerifyBlock() function takes as input a block B_i contains a ledger L_{t-1}, but doesn’t that mean the full node is storing the ledger (at least during the verification time), i.e., the state?? Did I miss something?

Sorry for the late response! This got lost in the shuffle.

  1. The full node (all nodes!) verify the SNARK associated with the current state. The current state commits to the latest tip of the blockchain and ledger. In a sense, verifying not just the “next block” but the whole chain every time. Moreover, this is very cheap.

  2. a full node need not store the entire state, but can verify account balances efficiently given only the state commitment in the latest block header

Verification only acts on the root hashes of the before/after ledger Merkle trees. The SNARK allows us to omit the actual ledger during verification (it is only needed during proving).