Script
and(older(10),pk(A)) 如果頂層具有延展性,它可以是頂層嗎?編輯:不可延展,是錯誤的
$ ./miniscript and(older(10),pk(A)) X 110.0000000000 37 and_v(v:pk(A),older(10)) and(older(10),pk(A)) and_v(v:pk(A),older(10)) 1 scriptlen=37 maxops=2 type=B safe=yes nonmal=yes dissat=no input=1n output=nonzero miniscript=and_v(v:pk(A),older(10)) <A> OP_CHECKSIGVERIFY 10 OP_CHECKSEQUENCEVERIFY
(最後一行顯示了編譯後的腳本,因為我添加
printf("%s", Disassemble(ret->ToScript(COMPILER_CTX)).c_str());
到基於命令行的工具輸出中)AFAICT 沒有說這不能是頂級的(但我可能會遺漏一些東西)。它還說
nonmal=yes
,這是不可延展的。在支出檢查中成功執行此腳本所需的見證是
[<A_signature>, <any-nonzero>]
,當然CHECKSEQUENCEVERIFY
條件必須通過。將CHECKSIGVERIFY
消耗<A_signature>
,然後<any-nonzero>
將被檢查為堆棧上的唯一項,這表明成功(之後CastToBool()
)但
<any-nonzero>
可以就是這樣,任何東西,因此具有延展性。我錯過了什麼?
OP_CHECKSEQUENCEVERIFY 是重新定義的 OP_NOP 程式碼,因此它不能操作堆棧 - 只能中止或繼續。在您的腳本中,這意味著它將保留
10
在堆棧上,並且<any-nonzero>
在見證中沒有必要(添加一個將違反 CLEANSTACK 標準規則)。