Hello bitcoin world,
I've been building a block chain parser with much help from Gavin Andresen's bitcointools, and I've been unable to find concrete answers for some questions about scripting.
I've noticed that the extract_public_key function in bitcointools' deserialize.py doesn't always successfully extract bitcoin addresses from scriptsigs and scriptpubkeys in the block chain. Looking at the extract_public_key function, it extracts addresses by matching to standard transaction scripts documented on the wiki Script page (https://en.bitcoin.it/wiki/Script#Scripts) as well as some labeled with "BIP." I assume the latter are associated with Bitcoin Improvement Proposals. Furthermore, the list of protocol rules for "tx" messages (https://en.bitcoin.it/wiki/Protocol_rules#.22tx.22_messages) asserts that only standard scripts are acceptable, but amends itself in a footnote stating that it's not a hard requirement.
All of this begs a couple general questions:
*What scripts are allowed, and therefore possible to find, in the block chain?
*Is there an official, comprehensive list of allowable or common scripts?
*Is any script allowed to be written in a transaction output, thereby putting the responsibility on the output's author to make it redeemable at all?