walrus site Move 源码解析 #102
v1xingyue
started this conversation in
Show and tell
Replies: 1 comment
|
Storage 信息: |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
什么是 Walrus Site?
Walrus Site 是利用 Walrus 存储资源的特性,在Portal 中通过 http 协议,把数据以网站的形式展现给用户的一种结构。
基本数据结构
每个 Walrus 站点的核心是一个 Site 结构体,它包含站点的基本信息,如站点唯一标识(id)和名称(name):
每新建一个站点,等于新建这样一个对象。后续,通过 dynamicfield 关联资源信息和路由信息。
因为,后续操作站点都是通过这个对象来实现,如果 share 这个 struct , 那就是个去中心化的 维基百科了。
资源数据结构
站点对应的资源保存在 Resource 的struct 中:
即 一个 URL 按照 路径,可以解析到 对应的 存储对象。 blob_id 和 walrus 上的一个存储资源对应。
blob_hash 用来验证数据完整性。通过range 完成资源分块的获取输出。
headers 中的信息,也是可以返回给浏览器的。 开发者可以借助 header 完成更丰富的功能。
比如 :
每个资源会通过 Path 关联的一个对象在 Sui 上存储:
同理,也可以用这种方式获取。
特殊对象
每个站点除了资源 Map 以外,还包含一个字符串的Map 用来做跳转。
其资源结构如下:
可以用来处理特殊资源的跳转:
比如 默认网站根目录:
访问 "/" 跳转到 "/index.html"
以上便是,walrus site 相关联的合约部分说明了。
源码链接: https://github.com/MystenLabs/walrus-sites/blob/main/move/walrus_site/sources/site.move
All reactions