- A+
作者:星星之火待燎原
原文标题:从道法术三个层面理解区块链(一)术
笔者尝试从道法术这三个层面来解读下区块链,以便让大家有个更全面的了解,也知道自己的认知的针对性实际是什么。
区块链首先是区块链技术,这也几乎构成了区块链在术部分的全部。 也构成了道和法的基础。离开术来空谈道和法,是不够脚踏实地的,而是空中楼阁。据传,三点钟群如果谈论技术的话,会被踢出群的,这就暴露了大佬们在技术上的虚弱。
我们先来说说区块链的鼻祖比特币用到的计算机技术:
1.1929年的逆波兰表达式
2.1970年的布隆过滤器bloom filter
3.1989年的默克尔merkle树
4.1999年的椭圆曲线数字签名算法
5.2000年的p2p网络
6.2001年的sha-256(还有别的,不写了)
7.2009年的blockchain(首创)
今年接近90岁的逆波兰表达式构成了比特币的加锁和解锁脚本的栈式执行。比特币的加锁和解锁脚本使得比特币可以支持非常灵活和多样的交易形式,保证交易(bond transaction),返还交易(refund transaction),担保交易,多重签名等。
70后的布隆过滤器(bloom filter)来了,Bloom filter可以在一个有很多元素的集合中高效判断元素是否属于该集合,元素属于该集合的不会误判,元素不属于该集合的会有小概率误判。比特币的轻钱包需要用瘦客户端模式实现的钱包,因为不存储完整区块链,就涉及到如何获取UTXO的问题。比特币就是用布隆过滤器(Bloom filter)在快速检索并返回相关数据的节点
80后的默克尔merkle树可以高效地比对大文件在传输过程中是否有出错或改动,同时还能高效地定位出大文件是哪一个的片段出错了,从而只要重新更新该片段即可。比特币用merkle树来将块中的所有交易作为树的叶节点,来实现块的交易数据的准确高效传输,并把merkle树根作为block header的主要数据。
90后的椭圆曲线数字签名算法正式出场了。所有发行出来的比特币都体现为未花费的交易输出UTXO,也就是目前大约是1640万枚的比特币,是呆在一堆UTXO里。那么这些UTXO理论上是无主的,每个UTXO有一个加密脚本,只要谁有办法解开,谁就可以使用这个UTXO里的比特币。一般地说,大部分的加密用公钥加密,用对应的私钥来解密。由于椭圆曲线计算的非对称性,即求乘积很容易,但求除法很困难,换成加解密的角度来说,就是知道私钥,容易算出公钥,但知道公钥,是算不出来私钥的。这样客观上保证了即使UTXO是公开的,也只有私钥持有者可以使用。
00后的p2p网络重磅登场。其实这个虽然很多人不一定深入了解它的原理,但多数人又都用过。多数人是用过BT或迅雷来下载过文件,它的背后就是p2p的网络。这一技术的发明是为了解决中心化的服务器要不断地扩容才能满足越来越多的用户请求,而且用户越多,系统越慢。p2p由于是peer2peer的,也就是下载的文件来自于全球分散的电脑里,而不是中心化的服务器,这样极大的避免了中心化的服务器的拥堵。而且,用户越多,提供下载的节点也就越多,是一个正向的反馈激励。比特币也是应用p2p网络来进行分布式计算的。每个全节点都要将广播接收来的交易校验、打包成块,并广播出去,将广播接收来的打包好的块检验后记录下来,并在其后进行新的打包成块。p2p网络也是区块链技术中最为重要的一个篇章。
sha-256等报文摘要哈希(hash)函数是为了对数据进行摘要处理,从而发现原始数据是否有被修改,哪怕是非常细微的修改。同时,hash值又可以用来做key value数据库的key,这样查询就可以非常快。比特币采用工作量证明POW(Proof of Work)作为共识算法,又把随机数加块头的一些数据来计算满足难度的双sha-256结果的计算当作工作量。POW有效地避免了公开的交易账本被修改的风险,因为要想修改,也需要足够的算力去重新计算,因为每个块都需要足够的工作量,也就是时间,所以尝试修改的人是难于在落后其他人的情况下追上其他人的。
最后是非常狭义角度的区块链。狭义是在于区块链本来只是一种数据结构,也就是最常规的链表结构,每个节点(block)都有一个指针指向前一个节点(block),由于这里采用的是块头block header的数据生成的hash来作为指针,也就天然的让任何一个块的修改,都需要这个块后面的指针全部重新计算。
我们现在习惯的区块链技术实际是以上技术集成的总称。可以这样来定义:区块链(Blockchain)是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案。该技术方案让参与系统中的任意多个节点,把一段时间系统内全部信息交流的数据,通过密码学算法计算和记录到一个数据块(block),并且生成该数据块的指纹用于链接(chain)下个数据块和校验,系统所有参与节点来共同认定记录是否为真。
有了比特币开创的区块链技术和第一个实际应用,我们就容易理解其它区块链应用是怎么回事了。首先呢,p2p是必不可少的,是区块链应用用来实现分布式计算的网络基础,其次要有数字签名,目前肯定是非对称加密,一般而言也会用椭圆曲线,因为这是目前最难被破解的,再就是要报文摘要hash函数。merkle树及其变种也是主要的利器。
以太坊主要是针对比特币的脚本系统进行扩展,用虚拟机VM去替代栈式计算,用仿javascript的solidity来替代脚本语言作为智能合约的语言,以准图灵完备来代替比特币的非图灵完备。用merkle patricia树来替代merkle树。就被追捧和成为了区块链2.0. vitalik更是由此封神,并拥有价值300亿美元的eth。
从这些基础的技术展开思考,我们还可以看到采用p2p来搭建系统从技术层面上带来类似用RAID替代高可用硬盘的效果,就是可以用很low的计算机来实现高可用HA(High Availability),从而达到计算成本的降低。推而广之,就是可以不用Iaas层就可以直接开干SaaS,直接构建应用,这样就大大摆脱了对AWS和阿里云的依赖。