---
# System prepended metadata

title: Ds设计文档

---

# Ds设计文档

## 一、需求分析

用户故事A：Alice和Bob是Ds项目的使用者，他们在生活中是关系亲密的商业伙伴，经常在通讯软件中讨论合作。他们不希望商讨的信息被其他人知道，包括通讯软件的服务商。于是他们觉得使用Ds来项目通讯。
Alice和Bob首先从Github上下载了ds-node和ds-js两个项目的执行文件，然后首先在电脑上运行ds-node项目对应的软件，启动好节点。然后运行ds-js项目，此时会在浏览器中打开网页，网页显示了节点的同步
情况与相关功能界面。此时他们可以通过网页的用户界面来创建自己的账户，获得自己的公私钥匙。然后他们可以通过其他网络来交换公钥信息。当节点同步完成后，他们就可以相互发送消息了。

1. Alice首先在界面上打开一个通讯窗口，在发送方上填写她得到的Bob的公钥，然后填上要发送的消息，如"Hello, Bob"，最后点击发送按钮
2. 当Alice点击发送按钮后，程序会自动用Bob的公钥来加密发送的消息，然后将加密后的数据和其他信息组成一笔交易，并将这笔交易发送给本地的ds-node程序。
3. ds-node程序受到交易后会对交易的有效性进行检测，如果通过将交易放入交易池中，等待交易被放入下一个区块，同时将交易向全网传播。
4. 交易确认进入区块链后，会在产生关于Bob的消息Event事件，Alice和Bob的node-ds程序都会监控这样的消息，这样就知道消息是否顺利传播到网络中了。
5. Bob通过event消息事件发现有消息发送给自己后，将数据获取到，然后利用自己的私钥将其解密，获取到信息
6. Bob可以选择是否回复Alice，如果回复Alice则和Alice一样将消息发送到网络中。

需求点：

1. 用户可以利用公私钥来作为自己的账户。
2. 利用接受方的公钥加密信息，接收方利用自己的私钥解密数据获取到信息
3. 节点后台监控事件发生，获取到与自己相关的消息。
4. 节点后台定时检测链上的历史数据，确保自己没有遗漏消息。

## 二、软件设计

### 1. 总体架构

[总体架构图](https://www.processon.com/view/link/5d512df4e4b0ac2b6175c51a)

### 2. 用户界面

初步设想类似于网页微信的结构

### 3. 数据类型定义

```rust
struct Message {
    reciver string
    info string
}
```

## 三、软件编程

github 仓库：

[ds-node](https://github.com/demisstif/ds-node)

[ds-js](https://github.com/demisstif/ds-js)

## 四、软件测试