主页 > imtoken钱包注册 > 从零到一学习比特币源码分析第10讲:比特币源码分析交易

从零到一学习比特币源码分析第10讲:比特币源码分析交易

imtoken钱包注册 2023-07-26 05:18:16

比特币莱特币以太币钱包通用么_比特币钱包 充值_比特币壹钱包

李跃春

孔易学院和ChainDesk创始人兼CEO

从零到一学习比特币源码分析是系列11讲,包括预备知识、源码分析等,今天给大家介绍的是从零到一学习比特币源码分析第十讲:比特币源码分析-交易. 话不多说,马上开始我们的比特币源码分析学习之旅吧。

比特币壹钱包_比特币莱特币以太币钱包通用么_比特币钱包 充值

UTXO是unspend transaction output的缩写,即还没有被花费的交易输出。

当我们说用户的钱包已经“收到”比特币时,我们的意思是钱包已经检测到可用的 UTXO。 通过钱包控制的密钥,我们可以花费这些 UTXO。 因此比特币壹钱包,用户的比特币“余额”是指用户钱包中可用的 UTXO 的总和,而它们可能分布在数百个交易和区块中。 “用户的比特币余额”的概念是比特币钱包应用程序创建的一个分支。 比特币钱包通过扫描区块链并汇总属于该用户的所有 UTXO 来计算用户的余额。 大多数钱包维护一个数据库或使用数据库服务来存储由用户拥有的密钥控制的所有 UTXO 的快速参考集以花费行为。

一个 UTXO 可以是 1 聪的任意倍数(整数倍)。 就像美元可以分为代表两位小数的“分”一样,比特币可以分为代表小数点后八位的“聪”。 虽然 UTXO 可以是任何值,但一旦创建,它就是不可分割的。 这是UTXO值得强调的一个重要特征:UTXO是一个离散的(不连续的)不可分割的价值单位,面值为“聪”。 一笔 UTXO 只能在一笔交易中作为一个整体消费。

比特币钱包 充值_比特币壹钱包_比特币莱特币以太币钱包通用么

如果一个 UTXO 大于一笔交易需要的,它仍然会被整体消费,但交易中会产生碎片。 例如,如果你有一个价值 20 BTC 的 UTXO 并且想要支付 1 BTC,你的交易必须消耗全部 20 BTC UTXO 并产生两个输出:一个向接收者支付 1 BTC,一个支付 1 BTC 支付 19 BTC改变你的钱包。 因此,由于 UTXO(或交易输出)的不可分割性,大多数比特币交易都会导致变化。

一笔交易消费之前记录的(现有的)UTXO,并为未来的交易消费创建新的 UTXO。 通过这种方式,一定数量的比特币价值在不同所有者之间转移,UTXOs在交易链中被消耗和创造。 比特币交易通过所有者的签名解锁 UTXO,并通过新所有者的比特币地址锁定和创建 UTXO。

从交易的输出和输入链来看,有一个例外,那就是有一个特殊的交易叫做“Coinbase Transaction”,它是每个区块中的第一笔交易。 交易存在的原因是作为挖矿的奖励,创造全新的可消费比特币来支付“赢家”矿工。

比特币钱包 充值_比特币壹钱包_比特币莱特币以太币钱包通用么

一笔比特币交易由交易输入和交易输出组成,数据结构如下:

一笔交易的交易输入实际上是指上一笔交易的交易输出。 我们钱包中的 Coin 实际上是存储在这些交易输出中的。 下图展示了区块链交易系统中交易之间的相互引用关系:

比特币莱特币以太币钱包通用么_比特币壹钱包_比特币钱包 充值

比特币钱包 充值_比特币壹钱包_比特币莱特币以太币钱包通用么

交易输出表示可以存储“币(coins)”(注意值字段)的交易输出。 而这里所谓的值其实就是被ScriptPubKey(锁定脚本)中存储的一个puzzle(难题)所锁定。 在内部,比特币使用一种称为脚本的脚本语言比特币壹钱包,用于定义输出锁定和解锁逻辑。

在比特币中,value 字段存储的是 satoshis(聪)的任意倍数的值,而不是 BTC 的数量。 聪是比特币的百万分之一(0.00000001 BTC)。

关于交易输出的重要一点是它们是不可分割的,这意味着你不能将它存储的价值拆开并使用它。 当此交易输出被新交易中的交易输入引用时,它将作为一个整体被花费。 如果它的值大于期望值,则余数作为找零返回给发送者。 这与现实世界中发生的情况类似,例如,如果您为 1 美元的商品支付 5 美元的账单,您将得到 4 美元的零钱。

比特币钱包 充值_比特币壹钱包_比特币莱特币以太币钱包通用么

一笔交易输入指向某笔交易的交易输出:

prevout:上一笔交易输出的位置

scriptSig:主要提供交易输出中ScriptPubKey所需的验证数据。 如果数据验证无误,相应的交易输出将被解锁,其中的价值可以产生新的交易输出; 如果不正确,相应的交易输出将不会被交易输入引用;

nSequence:序号