# stx-使用空间和时间 CLI

By [Untitled](https://paragraph.com/@0x25278fe7afd1810bea457226b5519daef958db37) · 2024-02-22

---

使用空间和时间 CLI 使用SxT CLI注册 Space and Time 并与之交互的端到端步骤。

欢迎来到空间和时间，这是为智能合约构建的去中心化数据仓库。本指南提供了空间和时间入门的分步说明。

[![]({{DOMAIN}}/editor/youtube/play.png)](https://www.youtube.com/watch?v=w8lNzY0o0Ek)

1.  先决条件和设置 连接空间和时间的主要方式有以下三种：
    

空间和时间 dapp 空间和时间API 空间和时间 JDBC 在本指南中，我们将使用API 的应用程序/CLI 包装器。 SxTCLI

A) SxT 先决条件 要使用 SxT CLI 连接到 Space and Time，我们需要一些项目。

API URL - 这将在您的欢迎使用 Space and Time 电子邮件中提供。如果您想注册测试版访问权限，可以在此处找到更多信息。 JoinCode - 虽然您可以在没有 JoinCode 的情况下注册和注册，但您将仅限于试用访问，并且某些功能将不可用。您将在欢迎使用 Space and Time 电子邮件中收到您的加入代码。 B) SxT CLI 设置 这些说明将根据您的操作系统和 shell 的不同而略有不同。

1.下载并安装最新的JavaJDK。 选择您的操作系统/芯片架构 下载名为：jdk-\_\* 确认 Java 已安装，它应该返回类似以下内容：java --version 壳 └─\[$\] java --version java 20.0.1 2023-04-18 Java(TM) SE Runtime Environment (build 20.0.1+9-29) Java HotSpot(TM) 64-Bit Server VM (build 20.0.1+9-29, mixed mode, sharing) 2.下载并运行SxT CLI jar 在此处下载最新版本的 SxT CLI 。此链接将带您进入包含所有 CLI 版本的顶级目录。确保您选择最新版本（即 0.0.2 比 0.0.1 更新）。当您单击最新版本时，您将看到两个文件：.jar 和 .pom。对于本教程，您只需下载 .jar 文件，而不是 .pom 文件。 从下载 Jar 的目录中，使用以下命令确认 SxT CLI 的执行： 输出 3. 将 CLI 添加到您的 shell 环境 Mac OS X 和 Linux 为了便于使用，建议创建用于运行 SxT CLI 的 shell 别名。 使用您选择的编辑器编辑您的 shell 配置文件： 苹果电脑 Linux 〜/.zshrc 〜/ .bash\_profile 添加这一行： 文本 alias sxtcli='java -jar /sxtcli-.jar' 🚧 您必须重新加载 shell 或打开新终端才能正确加载别名。另外，如果您使用的是 OSX 并且想要升级您的 shell 游戏，请查看OhMyZsh。 视窗 有关将 CLI 添加到Windows 上的环境变量的说明，请参阅此资源。PATH 测试 CLI 执行 要测试安装是否成功，请运行以下命令：sxtcli help 输出 └─\[$\] sxtcli help Usage: \[COMMAND\] Commands: help Display help information about the specified command. authenticate Perform platform authentication commands. biscuit Perform biscuit commands. discover Perform resource discovery commands. sql Perform SQL commands. sql-support Perform supporting SQL commands. 4.环境变量 在整个空间和时间文档中，您将看到对诸如和 之类的变量的引用。任何以 a 开头的变量都表示我们已在 shell 中创建了一个环境变量来表示该变量。$API\_URL$AT$ 这有助于我们使示例代码更加清晰，并让您在阅读指南时节省时间。在某些情况下，存在安全优势，例如当变量表示私钥时。关于环境变量如何工作的完整讨论超出了本指南的范围。 如何设置环境变量取决于您的操作系统和 shell，但对于 OSX 或 Linux，通常就像从 shell/终端设置它们一样简单，如下所示： export API\_URL="https://" 或者，如果您正在为 SxT 设置环境变量：accessToken export AT="your-long-JWT-like-SxT-Access-Token-Here" 现在您已经安装了 SxT CLI，让我们连接到 Space and Time！ 注册并认证 使用 CLI 向 Space and Time 注册和验证新用户非常简单： 壳 sxtcli authenticate register --url=$API\_URL --userId=$USERID --code="" 📘 请记下公钥和私钥，并将您的私钥存储在安全的地方，例如密码管理器。您将使用此私钥对 SxT 网络进行身份验证。另外，请记下您的. 它的行为类似于会话令牌，类似于 JWT。它的有效期只有 30 分钟。accessToken 我们在这里引入了两个环境变量，所以让我们定义它们： $API\_URL是根/基础空间和时间 API URL，前缀为https:// $USERID是您想要的 SxT 用户名。用户名是唯一的，因此如果您尝试注册已被占用的名称，则会收到错误消息。您可以使用以下命令检查 SxT 中是否存在 userId：sxtcli authenticate check-id --url=$API\_URL --userId=$USERID 现在让我们继续创建另外三个环境变量： 壳 export AT="" export USER\_PRIVATE\_KEY="" export USER\_PUBLIC\_KEY="" 📘 如果您的访问令牌过期，您现在可以使用以下命令轻松登录并获取新的访问令牌：sxtcli authenticate login --privateKey=$USER\_PRIVATE\_KEY --publicKey=$USER\_PUBLIC\_KEY --url=$API\_URL --userId=$USERID 运行查询 现在您已连接到平台，是时候运行您的第一个查询了！空间和时间索引来自许多 EVM 兼容链的区块链数据。对于我们的第一个查询，我们将查看来自以太坊的一个块： 壳 sxtcli sql --accessToken=$AT --url=$API\_URL dql --resourceId="ETHEREUM.BLOCKS" --sqlText="SELECT \* FROM ETHEREUM.BLOCKS LIMIT 1" 输出 \[ { "MINER" : "0x4C10a52647e8Ee35A166CeF8aa5B01E3C4E267B0", "PARENT\_HASH" : "0x1595d3d29c3547d143cf4ab985ee70737f75fe31aaf5c4eeca38d5c633557eac", "BLOCK\_NUMBER" : 2038655, "BLOCK\_HASH" : "0x628d9b7ba35977fd701ef6bbf9b77a1bfcf0eef6598fdb5b9501abc6a8673d40", "SIZE\_" : 541, "TIME\_STAMP" : "2016-08-09T06:44:10.000+00:00", "REWARD" : "5000000000000000000", "BASE\_FEE\_PER\_GAS" : "", "GAS\_USED" : 0, "GAS\_LIMIT" : 4712388, "TRANSACTION\_COUNT" : 0 } \] 如您所见，针对空间和时间运行以下 SQL 查询： SQL SELECT \* FROM ETHEREUM.BLOCKS LIMIT 1 另外，请记下命令中的参数。空间和时间中的资源 ID用于 SxT 网关级别的查询路由，以确保最佳响应时间。--resourceIdSCHEMA.TABLE 📘 与任何优秀的 API 一样，我们有关于端点的明确文档，您可以在此处找到数据查询语言 (DQL) 端点文档。 说到模式和表，我们为什么不现在创建一个集合呢？ 创建架构和表 创建架构 在创建表之前，最好为该表创建一个架构。在空间和时间中创建架构很容易： 壳 sxtcli sql --accessToken=$AT --url=$API\_URL ddl --resourceId="" --sqlText="CREATE SCHEMA " 2.制作饼干 空间和时间使用饼干来处理网络上数据的授权。当我们创建一个表时，我们会发送一个带有建立有关该表的授权事实的请求的饼干。饼干是使用公钥/私钥对生成的，与我们用于身份验证的密钥对相似但不同。 壳 sxtcli biscuit generate table --resources="." --operations="CREATE,DROP,INSERT,UPDATE,MERGE,DELETE,SELECT" 这将返回一个公钥、一个私钥以及使用该密钥对生成的饼干令牌。 🚧 您的饼干私钥和饼干令牌都是秘密，应该如此对待。获得您私钥的人可以生成饼干并接管您的桌子。同样，任何拥有你饼干的人都可以承担与饼干相关的任何事情。--operations 让我们将它们加载到环境变量中： 壳 export BISCUIT\_PRIVATE\_KEY="63564B7C9E..." export BISCUIT\_PUBLIC\_KEY="A18461FB1C33C..." export BISCUIT="EtUCCuoBCg5ze..." 关于饼干代币的完整讨论超出了本指南的范围。如需更深入的了解，请参阅Biscuit [Authorization和BiscuitSec.org](http://xn--AuthorizationBiscuitSec-ht53b.org)。 📘 您可以在此处找到SxT DDL API 端点的完整规范。 创建表 让我们看一下我们首先要执行的SQL： SQL CREATE TABLE . ( ID INT, NAME VARCHAR, PRIMARY KEY (ID) ) WITH ( "public\_key" = , "access\_type" = 'public\_read' ); 从 SxT CLI 中，我们可以像这样执行表创建： 壳 sxtcli sql --accessToken=$AT --url=$API\_URL ddl --resourceId="." --biscuits=$BISCUIT --sqlText="CREATE TABLE . (ID INT, NAME VARCHAR, PRIMARY KEY (ID)) WITH "public\_key=,access\_type=public\_read"" 成功！您现在已经在空间和时间中创建了第一个表格！ 请注意，在上面的命令中，您需要输入您的饼干公钥，其中不带引号。所以它看起来像这样：public\_key=A18461FB1C33C... 📘 您可以在此处了解以及如何保护您的桌子。access\_type 加载数据 编写 SQL SQL INSERT INTO . (ID, NAME) VALUES (1, 'm0thra') 2. INSERT SxT CLI 命令 壳 sxtcli sql --accessToken=$AT --url=$API\_URL dml --resourceId="." --biscuits=$BISCUIT --sqlText="INSERT INTO . (ID, NAME) VALUES (1, 'm0thra')" 接下来，要查看您的数据，请运行以下命令： 壳 sxtcli sql --accessToken=$AT --url=$API\_URL dql \\ --resourceId="." --sqlText="SELECT \* FROM ." 📘 请注意命令中的使用。您可以在此处找到有关 SxT 数据修改语言 (DML) 端点的更多信息。dmlINSERT 链上链下数据连接 这就是时空闪耀的地方！通过单个请求将您的数据连接到我们索引的区块链数据的能力为您带来了无限的强大可能性。 在此示例中，我们将向您展示如何将（用户创建的）数据与（SxT 创建的）数据连接起来以回答以下问题：SE\_PLAYGROUND.DAPP\_USER\_WALLETSETHEREUM.FUNGIBLETOKEN\_WALLET 在给定区块之前有多少用户（按地址）持有我们的 ERC20 代币？ 一、SQL SQL SELECT DISTINCT eth\_erc\_20.WALLET\_ADDRESS FROM ETHEREUM.FUNGIBLETOKEN\_WALLET AS eth\_erc\_20 JOIN SE\_PLAYGROUND.DAPP\_USER\_WALLETS\_1 AS dapp\_users ON eth\_erc\_20.WALLET\_ADDRESS = dapp\_users.USER\_WALLET\_ADDRESS WHERE eth\_erc\_20.TOKEN\_ADDRESS = '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2' --SWISE Token AND eth\_erc\_20.BLOCK\_NUMBER > '15480960' LIMIT 10; 2.SxT CLI 命令 壳 sxtcli sql --accessToken=$AT --url=$API\_URL dql --resourceId="SE\_PLAYGROUND.DAPP\_USER\_WALLETS\_1" --sqlText="SELECT DISTINCT WALLET\_ADDRESS FROM ETHEREUM.FUNGIBLETOKEN\_WALLET AS eth\_erc\_20 JOIN SE\_PLAYGROUND.DAPP\_USER\_WALLETS\_1 AS dapp\_users ON eth\_erc\_20.WALLET\_ADDRESS = dapp\_users.USER\_WALLET\_ADDRESS WHERE eth\_erc\_20.TOKEN\_ADDRESS = '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2' AND eth\_erc\_20.BLOCK\_NUMBER > '15480960' LIMIT 100" 通过该查询，我们可以看到表中有三个用户在块之前持有令牌！SWISE15480960 输出 \[ {"WALLET\_ADDRESS":"0x992f534fcc87864875224d142d6Bf054B1882160"}, {"WALLET\_ADDRESS":"0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE"}, {"WALLET\_ADDRESS":"0xB825779da5f2D625540e04bf53015CD6fe38F969"} \] 现在您已准备好开始将空间和时间用于您的用例！

---

*Originally published on [Untitled](https://paragraph.com/@0x25278fe7afd1810bea457226b5519daef958db37/stx-cli)*
