{"content":{"title":"2023 SUI 区块链数据索引指南","body":"**作者：[masterdai](https://chainbase.com/blog/article/guidelines-for-indexing-sui-blockchain-data)**\r\n\r\n## 基本情况概述\r\n\r\n索引是区块链生态系统中的一种基本工具，它简化了数据的组织和检索。索引提高了效率，增强了用户体验，简化了数据分析，并确保了可伸缩性。\r\n\r\n通过促使快速数据访问，它支持实时应用程序，并优化了交互，这对于像 DeFi 这样的平台来说尤为重要。索引还在各种任务中发挥作用，从检测欺诈活动到了解用户行为。\r\n\r\n随着区块链数据量的增加，索引确保了应用的程序性能保持高水平。\r\n\r\n在本指南中，我将演示开发人员如何使用几个 SQL 示例有效地访问链上数据。用到的工具 [Chainbase](https://chainbase.com/) 是 Sui 区块链生态系统中唯一的数据云索引提供商，实现高效数据检索方面发挥着关键作用。这种工具的使用将为开发者提供另一种简单的思路，帮助您利用索引功能提高在 Sui 区块链内的数据交互和分析。\r\n\r\n## 关于 SUI\r\n\r\nSui 是一款开创性的智能合约平台，通过以可编程实体为中心，彻底改变了传统的区块链模型。\r\n\r\n与传统的基于账户的存储模型不同，在这种模型中，每个账户都包含一个键-值存储库，Sui 的方法是以对象为中心，将其作为数据存储的基本单元。\r\n\r\n这些对象是直接在区块链上存储数据的数字实体。开发人员可以定义、创建和管理这些对象，它们代表用户级别的资产。每个对象都具有独特的属性，包括所有权，这些属性可以根据创建对象的智能合约的治理逻辑进行更新。\r\n\r\nSui 的这种面向对象的数据模型允许数字资产及其属性独立于智能合约存在于链上。这种创新为区块链领域提供了更灵活的方法，使我们与数字资产能进行更复杂和动态的交互。\r\n\r\n## 先决条件\r\n\r\n1. 一个好用的 API 网站，本文内使用的是 [Chainbase](https://chainbase.com/)\r\n2. 一个集成开发环境（IDE）。我们的示例以 JavaScript 显示，您可以使用 [VS Code](https://code.visualstudio.com/) 作为 IDE。\r\n\r\n### **获取 API 密钥**\r\n\r\n密钥将用于对 API 的请求进行身份验证，需要提前准备。\r\n\r\n### **SQL 示例**\r\n\r\n登录到[你的工具后台](https://chainbase.com/blog/article/how-to-register-a-chainbase-account)。\r\n\r\n执行以下 SQL 查询以检索所需的数据：\r\n\r\n**查询 1：查找最活跃的地址**\r\n\r\n想要在区块链中***识别交易最多的地址*** 吗？以下 SQL 查询可以帮助您：\r\n\r\n```\r\nSELECT\r\n    sender,\r\n    count() as total\r\nFROM\r\n    sui.transactions\r\nGROUP BY\r\n    sender\r\nORDER BY\r\n    total DESC\r\n```\r\n\r\n**查询 2：最常用的模块和事件类型**\r\n\r\n要识别***最常用的模块和事件类型***，请使用以下查询：\r\n\r\n```\r\nSELECT\r\n  module,\r\n  event_type,\r\n  COUNT(*) AS total\r\nFROM\r\n  sui.events\r\nGROUP BY\r\n  event_type,\r\n  module\r\nORDER BY\r\n  total DESC;\r\n```\r\n\r\n**查询 3：筛选数据提取**\r\n\r\n想要查找***特定交易内容*** 吗？使用以下 SQL 查询进行搜索：\r\n\r\n```\r\nselect\r\n    *\r\nfrom\r\n    sui.transactions\r\nwhere\r\n    transaction_content like \"%fuddies%%orderbook%\"\r\norder by\r\n    id DESC\r\nlimit\r\n    100\r\n```\r\n\r\n**查询 4：获取特定事件数据**\r\n\r\n要从 Sui 区块链中***检索特定事件数据***，请执行以下查询：\r\n\r\n```\r\nSELECT\r\n\tid,\r\n\tmodule,\r\n\tsender,\r\n\ttransaction_digest,\r\n\tevent_type\r\nFROM\r\n\tsui.events\r\nWHERE\r\n\tevent_type LIKE \"%0xac176715abe5bcdaae627c5048958bbe320a8474f524674f3278e31af3c8b86b%\"\r\nORDER BY\r\n\tid DESC\r\nLIMIT\r\n\t100\r\n```\r\n\r\n### **生成 API**\r\n\r\n一旦您有了检索所需数据的 SQL 查询，下一步是生成一个 API 请求以获取实时的 Sui 区块链数据。请按照以下步骤操作：\r\n\r\n![chainbases-api.png](https://static.chainbase.online/chainbases_api_a642f4bdb3.png)\r\n\r\n\r\n\r\n**步骤 1：如果您尚未安装 Node.js 和 Axios 库，请先安装它们。**\r\n\r\n**步骤 2：使用以下代码片段进行 API 调用：**\r\n\r\n```jsx\r\nconst axios = require('axios');\r\n\r\naxios.post('https://api.chainbase.online/v1/dw/query', {\"query\":\"SELECT\\n    id,\\n    module,\\n    sender,\\n    transaction_digest,\\n    event_type\\nFROM\\n    sui.events\\nWHERE\\n    event_type LIKE \\\"%0xac176715abe5bcdaae627c5048958bbe320a8474f524674f3278e31af3c8b86b%\\\"\\norder by\\n    id desc\\nlimit\\n    100\"}, {\r\nheaders: {\r\n'x-api-key': '[api-key]'\r\n}\r\n})\r\n.then(response => {\r\nconst data = response.data.data;\r\nconsole.log(data);\r\n})\r\n.catch(error => {\r\nconsole.error(error);\r\n});\r\n```\r\n\r\n此代码片段利用 Axios 库向 Chainbase API 端点发送 POST 请求（\r\nhttps://api.chainbase.online/v1/dw/query\r\n）。 SQL 查询包含在请求负载中，开头的 “x-api-key” 用于身份验证。\r\n\r\n**检索和打印 Sui 区块链数据**\r\n\r\n在进行 API 调用后，您将收到一个包含实时 Sui 区块链数据的响应。请按照以下步骤提取并打印数据：\r\n\r\n1. 使用 **`response.data.data`** 访问响应中检索到的数据。\r\n2. 通过将数据打印到控制台日志中显示数据。\r\n\r\n运行 **`node 'filename'.js`** 以执行代码。\r\n\r\n```jsx\r\n{\r\n\"event_type\": \"0xbc3df36be17f27ac98e3c839b2589db8475fa07b20657b08e8891e3aaf5ee5f9::mint_event::MintEvent<0xac176715abe5bcdaae627c5048958bbe320a8474f524674f3278e31af3c8b86b::fuddies::Fuddies>\",\r\n\"id\": \"306968\",\r\n\"module\": \"fuddies\",\r\n\"sender\": \"0x65afcd7679a1570f11b3865d8c0d13e070b4cf7587af11c3eacd98e97b6252a3\",\r\n\"transaction_digest\": \"6GMShTdQyeLzieJBLyVjrJn7nZTeFKEEnhRDTKZd6dqX\"\r\n},\r\n{\r\n\"event_type\": \"0xbc3df36be17f27ac98e3c839b2589db8475fa07b20657b08e8891e3aaf5ee5f9::mint_event::MintEvent<0xac176715abe5bcdaae627c5048958bbe320a8474f524674f3278e31af3c8b86b::fuddies::Fuddies>\",\r\n\"id\": \"304865\",\r\n\"module\": \"fuddies\",\r\n\"sender\": \"0x65afcd7679a1570f11b3865d8c0d13e070b4cf7587af11c3eacd98e97b6252a3\",\r\n\"transaction_digest\": \"FDPsGKnux8gCDcPWbKqkLbg28bnu6A16NUdsQN9LQb5x\"\r\n},\r\n{\r\n\"event_type\": \"0xbc3df36be17f27ac98e3c839b2589db8475fa07b20657b08e8891e3aaf5ee5f9::mint_event::MintEvent<0xac176715abe5bcdaae627c5048958bbe320a8474f524674f3278e31af3c8b86b::fuddies::Fuddies>\",\r\n\"id\": \"304864\",\r\n\"module\": \"fuddies\",\r\n\"sender\": \"0x65afcd7679a1570f11b3865d8c0d13e070b4cf7587af11c3eacd98e97b6252a3\",\r\n\"transaction_digest\": \"FDPsGKnux8gCDcPWbKqkLbg28bnu6A16NUdsQN9LQb5x\"\r\n},\r\n{\r\n\"event_type\": \"0xbc3df36be17f27ac98e3c839b2589db8475fa07b20657b08e8891e3aaf5ee5f9::mint_event::MintEvent<0xac176715abe5bcdaae627c5048958bbe320a8474f524674f3278e31af3c8b86b::fuddies::Fuddies>\",\r\n\"id\": \"304863\",\r\n\"module\": \"fuddies\",\r\n\"sender\": \"0x65afcd7679a1570f11b3865d8c0d13e070b4cf7587af11c3eacd98e97b6252a3\",\r\n\"transaction_digest\": \"FDPsGKnux8gCDcPWbKqkLbg28bnu6A16NUdsQN9LQb5x\"\r\n},\r\n...\r\n```\r\n\r\n### **通过前端演示体验 Sui 仪表板**\r\n\r\n现在！让我们一起尝试使用 Sui 仪表板的前端演示，将您对 Sui 的了解提升到新的水平。\r\n\r\n该演示在 GitHub 上提供，可帮助您亲身体验 Sui 界面，熟悉其功能和能力。请[访问此处查看演示](https://github.com/BohengLiu/sui-dashboard)。\r\n\r\n![chainbase-sui-dashboard.11.png](https://static.chainbase.online/chainbase_sui_dashboard\\_11\\_ff7c1104ce.png)\r\n\r\n\r\n写码愉快！\r\n\r\n**原文链接：[Guidelines for Indexing SUI Blockchain Data](https://chainbase.com/blog/article/guidelines-for-indexing-sui-blockchain-data)**"},"author":{"user":"https://learnblockchain.cn/people/16124","address":null},"history":null,"timestamp":1699524951,"version":1}