Script

這兩個腳本是否等效?

  • February 14, 2021

我不知道是否

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是完全安全的,並且確實節省了額外的字節。

引用自:https://bitcoin.stackexchange.com/questions/102622