Ceramic核心技术概览:动态存储为什么能更好地释放数据价值?
作者:Wayne, Dongxuan, Linda
来源:BixinVentures
从石刻结绳到竹简纸张,人类文明大部分时间都在解决数据的存储媒介问题。之后,软盘、硬盘、云服务器存储等技术进一步解决了容量、安全、速度、等效率问题。Filecoin,Arweave等去中心化存储方案的兴起,则带来了为数据确权的机会——个人、组织、机构、企业,将真正拥有自己的数据,而不是被巨头们垄断,这是Web3精神的展现。
不过,当所有权得以确定,一个自然而然的问题得以显现:所有者如何行使这份权利、如何获取更大的价值?我们将这两个问题归结为“数据效用”问题。
作为一个用于可组合数据的去中心化存储网络,在“权利”进化为“效用”的里程上,Ceramic正在扮演关键角色。这是我们最近在持续关注、研究Ceramic网络发展及其生态、应用建设的重要原因。
和几个月前寂寂无闻相比,Ceramic正在展开众多的开发者项目,并在Eth Denver、HackFS、DecentralHacks、DAO Global Hack等多场黑客松中都获得了大量的开发者采用。根据Ceramic披露的数据,截至3月底,以Ceramic为底层建设的项目已经超过50余个,涉及NFT、DAO、Gamefi等多个领域。此外,3月初Ceramic还斩获了由Multicoin和USV领投的3000万美元投资。
关于Ceramic在数据可组合性方面的潜力,已经有不少文章可以参考,不再赘述,本文旨在从对动态数据优化、灵活的共识机制,网络安全与隐私性等方面详解Ceramic在提高数据效用上的技术可能性。同时,我们也将提供网络节点、应用发展等方面的关键信息。在我们看来,Ceramic最关键的三个价值是建立了:
● 去中心化存储水平扩展方案
● 社区驱动下的数据模型市场
● 开放 的API网络共享资源
一、动态数据存储优化
去中心化存储将数据存储在节点而不是中心化服务器中,这让数据的使用权能更多被数据创造者而不是中心化的服务器掌握。因为个人行为的不断更新以及数据的连续使用和迭代,个人数据中存在大量动态数据(指在系统应用中随时间变化而改变的数据),而IPFS、Sia、包括Arweave目前主要针对静态数据(指不常调用或者更新的数据)进行存储,对于动态数据处理能力欠加且成本较高。
以IPFS为例,它通过为每一个用户生成一个唯一的哈希值来实现基于内容的查找而不是基于地址的查找,当用户需要检索这个文件时,需要询问IPFS谁有这个哈希就可以完成检索。但使用哈希值标记数据有几个显而易见的问题:
- 每一次更新都会需要网络验证然后生成相关的哈希值,重复修改哈希值会提高花费的存储时间;
- 在调用时核对哈希值不一定会比常见数据库调用快——因为存在远距离节点时,传输速度反而更慢;
- 将哈希值转为数据之后很多时候还需要花费时间进行组合,这些问题对于静态数据存储和调用时的速度和价格影响不大,但是对于动态数据,重复进行这种操作不仅会影响存储网络的速度,容量等,还会产生较高的成本。
Ceramic通过“Streams控制机制”实现了动态数据存储的优化,在降低存储时间的同时也大大降低了存储成本。这里需要特别说明的是,此优化方案并非是脱离IPFS等去中心化存储技术的独立实现,而是建立在IPFS之上。
“Streams控制机制”是指,利用个人身份账户把个人某行为产生的数据即流(Stream)集合成数据流(Streams)进行数据控制的机制。
跟平时我们在使用共享文档时经常能查看在某时某分的版本相似,每一个Stream都有自己固定的StreamID(类似做了一个共享文档),而每一次动态数据进行修改,不会直接修改哈希值或者更新SteamID,而是更新日志(Log),日志是Ceramic中记录了发生网络中的Stream相关事件的参数,每一次修改代表一个特定版本,这样对于常更新的数据只需要在更新内容后修改日志值即可,不用重复生成哈希值,从而减少存储消耗的时间。
Steams机制图解
因为动态数据本身会随着时间推移使用次数减少或者转变为静态数据,而且用户本身也会生成静态数据,所以,这些静态数据或者更新次数少的动态数据也可以最终委托到IPFS或者Arweave等去中心化存储或者AWS(亚马逊云)等传统云服务商上。
此外,正是由于“StreamID”,数据的可组合性也变得更容易了。不同程序如果采用了不同的数据格式,那么在调用时必然产生不兼容的效果,很多数据因此无法进行组合使用,而且调用时也存在调用权限不足的问题,比如在有时衡量个人信誉时需要DAO中的贡献数据和在Defi的借贷数据,即使有方法进行调用,也无法将数据直接做成信誉数据。
而在Ceramic中应用程序经由API连接到 Ceramic 的去中心化数据网络,存储、修改和检索数据。网络上存在的所有数据都可以轻松地在其他应用程序中重复使用或重新利用了。
与其他去中心化存储方案的结合
Ceramic为提高存储速度设置了短期存储提交的内置缓存机制,每当 Ceramic 节点对Stream执行写入或查询时,该Stream的所有提交首先从网络同步并自动加载到该节点的内存缓存中。这导致最流行的Stream被复制得最多,从而提供了一定程度的数据持久性和可用性。但是为了保留磁盘空间和节点资源,内存缓存默认限制为 500 个Stream(但可以配置为任意数量,理论上数量较少会让速度更快,而数量较多会让使用率更高)。
一旦达到这个数字,最旧的Stream将从节点的缓存中被逐出,以便为较新的Stream腾出空间。
如果节点碰巧关闭或重启,缓存将被清除。某些不会经常使用的动态数据或者没有采用额外的数据持久性措施(比如存在本地硬盘或者放在云端)的数据,如果没有在其他节点之间进行足够的复制将永远丢失。
因此,仅靠缓存不是一个可靠的数据可用性来源。Ceramic的解决方案是,将节点绑定在IPFS、Arweave等一系列的存储协议上面,避免数据丢失。
二、灵活的共识机制
上文提到了个人的操作产生的数据会形成Stream,Stream通过StreamID这种不可变的标识来确认用户的身份和事件,从而让同一Stream不断更新的日志都能汇总在一起。在这个过程中,一个重要的技术机制是“StreamType”。
数据的在更新过程中是通过每条Stream必备的StreamType进行共识操作的。Ceramic通过StreamType定义及处理Stream的数据结构到可以存储在其提交中的内容、状态转换功能、身份验证要求和冲突解决策略的所有内容。
值得注意的是,Ceramic的节点在数据存储时,只会对跟自己相关的Streams进行验证,不对无关Streams做处理或者验证,这大大减轻了节点的任务量,为节点的高速运行和网络的扩容打下了良好的基础。
Ceramic本身有预设定好的StreamType供开发者选择使用,开发者也可以选择参考文档自行编码,目前StreamType主要有两种不同的类型:
- Tile Document
Tile Documents 经常被应用于身份元数据(个人资料、社交图、声誉评分、链接的社交帐户等)、用户生成的内容(博客文章、社交媒体等)、其他 StreamID 通过索引形成的数据集合和用户表的数据库替换、DID文件、可验证声明等多种方面。当节点使用Tile Document这种StreamType更新数据时,只有当存储信息的用户的DID签名时才能进行有效更新,以此来保证了数据的安全性。
- CAIP-10 Link
CAIP-10 Link是一种将区块链地址链接到DID的加密可验证证明的StreamType。一个DID可以拥有无限数量的CAIP-10链接,这些链接将其绑定到许多不同区块链网络上的许多不同地址,这样确保了同一个DID身份下能聚合所有相关数据。
除此之外,开发者还可以自定义StreamType并将其部署到自己的 Ceramic 节点上。
共识冲突
共识冲突指Stream中在更新时可能因为在不同的设备或者程序中出现同时更新的场景,出现谁先更新谁后更新的问题。
StreamType在数据更新时,对更新内容会调用json-patch方法,描述出json的文档具体更改比如增、删、改、查等,然后将生成的内容提交。提交构成Stream的单个 IPFS 记录,也可能包含一个或多个提交,随着不断的提交,Ceramic也在不断更新,在更新结束之后对StreamState进行更新。
在提交过程中,Stream控制器(Stream Controler)允许通过创建新的签名提交来对Stream执行更新。在这时,同一Stream的两个冲突日志可能会出现。比如一个用户在两个链游平台中进行游戏,其中一个游戏中刷怪战斗胜利和另一个游戏中人物升级同时发生,或者一个用户在手机和电脑端这种不同设备上同时操作时就会产生Streams验证的冲突。
大多数 StreamTypes 依靠 “最早锚定者赢”(Earliest Anchor Wins) 策略来解决Stream日志之间的冲突。节点会定期将其中的StreamID等更锚定到区块链(目前是以太坊)上。这种不可变的发布证明用于获取更新发生时间的去信任时间戳。而Stream的日志冲突解决方案是,较早锚定的分支获胜。如果一个分支已锚定而另一个未锚定,则首选已锚定的分支。
目前Ceramic团队每天对节点定期锚定两次,在未锚定时,可采用“更新最长链”(Longest update chain)的共识方法验证,冲突时哪个日志更长保留哪一个。
这样可确保能留下具有最多更新的最活跃历史记录。如果存在具有相同长度的冲突未锚定分支,则系统会任意地选择一个作为获胜日志,以确保所有节点在同一日志上达成一致,这可能在罕见情况下,在几秒钟之内进行写入操作发生冲突时会有数据丢失情况出现。这说明Ceramic目前不太适合依赖于允许多个最终用户同时更新单个Stream的应用程序。
据官方披露的文件记载:只要更新间隔超过大约30秒,就应该有足够的时间在整个Ceramic网络中共享更新并防止发生此类冲突。
未来StreamTypes将能够适合处理同时更新的不同共识机制,比如现在Ceramic正在研究CRDT技术来实现不同共识机制的处理与冲突的解决,所以冲突问题很可能之后会得到解决。
三、安全性、隐私性设计
Ceramic Protocol不仅规定了Ceramic网络的“Streams控制机制”,也在安全性、隐私性方面进行了专门设计。
- 安全性
通过加密签名、发布证明(区块链锚定)和哈希链接数据(将数据最终以哈希值存储)的结构来构成协议的安全属性,这些属性一起允许构建可验证的数据结构。除此之外,Ceramic 还依赖 libp2p(IPFS堆栈中一种点对点的通讯方法)来传播有关Streams更新的信息。从而方便数据的验证以及网络中gossip查找。
Ceramic节点的主要安全考虑是Stream的任何新提示都可能是该Stream的虚假或无效提示,因此需要进行验证。Ceramic在Dos attack、False log attack、Caip10Link clock synchronization等安全问题上都有自己的解决方案和验证方式。
Dos attack:是指恶意节点可以通过发送大量消息向网络中发送垃圾邮件,Ceramic将通过使用自动信誉系统来限制单个节点可以发送的消息数量和系统会断开与垃圾邮件节点的连接两种方法解决此问题。不过目前的Ceramic中尚未使用声誉系统,未来会逐步实现。
False log attack:恶意节点可以通过发送错误的提交日志来向固定特定Stream的节点发送垃圾邮件。Ceramic采用的第一种方法是通过节点停止接受来自已证明不可靠的节点的提示来拒收垃圾邮件。第二种方法是构建一个包含一个递归零知识证明 StreamType来证明日志确实与给定的 StreamID正确关联,而不是不可靠节点随机发送的。
Caip10Link clock synchronization:指的是CAIP 10 Link的多次重复绑定地址,或者把地址以指向之前链接到的任何DID。面对这种问题除了通过本地系统时间避免重复以外,Ceramic还提出一种使用随机数或者指针的解决方法。
尽管上述一些方法还是计划的一部分,但是可以看到Ceramic对虚假数据是有所准备的。
- 隐私性
因为API是开放的,数据调用时可能存在隐私直接被调用的情况,为了规避这种情况,Ceramic对数据进行Confidential streams和Private streams两种Stream分类,前者是对Stream的每次更新的内容都将通过对称密钥进行加密。
每当Ceramic节点同步Streams时,它只有在具有该Stream的对称密钥时才能读取Stream内容。Stream的元数据,例如哪个DID签署了更新、以什么顺序以及何时锚定,仍然是公开的。但Private Streams采用Textile ThreadsDB方法只允许某些节点读取元数据并使用Stream,但看不到具体内容,而其他节点根本看不到Stream中的任何内容。
Ceramic元数据举例 来源
通过安全性和隐私性的设计,Ceramic在共享网络资源的前提下,也对网络中数据的使用进行了规范,对于用户未许可的数据调用,程序只能调取API中的元数据,并无法直接得到用户全部数据,从而保障了用户的数据权益,提高了数据的安全性。
四、关键价值
● 去中心化存储水平扩展方案
Ceramic底层是可扩展的去中心化数据网络,它提供着最基础的数据存储功能。Ceramic网络由一组无需许可的节点组成,这些节点协同工作,在数据更新时,对跟自己有关的Streams进行快速验证。
这种架构在Ceramic的共识机制下允许系统可以近乎无限水平扩展。根据官方例子:账户1 - 1,000,000在一组 Ceramic 节点上复制,而账户1,000,001 - 2,000,000在另一组节点上复制。前100万个账户的Streams一般不会影响后100万个账户的节点验证过程,除非他们中的账户牵扯到其他节点的操作或者数据。
所以从理论上讲,如果需要,网络可以一直分片到每个单独的用户,而不会破坏可组合性。同时为了确保用户分片之间的状态可验证性和可组合性。Ceramic节点负责将包含StreamID和Commit信息的锚点做成默克尔树,这种聚合了所有用户交易的默克尔树的默克尔根会被上传到选中的锚定区块链上去,从而允许任何帐户随时验证其他任何人的Streams的完整性。
同时Ceramic积极在链上发展,目前Ceramic协议已经支持七条公链的账户及信息等。
● 社区驱动的数据模型市场
Ceramic的数据模型市场更具体地说是不同的数据组件市场。一个人的姓名,住址,电话组合起来是一种数据模型,如果你希望你的数据用于收快递,你需要使用这种数据模型,而Ceramic把这做成了组件的形式,需要使用时直接调用即可。Ceramic的数据模型市场由3Boxlab团队与社区共建,但主要由社区驱动,用于解决跨应用程序数据的可组合性。
Ceramic允许任何开发人员轻松地与生态系统中的其他开发人员定义、共享和重用他们的模型。截止2022年4月6日,目前社区共有7位贡献者贡献了7种数据模型。
在Github上的Data Model 来源:Github
因为采用了相同的底层数据模型,应用程序能够使用格式相同的数据进行本地互操作。这让在 Ceramic上构建应用程序就像浏览数据模型市场,只需要将选中的数据模型插入应用程序,它们就会自动访问存储在这些模型中的网络上的所有数据。开发者不需要担心自己孤立的用户和数据难以启动应用程序,大大提高了开发效率。
● 开放的API网络共享资源
API调用收费是一种典型的商业模式,但Ceramic的API目前是向开发人员免费提供的,而且其API是标准化和通用的,开发人员可以在存储网络上通过API得到共享资源。
用户在使用过某程序后创造的数据在需要调取时是直接通过该应用的API得到的,Ceramic中很多应用都使用API来实现数据聚合功能,用户在应用上的的行为操作会绑定相关的API,比如绑定Twitter账户之后,用户即可调用自己Twitter相关信息。Ceramic可以通过调用API,一次性生成用户所有的数据,得到真实且全面的用户数据。
API示例 来源
这三大服务让Ceramic的去中心化存储网络更加的开放与共享,其中数据在其中无论是通过API还是通过数据模型,都能实现强大的数据可组合性,提高了数据价值,也增加了数据应用场景,为存储其上数据带来更多效用。
五、节点
Ceramic节点运营商负责托管Ceramic 网络。 Ceramic客户端需要连接到节点才能访问网络,所以应用程序开发人员需要通过启动自己的节点或将其客户端连接到社区成员托管的节点之一来开始构建。
目前社区成员建设了三个节点专门用于开发者开发和测试,但是因为节点会定期进行清理数据,所以开发者如果想要获得稳定、安全的存储环境的话,还是需要建立自己的主网节点。目前Ceramic的大部分节点都是由开发者自建并独立运行的,GeoWeb、MetaGame、Boardroom等程序都已经通过自建节点获得了网络使用权。在程序建立节点的过程中,Ceramic网络本身也得到了扩展。
由Ceramic社区运行的临时节点
虽然使用Ceramic不付费,但是在绑定底层的服务商时开发者却需要进行付费。市场上的相关存储应用比如IPFS、Arweave或者Aleph都是通过代币奖励节点的运行者,而Ceramic暂时没有代币激励方案(社群中多次提到可能会有代币激励)但却有寻求商业节点的想法,目前具体方案尚未推出,这也导致目前Ceramic存在开发者激励不足的问题。
六、应用举例
Ceramic原生态产品,由Ceramic原团队开发及运营,是一种多平台身份协议,它利用Ceramic的DID底层(Tile Document等StreamType)使用去中心化的替代方案代替集中式用户表形式。 IDX 允许用户建立一个由其所有数据组成的统一数字身份,同时使开发人员能够打破孤岛并在应用程序之间自由共享用户数据。目前IDX已经被900个项目采用,共计3.5万个身份注册,一共产出25万条相关记录。
一个通过学习、使用最新的web3应用来赚取加密货币的Web3.0应用。RabbitHole 使用 IDX 将多个 Web3 钱包和 Web2 账户链接到一个统一的 DID。在计算总信誉分数后,他们将这个可验证的凭据存储在用户的身份中,以便在任何 Web3 应用程序上使用。
一个 DAO 发现和治理平台,塑造ownership economy的社区的家园。BoardRoom 为其治理应用程序存储提案、评论、投票和其他用户生成的内容。 自从切换到 Ceramic 后,他们已经能够提高参与度、增加对治理的信任并移除他们的后端组件。
Geo Web 是一套开放协议和产权系统,用于将数字内容锚定到物理位置。GeoWeb 需要一种简单且无需信任的方式来存储只能由资产当前所有者更新的可编辑 NFT 数据。 Ceramic 的Stream和 NFT DID 方法非常适合解决他们的问题。
一款大型在线协作游戏。MetaGame 使用 Ceramic 的身份协议 IDX 来存储以太坊用户的配置文件数据,这些数据可以被 Web3 元宇宙中的任何应用程序使用、添加或扩展。
除以上这些应用,Ceramic网络上在DeFi、DAO、NFT、GamFi等领域还有许多的应用。基本都是通过其数据可组合性和开放共享的存储网络来解决数据的使用问题,提高数据组合后的价值,从而提高用户的数据效用,也能让应用本身得到相应价值。
总结
Ceramic的“Streams”控制机制令动态数据及静态数据的存储效率都得到了进一步提高,同时这种机制带来的水平扩展性也让Ceramic的存储网络在容量和数据处理量上都有极大的提高。底层数据的统一和开放API让不同应用间的数据聚合使用,真正提升了数据的可用性,为数据存储从效率提升到效用提升奠定了基础。
不过,目前Ceramic也存在一些问题,这也是协议未来发展应当关注的:比如它目前还没有针对节点运行者和开发者的激励机制;内存缓存的限制也迫使使用Ceramic的项目方运行自己的节点,提高了开发负担。