We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
title: 比特币UTXO和去中心化系统的设计
date: 2018-01-26 18:00:00
2018-01-26 曹祖鹏
刚进2018年,区块链突然大火,程序员们可能莫名其妙,不就是一个分布式系统么,怎么突然就要改变互联网了?趁着这个东风,我们了解一些区块链基础知识。看看是否可以改变世界。
UTXO是Unspent Transaction Output(未消费交易输出)简写。这绝对是比特币的非常特殊的地方,理解UTXO也就理解了比特币去中心化的含义。
说起UTXO必须先要介绍交易模型。以我们平时对交易的理解,我给张三转账了一笔100块钱,那就是我的账上的钱少了100,张三账上的钱多了100。我们再把问题稍微复杂一些,我和张三合起来买一个李四的一个商品390块钱。我的账户支付100,张三账户支付300,李四的帐户获得390,支付宝账户获得了10块钱的转账手续费。那么对这比交易的记录应该是这样的:
这种记账方式常用在财务记账上。不过作为一个去中心化的系统,是没有一个中心化银行管理你的开户、销户、余额的。没有余额,怎么判断你的账上有100块钱?
此时用户C必须将前面几次交易的比特币输出作为下一个关联交易的输入,具体见下图的no 321笔交易,用户C将前面获得的两次输出,作为输入放在了交易中,然后给自己输出1个比特币的找零(如果不给自己输出找零,那么这个差额就被矿工当成小费了,切记切记)。比特币的程序会判定,如果两个UTXO加在一起不够支付,则交易不成功。
比特币UTXO使用有点像古代的银锭
这样的做法很繁琐,所以银两在古代并不是一个很普遍的支付方式(别被武侠片给骗了,大部分还是用铜钱)。 比特币采用UTXO并不能很直观的去理解,但是为什么要用呢?
那么我们站在系统设计的角度猜测一下为什么中本聪会考虑使用UTXO。
在比特币的实现中,是把所有的UTXO保存在一个单独的UTXOSet缓存中,截止2017年9月,这个缓存大概2.7Gb,与之对应,整个区块链的交易数据达到140Gb,UTXO缓存像是一个只保存了最终一个状态的git,整体的消耗负担小了很多很多。
但是中本聪没想到,很多人现在把交易输出的脚本玩出花来了,导致很多UTXO创建出来就是不为消费用的,永远不会被消费掉,节点的负担越来越重。这才有了后续的BIP改进以及以太坊的账户模型。那又是一个很长的故事了...
The text was updated successfully, but these errors were encountered:
No branches or pull requests
title: 比特币UTXO和去中心化系统的设计
date: 2018-01-26 18:00:00
比特币UTXO和去中心化系统的设计
2018-01-26 曹祖鹏
起因
刚进2018年,区块链突然大火,程序员们可能莫名其妙,不就是一个分布式系统么,怎么突然就要改变互联网了?趁着这个东风,我们了解一些区块链基础知识。看看是否可以改变世界。
UTXO是什么
UTXO是Unspent Transaction Output(未消费交易输出)简写。这绝对是比特币的非常特殊的地方,理解UTXO也就理解了比特币去中心化的含义。
说起UTXO必须先要介绍交易模型。以我们平时对交易的理解,我给张三转账了一笔100块钱,那就是我的账上的钱少了100,张三账上的钱多了100。我们再把问题稍微复杂一些,我和张三合起来买一个李四的一个商品390块钱。我的账户支付100,张三账户支付300,李四的帐户获得390,支付宝账户获得了10块钱的转账手续费。那么对这比交易的记录应该是这样的:
这种记账方式常用在财务记账上。不过作为一个去中心化的系统,是没有一个中心化银行管理你的开户、销户、余额的。没有余额,怎么判断你的账上有100块钱?
此时用户C必须将前面几次交易的比特币输出作为下一个关联交易的输入,具体见下图的no 321笔交易,用户C将前面获得的两次输出,作为输入放在了交易中,然后给自己输出1个比特币的找零(如果不给自己输出找零,那么这个差额就被矿工当成小费了,切记切记)。比特币的程序会判定,如果两个UTXO加在一起不够支付,则交易不成功。
比特币UTXO使用有点像古代的银锭
这样的做法很繁琐,所以银两在古代并不是一个很普遍的支付方式(别被武侠片给骗了,大部分还是用铜钱)。
比特币采用UTXO并不能很直观的去理解,但是为什么要用呢?
使用UTXO的动机
那么我们站在系统设计的角度猜测一下为什么中本聪会考虑使用UTXO。
在比特币的实现中,是把所有的UTXO保存在一个单独的UTXOSet缓存中,截止2017年9月,这个缓存大概2.7Gb,与之对应,整个区块链的交易数据达到140Gb,UTXO缓存像是一个只保存了最终一个状态的git,整体的消耗负担小了很多很多。
但是中本聪没想到,很多人现在把交易输出的脚本玩出花来了,导致很多UTXO创建出来就是不为消费用的,永远不会被消费掉,节点的负担越来越重。这才有了后续的BIP改进以及以太坊的账户模型。那又是一个很长的故事了...
The text was updated successfully, but these errors were encountered: