zoukankan      html  css  js  c++  java
  • UTXO

    比特币交易的基本结构单元是未花费输出,或者被称为UTXO,UTXO是一个不可拆分的比特币结构,锁定一个特定的所有者,记录在区块链上,并被全网看作一个货币单元。比特币网络跟踪数以百万计的所有有效(未花费)UTXO。当一个用户接收到比特币,金额就以UTXO的形式记录在区块链上。这样,一个用户的比特币资金可能会以UTXO的形式分散存放在数百个交易和区块上。实际上,没有任何东西会去记录一个比特币地址或者账户的余额,只有分散的UTXO,锁定到特定的所有者。用户比特币账户余额的概念是钱包应用软件从传统应用中继承而来的。钱包软件通过扫描区块链,收集所有属于这个用户的UTXO,以此来统计用户的余额。

    比特币中没有账户或余额,只有散布在区块链中的UTXO。

    一个UTXO可以由任意倍的“聪”构成,就像美元可以被分割为小数点后两位的“分”一样。比特币能够分割到小数点后8位,被称作“聪”。虽然UTXO可以是任意金额,但是一旦创建,它就是不可分割的,就如同一枚硬币不能剖成两半一样。如果UTXO比交易所需要的金额大,它也需要一次性花完,超出的部分通过在交易中找零被索回。换句话说,如果你有20比特币的UTXO,需要支付1比特币,交易首先要将20比特币的UTXO全部花完,那么就需要创建两个输出:一个是支付1比特币给指定的接收人,另外一个则将19比特币返回到你的钱包。结果是,绝大部分交易都需要创建找零输出。

    如果一个顾客需要买一份1.5美元的饮料,她在她的钱包里找一些钞票和硬币以凑够这笔费用。如果钱刚好够用,顾客会选择精确的零钱(比如1张1美元纸币和2枚25分硬币,或者6枚25分的硬币)付款,不凑巧的话,她可能会掏出一张5美元的纸币。如果给了店员太多的钱,比方说5美元,她会收到3.5美元的零钱,这些零钱将放回到她的钱包供以后的交易使用。

    类似地,比特币交易不管多大金额,都需要从用户的UTXO中进行创建。用户无法将UTXO拆成两半,就像不能把一张纸票撕成两半来用一样。用户的钱包应用自动从可用的UTXO中选取不同的金额,组合成大于或等于所需金额的交易。

    在真实生活中,比特币应用会使用不同的策略来满足采购金额的要求:组合较小单位、找到精确的零钱,或者使用单一的大于交易金额的单元并进行找零。所有这些复杂的UTXO组合都是由用户钱包软件自动完成的,用户看不到具体过程。只有当用户以编程的方式自己从UTXO中创建原始交易,才需要关心这个选择的过程。

    交易消费的UTXO叫作交易输入,交易创建的UTXO叫作交易输出(参考比特币交易输入比特币交易输出)。如此,比特币价值不停地从一个所有者转移到另一个所有者,形成一个消费和创建UTXO的交易链条。交易通过当前所有者的签名解锁并消费UTXO,通过将其锁定到新的所有者的方式创建新的UTXO。

    对于输出输入链来说,也有一个例外,它是一种特殊类型的交易,叫作铸币(coinbase)交易,铸币交易是每个区块的第一笔交易。这笔交易是矿工“赢家”放进区块的,作为矿工挖到区块的奖励。这也就是比特币系统在挖矿过程中发行新币的过程。

  • 相关阅读:
    hibernate各种状态
    Persistence createEntityManagerFactory方法使用
    JS数组学习笔记
    ES6笔记之参数默认值(译)
    JS是按值传递还是按引用传递?
    linux awk命令详解
    Linux Shell笔记之sed
    类似微信红包随机分配js方法
    ionic tabs隐藏完美解决
    mustache 获取json数据内数组对象指定元素的方法
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13312802.html
Copyright © 2011-2022 走看看