Arweave的网关层为上层应用提供访问Arweave的便捷可靠方式,上层应用不直接与Arweave打交道。如NFT项目,大部分图片都存储在Arweave或Filecoin等去中心化存储上。网关层的好用与否将影响上层应用的繁荣程度。
<!--StartFragment--> 作者:webb
引言
Arweave 是一条永久存储公链,为用户提供去中心、可信赖的数据存储服务,是 Web3 重要的基础设施。作为 Web3 的刚性需求,Web3 应用都离不开去中心存储的支持。比如上一轮牛市中的 NFT 项目,虽然NFT合约发布在以太坊等公链上,但是大部分NFT的图片都存储在 Arweave 或者 Filecoin 等去中心存储上。而这只是开端,未来会出现更多 Web3 应用,诸如视频、推特等形式的项目对去中心存储有更高的需求。
作为上层应用,项目一般不直接与 Arweave 打交道,更多的是通过网关与 Arweave 进行数据保存和读取。网关层起到了承上启下的作用,为上层应用提供便捷、可靠的方式访问 Arweave,可以说网关层的好用与否,将影响上层应用的繁荣程度。下面我们来探索 Arweave 生态中最重要的基础设施 — 网关层的现状与发展。
一、Arweave 存储结构简述
相比 Filecoin 存储与链分离的设计,Arweave 实现了存储与链一体化,这种设计使用户更容易构建上层应用。下面我们介绍几个 Arweave 中和存储相关的几个结构。
存储结构和Chunk
Arweave 的区块里不直接存储数据,数据在进行Base64编码后放到存储区域,交易会记录数据的 Offset 和 Size,从而索引到数据。
当我们读取数据的时候,通过 getChunk 获取数据。每个 chunk 大小为256Kb,当我们的数据大于256Kb的时候,需要循环获取 chunk,直到我们获取全部数据。
比如我们要获取 Block 1001 中的一笔交易数据,参数为 {Offset=9800, Size=800} ,其中 Offset 表示数据结尾处的位置,我们利用 Start = Offset - Size 找到数据开始的位置,即9000Kb,所以交易的数据在 {9000Kb, 9800Kb} 这个区间内,调用 getChunk(9000kb) 获取第一个 chunk ,再调用 getChunk(9256kb )获取第二个 chunk,循环执行 getChunk 直到所有数据获取完毕,再把所有数据拼接起来获得完整数据。
通常我们从链上获取一笔完整的交易需要进行三次交互:
1.获取交易基本信息:通过交易 ID 获取交易基本信息,包括 From、To、Value、Tags等
2.获取 Chunk 信息:通过交易 ID 获取 Chunk 的 Offset、Size
3.获取 Chunk 的 Data:通过Offset、Size,经过多次迭代获取到 Chunk,再整合到一起
Tag
Arweave 中每笔交易的数据信息通过 Tags 来标识,发送交易者可以自行上传,类似 dapp 名称、版本、用途、input 等等字段。我们通常通过这些信息来确定一笔交易属于哪个应用。
ViewBlock中的一笔交易
比如上图中的交易是来自 KYVE 上传的一笔数据,里面还包括 KYVE 需要的一些信息,比如 Uploader、Value 等等。
利用 Tag 查找
Arweave 中的数据查找现阶段都是通过 tag 实现的,我们在上传数据时,将关键信息上传到 tag 字段,在获取信息时通过标注的tag信息进行查找。这么做的一个原因是 Arweave 上存储的数据是经过 Base64 编码存储到 Chunk 中的,这种方式也给直接索引数据带来了复杂度。
二、为什么需要网关
Arweave 为了保证网络可用性,链上只负责最核心的存储服务,而易用性交给了生态基础设施去解决。
结合上面的结构我们可以列举出一些直接使用 Arweave 的问题:
1.数据读取复杂度高
我们知道 Arweave 是一个概率存储的链,节点不一定存储了所有的数据,这就给数据读取带来很大复杂度。设想一个场景:用户要拉取一个数据,他先访问就近的节点,发现节点没有存储他需要的数据,他开始轮训节点列表依次请求数据,直到发现一个有数据的节点才能进行下载。
2.数据读取效率低
不同地域的用户拉取数据效率低。比如一个亚洲的用户,要下载一份几 GB 的视频,只有北美的节点有这个数据,用户需要从北美的节点进行下载。这样的效率是难以忍受的,流媒体等需要高速带宽的服务直接访问 Arweave 不可行,需要建立高速的读取通道。
3.数据查找困难
现阶段数据内容查找都是基于交易的 tag,这些 tag 散落在各个区块的各个交易中,如果用户进行查找,需要遍历所有的区块交易,从中找出符合目标tag的交易数据。此外基于 Arweave 的智能合约方案,SmartWeave 和 SCP 模式的应用,都非常依赖 tag 的查找功能,如果没有网关提供查找功能将无法实现。
4.上传数据
和下载数据一样,上传数据也需要分多步将交易与 Chunk 分开上传。
Arweave 出块时间为2-10分钟,每个块最多1000笔交易。为了提高上传效率,我们上传很多笔交易时,需要使用ANS-104协议对数据进行打包处理。
数据丢失问题:交易id被打包,但是 data 因为一些原因没有上传,会丢失。
5.开发门槛高
综上所述,如果项目方基于原生的 Arweave 链开发需要了解大量的 Arweave 特性,对于传统 web2 开发来说学习成本太大。由于 Arweave 上开发模式和以太坊等公链也不同,对于Web3开发者来说也需要很长时间学习。这种全新的复杂的交互流程和学习成本会卡住大部分开发者。
我们可以看到,直接基于 Arweave 构建应用简直是开发者的噩梦,所以我们需要一个网关层来处理上述的问题。最理想的状态是,作为应用开发者,利用网关开发dapp不需要太多的专业知识,甚至就像开发 Web2 应用一样简单,这样可以降低开发者门槛,吸引更多生态建设者。
此外 Permaweb 的实现架构,也是基于网关层之上。Permaweb 利用网关层提供的 GraphQL 接口实现页面加载和数据查找。SmartWeave、SCP 应用也都依赖网关层的服务。
其次由于网络拥堵、数据丢失等问题,我们需要网关层优化数据上传、数据做种、数据查找等功能,提高整个网络可用性。
总结起来网关层提供如下功能:
1.数据查找
数据查找是网关层重要功能,现在大部分网关以 GraphQL 接口方式提供查找。这种模式在 Arweave 中很重要,诸如 Permaweb、SmartWeave 等实现,都依赖于 GraphQL 对 tag 进行索引。
2.读取加速&数据缓存
Arweave 出块要2-10分钟,我们上传完交易后要等待打包出块才能下载。网关层提供缓存功能,数据上传到网关后生成交易 ID,通过交易ID可以立即在网关访问到上传的数据。而网关会对交易进行 bundle,并保证在一定时间内上传到 Arweave。
网关还可以提供类似 CDN 的功能,当我们需要快速访问资源的时候,可以直接从网关层读取。类似上面提到的场景,当亚洲的用户需要访问在北美节点存放的数据时,可以直接从网关层的缓存中读取。
3.数据上传
通过网关进行数据上传,除了读取缓存加速外,网关还提供交易打包功能, Arweave 对每个区块的交易数量限制在1000笔,但是对交易大小没有限制,利用这个特点,将多笔交易打包到一笔交易进行上传,可以极大的增加 Arweave 的网络吞吐量。
此外,部分网关还支持文件夹上传,可以将整个文件夹内容上传到 Arweave,网关会自动解析目录结构并生成 manifest 文件。
4.路径解析
支持文件夹上传的网关,会根据目录结构自动生成manifest,这使得网关可以一次上传一个静态网页,并生成页面和脚本之间的引用关系,浏览器在访问页面地址的时候,可以直接将页面渲染出来。这种文件格式如下:
可以看到页面初始访问index.html页面,在”paths”列表里可以查到资源的交易id,利用id就可以访问到网关中的资源,例如在arweave.net网关中就是“https://arweave.net/ + 交易ID”。index.html里会加载”assets/index.dd9fca7d.js”的js脚本,也是用过交易id进行访问。例如在arweave.net中访问index.html页面的路径:
5.数据做种
网关还提供数据广播的能力,使更多节点复制数据,增加网络可用性。
Arweave 生态服务架构
所以 Arweave 生态的架构图就变成了下面这样:
总体上看可分为四层:
Arweave:最底层 Arweave 网络提供数据的永存功能
网关层:上面是网关层,处理数据读取、数据上传、数据查找、数据加速等核心问题,并向上层提供易用的接口。
基础服务层:这层提供 Arweave 生态需要的基础服务,比如我们熟知的 Bundlr、WeaveDB、Warp、everpay 等,也都是构建于网关层之上,起到了承上启下的作用。
应用层:这层是我们熟知生态应用,比如 Mirror、ReadOn 等都属于应用,他们利用基础服务层或直接使用网关层访问 Arweave。
网关层起到了承上启下的作用,为上层应用提供便捷、可靠的方式访问 Arweave,可以说网关层的好用与否,将影响上层应用的繁荣程度,Web3 大规模应用的出现需要一个强大安全的网关层。
三、现有网关介绍
Arweave 生态已经出现很多优秀的网关项目,它们各有特点,解决了不同的问题,下面对 Arweave 生态中几个重要的网关进行介绍。
arweave.net
arweave.net 是官方提供的最早期的网关,也是目前使用最广泛的网关。很多项目,如Bundlr、SmartWeave、Permaweb 等都建立在 arweave.net 网关之上。arweave.net 为早期生态建设做出了巨大的贡献。
arweave.net 提供丰富的功能,如数据缓存即时访问、数据上传、GraphQL 接口等,同时支持网页上传和渲染。Permaweb 就是使用 arweave.net 实现,前端静态内容存到 Arweave,通过 GraphQL 获取动态数据,组合出动态网页。now.arweave 用这种方式实现一个实时的内容网站。(https://now.arweave.dev/)
作为早期网关,arweave.net也存在一些问题,如:arweave.net 是中心化网关,虽然有官方背书,但是依然存在信任危险。
由于上线时间早并且是官方支持,所以 arweave.net 成为大多数项目的选择,生态项目严重依赖 arweave.net ,容易出现单点故障。
arweave 节点交易广播服务存在已知 bug。arweave.net 网关接收到的 txs 不能及时广播给其他出块节点。导致 arweave.net 网关 pending pool 累积大量的 txs,但其他出块节点没有交易进行打包。后果就是 pending pool 中大量的交易会过期。
arweave.net虽然已经积累大量用户,但是在功能性和中心化问题上存在短板。作为早期网关,我们似乎看到arweave.net正在被功能更强大的新一代网关所取代,官方也说明 arweave.net 后续将会迁移到 ar.io。
Arseeding
Arseeding 是一个兼备网关功能的 Arweave 轻节点,不但支持数据的上传、下载,还集成了 everpay进行费用支付,用户可以用 ETH、USDC 等代币进行支付。同时 Arseeding 还能提供类似 CDN 的内容读取加速功能,这对应用层项目至关重要。Arseeding 的功能非常全面,是 Arweave 生态中强大的网关基础设施。
Arseeding的使用方式
用户有2种方式使用 Arseeding 服务:(参考开发文档:https://web3infra.dev)
1.自己搭建 Arseeding 轻节点
2.直接使用官方的 web3infra 网关
自己搭建 Arseeding 轻节点,项目方只需要同步自己的业务数据而不必关注其他数据。这与以太坊的钱包轻节点功能非常类似。同时 Arseeding 还支持数据缓存,通过轻节点,项目方可以对数据进行快速读取、查找,这对 YouTube、Twitter 一类的需要提供高速、及时服务的网站非常重要。
如果项目方不需要自己搭建轻节点,则可以使用官方的 web3infra 网关。Arseeding 和 Web3infra 都支持 ANS-104 打包协议,可以批量上传交易。
轻节点的重要性
为什么 Arseeding 要做轻节点呢?arweave 生态开发者面临几个严重的问题:
1.生态项目严重依赖 arweave.net 网关,存在单点故障的问题(Bundlr 也是访问 arweave.net 网关上传交易)
2.arweave节点交易广播服务存在已知bug。arweave.net 网关接收到的 txs 不能及时广播给其他出块节点。导致 arweave.net 网关 pending pool 累积大量的 txs,但其他出块节点没有交易进行打包。后果就是 pending pool 中大量的交易会过期。
3.Arweave 节点不存储全量数据,用户可能要搜索一批节点才能获取想要的数据,特别对于复制率低的数据。同时拥有数据的节点可能与需求方相隔很远,数据传输效率低。
为了解决上面问题,Arseeding 实现了如下功能:
交易广播
Arseeding 会自动把交易广播到网络中所有的 Arweave 节点,并且完全兼容 Arweave 原生节点。这确保所有 Arweave 节点的 pending pool 中能及时接收到这笔交易,提高交易被打包的速率。
数据做种服务
开发者使用 Arseeding 时,所有的数据都将被存储到 Arseeding 节点,开发者可以提交一个有效的 Arweave 交易 ID,Arseeding 如果存在该笔交易数据,会发起一个定时任务向全网 Arweave 节点广播这笔交易的数据。Arseeding 如果没有存储该笔交易数据,会先像全网发起数据拉取任务,获得数据后再向全网进行广播,让数据副本被全网节点存储。
数据获取服务
通过 Arseeding 节点,开发者可以调用特殊接口向全网自动请求指定数据。用户只需要提交arId,轻节点首先从 arweave.net网关获取交易 data,如果获取失败,则从全网节点获取交易 data, 直到获取成功为止。同时,Arseeding 也会缓存同步到的数据,提供高速的下载服务,类似于CDN加速服务。
可以看到 Arseeding 除了数据上传、下载等基础网关服务外,还具备数据广播、数据做种、CDN 网关等功能。Arseeding 强化了 arweave.net 网关的功能,这种基础服务的扩展对于生态开发者至关重要
everpay支付
Arseeding 支持使用 everPay 进行存储费用支付,这意味着持有 ETH、USDC 等代币也可以使用 Arweave 的文件存储服务。
节点开放功能
项目方部署的 Arseeding 的节点也可以开放给外部所有用户使用,利用项目方开放的节点可以构建类似 AskMirror(https://askmirror.xyz/)这样的第三方应用,使应用更具备开放性和可扩展性。公开的 Arseeding节点将使用everPay,用户可以使用任何 everPay 支持的代币进行支付。
Arseeding 的轻节点模式给应用方提供了更好的灵活性和可扩展性,数据同步和数据做种功能也为数据完整性提供了保障,everPay 给支付带来了便捷性。Arseeding 的种种特性使之成为现在 Arweave 基础设施中最好用网关之一。
ar.io
ar.io 目的是建立一个去中心、可激励公共网关,由 ArDrive 团队负责。
同时,ar.io 整合了Vartex的团队。Vartex是为了将 Arweave 从 arweave.net 去中心化而建立的开源网关工具,他们的主要团队将加入ar.io,开发下一代网关。Arweave.net 也将过渡到这个新的网关客户端,并将运营由Arweave核心团队转为ar.io DAO。
ar.io 在今年2月份进行了1720万美元的融资,由 Arweave Team, Blockchain Capital 牵头。从融资规模、到团队实力都有不俗的配置,再加上官方背书,可谓占尽天时地利,力求成为 Arweave 生态中的核心网关。
ar.io 还处于早期开发阶段,目前披露的信息来看,总结特点如下:
1.去中心
ar.io网关将采用去中心的网络结构,任何人和组织都可以运行节点,成为网关运营商,并赚取激励。
2.激励层
作为去中心网关,激励层是其中的关键。ar.io 将推出激励代币 $IO,来激励人们加入 ar.io 网络,提供更加安全的网关服务。
代币将使用 SmartWeave 发行,同时提供 Staking 功能,并用于 DAO 的治理工作。代币还租赁ArNS域名。
3.DAO
ar.io 将以社区形式运营,将控制权交还给所有用户和建设者,治理代币使用$IO代币。
4.基础功能
ar.io 披露的基础功能包括数据做种、数据缓存、数据索引等。
5.域名服务
ArNS(Arweave Name System)也是 ar.io 组成部分,ArNS 提供基于 Arweave 的去中心域名服务,用户可以使用 ArNS 访问 Permaweb 应用。现有的访问方式是 areave.net 加上交易 ID (https://arweave.net/{transactionId})。利用 ArNS 可以创建用户友好的链接地址。
每个 ar.io 网关都充当缓存和名称解析器。用户利用 ArNS代币 (ANT),该代币可识别他们希望有资格进行名称注册的 Arweave 交易 ID。然后,他们通过 ArNS 注册系统注册他们的 ANT 以映射到他们选择的可用名称,该系统也由单独的 Smartweave 合约提供支持。ANT 与任何其他 Smartweave 代币一样可转让,并且 ANT 所有者可以随时更新其指向的 Arweave 交易 ID。
6.支付
ar.io 将支持多种链的 token 支付,并接入 Stripe 这样的中心化支付平台。
7.定制化网关
ar.io 有提到可以建立定制化网关服务,应用程序只同步和自己相关的数据,或者提供特定类型的查询、加速服务。这种形式和 Arseeding 的轻节点很像。
可以看到 ar.io 提供了非常全面的功能,从基本的数据做种、数据索引,到定制化的网关服务,到 ArNS 域名服务,到多种 token 支付,可以说囊括了现有其他网关的核心功能。同时网络和治理也采用去中心化的形式,更符合 Web3 形态。总之 ar.io 是非常值得期待的项目,有望成为 Arweave 生态最核心的基础网关。
Arg8
Arg8 是一个轻量级的去中心网关,目标是实现可激励的、任何人都可以参与的二层网络,用户通过Arg8 网络可以对 Arweave 进行访问。
Arg8 意识到 Arweave 生态中的网关依赖少数几个提供商,这容易出现单点故障,之前 arweave.net的拥堵也验证了这个问题。Arg8致力于增强 arweave 生态的去中心化和可用性。
Arg8 是 P3 协议的第一个实现版本,采用开放的二层网络,任何人都可以参与进来,作为节点提供服务,赚取激励。这种开放的网络形式必然需要经济的激励来维护网络的稳定性和可用性。
Permaweb Payment Protocol (P3)协议
P3网络结构
P3 是一个可支付的服务协议,可以让用户使用 $AR 支付他们在 Permaweb 上使用的服务。Permaweb是 Arweave 上运行的永久网,类似于 L2,生态上的应用都运行在 Permaweb 上。使用 P3 协议可以让 Permaweb 上的应用和用户相互访问数据、发送交易、进行查询,并支付费用,无需运行节点。这和网关的作用有一些类似,P3 添加支付功能后,变成了可付费网关。
更近一步的,除了网关的数据存取功能,服务商还可以提供更复杂的服务,可以说符合P3协议的任何服务都可以跑在这上面,例如游戏服务、搜索服务、Defi 服务等,P3 协议给 Arweave 生态增加了可组合性标准。
可选的服务市场
任何节点都可以提供相同的服务,用户可以自由选择费用低、服务好的节点。
可组合性
P3可以让任何开发人员将自己的服务插入网络,提供服务,只要使用相同的支付协议”P3“即可,服务之间也可以相互调用并支付费用。
P3协议内容
P3 协议(P3协议内容)定义了6种服务类型接口,涉及服务列表、价格获取、存取款、请求服务、服务排名等。
用户可以预先向服务节点中进行存款,服务节点根据配置的服务价格进行扣除,并向用户提供对账单,这样服务节点只需定时进行结算即可。
Arg8让我们看到了一个开放的、可激励的服务网关,同时P3协议给服务的可组合性带来的更多的扩展空间,这将是未来去中心网关的一种基础形态。更进一步的,P3 协议有可能将 Permaweb 上基于 SCP 构建的各个服务进行连接,例如 everPay、Mirror、RedStone 等,就像EVM中各个合约可调用、可组合一样,这将构建一个更开放的大网,带给 Permaweb 更多的想象力。
其他网关:
1.Warp
Warp网关是一个专用网关,主要是为Warp合约服务的,为提供快速、可靠的数据访问。
2.Meson.Network
3.Amplify
四、未来方向探索
1.去中心化
按照 Permaweb 的设想,在 Arweave 上构建的Web3应用应该是完全去中心的,而现在唯一的问题是我们使用的网关是中心化的 arweave.net。所以网关的未来一定是去中心的,就像 ar.io 和arg8 的运行模式。
2.更优化的CDN服务
现在传统网络的 CDN 服务已经非常强大,它将 Web 内容存放在更靠近用户的位置,从而加速 Web 内容的交付,全球各地的数据中心都使用缓存。CDN 将网页、图像和视频等内容缓存在靠近用户的实际地点的代理服务器中,提供高速访问。
Arweave 的网关层也应该具备这种功能,这对大规模使用 Web 应用来说非常重要。现在的网关服务以及具备基础的 CDN 功能,但未来应该有更强大、更专业的 CDN 服务出现,来应对全球用户的访问。
和传统 Web2 网络不同的是,传统 CDN 只存网页静态内容,动态内容是从应用服务器加载。在Arweave 生态中,网页的静态、动态内容都是存放在 Arweave 上的,这使得作为 CDN 的网关也要能准确处理这种动态内容。现有的开发模式如 SmartWeave、SCP 等,也是基于网关提供的GraphQL 获取数据,如何为这种应用提供快速可靠的数据访问也许也是一个方向。
3.流媒体服务
流媒体服务对数据访问速度有极高的要求。此外直播应用的数据可能带有时效性,并不需要永久存储。如何为流媒体数据提供高速、可删除的服务,也是一个研究方向。
4.定制化网关
arweave.net等通用网关,提供了网关的基础功能,这些基础功能可以让我们日常使用,但是一些大型应用,如 uniswap、聊天应用等,可能对网关服务有更高的要求,企业级定制网关也将是网关垂直领域的一个方向。
5.数据搜索
数据搜索将是一个很重要的方向,基于 Arweave 的数据搜索和传统的数据搜索引擎工作方式区别很大。现阶段 Arweave 主要依赖交易 tag 进行搜索,还没有基于内容的搜索。此外由于 Web3 数据所有权也和传统 Web2 有本质区别,未来基于链上的数据确权、数据交易可能成为新型应用,这给数据搜索方式带来更多未知和畅想。 <br>
<!--EndFragment-->
关于 PermaDAO:Website | Twitter | Telegram | Discord| Medium | Youtube
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!