币图告诉你如何解决双花问题
先简单说,双花问题是一笔钱被重复花了两次。
双花问题包含两个子问题,一种是同一笔钱被多次使用,另一种是一笔钱只被使用过一次,但是通过黑客攻击或者造假钱的方式,将这笔钱复制了一份,再次使用,双花问题主要通过第三方机构来解决,区块链在共识机制的基础上,引入了时间戳和utxo模型,通过共识机制来解决问题。
在数字化货币系统中,由于数据的可复制性,使得系统可能存在同一笔数字资产因不当操作被重复使用的情况,这也称之为双花。
为了解决双花问题,我们日常的数字资产使用依赖于第三方信任机构进行。这类机构对数据进行中心化管理,并通过实时修改账户余额的方法来防止双重支付的出现。而作为去中心化的点对点价值传输系统,比特币通过UTXO、时间戳等技术的整合来解决双花问题。
具体来说,当一笔交易被广播到区块链网络之后,接收到交易的节点会对交易进行验证,检查其是否被花费过,即是否存在于UTXO中。如果交易输出已不存在于未花费交易列表中,则验证失败。
另一方面,为了防止一个UTXO被重复使用的情况,比特币网络中还引入了时间戳的概念。假设用户A将被认证为UTXO的1 BTC同时转账给B1、B2,两笔交易仅有一笔会成功完成,因为挖矿节点会选择性的记录优先接收到的或交付手续费更高的那笔交易。当交易被挖矿节点先后记录,根据时间戳的数据,最先被记录的交易才能成功验证。
即使两个挖矿节点分别记录并验证“从A到B1”以及“从A到B2”为有效交易,且将各自挖出包含相关交易的新区块同时广播到比特币网络中;双花现象也不会产生。根据比特币协议,当两个节点同时生成新区块时,区块链会出现分叉;只有最先生成新区块并成为当前最长链上的交易,才能被认证。通常有超过六个区块对交易进行确认之后,该转账过程才算成功。
当然比特币区块链中也不是绝对不可能出现双花现象的,比如遭受“51%算力攻击”的时候。不过这个事情发生的概率小到基本可以忽略。
编辑搜图
请点击输入图片描述(最多18字)
2008年,有个叫中本聪的人发表了一篇论文《比特币:一个点对点的电子现金系统》,这篇论文描述了比特币的详细操作方案,标志着“比特币”的诞生。
比特币白皮书,也就是中本聪写的那篇论文《比特币:一个点对点的电子现金系统》,看似非常复杂,其实通过白皮书的简介,我们可以发现,中本聪想要解决的终极问题是“去中心化问题”,去中心化是他的终极理想。但是,想要实现去中心化,要面很多,对现在中心化体系来说,不是问题的问题。在中本聪看来,其中最大的问题就是“双重支付”的问题,就是我们说的“双花问题”。
“双花问题”是怎么回事?
双花问题,简单讲就是一笔钱能被花两次三次很多次。为什么双花问题会成为比特币系统里面一个这么重要的问题呢?原因就在于,比特币,是虚拟货币,它是虚拟的,通过代码形式呈现出来的,是可以被复制下来的。一旦被攻破了代码漏洞,那么就可以循环使用同一笔比特币,这样一来,比特币就失去了货币的价值了。我们想一下,要是一笔钱可以花很多次,你有500块钱,你去买一件500块钱的衣服,还能循环使用,再去买一双500块钱的鞋,这样一来,钱的价值在哪里呢?它就没有价值了啊!
所以,中本聪在设定比特币系统的时候,他所有的技术手段基本上都是围绕着解决双花问题的,来保护比特币作为一种货币,它自身的一个价值。
其实,这个双花问题在我们现在的中心化世界里面根本不是问题,因为有银行啊!钱的交易结算都是通过银行,很安全,有问题直接找银行。但是在去中心化世界里面呢,没有银行这样一个中心机构,还必须保证一笔钱只能花一次,怎么样实现在去中心化的前提下,杜绝“双花问题”呢,这是一个难题。
这里插一句,中本聪为什么如此执着的追求“去中心化”呢,自找烦恼吗?不是,他希望能够通过去中心化,来解决一些社会问题,其中最主要的问题就是因为权力机构过量发行货币造成的通货膨胀。
所以总结一下他的逻辑:中心化的货币增发导致通货膨胀——所以我们要实现去中心化——去中心化要面临很多问题,最大的问题是双花问题——所以我们要解决双花问题——怎么解决双花问题?
这里,中本聪就引入了UTXO和“时间戳”概念,依靠这两种手段来解决双花问题。
UTXO
UTXO的中文意思叫作“未花费的交易输出”。UTXO是数字货币中的账户模型,这个模型和我们现在银行的账户模型是不一样的。
拿转账来说,现在的情况是:我要给小赵转2000块钱,我要从我的招商银行卡里面给她转账,我的卡里面有5000块钱,转给她2000块钱以后,我的招商银行账户就被扣除了2000块钱,还剩下3000块钱。
那么如果是基于比特币的UTXO,我有5000比特币,我给小赵转2000比特币,2000比特币消耗掉了对不对?注意,这2000不是从我这5000总数里面扣除的,而是:我的比特币总额会分成两份(一份2000,一份3000),这就是所谓“生成两个新的UTXO”:小赵收下2000比特币,我自己收下3000比特币,3000算是给我的找零。
转账成功以后,我给小赵的2000比特币目前已经使用过了,被消耗掉了,就不能再叫UTXO了,而找零给我的3000比特币目前我还没有使用,所以它还能称作UTXO ,也就是未花费的交易输出。
那么,如果我总共有5000比特币,我全部转给小赵,那么就只需要生成一个新的UTXO给小赵就可以了,不需要找零了。
基于UTXO,每笔交易出现,都要确认比特币之前的情况,检验比特币是不是存在于我的UTXO中,如果不存在,那么系统就会拒绝你的交易行为。这样一来,每笔交易的输入和输出都是有关系的,可以通过UTXO不断向前追溯,一直追溯到比特币诞生的时候,也就是挖矿的源头。
如果我想用同一笔UTXO发送给两个人,那么系统只确认先接受到的那一笔,一旦确认UTXO已经被消耗了,那么你就不可以再把它转给下一个人,这样就避免了双重支付的问题。
时间戳
为了防止双花问题,系统会给每一个区块的交易信息都自动加上时间戳,给它打上时间烙印,这个时间你花了多少钱,花了就是花了,已经记录上了,不能再用它买别的东西了。
具体怎么记录的呢?其实还是通过计算,把时间戳和区块上的其他交易信息,通过复杂的计算,得出一个加密数值,这个加密数值叫作“哈希值”,每一个新区块都包含前一个区块的哈希值,由此形成一条区块链。
所以我们说:比特币系统,实际上是一个层层嵌套、永不停歇的、非常强大的时间戳系统,它利用的是时间戳保证每一个区块按照时间顺序链接成“链”(也就是区块链)。
从这里我们这样理解,时间戳,字面意思是给区块打上时间印记,它的实际作用在于:为之后计算哈希值提供一个重要参数,是计算和核对过程中一个必不可少、非常重要的信息。
最后,我们总结一下今天的内容。今天主要介绍了两个名词:UTXO和时间戳,这两个名词呢,是解决双花问题的重要手段,能够保证比特币可以在没有第三方机构的情况下,不被多次使用。
币图告诉你如何解决双花问题相关推荐
- Android 应用性能优化(5)---用两张图告诉你,为什么你的App会卡顿?
用两张图告诉你,为什么你的App会卡顿? Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? 知道Android究竟是如何在屏幕上显示我们期望的 ...
- 学Java还是Python?一张图告诉你!
Java 和 Python 一直都是两种很火很强大的编程语言,对于刚开始起步学习编程的同学来说,会迷惑且最经常问的问题是,我该学 Java 还是 Python,是不是 Python 容易学,或是应该先 ...
- 一张图解释什么是遗传算法_一张图告诉你什么叫真正的满配m416,吃鸡玩家看懵了...
开开心心玩游戏,轻轻松松看快讯,欢迎来到<龙百万聊吃鸡>栏目,本期有哪些趣闻趣事呢?咱们一起看一下. 国际服和日韩服的训练场更新了,国服会跟进吗 最近刺激战场国际服和日韩服的训练场更新了, ...
- 【图专题】三篇图神经网络中的图核函数:主要学习图的拓扑结构从而解决图分类问题...
导读:Graph kernel可以直观地理解为测量图相似度的函数.它们允许如支持向量机之类的内核化学习算法直接在图上工作,而不需要进行特征提取即可将其转换为固定长度的实值特征向量.一个简单的例子是随机 ...
- 8张图告诉你如何运营微信公众号
本文摘自亲钢的微信公众平台上的文章,原文标题"如何运营微信公众号,8张思维导图告诉你,拿走,不谢" 微信公众号已经过了红利期了. 什么叫红利期? 就是只要你做个公众号,随便发发文章 ...
- 学python还是java贴吧_是学python还是java?一张图告诉你!
物联网硬件开发 - 零基础学习电子产品设计 - 创客学院直播室www.makeru.com.cn Java 和 Python 一直都是两种很火很强大的编程语言,对于刚开始起步学习编程的同学来说,会迷 ...
- 是学习Java还是Python?一张图告诉你!
Java 和 Python 一直都是两种很火很强大的编程语言,对于刚开始起步学习编程的同学来说,会迷惑且最经常问的问题是,我该学 Java 还是 Python,是不是 Python 容易学,或是应该先 ...
- 一张图告诉你什么是系统架构师
转载自 一张图告诉你什么是系统架构师 这张图从架构师的综合能力.岗位认识.岗位职责等方面,清楚的画出了作为一个架构的基本准则.人人都想成为架构师,可作为架构你达到了上面的要求了吗? 系统架构师是个神奇 ...
- 一张图告诉你为什么是服务网关
转载自 一张图告诉你为什么是服务网关,文末有现金抽奖. 网关服务是单一访问点,并充当多项服务的代理.服务网关启用了跨所有服务的路由转发.过滤和公共处理等. 在微服务实践中远不止这点功能,它可以做到统一 ...
最新文章
- 目标检测评价标准 精准度(precision)、召回率(recall)、准确率(accuracy)、交除并(IoU)【全】
- P4556 雨天的尾巴
- python3接口自动化测试_【python3+request】python3+requests接口自动化测试框架实例详解教程...
- 如何在Windows上使用Git创建一个可执行脚本?
- python sklearn 支持向量机_python机器学习库sklearn之支持向量机svm介绍
- 精心整理 | R语言中文社区历史文章合集(作者篇)
- kubernetes视频教程笔记 (10)-资源清单yaml常用字段解释
- 静态页面放图片及居中
- 台式计算机投网设备,台式机无线投屏 4台电脑一起投屏
- 基本初等函数导数公式表
- thinkphp5 excel导入导出
- 自定义vscode插件路径及离线安装VSIX说明
- iOS10 本地通知
- 通过UA区分微信PC端浏览器还是手机端浏览器
- Solr学习之三:Solr各种查询实例
- java获取Ip工具类
- Auto-Tuning with Reinforcement Learning for Permissioned Blockchain Systems
- python 凸多边形面积
- 2.1.5 校验码(一文带你分析搞懂:奇偶校验码、海明码、CRC码)
- 【面试总结】小灰灰求职进行曲(四)操作系统