一文说清“链上”和“链下”

2020年5月9日14:00:25 发表评论

什么是“上链”?什么数据和逻辑应该“上链”?文件能不能上链?链上能不能批量查数据?“链下”又是什么?

“链上”、“链下”诸多问题,一文说清。

什么是“链上”和“链下”

区块“链”的链,包含“数据链”和“节点链”。数据链指用链式结构组织区块数据,构成数据校验和追溯的链条;“节点链”指多个节点通过网络连接在一起,互相共享信息,其中的共识节点则联合执行共识算法,产生并确认区块。

交易“上链”的简要过程如下:

记账者们收录交易,按链式数据结构打包成“区块”。

共识算法驱动大家验证新区块里的交易,确保计算出一致的结果。

数据被广播到所有节点,稳妥存储下来,每个节点都会存储一个完整的数据副本。

交易一旦“上链”,则意味着得到完整执行,达成了“分布式事务性”。简单地说,就像一段话经过集体核准后在公告板上公示于众,一字不错不少,永久可见且无法涂改。

“上链”意味着“共识”和“存储”,两者缺一不可。交易不经过共识,则不能保证一致性和正确性,无法被链上所有参与者接受;共识后的数据不被多方存储,意味着数据有可能丢失或被单方篡改,更谈不上冗余可用。

除此之外,如果仅仅是调用接口查询一下,没有改变任何链上数据,也不需要进行共识确认,则不算“上链”。

或者,某个业务服务本身和区块链并不直接相关,或其业务流程无需参与共识,所生成的数据也不写入节点存储,那么这个业务服务称为“链下服务”,无论它是否和区块链节点共同部署在一台服务器,甚至和节点进程编译在一起。

当这个业务服务调用区块链的接口发送交易,且交易完成“共识”和“存储”后,才称为“上链”;如果这个交易没有按预期被打包处理,那么可以叫“上链失败”。

事实上,几乎所有的区块链系统,尤其是和实体经济、现实世界结合的区块链应用,都需要链上链下协同,用“混合架构“来实现,系统本身就包含丰富的技术生态。

交易之轻和“上链”之重

目前区块链底层平台逐步趋于成熟,性能和成本已经不是什么大问题,只是以下几个开销是因“分布式多方协作”而先天存在的:

共识开销:主流共识算法里,PoW(工作量证明,也就是挖矿)消耗电力;PoS(权益证明)要抵押资产获得记账权;PBFT(联盟链常用的拜占庭容错算法)记账者要完成多次往返投票,流程步骤繁杂。

计算开销:除了加解密、协议解析等计算之外,在支持智能合约的区块链上,为了验证合约的执行结果,所有节点都会无差别地执行合约代码,牵一发而动全身。

网络开销:与节点数呈指数级比例,节点越多,网络传播次数越多,带宽和流量开销越大,如果数据包过大,就更雪上加霜。

存储开销:和节点数成正比,所有的链上数据,都会写入所有节点的硬盘,在一个有100个节点的链上,就变成了100份副本,如果有1000个节点,那就是1000份。

也许有人会说:“这就是‘信任’的成本,值得的!”我同意。只是理想无法脱离现实,毕竟硬件资源总是有限的。

想象一下,如果每个交易都是一个复杂科学计算任务,那么每个节点CPU和内存会跑满;如果每个交易都包含一个大大的图片或视频,那么全网的带宽,以及各节点存储很快被塞爆;如果大家都敞开来滥用“链上”资源,“公地悲剧”就不可避免。

调用API发个交易是很容易的,而链上的开销就像房间里的大象,难以视而不见。作为开发者,需要正视“交易之轻和链上之重”,积极“上链”的同时减少不必要的开销,找到平衡之道。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: