请选择 进入手机版 | 继续访问电脑版
设为首页 收藏本站
开启辅助访问 切换到宽版 快捷导航
菜单

编辑推荐

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

区块链鼻祖比特币之4:独特交易设计

0
回复
149
查看
[复制链接]
发表于 2020-2-8 17:58:32 | 显示全部楼层 |阅读模式
20180426144726773.png

在上面的一个简单的交易中,我们通过数字签名解决了消息是谁发出的。我们没有考虑一个问题,那就是如果尹成是个屌丝,他根本就没有5个BTC怎么办?也许你很容易就想到了,验证一下他的账户中的余额是不是大于5BTC不就可以了吗?但是比特币中其实没有账户余额的概念,而只有交易,每个人都有历史的所有的交易。


20180426163947576.png



抽象:


20180426164106893.png

对于小郑来说,我有尹成的所有历史交易记录,所以我会知道他曾经收到过两笔款7.0BTC,并且没有支付出去,这个时候,小郑当然就知道,尹成的钱是够的,我可以放心的把我的牛交换给他。

一笔特殊的交易,找零给自己,所以输出的地址为自己的:


20180426164305578.png


交易链:

20180426164321899.png


比特币交易的基本单位是未经使用的一个交易输出,简称 UTXO。UTXO 是不能再分割、被所有者锁住或记录于区块链中的并被整个网络识别成货币单位的一定量的比特币货币。比特币网络监测着以百万为单位的所有可用的(未花费的)UTXO。当一个用户接收比特币时,金额被当作 UTXO 记录到区块链里。这样,一个用户的比特币会被当作 UTXO 分散到数百个交易和数百个区块中。实际上,并不存在储存比特币地址或账户余额的地点,只有被所有者锁住的、分散的UTXO。“一个用户的比特币余额”,这个概念是一个通过比特币钱包应用创建的派生之物。比特币钱包通过扫描区块链并聚合所有属于该用户的 UTXO 来计算该用户的余额。在比特币的世界里既没有账户,也没有余额,只有分散到区块链里的UTXO。一个 UTXO 可以是一“聪”的任意倍。就像美元可以被分割成表示两位小数的“分”一样,比特币可以被分割成表示八位小数的“聪”。尽管 UTXO 可以是任意值,但只要它被创造出来了,就像不能被切成两半的硬币一样不可再分了。如果一个 UTXO 比一笔交易所需量大,它仍会被当作一个整体而消耗掉,但同时会在交易中生成零头。例如,你有20 比特币的 UTXO 并且想支付 1 比特币,那么你的交易必须消耗掉整个20 比特币的 UTXO 并且产生两个输出:一个是支付了 1 比特币给接收人,另一个是支付 19 比特币的找零到你的钱包。这样的话,大部分比特币交易都会产生找零。想象一下,一位顾客要买 1.5 元的饮料。她掏出她的钱包并努力从所有硬币和钞票中找出一种组合来凑齐她要支付的 1.5 元。如果可能的话,她会选刚刚好的零钱(比如一张 1 元纸币和 5 个一毛硬币)或者是小面额的组合(比如 3 个五毛硬币)。如果都不行的话,她会用一张大面额的钞票,比如 5 元纸币。如果她把过多的钱,比如 5 元,给了商店老板,她会拿到 3.5 元的找零,并把找零放回她的钱包以供未来使用。类似的,一笔比特币交易可以有任意数值,但必须从用户可用的 UTXO 中创建出来。用户不能再把 UTXO 进一步细分,就像不能把一元纸币撕开而继续当货币使用一样。用户的钱包应用通常会从用户可用的 UTXO 中选取多个可用的个体来拼凑出一个大于或等于一笔交易所需的比特币量。就像现实生活中一样,比特币应用可以使用一些策略来满足付款需要:组合若干小的个体,算出准确的找零;或者使用一个比交易值大的个体然后进行找零。所有这些复杂的、由可支付的 UTXO 完成的组合,都是由用户的钱包自动完成,并不为用户所见。只有当你以编程方式用 UTXO 来构建原始交易时,这些才与你有关。被交易消耗的 UTXO 被称为交易输入,由交易创建的 UTXO 被称为交易输出。通过这种方式,一定量的比特币价值在不同所有者之间转移,并在交易链中消耗和创建 UTXO。一笔比特币交易通过使用所有者的签名来解锁 UTXO,并通过使用新的所有者的比特币地址来锁定并创建 UTXO。


对于输出和输入链来说,有一个例外,它是一种特殊的交易类型,称为coinbase 交易。这是每个区块中的首个交易。这种交易存在的原因是作为对挖矿的奖励而产生全新的可用于支付的比特币给“赢家”矿工。



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则