链客,专为开发者而生,有问必答!
此文章来自区块链技术社区,未经允许拒绝转载。
区块链行业现状
政府关注
企业极力研究
学术取得共识
学校和培训机构设立学科
资方积极参与
争先恐后炒币
技术不完善
借区块链热点的传销和骗局横行
区块链为什么会有如此魅力,让全社会都在关注它?区块链技术是本质是不可篡改的、去中心化的公开账本,是记账方式的进步。记账是社会生产生活的基石,记账方式的进步,能推动社会进步。
记账就是确权
财富有各种各样的属性,最主要的属性,就是属于属性,也就是说这个财富是属于谁的。任何财富都有权利属于属性:
纸币通过实物确权
存款通过中心化银行记账确权
房产则通过中心化政府颁发房产证确权
财富转移
财富不流通没有价值,通过交易大家各取所需,才能过上幸福生活。每种财富转移方式,也跟确权方式紧密相连:
纸币:通过传递实物货币转移
存款:通过修改中心化账本转移
房产:通过中心化政府办理过户手续,来进行财富转移
比特币价值
作为货币,比特币可以和现金、银行存款作比较。
比较
现金
中心化记账(银行)
去中心化记账(比特币)
确权
实物确权
中心化记账确权
去中心化记账确权
转移
需要面对面传递,受地理位置限制
转账方发送指令到中心服务器,中心服务器修改账本实现财富转移,接收方不需要任何操作,转账不受地理位置限
转账方发送指令到比特币网络,由比特币网络实现对账本进行修改
限制
现金的使用不受限
中心化账本的使用,经常受限制
比特币的使用不受限
比特币是自由财富,它可以点对点的转移,不受中心节点管控,这很像现金;但比特币的转移不受地域限制,这很像中心化记账的存款。比特币结合了两者的优势,这是比特币价值所在。
比特币实现
通过上述分析,比特币是通过去中心化的存储网络来记录账本,并且在这个基础上,实现点对点的财富转移功能。比特币要实现以上功能有几个难点:
账本公开保存在网络上,如何保证正确性
当有新的转账产生时,谁来实施记账区块链数据结构
比特币首次使用了区块链这种数据结构,这种数据结构通过哈希算法,锁定数据的方式,保证数据不被篡改。
区块链可以拆分成两个词语:区块、链。如果把区块链比做一本笔记本,那么区块就是笔记本的一页纸,这些纸上面记录了很多转账信息。为了保证区块所记录的转账信息不被篡改,每个区块都锁定上一块区块的内容。一旦某个区块被篡改,会出现连环雪崩效应,要修改后面所有的区块来掩盖非法修改。如果希望修改的区块能被其他节点认可,需要做繁重的运算来让其他节点确认,这基本不可能。
比特币系统认为,一旦区块被六个区块锁定,这个数据就不可能被篡改了。
哈希算法
哈希算法是一类算法,它的作用是获得数据的指纹(一个整数),常见的哈希算法有 RSA、RIPEMD160、SHA3 等等。对数据 x 进行哈希运算,得到结果 y,可以记作 $$ H(x) = y$$ 。
x 可以代表一个数,或者是任意大小(比如 2G 的文件),无论是什么样的 x,通过哈希运算之后得到相应的整数 y。
如果有 $$ H(x_1) = y_1 $$ 和 $$ H(x_2) = y_2 $$ ,那么可以认为:
对于不同的 $$x_1$$和 $$x_2$$ , $$y_1$$ 和 $$y_2$$ 是不同的。
如果 $$y_1$$和$$y_2$$相同,那么可以认为 $$x_1$$ 和 $$x_2$$ 是相同的。
哈希算法经常用来验证文件完整性,当我们从互联网下载一个很大的文件(比如系统安装盘),那么下载网站通常会提供一个 RSA 运算的哈希值,用于校验文件的完整性。当文件下载完毕之后,使用对应的哈希算法,计算该文件的哈希值,如果和下载网站提供的哈希值相同,那么意味着下载的文件是完整的。
哈希值在区块链中,其中一个作用是,在区块中保存上一个区块的哈希值,用于锁定上一块区块数据的完整性。
确权
比特币是比特币网络(或者叫做比特币系统)的记账单位,记账除了记录财富数量之外,还要记录财富属于谁这个属性,在比特币系统中,使用非对称加密技术来对比特币进行确权。
比特币系统没有中心节点,因此比特币系统开户,不需要到某个组织去登记,只需要自己随机生成一串密钥作为自己的账户,这个密钥我们称之为私钥。然后使用私钥,根据椭圆曲线非对称加密算法规则,生成私钥对应的公钥,再使用公钥,生成比特币钱包地址。用户可以将自己的钱包地址公布于众,用于接收比特币财产,在区块链中,使用钱包地址来进行确权。
使用钱包地址确权的比特币,只有对应的私钥,才能够将其解开,并进行再次转移。因此私钥是非常重要的信息,不可暴露给其他人或者丢失。如果私钥暴露或者丢失,意味着财富的不安全,并且无法找回密码。
非对称加密
加密算法很早就有,通过一些算法,将信息隐藏起来,早期加密依靠加密算法,也就是算法泄漏了,加密也就被破解了。现代加密保障不在于算法,在于密钥,算法是公开的,只要保存好密钥,就保证了加密安全。
有些算法,加密密钥和解密密钥是一致的,这种加密算法叫做对称加密,典型的对称加密算法有 AES (高级加密标准)。对称加密算法速度很快,不过密钥交换存在隐患。
1977年,三位数学家设计了 RSA 加密算法,这个加密算法的加密和解密使用不同的密钥。两个密钥分别称为私钥和公钥。使用公钥加密的密文,私钥可以解密;使用私钥加密的密文,公钥可以解密。如果你想进行加密通信,只要把公钥公布于世,私钥则之有自己持有,这样任何人都可以使用公钥进行加密之后,再进行传输,其他人使用公钥无法对数据进行解密,只有持有私钥的人才可以解密。
非对称加密基于这样的数学原理:$$f(x) = y$$ 的计算很简单,但是 $$ f(y) = x $$ 很难。只要符合这种情况的数学式,都可以作为非对称加密的基础。RSA 基于离散对数,后来数学家们发明了更难于破解的 ECC(椭圆曲线非对称加密算法),比特币中使用的就是 ECC 算法。
非对称加密算法虽然很厉害,但是一次能加密的数据有限,如果一个很大的文件需要使用非对称加密算法来进行加密,那么性能是很差的。在秘密通信过程中,非对称加密通常只用于交换对称加密的密钥。
数字签名
非对称加密还可以用于数字签名,当 A 发表一篇文章,然后使用哈希算法计算文章的哈希值,再用 A 的私钥对哈希值进行加密,加密的结果就是这篇文章的数字签名。其他人可以用 A 的公钥,来解密数字签名,如果解密的结果,正是这篇文章的哈希值,那么这篇文章一定是 A 写的,并且文章内容没有被篡改过。
数字签名可以保证数据不可抵赖,比如 A 发送转账信息给 B,然后 A 可以抵赖,说我没有发过,这个数据不知道谁发的。但是如果 A 发送的数据中,包含数字签名的话,那么 A 就不可以抵赖了。
签名过程:$$y = Sign(A, x) = Encrypt( Hash(x), A_{priKey} )$$
验证过程:如果 $$Decrypt(y, A_{pubKey}) == Hash(x)$$ 成立,那么可以称为,x 是 A 发布的信息,中间没人篡改。
转移、验证、记账
财富需要流动才有意义,如果 A 想将比特币财富转移给 B,这个过程,需要 A 的私钥和 B 的钱包地址才可以进行。A 通过脚本 S1 将自己的财富解锁,然后给需要转移部分财富,附上一段脚本 S2,S2 脚本只有 B 的私钥才能够执行。
如果 A 不是个诚实的人,那么他可以利用网络延迟,将自己的一份财富,同时转给 B 和 C,这种攻击被称为 双花 攻击。在中心化世界里,双花攻击的防护由中心节点完成。在比特币系统里,没有中心节点存在,为了避免这种攻击,比特币系统会选举一个临时的验证节点,来验证财富转移请求的合法性。选取临时节点的游戏规则是,哪个节点计算出哈希值符合规则,那么那个节点就拥有了此次记账的权利,所有比特币节点都尊重这个游戏规则,不尊重游戏规则的节点,将会被踢出比特币网络。
分叉
为了避免双花攻击,需要临时选取临时节点进行转账验证,这些竞争记账权的节点称之为矿工,竞争的过程称之为挖矿,竞争成功的矿工,可以为系统增加区块,并且在这个区块中,给自己奖励比特币。
如果两个矿工同时宣布挖矿成功,那么会出现两个后缀区块的情况,这种情况称之为分叉。比特币并不倾向两个分叉中的任何一个,而是搁置争议,继续运行,经过一段时间的竞争之后,总有一个链的长度会比另外一个链长,而比特币系统,只认可比较长的链。
渐进式共识的思维,在比特币中非常重要,对区块链未来的发展,也是很有指导意义的。
智能合约
上文中提到,比特币的转账,是通过脚本来执行的,如果丰富这些脚本功能,加上一些判断条件,那么转账就成为有条件的转移,这种条件是双方的某种约定,或者叫做合同。这种可编程的交易,用于规范和约定双方的行为,比当前世界中,纸质的合同更加有执行效率。比特币的脚本功能偏弱,因此才会有号称区块链 2.0 的以太坊的崛起。
比特币的伟大和欠缺
比特币是伟大的发明,创造了自由的货币体系,把传递消息的互联网升级为传递价值的区块链网络,并且这个网络在没有任何管理员管理的情况下,安静的运行了 10 年,没有大的事故发生。但是作为第一代区块链应用,比特币还是有考虑不周的情况:
比特币的开发和维护者,无法在系统运行过程中持续收益,导致了比特币软件升级乏力。
比特币为了体现去中心化,创始人都匿了,导致没有人管理和规划比特币系统未来。
比特币追求通过繁重的工作量证明来争夺记账权,避免了黑客攻击,但是耗费很多电力资源。
比特币繁重的工作是计算哈希值,而很多人通过近似作弊的手段,提高算力获益。
比特币为了提高安全性,动态调整哈希计算难度,将出块速度限制为 10 分钟左右,并且限制区块数据大小为 1 M,导致性能低下。
模仿者和创新者
由于比特币源代码是开源的,任何人可以轻松获得源代码,在比特币基础上,稍作修改,换个名字,发行一种新的虚拟货币,这种币称之为“山寨币”。最成功的“山寨币”是莱特币,目前在虚拟货币世界里,市值排名第七,它修改了出块时间和区块尺寸,交易速度加快,在 2013 年推出并获得认可和成功。
现在新的山寨币已经不太可能获得市场认可,因此一些山寨币,并没有创世块,而是从比特币的某一区块进行分叉,在分叉处实行新的游戏规则,并且承认之前比特币账户的资产,通过空投方式给这些比特币账户发送对应的新币,这些新币称之为“分叉币”,分叉币也是山寨币,不同的是它已经有相应的比特币用户了,相对容易获得市场任何。分叉币成功的典型是比特现金,目前市值排名第四。
还有一些程序员,参考比特币实现,重新调整游戏规则,并增加业务功能,这种虚拟货币不能称之为“山寨币”,而是一种新的公链,成功的典型是以太坊,目前以太坊市值仅次于比特币,被业界称之为“区块链 2.0”。
以太坊
以太坊很多和比特币一样,包括非对称加密算法的选择,工作量证明共识算法,它的伟大在于,完善了比特币的脚本功能,实现了图灵完备的智能合约功能。图灵完备的智能合约使得以太坊除了具有去中心化货币功能之外,还有合约功能。如果说比特币是全球账本,那么以太坊就是全球计算机。如果把比特币当成一本本子,那么以前记账全靠口算,而以太坊则是一本本子加上一个计算器。除了业务先进之外,以太坊的创始人作为一面旗帜,指导者以太坊前进的方向。在经济系统方面,以太坊引入 gas 概念,使得以太币有了使用价值,也比比特币更进一步。
区块链应用和发展
记账和传递价值
记账和传递价值,是区块链最基本的应用,比特币是典型,基于区块链的货币,是一种更好的货币。
智能合约
使用智能合约来约束人们的行为,并且在智能合约中,对不遵守合约的人,实施惩罚,这样可以降低信任成本,提高合作效率。
存储
区块链网络中的节点,都是物理电脑,这些电脑可以携带大规模存储,为区块链系统存储信息。信息保存到区块链上有诸多好处:
永远在线
价格便宜
数据安全
无法被监管
网络
网络属于另一个方面的基础建设,目前区块链网络是平等的对等网络,通信完全靠喊(广播),规划好网络,也就是建立局部网络通信,建立子网,用于提高区块链性能,是很重要的一个方向。
互联网
当区块链系统中的存储和网络规划完成时,互联网的许多应用会被迁移到区块链系统,阿里云等各种提供云存储和计算的公司成为历史,类似淘宝也会直接上区块链,并且物品是使用虚拟货币结算的。
物联网
如果区块链不和物相关,那么区块链应用永远在信息、虚拟领域发挥作用。当物联网和区块链关联起来,让更多的确权、交易,落地到物品上时,区块链将无处不在。
经济系统
不发币的区块链是没有生命力的,在区块链上有了币之后,就要考虑游戏规则,如果游戏规则不公平,那么对应的链很快没有用户。
区块链系统设计步骤:
链必须有经济效益
链产生的经济效益应该体现在链上的电子货币上
确定参与系统的角色
为每个角色的活动,定义奖励和惩罚措施
分析、测试、验证
回到第 4 步调整
经济系统设计其实类似游戏中的数值策划,把经济系统设计成为合理的系统,对于公链来说至关重要。