什么是WalrusSite?WalrusSite是利用Walrus存储资源的特性,在Portal中通过http协议,把数据以网站的形式展现给用户的一种结构。基本数据结构每个Walrus站点的核心是一个Site结构体,它包含站点的基本信息,如站点唯一标识(id)和名称(
Walrus Site 是利用 Walrus 存储资源的特性,在Portal 中通过 http 协议,把数据以网站的形式展现给用户的一种结构。
每个 Walrus 站点的核心是一个 Site 结构体,它包含站点的基本信息,如站点唯一标识(id)和名称(name):
public struct Site has key, store {
id: UID,
name: String,
}
每新建一个站点,等于新建这样一个对象。后续,通过 dynamicfield 关联资源信息和路由信息。 因为,后续操作站点都是通过这个对象来实现,如果 share 这个 struct , 那就是个去中心化的 维基百科了。
站点对应的资源保存在 Resource 的struct 中:
public struct Resource has store, drop {
path: String,
headers: vec_map::VecMap<String, String>,
blob_id: u256,
blob_hash: u256,
range: Option<Range>,
}
即 一个 URL 按照 路径,可以解析到 对应的 存储对象。 blob_id 和 walrus 上的一个存储资源对应。 blob_hash 用来验证数据完整性。通过range 完成资源分块的获取输出。
headers 中的信息,也是可以返回给浏览器的。 开发者可以借助 header 完成更丰富的功能。
比如 :
每个资源会通过 Path 关联的一个对象在 Sui 上存储:
df::add(&mut site.id, path_obj, resource);
同理,也可以用这种方式获取。
每个站点除了资源 Map 以外,还包含一个字符串的Map 用来做跳转。 其资源结构如下:
public struct Routes has store, drop {
route_list: vec_map::VecMap<String, String>,
}
可以用来处理特殊资源的跳转: 比如 默认网站根目录:
访问 "/" 跳转到 "/index.html"
以上便是,walrus site 相关联的合约部分说明了。
源码链接: https://github.com/MystenLabs/walrus-sites/blob/main/move/walrus_site/sources/site.move
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!