Ethereum uses account-based model. It means that if account A has 50 ETH and sends 10 ETH to account B, transaction will look like "send 10 ETH from A to B" (no inputs and outputs as in UTXO).
With this model, at some step Ethereum should check if account A really has 10 ETH to prevent double-spending.
My question is how, where (module/code/contract), and when Ethereum verifies that?