Before the Bitcoin node can verify a transaction, it will look at the transaction and run some checks.
This includes conditional operations in a script that tell whether or not the account can be locked or unlocked (true/false) if the signature/private key is valid.
Each node collects similar transactions in a pool.
The Bitcoin client, AcceptToMemoryPool, CheckTransaction & CheckInput functions, can be checked to find the latest list because they change and evolve over time; however, here’s what they usually check that:
Transaction’s data structure and syntax
Input and output values
The transaction is less than the block size of 1 MB.
The values are between 0 and 21 million
No hashes equal 0
Locktime is less than the max allowed number
Transaction time is more than or equal to 100 bytes
The number of signatures is less than the limit
Unlocking script only pushes numbers into the stack
Locking script matches the standard format
The matching transaction exists
If the matching transaction is missing, it must be moved to an orphan pool
If it is a coinbase transaction, it must have 100 confirmations
For each input, an output must exist and not have been spent
Each input value is in the required range
If the input value is less than the output value, it must be rejected
If the transaction value is too low to get into an empty block, it must be rejected
The unlocking scripts for each input are verified against the output locking scripts