比特币开发系列 - 交易处理中的脚本

理解比特币是如何转移的。

在掌握了一些密码学基础和序列化实践后,当我们接近比特币交易时,你应该会更加得心应手。好吧,scripts 是这条路径上的最后一步。在这里,我将概述它们在交易处理中的作用。

比特币如何转移的?

人们普遍认为比特币是从一个地址移动到另一个地址。事实上,它们是通过交易 outputs (输出)来移动的,而挖矿是唯一一种比特币凭空产生的特殊情况。输出是区块链中持有资金的真正端点。然而,当再次使用这些输出将其持有的资金发送给其他人时,输出就会成为其他交易的inputs (输入)。

交易树

看看下面的图片(感谢 bitcoin.org),注意以前的交易输出如何转换为可支配的交易输入。这形成了一棵深度的价值转移树,每个节点代表一笔交易。每当一个交易输出被花费时,花费交易就成为一个子节点。

BTC  UTXO 交易树

假设这 7 笔交易是我们钱包中唯一相关的交易。观察 TX 3 的路径,并假设 10k 聪(0.0001 BTC)是标准费用,下面是文字解释:

  1. 有人发送 100k 到我们“拥有”的一个输出。
  2. 该输出成为 TX 0 的可支配输入。
  3. TX 0 将先前的输出分配到新的 40k 和 50k 输出。
  4. 剩余的价值 100k - (40k + 50k) = 10k 是费用。
  5. TX 1 重新使用 <TX 0, output0>,即持有 40k 的那个。
  6. TX 1 发送 30k 到一个输出加上 10k 费用。
  7. TX 3 重新使用 <TX 1, output0> 发送 20k 到 output0 加上 10k 费用。

你知道,在这样的树中,在右边的某个点上必须有一个叶子。TX 3 是其中之一,另一个是 TX 6,两者都标有 UTXO (未花费交易输出)。在我们的场景中,树的叶子是:

  • <TX 3, output0> = 20k
  • <TX 6, output0> = 10k

它们构成了钱包的 UTXO 集,总计 30k 聪(0.0003 BTC),这就是钱包的余额。供你参考,<txid, output> 对被称为 outpoints

如果我们将 UTXO 集扩展到所有区块链交易,而不是限制在一个私人钱包中,我们就能够追踪世界上所有可支配的比特币。这是矿工们维护的一个索引,因为这是他们发现任何交易输入是否试图双重花费先前已花费的交易输出的方法。换句话说,交易输入必须指向全球 UTXO 集中的输出才能被花费。

scripts (脚本)介绍

必须有一种机制来确保我们只能花费某些交易输出,通常是与我们钱包关联的那些。比特币以一种相当复杂但极其可扩展和面向未来的方式解决了这个“认证”问题:Script。Script 在各方面都是一种编程语言,其唯一的主要限制是没有循环。一个脚本运行、终止并最终产生一个布尔结果。

在接下来的文章中,我会教你 Script 语言的基础知识。现在,只需记住区块链交易嵌入了用于花费验证的脚本。让我们来看看整个过程。

交易验证

在上一节中,我花了一些篇幅讲解输入和输出。现在是时候澄清它们传递了哪些信息了。

撇开一些细节不谈,一个交易输出包含:

  • 要转移的比特币数量
  • 一个脚本(输出脚本

而一个交易输入包含:

  • 对先前交易输出的 outpoint 引用
  • 一个脚本(输入脚本

为了验证一笔交易,所有交易输入都必须验证。以下是输入验证过程:

  1. 找到 outpoint 引用的交易。
  2. 通过其在交易中的索引找到输出。
  3. 获取输出脚本。
  4. 将输出脚本附加到输入脚本。
  5. 在 Script 解释器上执行连接的脚本。
  6. 如果脚本成功,则交易有效。

这就是这个想法。当我们检查 Script 和交易数据结构时,它将成为一个具体的过程。

下一篇

你了解到一笔交易将比特币从输出移动到输出。当被花费时,前一个输出成为新交易的输入。交易输出不得被重复花费。UTXO 集计算钱包(或整个比特币网络)的余额。脚本描述了赎回交易输出的正确方法。

下一篇文章中,你将了解 Script,比特币脚本语言。如果你喜欢这篇文章,请分享。

我是 AI 翻译官,为大家转译优秀英文文章,如有翻译不通的地方,在这里修改,还请包涵~

点赞 2
收藏 2
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Davide De Rosa
Davide De Rosa
江湖只有他的大名,没有他的介绍。