区块里各取所需:Avail 的 AppId 字段与轻客户端抽样验证怎么看 图 1
区块里各取所需:Avail 的 AppId 字段与轻客户端抽样验证怎么看 · 图 1

同一条公路上,只看自己那一段

Avail 的定位是同时为多条模块化链提供共识与数据可用性:EVM、SVM、ZK Stack、OP Stack 等不同执行环境的 rollup,把批次数据交进同一个区块。数据如果随机撒在一个块里,每个 rollup 抓自己的批次就得扫全块。官方文档给出的办法是:区块头里带索引,块内数据按应用分段落存放,应用凭”应用标识”(AppId)定位并只下载与自己相关的那几段。段落是弹性的——这条链这个块没交数据,对应段就是空的;某条链突然要多交,也能现挤现装。要划清的一条线:取数可以按段来,可用性抽样(DAS)依然对全块进行——“只看自己”省的是应用抓数据的成本,不是轻客户端验数据的成本。

AppId 的三个字段,和一个反直觉的权限

示意图:顶部素色横带悬三枚发光点、下方暗色格阵中一列高亮并经细光丝连回横带的抽样抽象(图片由本地 SDXL 生成,非产品界面或精确数据图)

一个 AppId 由三个字段构成:key,应用名,全局唯一,重名注册直接失败;owner,创建者账户地址,一个地址可以建多个 AppId;id,创建时自动加一分配的整数序号。反直觉的地方在权限:任何人都能往任何 AppId 提交数据,哪怕不是它的主人。文档解释这不是攻击面——Avail 是 DA 层而不是执行环境,只对”数据可得”负责,不对”数据有效”负责;合法性筛查找上层链自己,例如应用可以规定只认带自己签名的提交,其余一律当垃圾流量。翻成核验语言:在区块里看到某段数据,只证明”数据在那里”,证明不了数据是谁写的、写得对不对,这两问都归上层链回答。提交数据要付费,费率以官方定价文档当前口径为准。

从 submitData 到可验证的区块头

一条数据提交的完整流水线,官方文档给出六步:rollup 通过 submitData 交易提交数据并挂上自己的 AppId;块内数据被切成等大的单元格、排成二维矩阵;每一行做 Reed-Solomon 纠删编码,行长翻倍;再为编码后的每一行算出 KZG 多项式承诺,写进区块头;验证者对区块头签名并完成最终性;轻客户端随即对矩阵随机抽样验数。这里的验证者不执行交易,只做”数据被正确打包、承诺有效”的鉴证,文档把这视为维持较大块容量同时不推高验证成本的原因。共识侧的参数写得很明白:提名证明权益(NPoS)选验证者,BABE 分配出块槽位,GRANDPA 负责最终性投票。文档还算了一笔恶意账:想藏掉哪怕一笔交易,出块方都得扣留大比例已扩码的数据,随机抽样几乎必然撞上。

轻客户端怎么验:先看哪个字段

不跑全节点也想确认”数据可用”,文档给的路径是:轻客户端收到新的已最终化区块头,取其中的 KZG 承诺;从矩阵随机选一批单元格,先到 DHT 对等网络取数,取不到退回 RPC;逐格用承诺验证,验证通过意味着这一格数据既正确又确实属于被承诺的那块;成功样本数换算成一个置信分数,表示”整块可用的概率”。文档口径是:少量固定样本就能达到接近完备的置信度,消费级设备可跑。一个自称的互惠细节:验证过单元格的光客户端会把数据在对等网络里再转发一轮,参与的采样者越多,网络整体的可用性越强。

三条提醒

第一,DA 层的承诺是”可得”,不是”正确”:批次本身写错、数据被上层语义误用,都不在 DA 的责任范围内——这也是 AppId 允许陌生人提交的底气。第二,文档里的性能与参数表述(矩阵尺寸、费率、置信口径)属于会随升级更新的配置,引用时以官方文档当前版本为准。第三,自建监控面板时,有效证据链是”区块头承诺 + 抽样单元格通过 + 上层签名过滤”三件套,缺一件,拿到的就只是数据而不是可用性证明。本文只解释机制,不构成投资建议。