以比特币为代表的数字货币,关键的创新是通过时间戳(Timestamp)和工作量证明(Proof of Work)机制解决双重支付(Double Spending)和拜占庭将军问题(Byzantine Generals’ Problem),即保证同一笔比特币不会同时出现在两个地址,并且在信道可靠的基础上,所有节点都可以让其它节点接收到自己的真实意图,并最终一致行动。

这一技术方案最早见于化名为中本聪(Satoshi Nakamoto)的个人或团体在2008年发表的论文Bitcoin: A Peer-to-Peer Electronic Cash System 。

在Bob接收来自Alice的比特币的场景中,一方面,这笔付款被广播给系统中所有节点,任何人都可以使用Bob的公钥来验证这个交易的合法性,如果Alice试图双重支付,就必须先删除这个交易记录,否则新交易无法通过验证。中本聪在论文中写道:

“时间戳服务器为一个区块的数据的哈希计算结果加上时间戳,并大范围发布这一哈希计算结果,好比在报纸或新闻网上发表。显然,时间戳证实这些数据一定在这一特定时间存在,只有这样才能得到哈希计算结果(A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash)”。

另一方面,工作量证明机制使得生成下一个区块的节点和矿工几乎无法被预测到,所以删除交易记录几乎不可能。系统中的节点将过去约10分钟内的比特币交易进行打包,而只有获得有效哈希值的矿工才能生成新区块,并得到挖矿奖励;矿工除了打包比特币交易,还要结合随机数来完成有效哈希值的创建工作,获得以要求的数量的0作为开始的哈希值。

中本聪在论文中写道:
             
图5,出自中本聪论文Bitcoin: A Peer-to-Peer Electronic Cash System 

  • “工作量证明本质上是一CPU一票(Proof-of-work is essentially one-CPU-one-vote)”;
  • “如果两个节点同时广播不同版本的新区块,那么一些节点会先收到其中一个的广播。在这种情况下,节点在先收到的区块基础上工作,并保留另外一个分支,以防后者变成较长的链。这个僵局要等到发现下一个工作量证明才能被打破,其中一条链将成为较长的链,在另一个分支上工作的节点将切换到较长的链上继续工作(If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof-of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one)”;
  • “节点永远认为最长的链是正确的链,并将持续在它上面延长(Nodes always consider the longest chain to be the correct one and will keep working on extending it)”。

所以除非永久控制整个系统中超过一半的节点,才能阻止矿工把这个交易添加到新区块中。

最后,考虑到硬件运算速度的增长和节点参与程度的变化,中本聪用移动平均目标来确定工作量证明的难度,使得两个区块生成的时间间隔约为10分钟。

解决比特币双重支付问题相关推荐

  1. 自己理解的比特币双重支付

    用一个比特币多次支付. 发给A的交易成为交易A放在未确认的交易池 发送B的交易成为交易B放在未确认的交易池 A先写入区块链验证有效,这时B就验证无效 但如果两个交易验证,区块链就会产生两个分支, 等待 ...

  2. 通俗易懂区块链系列——双重支付/双花支付

    通俗易懂区块链系列--双重支付/双花支付 0 双重支付,又称为双花支付,是指同一笔钱花了两次甚至是多次.不同于实物货币,由于比特币是数字货币,本身就是一些代码,所以具有可复制性,而且由于比特币网络的开 ...

  3. 什么是“双重支付”,即“双花”

    如果同一笔钱(数字货币)被重复支付两次,就是双重支付问题,解决这个问题就相当于数字货币的防伪技术.这个问题在物理货币世界并不存在,因为你无法复制黄金.在纸币中,由于纸币由造币厂发行的,设计有复杂的防伪 ...

  4. 定量分析双花(双重支付)问题

    引自 Analysis of hashrate-based double-spending,Meni Rosenfeld 1.问题描述 假设: 1.诚实节点和攻击节点的算力总和为常数,p为诚实节点记录 ...

  5. 区块链技术再出新玩法——解决跨境支付问题

    早几年前,人民消费和生活水平提高,各种跨境消费服务如雨后春笋一般快速发展,最为火热的是跨境电商.跨境旅游和跨境留学三大板块.在这些跨境服务增长和消费升级的背后,跨境支付的服务和体验问题日益突出.人们在 ...

  6. 【放码过来】谈双重支付

    注:本文没有讲述什么是双花问题,以及各种共识协定是如何防范双花的,只是从代码角度让之前对双重支付有一定了解的同学有更具体化的认识.当然,也是自己在看书的时候,为达到知行合一的简单实践. 先从维基百科上 ...

  7. Android连扫码盒子,商米扫码盒正式上市,为解决扫码支付痛点而生

    原标题:商米扫码盒正式上市,为解决扫码支付痛点而生 近年来,随着移动支付的兴起,有越来越多的消费者使用微信.支付宝等方式进行付款,扫码支付备受青睐.为了迎合消费者扫码支付的需求,商家不得不使用扫码支付 ...

  8. java掉单_【Java】抄答案就是了,两套详细的设计方案,解决头疼的支付掉单问题...

    Hello,大家好,我是楼下小黑哥~ 好久没写支付相关的文章了,今天继续从事老本行~ 上次在文章钱被扣走了,但是订单却未成功!支付掉单异常最全解决方案提到,支付过程会出现掉单.卡单的情况,这种情况对于 ...

  9. php苹果app微信支付 无法返回,微信支付,php_微信支付APP返回-1怎么解决,微信支付,php,移动app - phpStudy...

    微信支付APP返回-1怎么解决 开发文档上面-1"可能的原因:签名错误.未注册APPID.项目设置APPID不正确.注册的APPID与设置的不匹配.其他异常等.",但是我检查过没问 ...

最新文章

  1. 文件服务器raid1设置,文件服务器raid1设置
  2. 什么是 BCH、比特现金新地址?
  3. MySQL约束不起作用怎么解决_MySQL中的CHECK约束不起作用
  4. ExtJS 中自定义类
  5. 请求编码和响应编码乱码原因及解决方案
  6. php获取页面的可视内容高度,网页制作技巧:获取页面可视区域的高度_css
  7. 云栖专辑 | 阿里开发者们的第19个感悟:Simple is better.
  8. Android平滑移动——Scroller类研究
  9. 基于共享内存、信号、命名管道和Select模型实现聊天窗口
  10. C# ASP.NET 转换为int型的方法 很实用
  11. JSP EL表达式中11个隐藏对象file:///D:/SoftwareFile/qq file/MobileFile/34090016310074682(1).png
  12. 随便谈谈职场人对开会的看法和建议以及针对无聊会议的摆烂建议
  13. java short转byte_java基础之short转换byte[]
  14. 数据管理执行指南 | 你需要知道什么?
  15. Smoke Loader、AZORult木马通过虚假海啸警报传播到了日本
  16. 为云原生而生 DeepFlow破解混合云时代网络监控难题
  17. mk16i android 8,索爱MK16i评测:机身做工优良
  18. HTML5 入门( 一)
  19. 从SUV到MPV,岚图难跨高端
  20. Ubuntu16.04+GT720M + Cuda8.0+py-faster-rcnn(caffe)

热门文章

  1. 今日恐慌与贪婪指数为73 贪婪程度有所上升
  2. ETH突破620美元关口 日内涨幅为5.36%
  3. Axure中后台管理信息系统通用原型方案 /框架模板/数据仪表/团队协作/会员管理/电商系统/资金统计/数据监控/销量统计/订单管理/客户管理/团队协作/职务管理/业务信息/员工管理/即时通讯
  4. java 优秀开源项目
  5. Linux 分区管理与swqp与逻辑卷创建修改删除
  6. 连接SQL Server数据库
  7. vue - (引入jq)
  8. Ubuntu 16.04出现chmod: 无效模式:a的问题解决
  9. 怎样计算一个整数的位数并把每一位上的数字保存下来
  10. 测试人员眼中的问题解决策略