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 Answer 1

5

What use is a transaction that is never relayed?

None, unless it is generated by the same person who mines it into a block. But it is not the case that non-standard transactions are never relayed. There are nodes that relay non-standard transactions and miners who include them.

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?

Nobody said it "cannot be relayed", merely that this particular piece of software does not, by default, relay it.

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.)

It means that the client cannot reject it or otherwise ignore it. If it gets into a block, it's officially done and its outputs are spendable if the transaction script rules say si.

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?

That's a good question.

2
  • +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
    Commented Nov 21, 2014 at 6:06
  • 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 scriptSig only pushes data, though...
    – morsecoder
    Commented Nov 21, 2014 at 6:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.