Bitcoin Script Execution - Must end with just `true`? 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
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.)