区块链 区块链技术 比特币公众号手机端

walrus site Move源码解析

liumuhui 8个月前 (01-28) 阅读数 94 #区块链
文章标签 Sui

什么是 Walrus Site?

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 完成更丰富的功能。

比如 :

  1. 特殊情况 301 跳转
  2. 返回cookie 并写入
  3. 浏览器缓存控制
  4. .... 更丰富的功能.

每个资源会通过 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

版权声明

本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门