区块链学习笔记(一)

最近开始学习区块链的知识,以文章来记录自己的学习历程,一边总结下,新手入门文章,如果有什么理解不对的地方希望大家指正。

另外给大家推荐下我正在使用的资料

1.区块链-从数字货币到信用社会

2.比特币白皮书

3.权益证明白皮书

学习区块链,需要不断的自己查资料,哪里不会查哪里,但是希望大家不要过于纠结某个词的概念,有时候就是水到渠成~

在此希望可以跟大伙一起进步,话不多说,我们进入主题

一:什么是区块链?

   简单来说,区块链就是一个共享的去中心的分布式数据库,具有如下特点:

        1.公开透明

        2.去中心化

        3.匿名性

        4.信息不可篡改

        5.无信任成本

我们通过一个例子来说明以上特点;

比如回忆一下你在网上购买一本书的流程:

  1. 第一步,你下单并把钱打给支付宝
  2. 第二步,支付宝收款后通知卖家可以发货了;
  3. 第三步,卖家收到支付宝通知之后给你发货;
  4. 第四步,你收到书之后,觉得满意,在支付宝上选择确认收货;
  5. 第五步,支付宝收到通知,把款项打给卖家。流程结束。

            你会发现,虽然你是在跟卖家做交易,但是,所有的关键流程都是在跟支付宝打交道。这样的好处在于:万一哪个环节出问题,卖家和买家都可以通过支付宝寻求帮助,让支付宝做出仲裁。这就是一个最简单的基于中心化思维构建的交易模型,它的价值显著,就是建立权威,通过权威背书来获得多方的信任,同时依赖权威方背后的资本和技术实力确保数据的可靠安全。
以上是一个典型的中心化交易模型,它的好处是显而易见的,任何一个环节出了问题,我们都可以找支付宝进行仲裁。
            但是也存在着以下的弊端:
            1.过于依赖于支付宝进行担保交易,如果支付宝出现任何问题,我们都无力反抗。这个问题很好理解,设想一下“911"事件,如果你所依赖的一个中心化机构正好处于五角大楼,也许你刚刚转账完,而为你担保的机构已经不在了,这个时候,为不为你承担损失,或者说承不承认你的交易,完全由第三方说了算。
               2.交易过程中,隐私泄露,支付宝通过我们的交易,所有的账户资料都毫无隐私可言。

            那么在区块链的世界里,交易是怎么样的呢?
                第一步,你下单并把钱打给卖家;           
                第二步,你将这条转账信息记录在自己账本上;            
                第三步,你将这条转账信息广播出去;           
                第四步,卖家和该体系中的其他成员,会在自己的账本上记录这个信息           
                第五步,卖家发货,同时将发货的事实记录在自己的账本上            
                第六步,卖家把这条事实记录广播出去;           
                第七步,你和其他成员收到这条事实记录,在自己的账本上分别记录;            
                第八步,你收到书籍。至此,交易流程走完。
          首先,我们可以发现,在这个模型里,没有一个担保机构,所有组成该体系的成员,都是公证人。所有的交易信息都是公开透明的并且安全可靠的。交易完成后,你,卖家,以及其他成员的账本上都记录了这笔交易,换而言之,网络中所有的成员都拥有一个共享的账本。而这个账本,就可以理解为一个区块链。
          当然,我们还有很多问题没有解释。
          1.怎么保证所有的人都能准确收到发送节点发送的消息呢?如果网络中存在恶意的节点,消息被篡改了怎么办?
          2.为什么别人会给你记账?难道账本不要钱?记账不需要花费精力吗?
          3.还有为什么具有匿名性?如果匿名,怎么验证消息发送的正确性?

   在解决以上三个问题之前,我先说说我现在对区块链工作流程的理解,如果有不对的地方,希望大家指正。
   首先,区快存在于节点中,节点中的区块通过时间戳连成链就是区块链。
           当某一笔交易生成时,发送节点将新的数据记录向全网广播。
           然后接收节点对收到的数据信息记录信息进行校验,通过校验后,数据记录被纳入一个区块中。比如张三给李四转了100元,张三作为发送节点,他会将”张三给李四转了100元“这个消息记录进行全网广播,而其他接收节点,会验证这个消息记录是否合法,比如这个消息是不是张三本人发送的,张三账户是否有100元等等。验证完成后,会将这个交易记录打包成区块。
           再接着,全网所有的接收节点,对这个区块进行共识算法(工作量证明,权益证明等等),这个其实就是比特币的挖矿。
           最后,区块通过共识算法后,被纳入区块链中存储,并添加到之前区块的后面,形成链条。
            以上,就是我对整个流程的粗略理解,希望大家多多指正!
   

   好了,现在让我们回到之前的问题:

      1.怎么保证所有的人都能准确收到发送节点发送的消息呢?如果网络中存在恶意的节点,消息被篡改了怎么办?

           要解释这个问题,就不得不提到拜占庭将军问题了。具体的问题的描述,笔者就不多言,拜占庭将军的问题实质可以理解为在一个分布式的系统里,怎么抵抗干扰因子(叛徒)带来的消极影响,保证消息传递的一致性以及正确性。

这里只粗略说关于这个问题的两种解法结论。详细可参考以下链接:http://www.8btc.com/baizhantingjiangjun

         一:口头协议

            首先,我们明确什么是口头协议。我们将满足以下三个条件的方式称为口头协议:

            A1:每个被发送的消息都能够被正确的投递

            A2:信息接收者知道是谁发送的消息

            A3:能够知道缺少的消息

            简而言之,信道绝对可信,且消息来源可知。但要注意的是,口头协议并不会告知消息的上一个来源是谁。        

        二:书面协议:

        书面协议就是在口头协议的基础上,添加了以下两个条件

    (a)签名不可伪造,一旦被篡改即可发现,而叛徒的签名可被其他叛徒伪造;

    (b)任何人都可以验证签名的可靠性。

        简而言之,消息来源可追溯,可验证

       我们假设总节点数为m,反叛节点数为n,在口头协议的算法下,至少要保证m>3n拜占庭将军问题可解。

       在书面协议算法下,只要保证消息交换的充分性,假设签名次数为k,则k>=m时,问题可解。

       另外大家注意,以上两种解法并不能真正解决拜占庭将军问题,我们没有考虑消息发送的并发性,真正解决这个问题的是区块链,它为发送信息加入了成本,降低了信息传递的速率,并加入了一个随机元素以保证在一个时间只有一个城邦可以进行广播,这个就是工作量证明。

        具体请大家参考之前的链接,笔者只是在为大家划重点~

        2.为什么别人会给你记账?难道账本不要钱?记账不需要花费精力吗?

 以比特币为例解释这个问题。首先我们来看中本聪比特币白皮书中的一段话:

我们约定如此:每个区块的第一笔交易进行特殊化处理,该交易产生一枚由该区块创造者拥有的新的电子货币。这样就增加了节点支持该网络的激励,并在没有中央集权机构发行货币的情况下,提供了一种将电子货币分配到流通领域的一种方法。这种将一定数量新货币持续增添到货币系统中的方法,非常类似于耗费资源去挖掘金矿并将黄金注入到流通领域。此时,CPU的时间和电力消耗就是消耗的资源。另外一个激励的来源则是交易费(transaction fees)。如果某笔交易的输出值小于输入值,那么差额就是交易费,该交易费将被增加到该区块的激励中。

        看完这段话,可能你脑海里会浮现两个字,挖矿。是的,文中的激励,就是对记账者的酬劳,挖矿,实际上就是在争夺记账的权力。
         3.还有为什么具有匿名性?如果匿名,怎么验证消息发送的正确性?
      这个问题其实就是数字签名怎么实现的问题。
        要解释这个问题首先得了解一个概念:
        非对称加密技术
        非对称加密技术,我们只要知道,每个人都拥有两把钥匙,一把私钥,一把公钥,私钥只有拥有者自己知道,而公钥是可以公开的,通过私钥加密的数据,只有对应的公钥可解,私钥自身不可解。
         比特币转账,需要先将该交易进行数字摘要,缩短成一段字符串,然后用自己的私钥对摘要进行加密,形成数字签名。完成后,你需要将原文(交易信息)和数字签名一起广播给矿工,矿工用你的公钥进行验证,如果验证成功,说明该笔交易确实是你发出的,且信息未被更改。这个过程中不需要你提供身份信息之类的。

文中很多东西可能说的比较模糊,如果有和我一样的正在自学的朋友,希望可以多多交流心得,如果有什么错误,希望大神们不吝赐教!~

    









你可能感兴趣的:(区块链学习笔记(一))