I understand that smart contracts are converted into bytecode and stored on a block in the blockchain. Smart contracts could be used similarly to Kickstarter. A project team might set a funding goal that would only be paid out if backers donate enough money to meet the goal.
But how does the the smart contract know when to pay the project team? A block's hash changes wildly depending on its data. So, keeping track of the amount of donations and transaction IDs inside a block should not be possible because it would change the block's hash. Therefore, how does the smart contract know how much money has been funded, and how does it remember where to donations the money to if the funding goal is not met?
Is it true that there is a ledger (or blockchain) and also a state database? If so, I'm assuming that we store values associated with a smart contract on the state database.