| Some operations were disabled by Satoshi because they were incompete/buggy/risky. Those need majority consensus among all miners and users to enable or modify. Some specific kinds of scripts are marked as "standard", all the rest are "non-standard". Non-standard scripts are valid and all miners will validate blocks containing such scripts. But non-standard transactions (i.e. transactions, containing a non-standard script) will not be relayed by default by the bitcoind nodes. Every node and every miner may decide for themselves whether they relay/mine non-standard transactions or not. I'm not sure how many miners accept non-standard transactions, but there are some. You can also pay some miners directly to mine a specific transaction. Or you can mine your non-standard transaction yourself, if you can afford it. Non-standard transactions typically require higher miner fees and take longer to confirm (as not every miner will include them). The point behind standardness is to contain damage if some complex scripts will turn out to allow DoS attacks, allow losing funds or something like that. In 2012 Bitcoin was extended with P2SH ("pay to script hash") type of transaction (which is also standard) that allows you to define the redemption script during redemption, not during payment. Payer sends coins to a "hash of script" instead of the script itself. Payee then needs to provide not only signatures to redeem the payment, but also the script matching this hash (however complex it is). This has several advantages: 1. Payer does not spend higher miner fees because of the complexity of the script. 2. Payer does not wait indefinitely long till the transaction confirms. 3. Payer may not know the contents of the redemption script until it's being used. In some protocols this could be a useful feature for privacy reasons. So with P2SH a service may already use arbitrary non-standard scripts shifting the burden of mining non-standard transactions from its customers to itself. For the customer it will look exactly like sending money to a Bitcoin address, although that address will start with "3", not with "1" (which is reserved for the usual "pay to public key hash" script). |