在比特币维基脚本页面中注意到(https://en.bitcoin.it/wiki/Script)有两个操作码:
操作\u TOALTSTACK
从AltStack操作
看起来有另一个堆栈可以单独用作数据存储,只需推送和弹出数据。我以前从未听说过这个,但它似乎是一个非常有用的功能。
有人能验证一下alt堆栈实际上是用来做什么的吗?如果不只是推送和弹出数据,那是为了什么?有没有想到任何特定的用例?
脚本
分享
改进这个问题
跟随
7小时前编辑的
迈克尔·福克森
606777银牌2222铜牌
2014年10月26日12:45问
莫尔斯编码器
13.3k22金徽章3636银徽章8585铜徽章
添加评论
1个答案
7
它们的定义如下:
箱操作到堆栈:
{
if(stack.size()<1)
返回false;
altstack.push_back(stacktop(-1));
popstack(堆栈);
}
中断;
来自AltStack的案例操作:
{
if(altstack.size()<1)
返回false;
堆栈。向后推(altstacktop(-1));
popstack(altstack);
}
中断;
例子:
堆栈:
备用堆栈:
脚本:opu 1 opu 2 opu TOALTSTACK
.
堆栈:01
备用堆栈:
脚本:opu 2 opu TOALTSTACK
.
烟囱:01 02
备用堆栈:
脚本:opu TOALTSTACK
.
堆栈:01
备用堆栈:02
脚本:
这是干什么用的?有没有想到任何特定的用例?
这是。。。使用受损的。99%的情况下,您可以通过将对象按不同的顺序放入堆栈来避免使用OP|(TO | FROM)ALTSTACK。有18个堆栈操作操作符,但只有一个(OPïu DUP)用于任何规则性操作。我认为比特币脚本在其预期用途上过于复杂。
分享
改进这个答案
跟随
2014年10月26日17:09编辑
回复时间:2014年10月26日14:47
尼克·奥德尔
27.8k88金徽章6161银徽章19119铜徽章
5
+但是在基于堆栈的语言中,无论是否必要,访问第二个堆栈通常都很方便。例如,在Forth中,(ab)使用返回堆栈(>R,R>)存储临时数据是一种常见的习惯用法。有关示例,请参见forth.com/starting-forth/sf5/sf5.html。设计师们可能已经想到了这一点。不管怎样,考虑到在脚本语言中添加附加功能的困难(chain fork),我们可以理解,设计者有动机进行过度设计Nate Eldredge 2014年10月26日16:08
@尼克,我知道你是从哪里来的,其实只有几种类型的标准交易,但有些人认为比特币脚本语言太简单,无法达到预期的用途。e、 g.以太坊。我认为Satoshi在比特币脚本语言中找到了一个很好的平衡点,使得它既灵活又可以静态分析穆尔塞科德10月27日17:28