技术层面研究了下区块链,对 Web 3.0 更看衰了
说起来惭愧。看了很多区块链、Web3 的文章,但一直都是在商业、产品、模式里转,一点儿没往技术层看。
如果你跟我一样,那这篇文章推荐给你。我尽量写得不需要太懂技术也能读。
最近读了一些原始技术文档,也自己搭了个链,跑了跑智能合约。虽然很浅,但认知还是多了一层。
几个主要的观察和思考:
区块链技术栈、工具链的成熟度非常高
EVM、dapp 的设计思想很厉害
IPFS 是个很有趣的东西
Web 3 很有想象力,但只会是小圈子的玩物,与多数人无关
古典程序员怎么转 Web 3
一、区块链技术栈、工具链的成熟度非常高
一句话评价:比微信小程序成熟多了。
这么比也许不公平。毕竟区块链有强大的开源社区做后盾,而且处于竞争环境,资本也丰厚,做得更好是必然的。
我主要是研究以太坊(Ethereum),它让区块链变成一个不只可以买卖代币的开发平台,也是现在影响力最大的链。相较而言,比特币只是个交易平台。
成熟度高,首先体现在官方文档上。不仅丰富、详细,而且文字写得非常流畅、易读,示例恰到好处。文档结构也设计得很棒,你可以没有负担地随意进入任何一个页面,不用怕读不懂,因为它会把所有需要提前了解的知识都链接给你。
文档的每个页面都有最后更新日期,可以看到它一直在用社区的力量,不断完善文档,不用担心文档落后于现实,彰显权威性。
特别值得一提的是,中文翻译做得也相当不错。不仅汉化率高(是所有语言中最高的。见下图),而且跟随英文文档的变化也很及时。
工具链上,从开箱即用的框架,到 VS Code 的各种插件,一应俱全,且成熟度都很高。无论熟悉 Node.js、Go、Java 还是 Python,都能找到匹配其生态环境的框架。
我试了下基于 Node.js 的 Truffle 框架(https://trufflesuite.com/)。跟着文档,npm 安装,没遇到任何障碍,几分钟就建好了本地测试链、dapp 开发包、测试框架、VSCode 开发环境,舒适得不得了。
相较而言,无法理解微信小程序非要自己搞个独立的 Devtools 安装包,嵌着阉割的旧版 VS Code,又封闭又落后。上手跑个 Hello World 都费死劲。
多数人在链上做开发,就是写 dapp(去中心化 App)。Dapp 是智能合约的具象实现。
有两个新语言专为 dapp 而生:语法接近 C++/Java 的 Solidity,和语法接近 Python 的 Vyper。
Solidity 更成熟,已被证明是图灵完备的,理论上可以完成任意计算任务,是现在的主流。
它的学习资料非常丰富,甚至已经有了游戏化、交互式的学习工具,比如 CryptoZombies(https://cryptozombies.io/),且汉化得也很完整。
所有 dapp,都必须开源,被同行 review 来确保它不是有害的。因此,有大量的成熟代码可以参考。这让从学习到生产的路途大大缩短。
工具链成熟度高,说明生态健康,进入门槛低。这是个生机勃勃的领域。
二、EVM、dapp 的设计思想很厉害
比特币只是实现了一套去中心化的交易系统。除了处理币,什么都做不了。但它让「去中心化」成为可能,很厉害。
有人就想,可不可以所有事情都去中心化?这就有了 EVM 和 dapp。
EVM(Ethereum Virtual Machine)可以认为就是以太坊这个链本身。它把运行着区块链客户端的所有计算资源,都抽象成一台虚拟机。DApp 就是在这台超大虚拟机上运行的 App,可以使用它的计算和存储资源。
只要把一个功能做成 dapp,它就天然具备了去中心化的分布式能力,并且不需要管资源是如何分配、调度的。那都是虚拟机做的事儿。很厉害。
上传 dapp,调用 dapp 的能力,会消耗虚拟机的资源。所以这些动作都要付钱,就是支付 ETH 币。虚拟机自己会处理计算任务的分配,和 ETH 的瓜分。
传到链上的 dapp 只是后台能力,前台还是传统的 Web、App。这个后台,并不是个服务什么的,而是有点儿 serverless 的味道。
无论用 Solidity 还是 Vyper 编写 dapp,都是要构造一个类,定义成员数据和成员函数,定义它们是 private 还是 public。Public 的成员函数,就是公开的接口,成员数据就是存在链上的数据。简单,直接。
因为在链上存储和计算都是非常昂贵的,所以 dapp 要写得尽量小。可以不用去中心化方式解决的,就都用传统方式解决。
比如最大的 NFT 市场 OpenSea 的 Solidity 代码,算上那详细的注释才 4k+ 行。
但这少少的代码,非常难写!
我以前给卫星写代码,每次都要把编译结果「烧」到 ROM 上,再插到星载机。过程漫长,且烧 ROM 有寿命限制,几十次后片子就报废。所以每次改代码都战战兢兢小心翼翼,避免把 bug 烧上去。那是我经历过的最感「责任重大」的开发。
等看 dapp 的资料,让我又找回了当年的感觉。
DApp 编译完的字节码是部署到链上的。因为区块链的「不可篡改」特性,所以它是「不可升级」的……必须一次过?
当然不是。升级的方法还是有几种的,但都挺复杂,有的甚至还得用户配合。成本不低。
总之,向区块链部署代码,是要小心再小心的。即便将来可以升级,可你留下的旧垃圾,还是永远在链上,浪费着无数存储空间。
写 dapp,是搞区块链应用的核心技术,也是新挑战所在。
三、IPFS 是个有趣的东西
这是看技术文档才发现的一个东西,眼前一亮。
IPFS 的全名是 InterPlanetary File System(行星际文件系统),很酷吧?
我正好做过深空探测相关的研究。理论上,在行星际超高延迟的网络上,IPFS 的机制是能生效的。
它是个以 P2P 协议为基础的文件系统。不同于 bt、eMule 等 P2P 下载协议,它是一个分布式的文件系统,所有文件都分块存在无数的 P2P 节点上,用 HTTP 协议就能直接访问。
比如我传了一张自己的老照片。可以从下面的地址访问:
https://ipfs.io/ipfs/QmUPExAS1W3eRz3cMyyLYiC2nzH2ziVcXozeyCDpTC8wFc
ipfs.io 可以理解为只是一个节点,收到 HTTP 请求,到其它节点把文件捞过来,再返回给 HTTP。
如果你本地安装了 IPFS,那这个链接就会重定向到本地访问,由本地的 IPFS 把文件从各处捞过来。
如果文件被访问得不多,存有它的节点就少,那获取到的延迟肯定是有一些的。我测试新上传的文件,大概要半小时才能从美国那边访问到。
每个文件和文件夹,都有个唯一的 CID,就是一串 token。这让 IPFS 有了些区块链的味道。
它也确实是去中心化的,所有已上传的文件都不可被篡改。文件的更新会形成新的版本,旧版本依然能被访问。
这个特性,使它和区块链产生了天然关联,成为 Web 3 的一个基石。很多 Web 3 应用,都是在 IPFS 存储文件等大宗数据(存在区块链又贵又慢)。
但 IPFS 没有任何代币属性,不能炒。可能就是因为这样,所以被关注得少吧。
换个角度看,IPFS 并不依赖区块链。离开区块链,它也是个有价值的产品。
如果有一些文件要公开,又不想给云盘付钱,还担心云盘崩了或跑路,希望有个永远有效的链接,那用 IPFS 再合适不过。
我还产生一个想法。如果几大互联网公司一起建个联盟 IPFS,用户头像,发的图文、视频等等公开资源都往这儿传,那就能让用户数据所有权属于用户,而不是一家公司了。
然后 CDN 也就变成了 IPFS 的节点。整体来说,大概能节约存储空间。
最棒的是,这是咱自己的联盟 IPFS,就可以在里面有超级开关,一键彻底删除某个 CID。这个开关当然掌握在最重要的人手里,使得审查工作变得非常简单,完全不需要互联网厂商们配合了。
对了,IPFS 是支持上传者自己删除文件的。这一点就不那么区块链了。它也根本不是区块链。
四、Web 3 很有想象力,但只会是小圈子的玩物,与多数人无关
这里所说的 Web 3,指的是以区块链技术为基石的 Web。
看衰的原因如下:
「拥有」这件事,根本不是普通用户的需求
区块链的那点儿 TPS,根本不可能支撑大规模应用
先说需求。如果「拥有自己的数据」是真需求,那么 Web 2.0 的公司就会出各种保证来让用户相信自己是真拥有的。政府也会定一些强制执行的政策,保证数据的所有权。
而事实上,只有少数人真的在乎这个。海外一些公司会装模作样弄个隐藏很深的数据导出、删除功能,且很少有人会用。
不是真需求,就掀不起大浪。现在的火爆,全赖「炒币」(NFT 本质上也是一种币)这个真需求。
事实上,到现在,Web 3.0 除了金融,还没找到任何一个杀手级应用。
再说 TPS。
以太坊每秒只能处理 15-20 条交易(15-20 TPS)。这什么概念呢?群里发个红包就能把全球的 ETH 交易堵塞。
当然,它会升级。按照以太坊的规划,今年就要通过分片技术,做到 10 万 TPS。能力提升 5000 倍。
如果真能做到,那未来可期。10 万 TPS是什么概念?可能抗不住双十一,但日常支撑支付宝是够了。
没有深入学习、分析 V 神(以太坊创始人)的策略是否有效。我其实是有点儿不敢相信的。
中心化的效率永远比去中心化要高。达到支付宝量级的抗压能力,以太坊要付出更多更多的成本,也未必做得到(有投票在,就必然有高延迟)。就算做到了,成本那么高,也可能经济模型垮掉。
当然,我是希望他能成功的,这将是技术上的巨大突破。
但就算经济模型也成立,解决的仍然不是广大用户的真需求。那就只有技术意义了。
五、古典程序员怎么转 Web 3
借用搞区块链的年轻人对其它程序员的称呼,我这个古典中的古典,来说说怎么现代起来。
假定 Web 3 成功,一切都是 Web 3 了,那么系统开发工作中的 90%,甚至更多,用的还是 Web 2.0 的技术。
原因很简单:上链的数据和代码成本太高,响应太慢。能用 2.0 解决的,就没必要 3.0。
所以古典程序员参与 Web 3 的项目,技能可以完全平移,只业务要重新熟悉。
一些区块链相关背景技术的了解,往多说 2 星期足够了。
但如果是转写智能合约,那会不大一样。前面说了,这东西是个很新的理念,而且得小心翼翼开发,要学和实践的都不少。
不过,一个公司只需要 1-2 个人写这个。而且,因为不鼓励升级 dapp,所以有可能干完活儿就失业……
看起来,dapp 专家挺适合做 freelancer 的哈。