为什么感觉区块链没什么用
宿命般的问题
从事区块链行业已经将近八年的时间了,有个宿命般的问题一直萦绕在我的心头,那就是:区块链有什么用?
公司这么多年也在不同的领域做了很多基于区块链的企业应用,但是每当我满心期待的询问产品的同事:这次的应用场景有什么新鲜的点吗?
得到的回答总是:没什么,本质上就是个存证。
我也曾无数次的追问,跟不同的人讨论,为什么区块链这么优秀的技术,却总是无用武之地?
有人归咎于用户:区块链,请停下你飞奔的脚步,等一等你的用户。
有人归咎于人性:大的企业通过中心化过得美滋滋,没动力去搞什么去中心化,那不是革自己的命嘛。
有人归咎于监管:央妈不让。
总之一句话:错的不是我,而是这个世界。
蛛丝马迹
但是事实真的是这样吗?区块链一骑绝尘般的领先时代,其他所有人都是拖后腿的?
好好回想一下过去几年的一些事情,其实已经有很多蛛丝马迹了。
无交易不出块
这个功能现在几乎是国内联盟链产品的标配。
即区块链在没有交易的时候不出空块,直到有新交易的时候才恢复出块,目的是节省存储空间。
起初我非常不理解这个功能:
-
出空块压根占不了多少存储空间。我们测算过,一年可能也就几个G。这点成本对企业来说九牛一毛都算不上。
-
这么明显的违反拜占庭容错理念的功能同行也做?作为区块链人的操守呢?我甚至已经写了很长的一篇文章《区块链行业从业者,我要迪士尼》,当然后来怂了。
抛开技术问题不谈,我们换位思考一下企业客户如此纠结这么一点存储成本背后的心理。
其实很简单,在企业成本核算中,“没用”是原罪,哪怕再小的成本,也必定要被揪出来优化掉。
虽然不严谨的说有点像,三个馒头吃饱了,回头后悔不应该吃前两个馒头。
但是反过来也说明了客户最在意的是业务数据,区块链本身产生的区块等数据都是额外的元数据。
这些数据只是在需要对外证明的场景(比如跨链)才会有用,正常情况下根本用不到,自然是要低人一等。
区块链应用的模式
我在19年的时候曾经系统的对比过 UTXO Model 和 Account Model,写了《两个模式》系列文章。
国内联盟链产品基本上都是以太坊的技术路线,使用 Account Model 和 EVM,践行着以太坊的 World Computer 的思路。
按照这种思路,业务的计算逻辑都应该在链上,通过发交易去修改状态,通过call查询状态。
但是事实上并不是这样的,企业级的区块链应用通常都有非常厚的一层应用层。
应用有自己的数据库,有自己的业务逻辑,独自处理来自终端用户的请求。
甚至不要下面的的区块链,应用也可以独立的运行。
说好听点叫解耦,说不好听就是没你也行。
这里面的原因是多方面的:
- 区块链的性能不能满足要求(关于国内联盟链动辄十几万TPS的性能测试报告,我也非常想迪斯尼,但是还是不展开了)。应用必须缓存用户的请求,进行排队并记录中间状态。
- 区块链的时延太大了。在交易上链期间,应用要能响应用户的请求,维护并返回各种中间状态。
因此,应用通常都会实现比合约更加完整的业务逻辑。
这时就存在一个问题了:既然两层都实现了业务逻辑,万一应用和区块链的数据不一致了,以哪个为准?
很遗憾,通常是以应用的数据为准,对区块链进行数据订正,就像传统系统中对数据库一样。
也正因为如此,应用通常不会通过call查询链上状态,而是直接在合约的log中加上足够的信息。发送交易之后,获取到交易回执,然后解析里面的log信息获取交易执行的信息。
这不又有点像 UTXO Model 了吗?
而且这还跟日常生活中孩子班里收班费的情况非常像。
老师会要求家长用微信把班费转了之后,把转账成功的界面截图发到群里。
为什么要截图呢?是微信本身没有查询账单的功能吗?
可能老师不是实际收钱的人,看不到账单;也可能是短时间内大量转入,账单梳理起来比较麻烦。
不过前几天跟kevin交流的时候,他给这种现象一个非常好的总结:log 是 on-chain 到 off-chain 方向的流动;而交易是 off-chain 到 on-chain 方向的流动。
所以不论是转账后截图,还是发交易后获取log,其实都是脱离了原有系统的一种表现。
在原本的系统设计中,用户在发出交易之后依然应该停留在系统之内,但是因为各种原因,用户选择了脱离系统。
区块链本来以为自己是主角,是掌控者,没想到跟前面一样,变成正常情况下根本用不到的小透明。
只能做存证
我在之前的《两个模式》系列文章里有提过,存证是区块链非常非常基础的应用,根本不能完全发挥出区块链的优势。
用区块链只做存证,不亚于拿超算只做加减乘除。
但是为什么会有这样的情况呢?
最近一段时间,电信让我非常的恼火,月末收到账单,经常发现一些莫名其妙的额外扣费。
打电话过去询问,客服又言之凿凿,说是我某月某日订阅的。
但是我几乎可以肯定,我在那个时间根本没有任何的操作。
但是我拿不出切实的证据,客服又非常爽快的取消了额外服务,所以也就算了。
然后我就想,如果把之前办理业务的录音或者电信宣传页的内容做个存证,是否就可以用来解决这类纠纷呢?
仔细想了想发现不行,如果只是把文件或者图片算个hash存到链上,还是有很多问题。比如谁来存;怎么截取图片,可能稍微偏一个像素 hash 就很不一样了等等。
总之就是还得深入到业务系统里面去,不只是一个文件 hash ,还得有业务系统的信息才行。
但是如前面所说,要往上走,并不是我们一开始想的那么简单,可以说困难重重,所以就只能做最基础的存证了。
不往上走又不行,一个软件下载网站是不会自己演进成苹果应用商店的。
思考
最近跟业界的好友做了一些交流,还跟公司内产品的同事经过了一次比较深入的沟通。
前面的内容中也有不少观点来自这些沟通和交流,也有了一些新的思考。
总结一下,我们可以看到,区块链在整个应用系统中存在感太低。
但是其核心功能还是不可或缺的,那就是验证和证明。
所以想通过增强区块链的性能和功能,代替应用系统,目前看是几乎不可能的。
反而发挥其核心的验证和证明功能,是很有必要的。
而且这块儿还有很大的发展空间,只做 hash 存证肯定是不行的,必须要深入到业务系统中,抓住业务核心意图。
本文篇幅已经有点长了,具体想法的展开再单独开一篇,希望不会拖太久。