5
The following statement appears on the "Script" page in the wiki:
Note that there is a small number of standard script forms that are relayed from node to node; non-standard scripts are accepted if they are in a block, but nodes will not relay them.
This begs a lot of questions:
- What use is a transaction that is never relayed?
- How did the transaction make it into a block in the first place if it cannot be relayed? Did this transaction come directly from a client? Was it created at an origin node and put in a block somehow by that node?
- What does it mean that the script is "accepted" if it's "in a block"? (I'm aware of the script evaluation process, but the sense of the word "accepted" here doesn't seem to be the same as the standard "evaluate to true" verification process.)
- Perhaps most importantly: What good is all this wonderful scripting capability if interesting transactions are not relayed? Won't this cripple the scripting capability for more complex transaction types?
+1. I really don't understand why we even have this whole IsStandard funny business then. Why are non-standard transactions not propagated in the core client implementation? Who would it hurt by propagating them? – morsecoder – 2014-11-21T06:06:54.307
Is it because the bitcoin core devs are worried there might be some way to manipulate the stack so that UTXOs are spent when they shouldn't have been allowed to? I feel like that is already done by making sure the
scriptSigonly pushes data, though... – morsecoder – 2014-11-21T06:08:58.337