Bitcoin Script Execution - Must end with just `true`?

3

1

When executing bitcoin validation scripts, does the final stack have to end with just true on the stack, or can there be some elements under the true? In other words, are both of these final stack configurations valid, or just the first?

Stack1:

true

Stack2:

0 {pub_key} true

morsecoder

Posted 2014-10-26T12:27:49.650

Reputation: 12 624

Answers

5

Quoting Bitcoin wiki:

A transaction is valid if nothing in the combined script triggers failure and the top stack item is true (non-zero).

From the source code:

if (CastToBool(stack.back()) == false)
    return false;

(In case you don't know what vector.back() does, it returns the last item.)

Nick ODell

Posted 2014-10-26T12:27:49.650

Reputation: 26 536

1They really coded up == false?djechlin 2014-10-26T15:42:11.200

@djechlin CastToBool only returns true or false.Nick ODell 2014-10-26T15:43:32.777

I think djechlin was surprised they didn't do if (!Cast... Or just return CastTo...morsecoder 2014-10-26T17:31:09.790