> For the complete documentation index, see [llms.txt](https://stratos.gitbook.io/st-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://stratos.gitbook.io/st-docs/stratoschain-zhong-wen-ban/stratos-sds-shi-yong-shuo-ming.md).

# Stratos SDS 使用说明

Stratos 去中心化存储 (SDS) 网络是一个由数据流量驱动的可扩展、可靠、自平衡的弹性加速网络。它可以高效、安全地访问数据。用户可以完全灵活地存储任何大小和类型的数据。

SDS 由许多存储数据的资源节点（也称为 PP 节点）和一些负责协调工作的元节点（也称为索引或 SP 节点）组成。当前存储库仅包含资源节点的代码。有关元节点的更多信息，请参阅<https://github.com/stratosnet/sds>

### 创建资源节点

```bash
git clone https://github.com/stratosnet/sds.git
cd sds
git checkout v0.3.0
make build
```

此时, 你会在 `./target` 目录下找到可执行的二进制文件 `ppd`

#### 安装二进制文件

可以通过运行以下命令将二进制文件安装到默认的 $GOPATH/bin 文件夹中：

```bash
make install
```

如果您已正确设置 `go env`(请参考<https://golang.org/doc/install)，> 那么二进制文件 `ppd` 应该可以从任何文件夹运行。

### 如何运行和创建自己的资源节点

#### 创建根目录

要启动资源节点，您需要位于资源节点的专用目录中。创建一个新目录，或进入您现有节点的根目录。

```bash
# create a new folder 
mkdir rsnode
cd rsnode
```

#### 配置节点

接下来，您需要为您的节点生成配置文件。二进制文件将帮助您创建必要的密钥对。

```bash
ppd config
# then follow the instructions
```

此命令为您创建一个配置文件 `configs/config.yaml` . 您只需要编辑该文件中的几行以指定要连接的区块链。例如， 要连接到 Stratos 链测试网，请进行以下更改：

```yaml
StratosChainUrl: https://rest-test.thestratos.org:443
# 如果你已经在你的 stchaind 节点上运行了一个，也可以将它配置为你自己的 stchaincli rest-server
```

下一步是索引节点列表：

```yaml
SPList: 
- P2PAddress: ""
  P2PPublicKey: ""
  NetworkAddress: 3.12.6.122:8888 
```

然后， 还需要将 ChainId 更改为 <https://big-dipper-test.thestratos.org> 顶部搜索栏旁边的可见值。

```yaml
ChainId: stratos-testnet-3 
```

最后，确保将 `NetworkAddress` 设置为您的公共 IP 地址和端口。如果您的节点由路由器转发， 请加入以下代码。 请注意，这里的 `NetworkAddress` 不是 SPList 的索引节点 NetworkAddress。

```yaml
# 如果你的节点由路由器转发，你可能需要在路由器上配置转发端口
Port: :18081
NetworkAddress: <your node external ip> 
```

#### 获取 STOS 代币

在对资源节点执行任何操作之前，您需要首先获取一些 STOS 代币。您可以使用我们的 faucet API 获取：

```bash
curl -X POST https://faucet-test.thestratos.org/faucet/WALLET_ADDRESS
```

只需在上面的命令中输入您的钱包地址(`WALLET_ADDRESS`)，您就可以开始使用了。

#### 启动节点

一旦您的配置文件设置正确，并且拥有足够代币，您就可以启动您的节点。。

输入以下命令行来启动节点：

```bash
ppd terminal
```

或者将节点作为不需要交互的守护进程启动：

```bash
ppd start
```

请注意，如果您在运行 `ppd start` 之前没有完成 从 `ppd terminal` 到 `startmining` 的所有步骤，您的节点将不会参与挖矿。

#### 注册到元节点

您的节点需要在执行任何其他操作之前注册到元节点。当您有一个使用终端运行的资源节点时，输入以下任意一个命令：

```bash
rp
```

或者

```bash
registerpeer
```

#### 通过质押激活资源节点

现在您需要在区块链中激活您的节点。在终端中使用此命令：

```bash
activate stakingAmount feeAmount gasAmount
```

`stakingAmount` 是您想要质押的 uSTOS 数量。基本金额为 `1000000000`。 `feeAmount` 是作为激活交易费用支付的 uSTOS 金额。 设为 `10000` 即可。如果不提供，它将使用默认值。 `gasAmoun`t 是用于交易的 `gas` 量。 设为 `1000000` 较为安全。如果不提供，它将使用默认值。

以上金额要根据节点有多少token决定。

#### 开始挖矿

在终端中使用此命令开始挖矿。您的节点将开始充当资源节点并开始接收数据处理任务。

```bash
startmining
```

现在你可以通过输入 `exit` 退出终端，然后运行 `ppd start` 在后台运行节点。

### 如何处理正在运行的资源节点？

一旦你有一个使用终端运行的活动资源节点(即你已经运行了 `ppd terminal`), 您就可以开始以下的操作。

#### 购买Ozone

Ozone是 SDS 使用的流量单位。涉及网络流量的操作需要使用Ozone。

与token的计量单位类似， 1 Ozone = 1000,000,000uOzone。您可以使用以下命令购买Ozone：

```bash
prepay purchaseAmount feeAmount gasAmount
```

`purchaseAmount` 是您用来购买Ozone所花费的 uSTOS 数量。

其他两个参数同上。

#### 上传一个文件

```bash
put FILE_PATH
```

`FILE_PATH` 是要上传的文件的路径，从您的资源节点文件夹开始。

#### 列出您上传的文件

```bash
list
```

#### 下载文件

```bash
get sdm://WALLET_ADDRESS/FILE_HASH
```

上传到 SDS 的每个文件都有一个唯一的文件哈希。当您列出上传的文件时，您可以查看每个文件的文件哈希。

#### 删除文件

```bash
delete FILE_HASH
```

#### 共享文件

```bash
sharefile FILE_HASH EXPIRY_TIME PRIVATE
```

`EXPIRY_TIME` 是文件共享到期的 Unix 时间戳。设置为 `0` 即为无限时间。 `PRIVATE` 是文件共享是否应受密码保护。输入 `0` 表示没有密码，输入 `1` 表示有密码。

#### 列出所有共享文件

```bash
allshare
```

#### 下载共享文件

```bash
getsharefile SHARE_LINK PASSWORD
```

如果是公共共享文件，请将密码留空。

#### 取消文件共享

```bash
cancelshare SHARE_ID
```

#### 查看资源利用率

键入 `monitor` 将显示资源使用情况，键入 `stopmonitor` 将其隐藏。

### 参与贡献

感谢您考虑帮助提供源代码！我们欢迎互联网上任何人的贡献，并感谢即使是最小的修复！如果您想为 SDS（Stratos 去中心化存储）做出贡献，请 分支、修复、提交并向我们发送拉取请求 (pull request) 以审查并合并到主代码库中。

请确保符合我们的编码指南

* 代码需要遵守官方 Go 格式( [formatting](https://golang.org/doc/effective_go#formatting)) 及指南 ([gofmt](https://pkg.go.dev/cmd/gofmt))。
* 代码文档需要遵守官方 Go [评论指南](https://golang.org/doc/effective_go#commentary)。
* 拉取请求(PR)需要基于并针对 `dev` 分支打开，PR 名称应遵循`常规提交`(`conventional commits`)。
* 提交消息应该以它们修改的包为前缀

  > 例如 "pp: make trace configs optional"
