> For the complete documentation index, see [llms.txt](https://zenofchain.gitbook.io/spark-wen-dang-geng-xin-zhong-spark-docupdating/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://zenofchain.gitbook.io/spark-wen-dang-geng-xin-zhong-spark-docupdating/kai-fa-zhe-developers/9.-ji-yu-zhi-neng-he-yue-de-ding-dan-bo-smart-contractbased-order-book/9.1spark-xian-jia-dan-zhi-neng-he-yue-spark-limit-orders-smart-contract.md).

# 9.1Spark限价单智能合约 (Spark Limit Orders Smart Contract)

<https://github.com/compolabs/spark/tree/master/contracts>

#### 版本警告 (Version warning)

The master branch contains the latest work-in-progress version of the Spark smart contract. It hasn't been audited and may contain severe security issues or may not work at all.

主分支( master branch)包含Spark智能合约的最新工作进程版本。它没有经过审计，可能包含严重的安全问题，也可能根本无法工作。

#### 关于 (About)

This repository contains a smart contract for Fuel blockchain which allows users to place limit orders orderbook, that later could be filled and matched on-chain. Limit order itself is a data structure created off-chain.

这个存储库包含了Fuel区块链的智能合约，它允许用户在订单簿上部署限价单，以后可以在链上执行和匹配。限价单本身是一个在链外创建的数据结构。

#### 文档 (Docs)

**合约存储 (Contract Storage)**

```
storage {
   orders: StorageMap<u64, Order> = StorageMap {},
   orders_amount: u64 = 0,
   deposits: StorageMap<Address, u64> = StorageMap {},
   trades: StorageVec<Trade> = StorageVec {},
}
```

**Abi**

```
abi LimitOrders {
   #[storage(read)]
   fn get_deposit_by_address(address: Address) -> u64;

   #[payable]
   #[storage(read, write)]
   fn deposit();

   #[storage(read, write)]
   fn withdraw(amount: u64);

   #[storage(read)]
   fn orders_amount() -> u64;

   #[storage(read)]
   fn trades(offset: u64) -> (Option<Trade>, Option<Trade>, Option<Trade>, Option<Trade>, Option<Trade>, Option<Trade>, Option<Trade>, Option<Trade>, Option<Trade>, Option<Trade>);

   #[storage(read)]
   fn orders(offset: u64) -> (Option<Order>, Option<Order>, Option<Order>, Option<Order>, Option<Order>, Option<Order>, Option<Order>, Option<Order>, Option<Order>, Option<Order>);

   #[storage(read)]
   fn orders_by_id(ids: [u64; 10]) -> (Option<Order>, Option<Order>, Option<Order>, Option<Order>, Option<Order>, Option<Order>, Option<Order>, Option<Order>, Option<Order>, Option<Order>);

   #[storage(read)]
   fn order_by_id(id: u64) -> Order;

   #[payable]
   #[storage(read, write)]
   fn create_order(asset1: ContractId, amount1: u64, matcher_fee: u64) -> u64;

   #[storage(read, write)]
   fn cancel_order(id: u64);

   #[payable]
   #[storage(read, write)]
   fn fulfill_order(id: u64);

   #[storage(read, write)]
   fn match_orders(order_id_a: u64, order_id_b: u64);
}

```

**结构 (Structs)**

**订单 Order**

```
pub struct Order {
   asset0: ContractId,
   amount0: u64,
   asset1: ContractId,
   amount1: u64,
   status: Status,
   fulfilled0: u64,
   fulfilled1: u64,
   owner: Address,
   id: u64,
   timestamp: u64,
   matcher_fee: u64,
   matcher_fee_used: u64,
}
```

**交易 Trade**

```
struct Trade {
   order_id: u64,
   asset0: ContractId,
   amount0: u64,
   asset1: ContractId,
   amount1: u64,
   timestamp: u64,
}
```

**穷举 (Enums)**

**状态 Status**

```
enum Status {
    Active: (),
    Canceled: (),
    Completed: (),
}
```

#### 使用Fuel Rust SDK设置和运行测试 (Setting up and running the tests using Fuel Rust SDK)

**依赖性 (Dependencies)**

* ​[最新稳定的Rust工具链 The latest stable Rust toolchain](https://fuellabs.github.io/sway/master/introduction/installation.html);
* ​[forc 和 fuel-core 二进制文件 forc and fuel-core binaries](https://fuellabs.github.io/sway/master/introduction/installation.html#installing-from-cargo).

forc is Sway equivalent of Rust's cargo. fuel-core is a Fuel full node implementation.

Sway的forc相当于Rust的cargo。 fuel-core是一个Fuel全节点的实现。

**克隆 repo (Clone repo)**

```
git clone https://github.com/sway-gang/spark.git 
cd spark
```

**构建合约 (Build contract)**

```
cd contract
forc build
```

**运行测试 (Run tests)**

```
cargo test
```
