1 一些概念
1.1 基本概念
1.1.1 区块 block一个区块是若干交易数据的集合,它会被标记上时间戳和前一个区块的特殊标记。区块头经过哈希运算后会产生一份工作量证明,从而验证区块中的交易。有效的区块经过全网络的共识后被加入到主区块中。区块数据结构是Merkle tree,一种哈希树结构。[1]
有时若干个区块会被同时创建出来,这样就在区块链链条上形成分支,区块链会使用特定的算法给这些冲突的历史版本打分,最终使得在诸多历史版本中选出那个得分比较高的。那些存在于被丢弃的历史版本中,没有存在于得分最高的历史版本中的区块会被称作孤儿区块。(orphan blocks)[2]
图1 区块链信息
主链(黑色)由一系列的区块构成,从创始区块(绿色)一直延伸到当前区块。孤儿区块不在主区块之中。
因为区块链是把新区块上的分值加到旧区块上的,而且新区块有奖励、覆盖旧区块没有奖励,一条记录能被改写掉的可能性是随区块链的增长而几何级接近0的。
举例来说,一个使用工作量证明的系统里,一个有着最多累积工作量证明的永远会被网络认证为是有效的。有多种方法能被用来演示足够的计算水平,与传统并行计算的方法不同,区块链中的计算是多余的。[3]
中本聪在2008年所开发出的第一个区块,高度为0,是所有已有区块的起始区块。
1.1.3 区块链 blockchain
区块链则是一连串的区块,可以把他看作是连续的、可被验证的记录串。从设计角度上,区块链是能避免对已有数据的修改的。(即在两部分中间用可验证的永久记录来记录交易历史)数据结构可以看作是一个链表。
每一个新区块的增加都需要全网的共同确认,而这就造成已有的记录难以被更改。因为,已有记录的变更都需要后续所有区块的确认,需要耗费很大的算力。
最初在中本聪的论文里block chain俩词是分开的,到2016年已经合到一起去了。
1.1.4 BIP bitcoin improvement proposals
比特币社区成员所提交的一系列改进比特币的建议。
- 想法,任何一个人都可以通过任何途径渠道,如论坛,推特等等,提出自己改进初步想法,来争取更多人支持认同。
- 提案,可以汇总社区讨论的建议,以较规范的格式,详细地描述方案,形成一个BIP提案文件提交。
- 正式提案,对较重要或者认可的人较多的BIP提案分配序号。以便方便大家讨论区分这个提案,有序号的提案算是正式提案。
- 落实代码,一些开发者会依据BIP正式提案的构思,落实成具体的代码。并且在测试网络上进行严格的测试。以确保代码尽量没有Bug。
- 激活设定,代码没有问题后,根据《BIP9升级规范》,设定激活门槛,分配激活标记位,缓冲时间等。
- 发布版本,若足够多的人签名同意,那么会吸纳此BIP代码在最新版本中发布包含这个BIP代码的版本,但是处于未激活状态。
- 激活,等待达到BIP9设的激活门槛后,方案正式激活生效。实测是否方案成功。若出现问题可能回到上一版本。
当一项交易被区块收录是,我们可以说他有一次确认。矿工们在此区块后每再产生一个区块,此项交易的确认数就会再加一。一般确认数达到六次或以上时,认为这笔交易比较安全且难以逆转。
区块链的底层有四部分构成,一个分布式的数据库用来存储以往和将来的交易数据,密码学的公私密钥体系用来确认交易双方的身份,P2P网络用来广播和蔓延各类消息(如节点加入消息,节点失效消息,得到挖矿数据的消息)和 用来决定节点记账权利的共识机制。
共识机制在区块链中扮演着核心的地位,共识机制决定了谁有记账的权利,以及记账权利的选择过程和理由。不用的虚拟货币采用共识机制不同,常见的共识机制如POW,POS,DPOS 拜占庭容错等。比如比特币使用的是POW机制。
POW(Proof of Work),即工作量证明机制。整个系统中每个节点为整个系统提供计算能力(简称算力),通过一个竞争机制,让计算工作完成最出色的节点获得系统的奖励,也就是完成新生成货币的分配。
顾名思义地,挖矿即代表新区块的发现过程。
区块中的第一笔交易是比较特别的,因为他将给这个区块的创造者产出更多的比特币。这使得新比特币能够投入流通,每隔210 000个区块,新挖掘区块的奖励就将会减半。最开始时发掘出一个新区块的奖励在50比特币,2012年下半年和2016年分别降低到了25比特币和12.5比特币。这个减半的过程在新比特币再不能生成之前将进行64次。
下面是一个挖矿过程的简单示例。
- 新的交易被广播通知到所有的节点。
- 每个矿工节点收集所有的交易信息到一个新的区块里。
- 每个矿工节点尝试解出这个区块的工作量代码。
- 当一个节点发掘出了一个工作量,它会把这个区块广播给所有的节点。
- 接收到信息的节点验证交易有效性,有效的话接受它。
- 节点一旦接受新区块,会开始发掘下一个区块。在挖掘下个区块时带上这个已被接受的新区块的信息(哈希值)。
1.2.3 难度
整个网络会通过调整“难度”这个变量来控制生成工作量证明所需要的算力。具体理解可以参考POW机制相关。
图3 新区块挖掘难度显著增长
1.2.4 难度目标
使整个网络的算力大致在每10分钟产生一个区块所需要的难度数值即为难度目标。(对于比特币来说是这样)1.2.5 难度调整
整个网络每产生2106个区块后会根据之前2106个区块的算力进行难度调整。1.3 应用与交易概念
1.3.1 私钥
用来解锁对应钱包地址的一串字符。(私钥生成公钥,公钥哈希出钱包地址)1.3.2 交易
把比特币从一个地址转到另一个地址。更准确的说,一笔交易指一个经过签名运算的,表达价值转移的数据结构。每一笔交易都经过比特币网络传输,由矿工节点收集并封包至区块中,永久保存在区块链某处。1.3.3 钱包
钱包指保存比特币地址和私钥的软件,可以用它来接受、发送、存储你的比特币。
参考文献:
[1] http://blog.youkuaiyun.com/wo541075754/article/details/54632929
[2] http://8btc.com/article-1792-1.html
[3] https://en.wikipedia.org/wiki/Blockchain
[4] http://www.8btc.com/bitcoin-bip
[5] https://www.zhihu.com/question/53385152/answer/150472073