上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

创建 Permaweb 应用程序 查询 Arweave 中文翻译(二)

[复制链接]
  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5959

    回帖

    6758

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6758

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2024-5-30 12:08:55 | 显示全部楼层 | 阅读模式

    查询 Arweave

    在 Arweave 上,新数据以交易的形式发布。每笔交易都有一组标头和与之关联的一些存储的字节数据。数据可以是完整的文件、图像、JSON、纯文本或加密数据。Arweave 节点并不关心。它们只存储与交易相关的raw字节,并通过这样做赚取费用/奖励。

    如果我们必须筛选网络中所有节点中的所有字节才能找到我们感兴趣的字节,这将是一项艰巨的任务。幸运的是,arweave 交易标头能够存储最多2048 字节的自定义标签。

    标记交易

    自定义标签是名称和值的对。例如“App-Name”:“Permamail”或“App-Version”:“0.1.0”。arweave 协议对自定义标签没有施加太多限制,但有一些建议的最佳实践可以帮助保持一致。

    对于我们类Twitter 的 dApp,我们只对标有“App-Name”:“PublicSquare”的交易感兴趣。这些交易中的每一个都代表我们希望在时间线上显示的用户的帖子。那么我们该怎么做呢?

    Arweave 提供了一种使用标签查询交易的简单方法。https://arweave.net网关暴露了一个用于提交 GraphQL 查询的接口。它还提供了一个用于尝试查询的平台。

    GraphQL是一种灵活的查询语言,服务可以使用它来构建自定义数据的Schema以供客户端查询。GraphQL 还允许客户端指定他们希望在结果中看到可用数据结构的哪些元素。

    运行 GraphQL 查询

    要查询 arweave,我们需要通过支持 GraphQL 的网关访问它。让我们前往https://arweave.net/graphql上的 GraphQL Playground 。
    复制并粘贴以下查询...

    query {
      transactions(tags: [{
        name: "App-Name",
        values: ["PublicSquare"]
      }]) 
      {
        edges {
          node {
            id
            tags {
              name
              value
            }
          }
        }
      }
    }

    如果您不熟悉 GraphQL,一开始可能会觉得有点不知所措,但一旦您了解了其结构,它就相当容易阅读和理解。

      query {<schema类型>( <筛选条件> ){ <返回结果的数据结构> }}

    在示例查询中,我们粘贴的schema类型是transactions,但我们也可以查询blocks。Arweaves GraphQL 模式的完整描述写在Arweave GraphQL 指南中。该指南将过滤条件称为“查询结构”,将交易和区块的完整数据定义称为“数据结构”。

    当谈到返回结果的结构时,要注意的是,您可以指定您感兴趣的完整数据结构的子集。例如,这里列出了交易schema的完整数据结构。

    https://gql-guide.vercel.app/#full-data

    在我们的案例中,我们对符合我们的过滤条件的任何交易的id和完成列表的tag

    如果点击在线运行graphql的中间的运行按钮

    图片.png

    您会注意到,我们在最初的查询中取回的交易列表是我们指定的数据结构中的字段。

    如果你是区块链新手,这是意料之外的,我们还没有构建任何东西,为什么会有这些结果?原来我们已经使用“PublicSquare”: “App-Name” 标签进行了筛选。

    Arweave 团队创始人 Sam Williams 几年前在github code snippet中提出了这种交易格式。从那时起,生态系统中的建设者们就一直在其基础上进行构建和实验。

    通过构建此应用程序,我们也参与了这一传统。

    回到查询 Arweave。您会注意到,在 GraphQL 结果中没有可读的的消息内容,只有标签和有关消息的信息。

    这是因为 GraphQL 端点关注的是检索的属性transactions和blocks,而不是关联数据。

    要获取交易数据,我们必须访问另一个 HTTP 接口。
    https://arweave.net/<交易id>

    复制结果中的一个id,并然后修改上述链接附加id。它应该看起来像这样……

    https://arweave.net/eaUAvulzZPrdh6_cHwUYV473OhvCumqT3K7eWI8tArk

    在浏览器中导航到该 URL(HTTP GET)的结果将是检索帖子的内容。在此示例中,它是……

    Woah that's pretty cool 😎
    太好了,现在我们有了开始构建所需的工具。(有关 arweave HTTP 接口的完整列表,请访问HTTP API 文档。)

    入门

    为了学习 arweave,我们使用create-react-app创建了一个简单的 react 应用程序。为了本指南的目的,我们假设您熟悉 react 并能够检查各种组件以了解它们的组织方式。如果对React不熟悉可以先进行有关于React的学习
    为了跟随本教程,请从 github克隆一份public-square-app的副本。

    git clone https://github.com/DanMacDonald/public-square-app.git

    输入npm install安装依赖,并输入npm start启动项目
    将会打开一个不具备什么功能的UI网站
    图片.png

    从 javascript 查询

    我们首先需要的是查询函数,我们可以从应用程序的任何地方调用它来从 arweave 检索数据。打开文件src/lib/api.js并按如下方式更新buildQuery函数。稍后我们将使此buildQuery函数动态读取和过滤返回结果。

    export const buildQuery = () => {
     const queryObject = { query: `{
       transactions(first: 100,
         tags: [
           {
             name: "App-Name",
             values: ["PublicSquare"]
           },
           {
             name: "Content-Type",
             values: ["text/plain"]
           }
         ]
       ) {
         edges {
           node {
             id
             owner {
               address
             }
             data {
               size
             }
             block {
               height
               timestamp
             }
             tags {
               name,
               value
             }
           }
         }
       }
     }`}
     return queryObject;
    }

    如果您留心观察,就会发现我们已向该tags部分添加了新的过滤条件。现在,我们还会查询"Content-Type:"text/plain"在返回的结果中

    为什么要添加这个额外的过滤条件?事实证明,我们并不是唯一使用这个 PublicSquare 协议的人。其他开发人员也这样做了,他们将其走向了不同的方向。开发人员扩展协议的最常见方法之一是将帖子格式转换为 JSON(而不是纯文本),并将更多结构化数据嵌入帖子交易数据中。当他们这样做时,他们会将标签更改"Content-type"为"text/javascript"。

    为了简化我们的教程,我们只处理带有"Content-type" :"text/plain"的帖子。还有哪些其他内容类型?按照"Content-type"的惯例,标签遵循 MIME 类型标准。您可以在此处找到Common MIME Type的列表。

    我们还向结果数据结构中添加了一些数据。我们很快就会看到这些数据的用途。

    很好!现在我们有一个可以为我们初始化查询的 JavaScript 函数,但是我们如何将其发布到网关以获取结果呢?

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5959

    回帖

    6758

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6758

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2024-6-1 12:19:45 | 显示全部楼层
    漯河哈 发表于 2024-5-31 23:28
    36+85=121   没权限给您发私信

    ok哥哥~辛苦了
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表