I found scripting to be one of the more attractive features of bitcoin. Standard transactions just check that the receiver signs using their pubkey. But the scripting language can do much more interesting things.
However, the scripting language is currently mostly disabled. Only two simple types of scripts are allowed in the standard client due to the implementation of ::IsStandard() and Solver() - script.cpp:967. Any transactions with a different script form will not be relayed or mined. A
block with such a script will be accepted, so miners can choose to extend support. But it would be ideal if some scripting is allowed for mining and relay in the standard client to allow for wider adoption.
Low trust escrowThe transaction script can be in the form of:
(sender_pubkey OR receiver_pubkey) AND escrow_pubkey
or even:
(sender_pubkey OR receiver_pubkey) AND vote(escrow_pubkey1, escrow_pubkey2...)
This allows the transaction to be finalized by a third party escrow and either the sender or receiver. None of the parties have to be trusted with the coins.
Immediate transactionsThe problem with using bitcoin in time sensitive settings is that it takes many minutes for transactions to be confirmed to achieve low probability of double spends. It would be ideal for some applications (e.g. mobile payments) to have immediately verifiable transactions. This can be achieved with a variant on the escrow script. The funds are converted to "certified funds" ahead of time:
sender_pubkey AND certifier_pubkey
The funds can then be spent incrementally by having the sender and certifier collaborate to create a transaction. The certifier is a trusted third party that guarantees no double spends using its reputation. If it sees too much spends for the funds, it simply refuses to cooperate in the creation of the transaction.
So what would it take to re-enable more general scripting?