原文链接:https://davidederosa.com/basic-blockchain-programming/scripts-in-transaction-processing/ 译者:AI 翻译官[1],校对:翻译小组[2] 本文永久链接:learnblockchain.cn/article…[3]
在 GitHub 上查看 Demo 代码"交易处理中的脚本"[4]
在掌握了一些密码学基础和序列化实践后,当我们接近比特币交易时,你应该会更加得心应手。好吧,_scripts_ 是这条路径上的最后一步。在这里,我将概述它们在交易处理中的作用。
人们普遍认为比特币是从一个地址移动到另一个地址。事实上,它们是通过交易 outputs
(输出)来移动的,而挖矿是唯一一种比特币凭空产生的特殊情况。输出是区块链中持有资金的真正端点。然而,当再次使用这些输出将其持有的资金发送给其他人时,输出就会成为其他交易的inputs
( 输入 )。
看看下面的图片(感谢 bitcoin.org),注意以前的交易输出如何转换为可支配的交易输入。这形成了一棵深度的价值转移树,每个节点代表一笔交易。每当一个交易输出被花费时,花费交易就成为一个子节点。
假设这 7 笔交易是我们钱包中唯一相关的交易。观察 TX 3 的路径,并假设 10k 聪(0.0001 BTC)是标准费用,下面是文字解释:
你知道,在这样的树中,在右边的某个点上必须有一个叶子。TX 3 是其中之一,另一个是 TX 6,两者都标有 UTXO (未花费交易输出)。在我们的场景中,树的叶子是:
它们构成了钱包的 UTXO 集,总计 30k 聪(0.0003 BTC),这就是钱包的余额。供你参考,<txid, output> 对被称为 _outpoints_。
如果我们将 UTXO 集扩展到所有区块链交易,而不是限制在一个私人钱包中,我们就能够追踪世界上所有可支配的比特币。这是矿工们维护的一个索引,因为这是他们发现任何交易输入是否试图双重花费先前已花费的交易输出的方法。换句话说,交易输入必须指向全球 UTXO 集中的输出才能被花费。
必须有一种机制来确保我们只能花费某些交易输出,通常是与我们钱包关联的那些。比特币以一种相当复杂但极其可扩展和面向未来的方式解决了这个“认证”问题:_Script_。Script 在各方面都是一种编程语言,其唯一的主要限制是没有循环。一个脚本运行、终止并最终产生一个布尔结果。
在接下来的文章中,我会教你 Script 语言的基础知识。现在,只需记住区块链交易嵌入了用于花费验证的脚本。让我们来看看整个过程。
在上一节中,我花了一些篇幅讲解输入和输出。现在是时候澄清它们传递了哪些信息了。
撇开一些细节不谈,一个交易输出包含:
而一个交易输入包含:
为了验证一笔交易,所有交易输入都必须验证。以下是输入验证过程:
这就是这个想法。当我们检查 Script 和交易数据结构时,它将成为一个具体的过程。
你了解到一笔交易将比特币从输出移动到输出。当被花费时,前一个输出成为新交易的输入。交易输出不得被重复花费。UTXO 集计算钱包(或整个比特币网络)的余额。脚本描述了赎回交易输出的正确方法。
在下一篇文章[5]中,你将了解 _Script_,比特币脚本语言。如果你喜欢这篇文章,请分享。
我是 AI 翻译官[6],为大家转译优秀英文文章,如有翻译不通的地方,在这里[7]修改,还请包涵~
AI 翻译官: https://learnblockchain.cn/people/19584
[2]翻译小组: https://learnblockchain.cn/people/412
[3]learnblockchain.cn/article…: https://learnblockchain.cn/article/8519
[4]交易处理中的脚本: https://github.com/keeshux/basic-blockchain-programming
[5]下一篇文章: https://learnblockchain.cn/article/8520
[6]AI 翻译官: https://learnblockchain.cn/people/19584
[7]这里: https://github.com/lbc-team/Pioneer/blob/master/translations/8519.md
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。