V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
BlockHeader
V2EX  ›  区块链

我为什么选择区块链技术?

  •  
  •   BlockHeader · 2019-09-13 00:16:40 +08:00 · 1701 次点击
    这是一个创建于 1659 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一直想写篇文章,讲讲自己对区块链的理解,讲讲对区块链技术的理解。很多优秀的技术人,对区块链技术即好奇又担心。区块链离钱很近,经常和金融的东西混在一起。很多人,简单的认为区块链就是炒币,区块链就是传销。

    01 什么是区块链? 区块链是个综合型跨界交叉学科,由三大块组成:P2P 网络通讯,加密理论以及博弈论组成。P2P 网络通讯是区块链的基础。加密理论,保证账户安全,交易安全以及区块安全。博弈论,帮助在多个节点之间达成共识。共识的算法有很多种:POW,POS,DPOS,BFT,PBFT,LBFT 等等。经济模型,在共识机制的基础上,进一步从经济激励的方面,设计稳定长久的模型。代币,是经济模型的一种展现形式。比特币的代币,就是对转账支付费用,支付给矿工。矿工有利可图,从而保持稳定的比特币网络。以太坊作为世界计算机,增加了智能合约,提出了 GAS 模型。转账或者执行智能合约计算都需要消耗 GAS,也就是消耗以太代币。这些代币,因为有参与方的博弈,天然的是一种标的,也就是“商品”。从而,代币就有了价格。

    推荐大家看看 Bitcoin 的源代码,最少看看《精通比特币》。能对比特币或者区块链技术有大致的理解。

    02 区块链有没有价值? 很多人(了解区块链的,不了解区块链的)都会问同样的问题。不同的人,有不同的答案。有些人说,区块链的价值是去中心化,提高效率。有些人说,区块链的价值在于共识,有共识就有价值。有些人说,区块链没有任何价值,就是骗局。

    从技术人的角度,区块链的价值在于区块链是一种新的“媒介”。区块链,作为一种媒介,能让信息透明,不可篡改。麦克卢汉的《理解媒介》告诉我们,媒介可能会改变人和人的协同方式。刚开始,被区块链的技术吸引,因为区块链作为一种“工具”,能让更多的人彼此信任协作。至于,这种新的协同方式,具体会发展到什么形态,还不知道。去中心化,也只是新的一种协同方式。

    区块链的价值和代币的价格,是两回事。区块链的技术有价值。代币的价格,目前更多是一种标的,在目前没有监管的情况下,和区块链的价值几乎没有太多的联系。

    区块链,再牛,也只是一种媒介。不需要妖魔化,也不可小看它。没有什么技术是一步到位的,允许它慢慢发展和演进。但也没有什么技术就是最后的形态。

    03 区块链的未来怎样? 区块链的未来怎样,应该没有人能现在说清楚。未来需要一步步探索,区块链本身也是在发展。去中心化,是否能完全颠覆中心化?我不确定。中心化提供服务,有更好的效率和用户体验。去中心化,更强调数据的透明安全。未来可能是一种中心化和去中心化的结合的模式。

    04 币圈和币价 在区块链行业野蛮生长的这几年,我自己也无奈的得出一个朴素的观点:币价和技术几乎没有关系。币,作为一种标的,慢慢的变成了炒作。发现有个神奇的现象,刚开始的时候,技术人还有心思辨别,项目方是不是真的是传销币。后来好像都麻木了,甚至有的时候,自己也糊涂了,究竟是交易模式的创新,还是传销的新变种。现在都是事后英雄了,成功的项目就是创新,失败的就是传销。

    技术人,看不大懂,这么简单粗暴的赚钱方式。甚至有些气馁,区块链这个行业,充斥着这么多“骗人”的把戏,还能好好的做技术吗?

    05 区块链有技术吗? 区块链当然有技术,而且区块链是个复杂的交叉学科。先不谈,区块链的人文,社会,经济方面的技术,我不太专业。就纯粹从计算机技术来看,区块链的技术也非常的庞杂和专业。

    先从编程语言开始。2018 年,go 语言在区块链流行,几乎大点的公链都是用 go 进行开发,确实简洁好用,网络处理,命令行处理,都有非常丰富的库。2019 年,rust 语言慢慢流行起来。Facebook 的 libra 项目全部采用 rust 语言开发。零知识证明的一些库也是由 rust 语言开发。Rust 语言类型预先定义,避免安全隐患;数组定长,防止溢出攻击。Rust 语言有个新的概念,所有权( Ownership )的内存管理方式。内存的所有权管理方式,能让编译器在编译的时候检查。所有权是管理堆上数据。通过所有权的设计,Rust 在编译的时候,能检查和避免 数据竞争情况(多个地址访问同一数据,数据写入的时候必须有效等等)。区块链开发,经常在多种开发语言之间切换:go,rust,C++,python。有的时候,代码开发有点恍惚:变量类型的定义在变量的前面还是后面?表达式后面需不需要分号?表达式后面是否要加冒号?

    数据结构,区块链中有两个比较重要的数据结构:Merkle 树和 DAG 结构。Merkle 树,通过叶子节点两两计算 hash 结果,生成上一层的节点,直至树根。Merkle 树数据结构,有很明显的好处,叶子节点的任何改动,都会改动树根。Merkle 树还有个优点,在给定某个 Merkle path,能证明某个叶子节点确实在以某个树根的 merkle 树上。Merkle 树,也有很多变种。以太坊管理账户信息(世界状态),使用的是 MPT 树。MPT 树通过增加或者合并节点,优化了 Merkle 树的深度。Merkle 树一般是两叉树,其实还可以扩展为多叉树。

    DAG,有向无环图。传统的区块链(比如,比特币,以太坊),使用的单序的区块链接方式,也就是后一个区块依赖前一个区块。这种传统的区块链组织方式,限制了交易的性能( TPS )。为了提高 TPS,DAG 是一种新的区块组织的方式。如何在 DAG 的区块结构方式下,确定区块 /交易的顺序,有很多相关的研究和算法。

    虚拟机和智能合约,虚拟机是在区块链上安全执行“程序”的环境。智能合约,就是在虚拟机中执行的程序。不同的公链提供了不同类型的虚拟机,比如以太坊的 EVM,星云链的 JVM,EOS 的基于 WASM 的虚拟机等等。不同的虚拟机有不同的编程规范。

    共识算法,共识算法让数据在一定的网络环境下达成共识。最传统的是 BFT/PBFT 共识算法,基于投票以及少数服从多数的原则,只要超过 2/3 的节点签名的数据就是达成共识的数据。PBFT 共识算法,需要有几个阶段,每个阶段都需要收集超过 2/3 的节点签名。这种方式,安全可靠,不会有区块分叉,但是效率比较低。PBFT 共识算法的复杂度是 O ( N^2 )。为了提高共识算法的性能,提出了其他很多基于 BFT 思想的共识算法,比如 HoneyBadgerBFT 算法,LBFT 算法。Algorand 也是 PBFT 算法中的一种变种,先随机抽取节点,然后让这些抽取的节点用 PBFT 算法形成共识。POS/DPOS 共识算法,采用和 PBFT 算法完全不一样的共识原理。POS/DPOS 共识算法,采用谁抵押多,谁出块概率高的思想,简单粗暴。抵押越多,贡献越大,也有相应的出块奖励。

    加密算法,区块链中的加密算法比较多。椭圆曲线加密,各种签名算法( BLS,盲签,环签等等)。

    零知识证明,零知识证明的理论基础就更多了:椭圆曲线,大数计算,群论,同态加密,配对函数,零知识证明的各种算法( zkSNARK,zkSTARK,BulletProof 等等)。零知识证明的理论可以追溯到 1985 年。目前有两个方向的应用:隐私和数据压缩。Zcash 就是利用零知识证明实现交易隐私,交易的双方信息以及交易金额只有交易双方可知。Loopring 的去中心化交易协议 3.0,就是利用零知识证明实现了链下计算,链上验证的思想。Filecoin 利用零知识证明实现”数据的压缩“,用户存储的数据(数据量很大)不需要直接上链,只需要将数据证明(数据量比较小,几百个字节)存储在链上。在零知识证明技术之前,区块链世界是区块链世界,现实世界是现实世界。零知识证明的技术,提供了一种方式,将现实世界,部分映射到了区块链世界。

    很多人问我,为什么坚持做区块链技术,因为我对区块链技术感兴趣。仅此而已。

    欢迎关注我的技术公众号:星想法。

    glenChen
        1
    glenChen  
       169 天前
    大佬也逛 v 站啊,关注了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2869 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 615ms · UTC 13:07 · PVG 21:07 · LAX 06:07 · JFK 09:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.