逆波兰表示法与锁定/解锁脚本

版权声明:版权所有声明 版权所有归属作者,未经允许不得转载、复制或用作它途。否则作者将具有追究法律责任的权利。 Copyright Clarify Copyright ownership belongs to the author, shall not be reproduced, copied, or used in other ways without permission. Otherwise, https://blog.csdn.net/qq_27467365/article/details/81982846

比特币交易脚本语言,也称为脚本,是一种基于逆波兰表示法的基于堆栈的执行语言。要搞懂比特币交易的具体流程,就得知道逆波兰表示法是怎么回事,简单来说就是操作符置于操作数的后面,这里的“操作符”就是“+、—、*、/”之类的运算符号,“操作数”就是。。。数,比如”1+1“,我们的平常用的记法(记录方法)叫常规中缀记法,而逆波兰表示法把操作符置于操作数的后面就会写成“11+”,所以大费周章这样做有什么意义呢?使用逆波兰记法的一个好处是不需要使用括号。我们先来复习下小学数学,不同的符号有不同的优先级,比如乘法的优先级比加法高,于是1+2*3=7而不等于9,因为我们先将2乘了3再加1,但如果我们写这个式子的本意是要先让1和2相加,如果使用常规中缀记法,那就在需要提高优先级的地方加上括号,比如在上例中把式子写成(1+2)*3,但如果我们不想有括号呢,我们就可以使用逆波兰表示法来避免括号的使用,如把上例中的式子写成12-3*。

比特币脚本语言被称为基于栈语言,因为它使用的数据结构被称为栈。栈是一个非常简单的数据结构,它可以被理解成为一堆卡片。栈允许两类操作:入栈和出栈。入栈是在栈顶部增加一个项目,出栈则是从栈顶部移除一个项目。逆波兰表达式的解释器也基于堆栈。解释过程一般是:操作数入栈;遇到操作符时,操作数出栈,求值,将结果入栈;当一遍后,栈顶就是表达式的值。因此逆波兰表达式的求值使用堆栈结构很容易实现,和能很快求值。条件操作符评估一项条件,产生一个真或假的结果。

例如,OP_EQUAL从堆栈移除两个项目,假如二者相等则推送真(表示为1),假如二者不等则推送为假(表示为0)。比特币交易脚本常含条件操作符,当一笔交易有效时,就会产生真的结果。

任何解锁和锁定脚本的组合如果结果为真,则为有效。前面被我们用于说明脚本语言的简单算术运算同样也是一个有效的锁定脚本,该脚本能用于锁定交易输出。

使用部分算数运算示例脚本作用锁定脚本:

1 OP_ADD 3 OP_EQUAL

该脚本能被以解锁脚本为输入的一笔交易所满足,解锁脚本为:

2

验证软件将锁定和解锁脚本组合起来:

2 1 OP_ADD 3 OP_EQUAL

当脚本被执行时,结果是OP_TRUE,从而使得交易有效。不仅该笔交易的输出锁定脚本有效,同时UTXO也能被任何知晓这个运算技巧(知道是数字2)的人所使用。

当然真实的情况比这里演示的要更复杂,但锁定脚本确实以这种方式来解锁UTXO,大多数的解锁脚本都指向一个比特币地址或公钥,因而如果想要使用资金则需验证所有权,即能给出能解锁解锁脚本的公钥和由相应私钥创设的数字签名。

猜你喜欢

转载自blog.csdn.net/qq_27467365/article/details/81982846