Skip to content

Commit

Permalink
Merge pull request #1 from bxq2011hust/main
Browse files Browse the repository at this point in the history
update asset doc
  • Loading branch information
vita-dounai committed Mar 25, 2021
2 parents d43c355 + dea16b4 commit f394bf3
Showing 1 changed file with 13 additions and 14 deletions.
27 changes: 13 additions & 14 deletions docs/asset/asset.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@

# 线性资产模型
# 简介

当使用区块链上的智能合约管理资产时,我们希望合约语言保证资产能够被灵活管理的同时安全的转移。liquid提供一种安全的资产模型,允许用户定义资产类型,资产类型模拟现实中资产的行为,提供一系列安全特性,包括用户声明的资产类型在liquid合约中不可以被复制、代码块中的资产实例在生命周期结束前必须被存储到某个账户、资产存储在用户的账户内、自带溢出检查。

## 语法说明

### 声明新资产
# 资产类型声明

Liquid线性资产模型提供合约中资产的定义语法,用户在合约中定义资产后,liquid自动解析用户定义的资产名、资产类型、发行者、描述信息、发行总量等属性,为用户生成资产类型定义、资产类型内置接口、资产注册调用代码、合约支持的资产接口的Rust代码。使用方式如下:

Expand All @@ -27,9 +26,9 @@ struct SomeAsset;
- 合约中可以声明多种资产类型
- 同质资产只有数值的不同,非同质资产代表某种唯一的、不可替代的商品。

### 代码生成
# 代码生成

#### 同质资产接口
## 同质资产

当用户声明资产类型时,fungible为true,则表明该资产类型是同质资产类型,同质资产类型提供下述接口。

Expand Down Expand Up @@ -65,7 +64,7 @@ struct SomeAsset;
签名:`pub fn deposit(mut self, to: &address);`
功能:将资产存储到某个账户中,资产生命周期结束前,必须调用此函数

#### 非同质资产接口
## 非同质资产

当用户声明资产类型时,fungible为false,则表明该资产类型是非同质资产类型。

Expand Down Expand Up @@ -109,15 +108,15 @@ struct SomeAsset;
pub fn issue_to(to: &address, uri: &str) -> Option<u64>;
```

#### 资产注册
## 资产注册

在liquid合约中声明的资产类型,在源码编译过程中,liquid会为声明的资产类型自动生成对注册接口的调用。liquid编写的智能合约在部署时,会调用`deploy`接口,在`deploy`接口中会插入对合约内声明的资产注册接口的调用,例如对于SomeAsset资产,会插入类似下面的代码:

```rust
require(SomeAsset::register(), "register SomeAsset failed");
```

#### support_asset
## support_asset

由于支持将资产存储在合约账户中,为保证接受转账的合约账户的代码有对转入资产的处理逻辑,在将资产存入合约账户时,也就是调用deposit接口时,会调用转入合约的`__liquid_supports_asset`接口检查。

Expand All @@ -132,9 +131,9 @@ pub fn __liquid_supports_asset(&self, asset: String) -> bool {
}
```

### 使用举例
# 使用举例

#### 声明资产
## 声明资产

资产类型的声明需要在合约的mod中,用户只需要定义资产所需的属性和类型名,由liquid生成资产类型的实现和方法。资产类型由名称区分,在链上唯一,重复声明同名资产类型会导致合约回滚。资产类型声明后,由发行者通过资产的发行借口发行到不同账户,每个账户的状态空间中会存储资产的相关信息。

Expand Down Expand Up @@ -164,7 +163,7 @@ mod contract {
}
```

#### 合约中构造资产对象
## 合约中构造资产对象

资产类型提供`withdraw_from_caller``withdraw_from_self`两个方法用于构造资产类型的实例,`withdraw_from_caller`会从调用者的账户中构造资产实例,如果调用者账户中的此类资产不足,则构造失败。`withdraw_from_self`从合约账户自身构造资产类型,如果合约中的此类资产不足则构造失败。

Expand All @@ -177,7 +176,7 @@ if let Some(token) == SomeAsset::withdraw_from_caller(amount) {
}
```

#### 资产实例的销毁
## 资产实例的销毁

为保证资产实例不能被随意丢弃,资产实例的生命周期结束之前,必须妥善的将资产实例存储到某个账户中,否则会导致交易会滚。

Expand All @@ -192,7 +191,7 @@ if let Some(token) == SomeAsset::withdraw_from_self(amount) {
}
```

#### 查询资产相关信息
## 查询资产相关信息

资产类型提供一系列查询接口,方便用户查询资产相关信息。

Expand All @@ -204,7 +203,7 @@ let description = SomeAsset::description().into();
let issuer = SomeAsset::issuer();
```

#### 合约托管资产
## 合约托管资产

为方便用户对资产的灵活操作,用户可以将其持有的资产转给某个合约,由合约逻辑来管理资产。如下的例子,可以允许用户将自己的SomeAsset资产授权给其他用户使用。

Expand Down

0 comments on commit f394bf3

Please sign in to comment.