比特币相关资源

分叉问题听谁的?
  在这一段的论述中,我们引用了知乎用户“汪乐–LaiW3n”的说法。在这个广阔的小城市里,一定还会存在这样的问题,B和C几乎同时记录完了,于是同时向天空大喊了一声,“这个编号89757的巴拉拉能量归我了”。但是,由于这个城市太广阔了,有的人会认为这个编号89757的巴拉拉能量归B,也有的人认为这个编号89757的巴拉拉能量归C,但是编号89757的巴拉拉能量只有一个啊,只有一个人能得到,怎么办呢?一人一半?当然是不可能的,这个时候我们会采用更原始简单的规则来解决,谁长听谁的。
  在不加任何限制条件的情况下,这件事件会发展成这样:一部分人认为这句话是B说的,在听到这句话之后开始记账,之后他们所做的所有事情都是基于B有了编号89757的巴拉拉能量这个事实,并且随着这个信息一次次地传下去,这条信息链会越来越长;而另外一群认为C先说这句话的人,也会按照这样的趋势发展。
分叉问题听谁的?

  这下事情严重了,原本是一条唯一的、编号顺序严谨的总信息链,在B和C喊出“这个编号89757的巴拉拉能量归我了”这句话之后,硬生生地分叉了!这还得了,要是这种情况延续下去,每个人手里的账本都变得不一样了,而且根本没法确定哪个是真的!
  为了解决这个问题,小城市又追加了新的区块链规则,记录的时候必须顶格写,而且要保证,中心在离田字格上边缘0.89757毫米的位置上,于是,每个人写字的时候都要拿刻度尺量好之后再写,这非常困难,每个人的记录需要5分钟才能完成,因此,写这句话所用的时间变得不同了。于是,只要有人高喊“我写完了!那句话是某某某写的”,其他正在写这句话的人便会停笔,然后在小本子上重新开始写“那句话是某某某写的,上一句的编号是×××”。
每次记账的规则都很复杂

问题三:双花问题
  双花问题是指一笔数字现金在交易中被重复使用的现象。
  如果我同时向B和C都喊了一句,我给你一个巴拉拉能量,怎么办呢?巴拉拉能量只有一个,如何保证一个巴拉拉能量在实际的交易中只被支付了一次呢?
  我们以比特币为例,中本聪在《比特币白皮书》第五小节中是这样说的,运行比特币网络的步骤如下:
  1.新的交易向全网进行广播;
  2.每一个节点都将收到的交易信息纳入一个区块中;
  3.每个节点都尝试在自己的区块中找到一个具有足够难度的工作量证明;
  4.当一个节点找到了一个工作量证明,它就向全网进行广播;
  5.当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性;
  6.其他节点表示他们接受该区块,而接受的方法则是跟随在该区块的末尾,制造新的区块以延长该链条,并将该区块的随机散列值视为新区块的随机散列值。
  也就是说,交易发生的一刻起,比特币的交易数据就被盖上了时间戳;而当这笔交易数据被打包到一个区块中后,就算完成了一次确认;在连续进行6次确认之后,这笔交易就不可逆转了;在比特币中,每一次确认都需要“解决一个复杂的难题”,也就是说每一次确认都需要一定的时间。

.数据区块

  比特币的交易记录会保存在数据区块之中,比特币系统中大约每10分钟会产生一个区块,每个数据区块一般包含区块头(Header)和区块体(Body)两部分,如图所示:


区块结构

  区块头包含的信息就像我们写日记的时候每页的页码、日期等等信息类似。区块体中则主要包含交易计数和交易详情,就相当于我们日记本中的内容一样。我们平常下载的数据主要就是区块体的数据。

2.挖矿与分叉问题

  区块在挖矿过程中产生。所谓挖矿,实际上是穷举随机数算法,把上个区块的哈希值加上10分钟内的全部交易单打包,再加上一个随机数,算出一个256位的字符串哈希值,输入的随机数Nonce使哈希值满足一定条件就获得这个区块的交易记账权。新产生的区块需要快速广播出去,以便其他节点进行对其验证,以防造假。

  每个区块存着上一个区块的哈希值,可以溯源到源头,只有经过验证后才最终获得区块的交易记账权。比特币系统会让挖矿的矿工竞争记账权(在主链上链接区块的权利),这个竞争机制就是工作量证明机制。挖矿需要付出大量的能源和时间,谁付出的工作量多就能以更大的概率获得一个区块的记账权。获取记账权的矿工会将当前区块链接到前一区块,形成最新的区块主链,该矿工也会得到系统奖励的一定数量(2009~2013年每10钟产生50个比特币,2014年至今每10分钟产生的比特币将减半成25个)的比特币。所有的区块链接在一起形成了区块链的主链,从创世区块到当前区块,在区块链之上的所有数据历史都可以被追溯和查询。

  需要说明的是,可能会出现不同地区的两个矿工同时“挖出”两个新区块加以链接的情况,这时主链上就会出现“分叉”。系统并不会马上确认哪个区块不合理,而是约定后续矿工总是选择累计工作量证明最大的区块链。因此,当主链分叉以后,后续区块的矿工将通过计算和比较,将其区块链接到当前累计工作量证明最大化的备选链上,形成更长的新主链,并自动抛弃分叉处的短链,从而解决分叉问题。

3.时间戳和不可篡改性

  时间戳是指从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,通常是一个字符序列,唯一地标识某一刻的时间。在比特币系统中,获得记账权的节点在链接区块时需要在区块头中加盖时间戳,用于记录当前区块数据的写入时间。每一个随后区块中的时间戳都会对前一个时间戳进行增强,形成一个时间递增的链条。时间戳技术本身并没有多复杂,但在区块链技术中应用时间戳却是一个重大创新,时间戳为未来基于区块链的互联网和大数据增加了一个时间维度,使得数据更容易追溯,重现历史也成为可能。同时,时间戳可以作为存在性证明(Proof ofExistence)的重要参数,它能够证实特定数据必然在某特定时刻是的确存在的,这保证了区块链数据库是不可篡改和不可伪造的,这也为区块链技术应用于公证、知识产权注册等时间敏感领域提供了可能。


针对以上技术栈,搜罗收录了一些相关的资料整理如下:

一、比特币相关资源

1.《比特币白皮书》网址浏览
2.【比特币源码下载】《比特币白皮书下载》
3.《精通比特币》
讲比特币很详细的一本书,看完基本对比特币的认识就清楚了。
4.《TheProof-of-Work Concept》PoW机制理论介绍,英文
5.《比特币的原理及运作机制》适合向圈外人介绍什么是比特币什么是区块链。
6.《比特币pow难度调节机制》PoW的难度调节是一个要点,一篇简介

二、区块链

1.《区块链技术指南》网页在线电子书,对区块链技术讲解得非常全面
2.【csdn的blockchain知识库】
3.【区块链可应用场景】应用场景探讨,布萌社区下的一篇帖子
4.【汪晓明对区块链、以太坊的思考】
汪晓明作为朝夕网络CEO,区块链技术的推广者和布道者,参与并制作了区块链视频节目《明说》,向开源技术大牛学习。

三、以太坊

1.《以太坊白皮书英文版》
2.《以太坊黄皮书》介绍以太坊原理的论文,文长慎入
3.【以太坊常见问题】以上三篇都是外文资源
4.【Solidity语言】Solidity语言的文档,还是英文。极客学院翻译了一档勉强凑合的doc,http://wiki.jikexueyuan.com/project/solidity-zh/
7.《以太坊智能合约编程之菜鸟教程》以太坊中文网站出的
8.通过truffle部署以太坊智能合约
9.Truffle 3.0部署智能合约至Ethereum节点
10.以太坊智能合约编写实例
11.以太坊智能合约编写实例2
12.在CentOS6.5上搭建以太坊私有链

四、Hyperledger fabric

1.《Hyperledger Fabric V1.0– 开发者快速入门》万达网络研究中心副总季宙栋写的开发者入门指南,这档知乎专栏可以订阅。
2.【Hyperledger 源码分析之 Fabric】源码分析,感兴趣研究的同学可以看看
3.【Hyperledgerfablic 1.0 在centos7环境下的安装与部署和动态增加节点】csdn上的一篇技术帖
4.【fabric源码搭建】托管在github上的doc说明,纯英文。
5.《Hyperledger Fabric1.0架构概览》
6.《fabric中文文档》
7.【Ubuntu中使用 Docker 部署 HyperledgerFabric】学好docker很重要

五、布萌

1.布萌接入指南
布萌官方的指南有些模糊,个人整理了一版出来仅供参考
2.布萌API文档
3.布萌SDK文档
两个官方文档,其实官网就有,顺手列在这了:D
4.布萌PHP SDK
今天看到有朋友放出的PHP的SDK,膜拜大神

六、其他

1.《Nodejs开发加密货币》基于Ebookcoin(亿书币)的开发教程,有一定参考价值
2.《创建自己的私有比特币测试链》比特币私链搭建教程





猜你喜欢

转载自blog.csdn.net/TuxedoLinux/article/details/80372487