从技术角度学习区块链(三)

上一篇文章,讲解了区块链的基础知识。今天,我们继续讨论区块链技术中使用的分布式系统下一致性算法,也就是共识算法。

那么什么是共识算法呢?

在一个分布式系统中,如何保证集群中所有节点中的数据完全相同并且能够对某个提案(Proposal)达成一致是分布式系统正常工作的核心问题,而共识算法就是用来保证分布式系统一致性的方法。共识算法解决的是对某个提案(Proposal),大家达成一致意见的过程。提案的含义在分布式系统中十分宽泛,如多个事件发生的顺序、某个键对应的值、谁是领导……等等,可以认为任何需要达成一致的信息都是一个提案。常见的公式算法有Paxos、Raft、POW、POS、DPOS等。

Paxos和Raft算法

Paxos (帕克索斯)共识算法,在工程角度实现了一种最大化保障分布式系统一致性(存在极小的概率无法实现一致)的机制。Paxos 被广泛应用在 Chubby、ZooKeeper 这样的系统中。该算法解决了数据一致性的问题。Raft(ra福特)可以为Paxos算法的简化版本,Raft更容易理解并且更易于建立实际的系统。这两种算法主要针对内部服务系统,不会故意发送错误的数据。

POW算法

Proof of Work,工作量证明。该算法的原理是,该分布式系统中的请求服务的节点必须解决一个一般难度但是可行(feasible)的问题,但是验证问题答案的过程对于服务提供者来说却非常容易,也就是一个不容易解答但是容易验证的问题。通过计算来猜测一个数值(nonce),得以解决规定的 hash 问题(来源于 hashcash)。保证在一段时间内,系统中只能出现少数合法提案。简单来讲就是,该算法会给出一个数学题,每个参与的节点,谁先计算出来,谁就获得奖励。整个系统会动态调整难度,保证出块的速度保持在指定时间内。这样说,可能不好理解,简单用麻将来类比区块链,其实麻将作为中国传统的区块链项目,四人一组,先碰撞出13个数字正确的哈希值的人获得记账权并且获得奖励。

POS算法

Proof of Stake,权益证明。类似了股份制的公司,你有多少股份,你就多少发言权。在区块链里,下一个区块的矿工选择是根据不同节点的权益和时间进行随机选择的。与工作量证明相比,权益证明不需要消耗大量的电力就能够保证区块链网络的安全性,同时也不需要在每个区块中创建新的货币来激励矿工参与当前网络的运行,这也就在一定程度上缩短了达成共识所需要的时间。所以会需要算法之外的奖励和惩罚规则。

DPOS

委托权益证明(DPOS,Delegated Proof-of-Stake)能够让每一个人选出可以代表自己利益的人参与到记账权的争夺中,这样多个小股东就能够通过投票选出自己的代理人,保障自己的利益。整个网络中选举出的多个节点能够在 1s 中之内对 99.9% 的交易进行确认,使用委托权益证明的区块链能够每秒处理几十万笔交易,同时也能够比较监管的干预。简单来说,DPOS和现行的人民代表大会的制度以及美国的议员选择总统类似。每个人都会有票数,每个人就可以选出自己的代表去参加会议,代表自己的权利,执行自己的权利。

什么是矿工?

上面说了很多共识算法是保质数据的一致性,那么矿工的作用是记账权。还记得第一期的例子,里面的记账的就是村长,村长就是矿工。在区块链里,矿工是需要根据算力来争夺记账权的,谁先计算出来,谁就会获得奖励。获得记账权后,矿工会把这笔交易数据记录到区块里。

区块链技术的应用价值

俗话说,一切没有应用的技术都是耍牛氓。那么区块链技术到底有什么样的应用价值呢?区块链技术的应用价值在于,重构信任,确权,价值流动。

重构信任

通过区块链技术的应用都是可以在链上查询到相关交易记录的,每个人都有自己独立的账本,想抵赖,没门。通过智能合约的机制,可以把更多的合同数字化,自动执行合同约定的操作。code is law 。代码就是法律,从底层上解决需要第三方信任的缺点,以很少甚至可以忽略不计的成本解决了个人与个人、机构之间的信任问题。

确权

过去,我们经常为证明问题头疼。办理一个证件,还需要证明这些问题:怎么证明你是你?怎么证明你妈是你妈?应用区块链技术后,就不需要为这些问题头疼了。你的私钥只有你自己知道。只需要把你交易记录以及数字签名发布出去,别人就能确认这是你的了。甚至还可以采用零知识证明来实现隐私保护。再也不用证明你妈是你妈了。不用证明你是你了。你的终究是你的。

好比,大家都喜欢用淘宝购物,你的钱充值放在支付宝里,你怎么知道支付宝有没有用你的钱借给别人做投资?你的钱到底是不是你的?如果采用区块链技术的话,你的钱只有你才能操作,因为只私钥在你自己的手里。别人没有权限动用你的资金,你放在支付宝的钱就是你。支付宝是无法动用你的资金的。

价值流动

现实世界的交易,都是一手交易,一手交钱。很多时候交易成本相当高。比如房产交易,一般是需要2-3个月左右的交易时间。如果应用区块链技术,首先确认房产的所属权,然后两个直接进行交易就行了,交易完会把这些交易信息加密后广播出去,得到确认后会写入到区块链的区块里,不可篡改。这项交易就这样完成咯。你甚至可以做到按照0.01平方米的分割来卖,这些都提供了价值的流动性,极大的提高了生产效率。再讲一个转账电汇的例子,利用区块链技术的转账,大约操作只需要你填写对方的地址,填写数量,确认就好了,耗时3分钟。但是传统的转账,你要去银行的柜台填一堆的表格或者去操作难用的App、网上银行,耗时估计要30–40分钟。

投资

大家说,你讲了那么多区块链的技术,那到底有没有什么可以投资的数字货币?没有!

在这里不推荐任何数字货币,因为目前市场还是在非常早期,毕竟在价值之外还有泡沫的存在。但可以推荐区块链世界简明生存指南以及INblockchain 投资原则

以下是我对指南和投资原则的一些理解:

  1. 不懂不投。就是搞清楚,弄明白了,再去投资,自己的投资自己负责。
  2. 不要问,一问你就不是合格的投资者。
  3. 多花点时间读懂白皮书,充值了信仰,就能拿得住你手中的币了。
  4. 把时间和注意力,花费在你自己的成长上。

始发于微信公众号:神秘极客

从技术角度学习区块链(二)

上一篇文章,讲解了区块链的去中心化特性。整个区块链是建立在当代的密码学基础上的,今天,继续讨论区块链技术中使用各种加密算法以及技术。

区块链1.0

在区块链1.0使用了链表的数据结构、非对称加密算法、地址生成算法、数字签名、零知识证明等加密算法。

区块的数据结构(区块链入门教程

区块链由一个个区块(block)组成。区块很像数据库的记录,每次写入数据,就是创建一个区块。每个区块包含两个部分。

  • 区块头(Head):记录当前区块的特征值
  • 区块体(Body):实际数据

区块头包含了当前区块的多项特征值。

  • 生成时间
  • 实际数据(即区块体)的哈希
  • 上一个区块的哈希

每个区块的哈希都是不一样的,可以通过哈希标识区块。

如果区块的内容变了,它的哈希一定会改变。

非对称加密算法

所谓对称加密算法,加密和解密都使用同一种规则(秘钥)。举个栗子,Alice选择一种加密规则对信息加密,Bob根据同一种加密规则进行解密,这就是对称加密算法(详情见RSA算法原理(一))。对称加密的问题在于,第一,传递秘钥的途中,容易遭到泄露。其次,对人力无法破解的算法,现代计算机是可以破解的。最简单破解方法就是穷举法,计算机的算力在知道加密方式的情况,有足够的时间是完全不需要秘钥就能破解的。这就诞生了,非对称加密算法。应用较为广泛的算法有RSA、ECC。区块链主要应用ECC(椭圆曲线加密算法)生成公钥和私钥。

地址生成算法

在区块链中不管你收币还是发币,每个人都有一个地址,这个地址是由你的公钥经过SHA-256算法与RIPEMD-160算法通过杂凑得到的。

数字签名

比如Alice需要转账给Bob一个比特币,就需要用到数字签名啦。详细过程如下,Alice使用自己的私钥,将交易信息(发送方Alice的地址+发送的数量+接收方Bob的地址)进行加密,生成摘要,这就是数字签名了。然后Alice会将这笔交易全部广播出去,其他人接受到这个信息,会使用Alice的公钥进行验证消息,证明是确实是由A发出的,并且消息内容在传输过程中,没有被篡改。

零知识证明

还是用Alice给Bob转账为例。Alice创建一个单独的支票r1,给Bob创建单独的支票r2,把r1支票记录在系统维护的一个作废列表里,,然后把这些操作广播出去,让矿工记录到区块链里,这样就完成整个转账过程了。在这个过程中,Bob根本就没有见到Alice的支票,旷工也不知道,他们只知道支票r1在作废列表,支票r2已生效了(因为并不在作废列表)。总结,所谓的零知识证明,就是节点不需要知道你们转账具体信息,谁转给谁,只需要知道必要的信息就可以完成整个转账流程。

区块链2.0

迄今为止,区块链技术安全的运行了9年,暂时还没有出现因为安全算法引起的事故。如果是在当代加密算法的基础被量子计算机攻破了,那整个区块链就没办法玩下去了。因此,区块链2.0的升级就是加入了智能合约。

智能合约

什么是智能合约?代码就是法律。你可以理解将现实中的合同数字化,但不仅仅是简单的数字化,它还是不可篡改的。把全部的业务逻辑放到链上,运用程序代码去实现合同内容,合约执行是不需要靠中介或者中心化的机构。如果触发了合约条件,智能合约就会按照预期的约定执行。再举一个栗子,比如你去坐飞机,购买了延误险,直接放在智能合约里面,如果飞机延误了,合约会按照约定自动赔偿打到你的账户,不需要做任何操作,这是智能合约的典型应用了。

区块链3.0

在现阶段,自行开发区块链的成本相当高,而且开发出来用户体验也不是很好。加入用操作系统来类比区块链技术的话,那么区块链1.0是dos操作系统,2.0是升级为98系统,但依然很原始,而3.0就变成xp系统了。

从3.0开始,把区块链升级为新版的”操作系统”了,系统提供几乎与中心化应用一般的用户体验,但整体是基于区块链的技术上构建的应用。整个构架相比1.0,更好,更快,更强。整体的用户体验升级,性能升级,提供更多基础组件,让更多的开发者把注意力花在自己的应用上。

这是一个应用为王的时代 。区块链技术被更多人接受肯定是也在3.0的时代。

这些都是区块链的基本概念,下一篇,我们会讲解分布式系统最重要的数据一致性算法,也就是区块链的共识算法。

始发于微信公众号:神秘极客

从技术角度学习区块链(一)

为什么学习区块链技术?

区块链已经成为新的风口,这是未来的趋势,作为价值互联网的基石,现在是学习相关技术知识的最好时间。比如比特币就是区块链技术的最佳实践,它已经运行了9年多,而且还在继续运行。

最近行情低迷,熊市已来临,这是一个中短期的趋势,那么知道了这个趋势后,我们去做什么最划算呢?去学习区块链,最划算。只有“充值”信仰,多了解你手上投资标的价值,你才能拿住不动。

下面从技术角度看看如何学习区块链。

什么是区块链?

百度百科是这样解释的,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构, 并以密码学方式保证的不可篡改和不可伪造的分布式账本。从广义上讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。

维基百科呢,区块链是用分布式数据库识别、传播和记载信息的智能化对等网络, 也称为价值互联网。

区块链的特点是什么?

区块链的特点是分布式去中心化,无须信任系统,不可篡改和加密安全性。那么上面讲了这么多,可能非技术专业的人,还是没有搞懂 。在这里,我用一个故事来说明。

假设,隔壁村的老王有一本全村人的账本,账本里面记录着所有人的交易记录。这就是中心化的概念。但是最近老王年事已高,大家都最近都在反应几个问题:

  1. 万一,老王有一个三长两短,我们的账本怎么办?
  2. 如果有小偷偷走了账本,怎么办?
  3. 每次转账,老王都要收取不少的手续费,每年手续费都在涨,怎么办?
  4. 老王把我们存在他手里的钱,都借出给别人做投资了,万一,我们都去找他拿钱,他没办法拿出来,怎么办?
  5. 老王,知道所有人的交易记录,万一,他把我们的交易信息出售给其他公司,怎么办?
  6. 老王,转账的速度越来越慢,有时候转账要好几天!
  7. 老王,有时候生病了,连个人影都找不到,怎么办?

这些都是中心化系统需要解决的问题。

话说,你把钱借给你们村的小明,第二天,小明就赖账了,你怎么办?没办法,你找到了德高望重的村长老王,老王有一本账本,账本里记录了村里的每一笔钱,于是,你把钱借给小明,然后把这笔交易用大喇叭广播出去,让村里所有人都知道,每个人都在自己的账本里记录这一笔交易,这样小明想赖账,也是不可能的啦。这就是去中心化的概念。

采用去中心化的方式,可以很好的解决上面列出来的问题。

如果老王的账本弄丢了,没关系。老李,老赵,都还有账本,同步一份过来就好了。这样小偷也没办法偷走村里的账本了。除非他一次性偷走,全村人的账本。这样的话,就算换了多少任村长,账本还在,里面的钱还是你的,很安全的。这本账本是属于全村人的。这样就解决了信任的问题。所谓的区块链,在这里,就是老王的账本,一种记账方式,每一笔交易记录都有上一笔和下一笔交易记录的账本。

好了,今天就先写到这里啦。下期会讲解区块链技术是如何更新换代的。

始发于微信公众号:神秘极客