These are the scriptPubKey's that your program should understand: 1. P2PKH OP_DUP OP_HASH160 <20 bytes of public key has> OP_EQUALVERIFY OP_CHECKSIG 2. P2SH OP_HASH160 <20 bytes of script hash> OP_EQUAL 3. P2PK This is now mostly unused, but there are still unspent outputs in the form: <33 or 65 bytes of public key> OP_CHECKSIG >Should I implement more sophisticated script parser which can detect "non-standard" scripts as well? No. It's a waste of development time, when nobody uses transactions like that. On top of that, if there's a difference between your parser and Bitcoin's script engine, then you'll think you have coins when you really don't. For example, the transaction OP_DUP OP_HASH160 <20 bytes of public key has> OP_2DROP OP_CHECKSIG ...is spendable by *anybody*. But does your script parser know that?