比特币脚本语言

比特币交易脚本语言,叫作脚本,是一个与Forth类似的逆波兰式表示的基于堆栈的执行语言。如果听起来感觉乱七八糟,可能是因为你没有学习过20世纪60年代的编程语言。脚本是一种非常简单的语言,只能执行限定的功能并且只能在一些特定的硬件上执行,它就像嵌入式设备,比如手持计算器,一样简单。它只要求最低的处理能力,也不能像其他现代编程语言一样可以做很多有意思的事情。在可编程货币的情境下,它其实是一种特别设计的安全特性。

比特币的脚本语言被称作基于堆栈的语言,因为它使用了一种叫作堆栈的数据结构。堆栈是一种非常简单的数据结构,你可以将它看作一堆卡片。堆栈只运行两种操作,入栈(push)和出栈(pop)。入栈是将一个项目添加到栈的顶部。出栈则从栈顶部移除一个项目。

脚本语言通过从左到右处理每个项目来执行脚本。数字(数据常量)被压入栈中。操作符将一个或多个参数压入栈中,或者从栈中移除,操作它们,并有可能将结果压入栈中。例如,OP_ADD从栈中移出两个项目,把它们相加,然后将求和结果压入栈中。

条件操作符评估一个条件,产生一个真(TRUE)或假(FALSE)的布尔结果。比如,OP_EQUAL从堆栈中移出两个项目,如果两个项目相等,则把TRUE(TRUE以数字1代表)压入栈中,如果不相等,则压入FALSE(用数字0表示)。比特币交易脚本通常都会包含条件操作符,因此可以产生TRUE的结果来表示一个有效交易。

在图5.2中,脚本23 OP_ADD 5 OP_EQUAL演示了算术加法操作符OP_ADD,将两个数相加,并把结果压入栈中;接着,条件操作符OP_EQUAL检查求和结果是否等于5。为了更加简洁,“OP_”前缀在后面的操作示例中将被省略。

以下是一个稍微复杂的脚本,用于计算2+7-3+1。注意,当脚本在一行中包含多个操作符时,堆栈允许一个操作符的结果被下一个操作符使用。

blob.png

请使用铅笔和纸张验证一下前面的脚本。当脚本执行完毕,你会发现堆栈中只剩一个TRUE值。

868区块链学习网为您整理《比特币脚本语言》仅供参考。