In bitcoin, the signature is a "normal" one and we check it against the signed tx hash. We then check whether the public key/s which signed it, owns the input/s.
we then check whether the inputs are unspent.
We then check that the inputs - outputs - fees = 0
We then check tx integrity, but this is not important in the comparison.
With monero I am not certain. Please clarify any mistakes.
We have the signature, which we can validate by making sure one member of the ring has signed the message. In this case, the message will be a hash of tx data; same as bitcoin.
Since the inputs/outputs are hidden, we cannot directly check whether an input has been spent already. We use the Key Image instead for this. If a key image has already been seen then it is rejected.
Not certain part: Addresses in Monero are one-time use. And KeyImages link to addresses which links to inputs. So by checking that the keyimage has not been used before, we can be certain that an input has not been used before using I = xH(P) where P is the one time public key, and p is the secret key generated from the sender.
Although the amounts are hidden, we can still check that:
hiddenInputAmount - hiddenOutputAmount - NotHiddenFees = 0
Additionally, Monero also uses range proofs to show that the hidden amounts are > 0.
Would having a monero utxo db with the hidden outputs be pointless?