Script

什麼是替代堆棧?

  • June 8, 2021

我在比特幣維基腳本頁面(<https://en.bitcoin.it/wiki/Script>)中註意到有兩個操作碼名為:

OP_TOALTSTACK
OP_FROMALTSTACK

看起來還有另一個堆棧可以單獨用作數據儲存,只需推送和彈出數據。我以前從未聽說過這個,但它似乎是一個非常有用的功能。

任何人都可以驗證這是替代堆棧的實際用途嗎?如果不只是為了推送和彈出數據,那它是為了什麼?是否想到了任何特定的案例?

以下是它們的定義:

           case OP_TOALTSTACK:
           {
               if (stack.size() &lt; 1)
                   return false;
               altstack.push_back(stacktop(-1));
               popstack(stack);
           }
           break;

           case OP_FROMALTSTACK:
           {
               if (altstack.size() &lt; 1)
                   return false;
               stack.push_back(altstacktop(-1));
               popstack(altstack);
           }
           break;

例子:

Stack:
Alternate Stack:
Script: OP_1 OP_2 OP_TOALTSTACK

.

Stack: 01
Alternate Stack:
Script: OP_2 OP_TOALTSTACK

.

Stack: 01 02
Alternate Stack:
Script: OP_TOALTSTACK

.

Stack: 01
Alternate Stack: 02
Script: 

它是乾什麼用的?是否想到了任何特定的案例?

它是……使用受損。99% 的情況下,您可以通過將事物以不同的順序放入堆棧來避免使用 OP_(TO|FROM)ALTSTACK。有 18 個堆棧操作運算符,但只有一個 (OP_DUP) 經常使用。我認為比特幣腳本的預期用途過於復雜。

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