架构师深度拆解:Web3 需要什么样的存储系统?

架构师深度拆解:Web3 需要什么样的存储系统?
文章图片
写在前面
文字产生以前 , 结绳记事是人类用来存储知识和信息的主要方式 。 此后 , 从竹简、纸张的发明 , 到工业时代的磁盘存储 , 再到信息时代的数据库 , 存储方式不断革新 , “存力”不断提高 。
11月3日 , 在2022云栖大会上 , 蚂蚁链历经4年技术攻关与测试验证的区块链存储引擎LETUS(Log-structuredEfficientTrustedUniversalStorage)正式发布 。
这一款面向区块链可信数据存储的技术产品 , 不仅用来解决当前蚂蚁链及区块链产业的规模化发展问题 , 也面向Web3时代提供“可信存力”支撑 。
我们认为 , 随着大量的数据和数字资产在数字化世界里流转 , 可信数据的“存力”将如同电力网络的承载力一样重要 。
本文希望通过对LETUS的深入技术解读 , 回答读者们普遍关心的关键问题:LETUS是什么?主要解决哪些问题?为什么坚持用“可验证结构”?为什么要自研?以及未来要走向何处?
文|LETUS技术负责人田世坤01背景是什么?从2009年序号为0的创世块诞生至今已过去十多年 , “中本聪”依然神秘 , 但区块链技术的发展却因为公链、token、开源的推动 , 没有丝毫神秘感 。
经过几代技术演进 , 在比特币的UTXO模型基础上诞生了应用更为广泛、支持可编程智能合约的区块链技术:通过密码学、共识算法、虚拟机、可信存储等技术 , 多个参与方执行相同的“指令” , 来完成同一个业务逻辑 , 如账户转账 , 或者合约调用 , 维护不可篡改和不可伪造的业务数据 。
简单讲 , 可将这类账本数据库 , 看作一个去中心化防作恶、防篡改的复制状态机 , 所执行的是智能合约描述的业务逻辑 , 而状态机通过日志(区块数据)产生新的状态(状态数据):
架构师深度拆解:Web3 需要什么样的存储系统?】区块数据:包括交易、回执、世界状态RootHash等信息 , 和数据库系统中的日志类似 , 但是块之间由Hash锚定防篡改 , 并且不会删除 。 (区块数据记录的是区块链上发生的每一笔交易 , 如:Alice向Bob转账xx)
状态数据:记录账户、资产、业务合约数据等状态信息 , 和数据库系统中表数据类似 , 需要实现可验证可追溯 。 (状态数据记录的是区块链上每个账户或智能合约的当前状态 , 如:Bob账户剩余xx)
链上数据的特点可以总结为以下三个:
持续增长:从创世块开始 , 账本数据随交易持续增长 , 保留周期长;
多版本:交易修改状态数据产生新版本 , 系统提供历史版本查询和验证功能;
可验证:交易和账户状态通过Merkle根哈希(MerkleRootHash)锚定在区块头 , 通过SPV(simplepaymentverification , 简单支付证明)提供存在性证明;
架构师深度拆解:Web3 需要什么样的存储系统?
文章图片
区块链应用通过可验证数据结构(AuthenticatedDataStructure , 如Merkletree)实现可验证和可追溯 。 我们认为 , Web3“存力”一个非常重要的要素是可验证 , 而今天我们看到的区块链存储瓶颈大多来源于可验证结构ADS(如Merkletree)的低效存取和查询 , 这正是蚂蚁链LETUS重点攻克的难题 。
02我们要什么?随着时间推移和链上交易的增加 , 对存储容量的要求也不断增长 , 随之而来的是区块数据存储成本的大幅提升;与此同时 , 链上状态数据规模也持续增加 , 可验证数据结构持续膨胀 , 导致交易性能随账户规模提升和历史状态数据增加而持续下降 。
2019年 , 蚂蚁链上线了一个供应链金融业务 , 大家特别兴奋 。 但是 , 这种兴奋并没有维持多久 , 随着程序跑的时间越来越长 , 问题慢慢暴露出来 。