|
一、背景比特币的发展历程
区块链的前世今生
我为什么要写这篇文章
二、核心要点比特币是什么
区块链技术的核心要点区块链是如何存储的?
上一节介绍了区块链的存储,区块链实际上是比特币的账本,记录着谁拥有多少比特币,只不过这个账本是保存在互联网上的、分布式的,并不是由一个中心机构或者服务器来存储。
有了账本,剩下的问题就是比特币的拥有者如何证明自己拥有比特币?就像你在银行开立了一个账户,等你想给其他人转账的时候,你需要在ATM上插入卡,然后输入密码。
卡就相当于比特币的地址,密码就相当于比特币的秘钥,有了正确的地址和秘钥,就可以对外宣称自己对比特币的拥有权,就可以把比特币转账给其他人来做一笔转账交易。
在ATM上提取一笔现金,输入密码解锁账户,我们相信ATM机不会泄露密码。那么在比特币的世界里,我们如何通过私钥来校验一个地址上的比特币的归属权呢?
比特币的归属权是通过加密领域技术来实现的,我们先来了解下加密领域的原理,加密领域大体上经过了3个阶段,第一个阶段拼算法,把加密逻辑写在一个非常高深的代码里,后来发现无论把多么复杂的逻辑写在代码里,总有高手可以破解。
于是产生了对称秘钥加密,对称秘钥加密通过一个对称的秘钥进行加密数据,然后传输或者保存,需要的时候再通过同一个秘钥进行解密还原原来数据,缺点是秘钥是共享的,无法安全的保存秘钥,尤其是跨组织的场景。
后来,聪明的安全科学家们发明了非对称加密算法,例如:RSA,非对称算法拥有一对秘钥,一个公钥和一个私钥,私钥可以推导出公钥,但是公钥不能推导出私钥,公钥加密的数据私钥可以解密,私钥加密的数据公钥可以解密,如果组织A向组织B传递数据,那么组织A使用公钥进行加密,组织B使用私钥进行解密,因此,组织B需要小心的保存好私钥,而公钥是公开的,这是典型的非对称加密场景,能够有效的防止数据被偷窥、被篡改。
非对称加密还有另外一个场景,就是签名,签名是加密场景的逆向场景,商户B通过自己的私钥加密数据,然后把加密的数据传递给商户A,商户A通过公钥进行解密,如果解密的数据正确,则说明数据是由A发送的,有效的保证了数据的防篡改,从这两个场景我们看到,公钥是公开的,可发给任何人,私钥是私密的,用来解密或者签名的。
比特币证明归属权的示意图如下:
从上图可见,现实生活中我们用钥匙打开锁头,我们用密码在ATM上提取现金,那么在比特币系统里,我们通过秘钥来实现比特币的转账,实现价值的转移。
更具体来讲,一笔比特币交易会把一定数量的脚本锁定在一个地址,声明拥有这个地址的用户会通过密匙的签名来证明自己拥有这个地址。
然后,花费这笔比特币,这笔比特币被花费后并不会消失,会被锁定在其他人的地址上,其他人可以使用同样的方法来花费这笔比特币。
从上面的过程,我们总结了两个动作,锁定与解锁,这和我们平时锁锁头和开锁头是对应的,在比特币系统里是通过锁定脚本和解锁脚本来实现的。
下面我们举一个例子详细说明:
用户 Alice 在比特币里地址A上拥有10个比特币,Alice 与 Bob 想做一笔交易, Bob 把自己家的汽车卖给了 Alice,Alice 需要向 Bob 支付10个比特币,Bob 的比特币地址是B。
在之前的交易中,Alice 拥有的10个比特币被锁定在 Alice 的比特币地址A上,其来源可能是挖矿所得或者别人转账而来,我们会在后续详细描述如何获得比特币,这里我们只关注证明 Alice 拥有比特币的交易的锁定脚本。
锁定脚本的逻辑格式为:
如果想花费这个锁定脚本,需要的解锁脚本如下:
其实,锁定和解锁脚本是通过逆波兰表示法的基于堆栈的脚本实现的,由于本文篇幅有限,这里不展开介绍,会在后续的文章中详细介绍锁定和解锁脚本的原理和流程。
上一节介绍了比特币使用分布式存储的区块链作为记账系统,也解决了大家关于如何声明比特币的拥有权,以及把比特币支付给其他人的过程。
这不得不引入一个新的概念,就是共识机制,比特币是通过工作量证明的共识机制来决定记账权的,通俗来讲,谁证明了自己的工作量最大,谁就负责记账。
工作量大小是通过计算符合某一个标准的比特币区块头的哈希散列值来体现的。
试图争夺记账权的节点称为挖矿节点,挖矿节点会把网络节点上发来的交易进行验证(网络传播机制会在下一节中介绍),验证后会存入缓冲区,形成一定的交易存储结构(交易使用 Merkle 树存储,后续问斩各种介绍),放在区块体中。
然后根据区块的基本信息构造区块头,区块头通常包含前一个区块的哈希散列值、Merkle根(后续文章会详细介绍)、时间戳、难度目标、以及一个填充的随机值。
这里面的随机值是随机产生并且填充的,挖矿过程就是求出一个能够填充本区块头的随机值,让区块头的哈希散列值符合某一个标准。
例如:哈希散列值的前某些位为0,难度目标就是用来表达哈希散列值标准的难度系数,可以通过概率算法计算出难度值与挖矿成功的可能性。
网络上的每一个矿机接收并验证了一批交易,然后就开始进行挖矿,视图计算满足某一难度值的区块头的哈希散列值,如果计算成功,则挖矿成功,向全网广播挖矿所得,全网节点验证后,把这个区块连接到区块的最上端,并且在全网达成一致。
矿机需要反复的试验随机填充值来进行求解,一般采用产生随机数,尝试把产生的随机数填充到区块头。
然后计算哈希,后续文章会介绍矿机联盟,矿机联盟会把随机数分成多个小区间,分配给联盟中的成员,共同求解。
除了上面介绍的工作量证明机制,还有权益证明、股份制的权益证明共识机制等,后续我会在共识机制的专题文章中与大家分享。
P2P网络
比特币网络中的节点都是对等的,没有中心化的服务器,节点有不同的类型,不同的类型有不同的职责,我们会在将来的文章中详细介绍,这里我们只介绍全节点,也就是比特币核心客户端的工作机制。
比特币中的全节点除了存储完整区块链,还具有矿工、钱包、路由节点等的角色,他们的职责如下:
P2P 网络传播的示意图如下:
我们会在后续的文章中详细介绍比特币 P2P 网络的工作机制,包括节点分类、节点发现、节点连接和广播等。
由于篇幅有限,前文介绍了比特币的三大基础概念,包括区块链、挖矿与P2P网络。然而比特币是个庞大的系统,初学者可能对方方面面都有疑问。
这涉及到如何防止双重支付、智能合约、区块链分叉、通缩特性、锁定和解锁脚本、交易的 Merkle 树存储、交易的存储格式、区块链被攻击的概率、挖矿难度与挖矿成功时间、更多的共识机制、创币交易和转账交易、比特币的性能、不同类型的挖矿节点、以及比特币的应用场景等。
想了解答案吗?想!那就立即跳过问题看后面我分享的材料,看完秒懂这些问题,让你理解比特币和区块链不留死角,是在吹牛吗?嗯,也许不是,看吧,看完真的秒懂 。
如行业内一个前辈所说,最正宗和最正经的学习比特币和区块链的资料莫过于中本聪发布的比特币论文,我对新技术的学习一直都是先看论文。
于是,马上立刻就把我学习的比特币和区块链资料分享出来,希望能够让更多的人从比特别最原始的概念开始学习,打下良好的基础,再扩展学习会有水到渠成的感觉。
学习上面的论文更多的能够帮助你对理论的理解,这篇论文的内容包括了比特币和区块链最核心的思想。
那么如果你想从技术上更深入的学习比特别,或者想了解比特别和区块链的实现层次的细节,那么我推荐《精通比特币》这本书,幸好这本书也有中文版。
精通比特币 ( http://pan.baidu.com/s/1slFctY1 密码: bbdb )
前文说了,虽然论文是一项新技术的灵魂和核心,路边的野花真的就不要了吗?可以时而的换个口味,读读别的文章,看看别人的PPT,学学别人学习途径,还是很有价值的,这里介绍几个对学习比特币有帮助的资料。
本文从比特币和区块链技术的背景说起,介绍了比特币和区块链技术的来龙去脉。
最后提供了笔者在区块链研究群里收集的初学者常见的问题,并向导读者带着这些问题去阅读笔者提供的资料。
<div align="left"> |