Skip to content

Commit

Permalink
update introduction
Browse files Browse the repository at this point in the history
  • Loading branch information
vita-dounai committed Sep 11, 2020
1 parent 16dfa31 commit c07d198
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions docs/quick_start/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,22 @@ Liquid是一种[嵌入式领域特定语言](http://wiki.haskell.org/Embedded_do
```eval_rst
.. important::
Liquid选择Rust语言作为宿主语言也意味着:为了能够更好的使用Liquid进行智能合约开发,我们强烈建议您提前掌握Rust语言的基础知识,尤其是借用、生命周期、属性等关键概念。若您此前无Rust语言相关的知识背景,推荐您参考[Rust语言官方教程](https://doc.rust-lang.org/book/)。同时,Liquid的基础编程模型与现有的主流智能合约编程语言(如[Solidity](https://solidity.readthedocs.io/en/latest/)、[Vyper](https://vyper.readthedocs.io/en/stable/))等较为接近,如果您有使用这些语言进行智能合约开发的经验,将会为使用Liquid带来极大的裨益。
Liquid选择Rust语言作为宿主语言也意味着:为了能够更好的使用Liquid进行智能合约开发,我们强烈建议您提前掌握Rust语言的基础知识,尤其是借用、生命周期、属性等关键概念。若您此前无Rust语言相关的知识背景,推荐您参考`Rust语言官方教程 <https://doc.rust-lang.org/book/>`_。同时,Liquid的基础编程模型与现有的主流智能合约编程语言(如`Solidity <https://solidity.readthedocs.io/en/latest/>`_、`Vyper <https://vyper.readthedocs.io/en/stable/>`_)等较为接近,如果您有使用这些语言进行智能合约开发的经验,将会为使用Liquid带来极大的裨益。
```

## 关键特性

- **基于Rust语言**您能够在Liquid合约中使用大部分Rust语言的特性,包括强大且灵活的类型系统、移动语义、标准容器及λ表达式等。除此之外,Rust语言丰富的安全检查策略可以帮助您写出更加健壮的合约代码;
- **丰富的语法、安全的语义**您能够在Liquid合约中大部分地方中使用Rust提供的语言特性,包括强大的类型系统、移动语义、标准容器及λ表达式等。此外,Rust语言内置的可达性检查、借用检查、生命周期检查及代码风格检查等对于Liquid合约仍然是有效的,这些检查策略可以帮助您写出更加健壮及安全的合约代码

- **面向Wasm**:Wasm是一种可移植、体积小、加载快的字节码格式,Liquid支持将合约代码编译为Wasm格式字节码,从而使得您的智能合约能够以更加高效的方式在区块链上运行;
- **高效**:Wasm是一种可移植、体积小、加载快的字节码格式,Liquid支持将合约代码编译为Wasm格式字节码,从而使得您的智能合约能够以更高的效率在在区块链上运行

- **支持合约内编写单元测试**:当以`std`模式编译合约时,Liquid会引导编译器将合约编译为本机机器码并运行单元测试,从而帮助您在部署合约之前发现潜在的漏洞。
- **支持单元测试**支持在合约内部方便地编写单元测试。当以`std`模式编译合约时,Liquid会引导编译器将合约编译为本机机器码并运行单元测试,从而帮助您在部署合约之前发现可能的潜在的漏洞

- **完全兼容Solidity ABI**:Liquid合约的应用程序二进制接口与Solidity完全兼容,因此Liquid合约可以与Solidity合约互相调用。同时,为Solidity合约开发的应用程序也能够无缝迁移至Liquid
- **完全兼容Solidity ABI**:Liquid合约的应用程序二进制接口与Solidity完全兼容,因此Liquid合约可以与Solidity合约互相调用。同时,为Solidity合约开发的应用程序也能够无缝迁移至Liquid

## 从简单合约出发

本小节将会以一个简单`Hello World`合约为例,展示Liquid的基础特性,以帮助您建立Liquid的初步认知。此处我们不会对Liquid语言的高级特性及实现细节展开讨论,如果您对此感兴趣,可以参考**深入学习**一章。
本小节将会以一个简单`Hello World`合约为例,展示Liquid的基本特性,以帮助您快速建立Liquid的初步认知。此处我们不会对Liquid语言的高级特性及实现细节展开讨论,如果您对此感兴趣,请参考**深入学习**一章。

### Hello World合约

Expand Down Expand Up @@ -105,4 +105,6 @@ Liquid是一种[嵌入式领域特定语言](http://wiki.haskell.org/Embedded_do

- `set`方法允许调用者向其传递一个字符串参数,并使用该参数修改状态变量`name`的值。

第32~50行定义了一个专用于单元测试的mod。单元测试并不是合约的的一部分,而是用于在本机运行以检查合约方法实现逻辑的正确性。第32行是一个编译开关,意为只有当`test`编译标志启用时,其后跟随的`mod`才会参与编译,否则直接从代码中剔除。当将Liquid编译为Wasm字节码时, `test`编译标志不会启用。由于`mod`在Rust语言中担当命名空间的作用,因此我们需要在第34行从外部导入我们刚刚定义的合约,以方便在单元测试中使用。在`tests`模块中,我们编写了2个单元测试,分别用于测试`get`函数和`set`函数的正确性。
第32~50行定义了一个专用于单元测试的mod。单元测试并不是合约的的一部分,而是用于在本机运行以检查合约方法实现逻辑的正确性。第32行是一个编译开关,意为只有当`test`编译标志启用时,其后跟随的`mod`才会参与编译,否则直接从代码中剔除。当将Liquid编译为Wasm字节码时, `test`编译标志不会启用,因此最后的合约字节码中不会包含任何测试。由于`mod`会进行命名空间隔离,因此我们需要在第34行从外部导入我们刚刚定义的合约符号,以方便在单元测试中使用。在`tests`模块中,我们编写了2个单元测试,分别用于测试`get`函数和`set`函数的正确性。

在接下来的篇幅中,我们将介绍Liquid合约开发环境的搭建及基本的开发流程。

0 comments on commit c07d198

Please sign in to comment.