Script
這兩個腳本是否等效?
我不知道是否
OP_DEPTH 0 OP_EQUAL
具有完全相同的行為
OP_DEPTH OP_NOT
這是
1 if no items 0 if any number of items
我問是因為使用了第一個腳本,但我不確定是否有任何理由。他們很可能採用了簡單的方法,但我需要確保這一點,因為我想從腳本中擠出最大數量的字節。
通常
0 EQUAL
不等價於NOT
,但在這種情況下,它們確實是等價的。它們通常不等效的原因是
0 EQUAL
檢查頂部堆棧元素是否完全是規範的 0 推送,即零長度堆棧元素。NOT
另一方面,檢查棧頂元素在數值上是否等於 0。這意味著它在 0 和 4 個字節之間,包括 0 和 4 個字節,並且所有位都為零,除了可能表示 -0 的最高有效位。如果棧頂元素超過 4 個字節,那麼NOT
腳本會立即失敗,類似於RETURN
; 沒有辦法使0 EQUAL
腳本失敗。由於所有這些原因,您通常應該小心使用
NOT
——儘管實際上大多數網路中的標準規則會阻止任何非規範的 0 編碼(或任何 -0 的編碼)傳播。但原則上,如果您NOT
直接呼叫見證數據,那麼這是一個延展性向量。但是,所有這些都沒有實際意義,因為 的輸出
DEPTH
保證是規範編碼的數字。所以NOT
是完全安全的,並且確實節省了額外的字節。