比特币脚本简介
比特币有时也被称为可编程货币。它的数字性质,使得用户在设置如何使用资金的条件时拥有很大的灵活性
讨论比特币时,我们会提到钱包和代币。但我们也可以把钱包看作钥匙,把代币看作支票,把区块链看作一排又一排带锁的保险柜。每个保险柜都有一条细小的插槽,这样任何人都可以存入支票或查看保险柜里有多少价值。然而,只有钥匙持有人才能给保险柜开锁。
如果钥匙持有人想把钱给其他人,就会打开保险柜。他们会开一张引用旧支票的新支票(旧支票随后会被销毁),并将其重新锁在收款人可以打开的箱子中。为了花掉这笔钱,新的收款人需要重复这个过程。
在本文中,我们将更深入地了解脚本,这是一种由比特币网络上的节点进行解释的编程语言。脚本管理前面提到的保险柜的上锁/开锁机制。
比特币如何运作?
采用上述类比,可以说每笔交易都有两个部分 — 钥匙(用于给保险箱开锁)和锁。您需要用钥匙打开包含要发送的支票的箱子,然后将新的支票添加至另一个使用不同锁的新箱子。要花掉新箱子里面的钱,您需要另一把钥匙。
就这么简单。系统中的锁的类型可能会有一些变化。有些保险箱需要您提供多个多个钥匙,其他保险箱则需要您证明您知道某个密码,总之可以设定很多条件。
我们的钥匙就是我们所说的scriptSig,锁则是我们所说的scriptPubKey。如果我们更详细地观察这些组件,我们会发现它们实际上由数据位和代码块组成。当它们结合在一起时,就形成了一个小程序。
当您进行交易时,您就是在向网络广播该组合。每个接收到这笔交易的节点都将检查这个程序,该程序将告知节点这比交易是否有效。如果无效,交易就会被废弃,您将无法使用锁定的资金。
您持有的支票(代币)被称为未花费的交易输出(UTXO)。只要能提供与这把锁相配的钥匙,任何人都可以使用这笔资金。具体来说,钥匙是scriptSig,锁是scriptPubKey。
如果UTXO在您的钱包内,它们可能会有一个条件,即只有能证明该公钥所有权的人才能解锁这些资金。如需解锁资金,您需要提供一个包含数字签名的scriptSig,使用映射到scriptPubKey中指定公钥的私钥。一切很快就会变得清晰起来。
了解比特币堆栈
脚本是一种基于堆栈的语言。这就意味着,当我们阅读一组指令时,我们会将它们放在被认为是垂直的列中。例如,列表A、B、C将产生一个堆栈,A位于底部,C位于顶部。当指令告诉我们要做某件事时,我们就会从堆栈的顶部开始操作一个或多个元素。





