以易于理解的方式解释了比特币交易中的“UTXO”
UTXO
2017年11月1日

让我们看看当你发一点硬币时会发生什么。

比特币交易通过UTXO执行。通过在比特硬币的所有交易中新生成UTXO并消费UTXO来完成转移。由于UTXO是系统端的一种机制,因此用户不会有意识,但通过计算此UTXO来计算地址的平衡。

在本文中,我将尽可能简单地告诉您复杂的UTXO机制。我们还要考虑UTXO的优点和缺点。

比特币的交易概述
比特币交易流程如下。

UTXO进入UTXO池
有效的UTXO成为事务输入
交易输出成为新的UTXO

从这个流程中可以看出,UTXO在比特币交易中起着核心作用。要记住的第一件事是地址平衡不记录在位硬币的区块链中。

通过计算网络中的所有交易来计算地址的余额。例如,如果有100BTC的平衡的地址A,“地址甲余额:100BTC”和,而不是被记录,“以前地址A 10BTC地址B和30BTC汇地址C,地址d由于我们已收到50 BTC,100 - (10 + 30)+ 50 = 110现在地址A的余额为110 BTC!

为什么bitkines做这么麻烦的计算来计算地址的平衡?这种计算方法正是基于UTXO的平衡管理方法,并且有各种优点。(当然也有缺点。)

什么是UTXO
UTXO(未使用的事务输出)是“未使用的事务的输出”,如果已翻译。比特硬币的交易包括输入和输出。换句话说,位硬币的传送对应于输出,并且存款对应于输入。

来自UTXO的来自此交易的输出。事务输出是UTXO,这个UTXO是下一个事务输入。所以UTXO被称为“未使用的事务输出”。

因此,在块链中的每个块中连接事务。

UTXO

以这种方式,交易流程,即硬币交换是作为UTXO交换完成的。关键是每个事务都使用UTXO,生成新的UTXO,依此类推。

此外,实际交易可能有多个输入和输出。这是因为从多个人(地址)接收硬币,相反硬币被发送到多个地址。(以下“交易”缩写为“Tx”)

UTXO

UTXO的特征
输入事务和输出事务是相等的
交易的每个输入和输出的总和是相等的。此外,交易将收取费用,因此更准确地说,“交易输入=由收款人地址收到的交易输出+交易费用的交易输出”。

UTXO不能分割
UTXO无法拆分。500 BTC UTXO不能分为200 BTC UTXO和300 BTC UTXO,因此500日元硬币不能分为200日元和300日元。那么,你如何将资金从地址A的500比特币转移到200比特币到地址B呢?

当像这样发生UTXO的更改时,您创建自己的地址C以接收更改并在地址C接收200 BTC。地址接收Otsuri没有自己的,因为好,如果你是管理层,但那些谁收到地址C新但从匿名的点创建和隐私的地址是首选偶数地址的问题。

如果您没有指定发送更改的地址,您将作为交易费用交给未成年人。

coinbase交易(阻止第一笔交易)
交易由输入和输出组成,我认为通过UTXO交换创建交易的流程是可以想象的。但是输入来自块中的第一个事务?每个块中的第一个事务是一个例外,它被称为coinbase事务。

coinbase事务没有输入,只有输出存在。coinbase是由生成块的未成年人制作的,并且有轻微的奖励输出次要。

UTXO的好处
通过计算所有上述UTXO来计算地址的余额。这称为UTXO基础。另一方面,在块链中记录直接平衡的方法称为帐户基础。顺便说一句,Eliarium和NEM采用帐户基础。

从这里我们将解释UTXO基础与账户基础相比的优点和缺点。

优秀的隐私保护
UTXO

UTXO的一个优点是它具有出色的隐私保护。如上所述,当从您的地址A汇款到另一方的地址B时,更改是首选创建您自己的地址C并将其发送到该新地址C.

因为外部不知道地址A和地址C属于同一用户。换句话说,我们将地址A的钱发送给两个人,地址B和地址C,或者只发送到地址B,所以我们无法判断地址C是否是变更地址。

另一方面,在基于像以太网的帐户的情况下,没有UTXO的概念,因此不需要生成用于改变的新地址。这是因为地址的余额直接记录在块中,只需从该余额中扣除汇款即可。

当然,即使是在账户的基础上,您也可以将更改发送到您的新地址,但汇款费用也会相应增加。

强大抵抗重播攻击
重播攻击(Replay Attack)是指您可以通过重复在交易所存放硬分叉硬币的行为以及撤销它的行为,在硬叉中获得大量分支版本的硬币。

实施例在实施例中,重放攻击的抵抗力较弱存款在交换位硬币,我会被拉出偶数位相同数量的硬币缓存结合位硬币被拉出。这是因为硬叉分支的每个版本的硬币使用地址/密钥/网络的相同结构。

事实上,虽然对位硬币缓存重放攻击已经重放攻击的措施并没有成为一个问题,如果你没有去过重放攻击的措施如果汇款100BTC从“地址A到地址B在比特币是“它也将收到位硬币缓存,我的交易也发生在同一时间,交易的节点”从地址汇款100BCH一到地址B”。

UTXO基地更能抵抗这种重播攻击。因为,因为地址的天平是UTXO计算,如果是经过艰苦的叉UTXO区别,不能计算在相同的平衡。

另一方面,在帐户基础上,您不能记录交易历史记录,因为地址的余额按原样说明。换句话说,很难区分交易的来源,并削弱重播攻击阻力。当实际采用帐户基础的Ethiaryum实际上分叉到Ethicalam Classic时,在没有采取措施的交易所发生了重播攻击。

UTXO的缺点
实施很复杂
从上面的UTXO评论中可以看出,汇款和汇款的计算相当麻烦。在计算地址中某一点的余额时,有必要计算包括所有UTXO在内的余额。

而且,转账时UTXO的计算变得复杂。如果地址有多个UTXO,您必须选择将哪个UTXO应用于UTXO以进行汇款以及要更改哪个UTXO。对于比特币,交易费用由交易规模决定。

为了尽可能减少交易费用,尽量减少交易规模,即尽可能少地使用UTXO进行汇款,并确保变更的UTXO不会变小(下一笔交易费用会更高)有必要优化它)。

另一方面,在汇款时,您可以通过简单地从区块链中记录的余额中扣除汇款金额和佣金来计算。当然,这些计算是由钱包系统方面完成的,因此用户在正常汇款时无需了解。

由于平衡和汇款的UTXO基础的计算成为具有作为像比特币的货币硬币甚至是复杂的,我认为,进一步的计算和具有智能合同的功能复仇可以想象可能很复杂我会的。因此,Eliarium和NEM采用帐户基础。

UTXO是什么?的更多相关文章

  1. 区块链区块的生成和链接,比特币btc的产生,UTXO的生成和消耗,比特币系统

    区块链区块的生成和链接,比特币btc的产生,UTXO的生成和消耗,比特币系统 区块链区块的生成和链接,比特币btc的产生,UTXO的生成和消耗,比特币系统

  2. Bytom交易说明(UTXO用户自己管理模式)

    比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 该部分主 ...

  3. 比原链设计思考: 扩展性UTXO模型

    用户模型是比原链在最初就需要确定的重要数据结构, 团队的选择还是聚焦在两种典型的模型系统中,Account模型和UTXO模型,和其他大多数区块链设计一样, 选择了模型就决定了协议层的重要实现,两种模型 ...

  4. 比特币交易本质--UTXO(Unspent Transaction Output)

    UTXO 代表 Unspent Transaction Output. Transaction 被简称为 TX,所以上面这个短语缩写为 UTXO. 现在的银行也好.信用卡也好.证券交易系统也好,互联网 ...

  5. 比特币原理——交易与UTXO

    UTXO UTXO (Unspent Transaction Output) 未花费交易输出 传统的支付系统都是基于账户(account based)的,即: 若A向B转账20元 判断A的账户余额大于 ...

  6. UTXO和Account模型一个都不能少

    UTXO对于非区块链从业人员来说可能比较陌生,UTXO的全称是Unspent Transaction Output,这中本聪在比特币中的一个天才设计.而Account模型就很常见,也很容易理解,你银行 ...

  7. 04.UTXO:未使用的交易输出,比特币核心概念之一

    在比特币系统上其实并不存在“账户”,而只有“地址”.只要你愿意,你就可以在比特币区块链上开设无限多个钱包地址,你拥有的比特币数量是你所有的钱包地址中比特币的总和.比特币系统并不会帮你把这些地址汇总起来 ...

  8. [转帖]比特币本质其实是UTXO

    比特币本质其实是UTXO https://www.jianshu.com/p/7071e68c5262 其实并没有什么比特币,我们在交易所里或者钱包里显示的比特币余额其实是UTXO.那到底什么是UTX ...

  9. 比特币系列钱包的UTXO总结

    1.通过比特币钱包的WalletNotify配置来处理 本钱包内的交易信息的 推送.BlockNotify数据更多,不适合交易所的监听

随机推荐

  1. theano中tensor的构造方法

    import theano.tensor as T x = T.scalar('myvar') myvar = 256 print type(x),x,myvar 运行结果: <class 't ...

  2. hihocoder1398 网络流五之最大权闭合子图

    最大权闭合子图 虽然我自己现在总结不好最大权闭合子图.但也算稍稍理解辣. 网络流起步ing~~~(- ̄▽ ̄)- #include<iostream> #include<cstdio& ...

  3. Python 2.x 和 3.x的区别

    Python有两个版本,2.x 和 3.x ,两个版本不兼容,3.x 不不考虑对2.x代码的向后兼容. 在3.x中,一些语法,内建函数和对象的行为都有所调整. 大部分的python库都支持 pytho ...

  4. Java后台-面试问题汇总(转载)

    总结这些天面试Java开发过程中的大多数问题,综合分类有Java基础,框架,多线程,网络通信,Linux,数据库,设计模式,算法,缓存等几个模块,由于问题太多,下面先列出问题,之后有时间在写文章解答, ...

  5. Oracle AWR快照管理与常见问题

    1.手动创建Snapshots exec dbms_workload_repository.create_snapshot(); OR BEGIN DBMS_WORKLOAD_REPOSITORY.C ...

  6. nvl()函数和nvl2()函数

    如果你某个字段为空,但是你想让这个字段显示0,可以使用nvl(字段名,0),当然这个0也可以换成其他东西,如:1,2,3…… 一 NVL(表达式1,表达式2) 如果表达式1为空值,NVL返回值为表达式 ...

  7. AMD、CMD和CommonJS规范(转)

    CommonJS规范  CommonJS是在浏览器环境之外构建JavaScript生态系统为目标产生的项目,比如服务器和桌面环境中.CommonJS规范是为了解决JavaScript的作用域问题而定义 ...

  8. JavaScript中的事件循环

    JavaScript是单线程单并发语言 单线程:主程序只有一个线程,即同一时间片段内其只能执行单个任务. 引发的问题: 单线程,意味着任务都需要排队,前一个任务结束,才会执行后一个任务.若前一个任务耗 ...

  9. poj_3641_Pseudoprime numbers

    Fermat's theorem states that for any prime number p and for any integer a > 1, ap = a (mod p). Th ...

  10. Pagehelper介绍

    本文引自:https://my.oschina.net/zudajun/blog/745232 摘要: com.github.pagehelper.PageHelper是一款好用的开源免费的Mybat ...