Skip to content

Commit

Permalink
fix inappropriate description
Browse files Browse the repository at this point in the history
  • Loading branch information
vita-dounai committed Oct 12, 2020
1 parent 61a2633 commit d37f3c9
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 21 deletions.
32 changes: 14 additions & 18 deletions docs/appendix/bwci.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,34 +6,30 @@ BCOS Wasm合约接口(BCOS Wasm Contract Interface,BWCI)规范用于规范

所有的合约必须已[WebAssembly二进制编码](https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md)格式保存及传输,即Wasm格式字节码。

## 导入
## 符号导入

合约仅能导入在[BCOS环境接口规范](./bei.html)中定义的符号。所有的符号都需要从名为`bcos`的命名空间中导入,若导入的符号是函数,则函数的签名必须与[BCOS环境接口规范](./bei.html)中所声明的函数签名保持一致。

除了`bcos`命令空间外,还有一个名为`debug`的特殊的命名空间。这个命名空间中所声明的函数的主要用于虚拟机的调试模式,在正式的生产环境中这个命名空间不会被启用。
除了`bcos`命令空间外,还有一个名为`debug`的特殊的命名空间。这个命名空间中所声明的函数的主要用于虚拟机的调试模式,在正式的生产环境中这个命名空间不会被启用,详情请参考[调试模式](./bwci.html#调试模式)

## 调试模式

调试模式是一种用于调试虚拟机的特殊模式,通过`debug`命名空间为合约提供了一组额外调试接口。但是在正式的生产环境中,若合约字节码尝试从`debug`命名空间中导入符号,则会被拒绝部署。

`debug`命名空间中可用的接口如下:
## 符号导出

- `print32(value: i32)`:输出一个`i32`类型的值
- `print64(value: i64)`:输出一个`i64`类型的值
- `printMem(offset: i32, len: i32)`:以可打印字符形式输出虚拟机中一段内存区域中的内容,其中`offset`为该内存区域的起始地址,`len`为该内存区域的长度
- `printMemHex(offset: i32, len: i32)`:以16进制字符串的形式输出虚拟机中一段内存区域中的内容,其中`offset`为该内存区域的起始地址,`len`为该内存区域的长度
合约必须恰好导出3个符号:

## 导出
- `memory`:共享线性内存,用于提供合约与[BCOS环境接口规范](./bei.html)中的接口交换数据。
- `deploy`:合约的初始化入口,无参数且无返回值,负责完成合约状态初始化的工作。当合约初次部署至链上时,区块链底层会主动调用该函数。
- `main`:合约调用的入口,无参数且无返回值,负责从区块链底层获取合约调用参数,并根据调用参数中的函数选择器调用相应的合约方法。当区块链底层处理调用该合约的交易时,会主动调用该函数。当交易成功执行时,`main`函数正常退出,否则`main`函数调用[BCOS环境接口规范](./bei.html)中的`revert`函数回滚交易并向宿主环境报告错误原因。

合约必须恰好导出3个符号:
## 调试模式

- `memory`:共享内存,用于提供给[BCOS环境接口规范](./bei.html)中的接口向其中写入数据。
- `deploy`:用于调用合约构造函数的函数,无参数且无返回值。
- `main`:用于处理合约交易的函数,无参数且无返回值。
调试模式是一种用于调试虚拟机的特殊模式,通过`debug`命名空间为合约提供了一组额外调试接口。但是在正式的生产环境中,若合约字节码尝试从`debug`命名空间中导入符号,则会被拒绝部署。

## 合约入口
`debug`命名空间中可用的接口如下:

当执行交易时,虚拟机会调用合约字节码中的`main`函数,由`main`函数负责实现读入交易输出、合约方法分发等逻辑。当交易成功执行时,`main`函数正常退出,否则`main`函数调用[BCOS环境接口规范](./bei.html)中的`revert`函数回滚交易并向宿主环境报告错误原因。
- `print32(value: i32)`:输出一个`i32`类型的值。
- `print64(value: i64)`:输出一个`i64`类型的值。
- `printMem(offset: i32, len: i32)`:以可打印字符形式输出虚拟机中一段内存区域中的内容,其中`offset`为该内存区域的起始地址,`len`为该内存区域的长度。
- `printMemHex(offset: i32, len: i32)`:以16进制字符串的形式输出虚拟机中一段内存区域中的内容,其中`offset`为该内存区域的起始地址,`len`为该内存区域的长度。

## Start function

Expand Down
2 changes: 1 addition & 1 deletion docs/in_depth/create_contract.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ mod hello_world {

Liquid合约有两种属性:

- `version``version`用于指定所使用的Liquid版本。在未来,随着Liquid不断迭代,可能会引入不兼容的功能特性,在这种情况下,您所指定的Liquid版本将会影响Liquid解析合约的方式。`version`必须以[语义化版本](https://semver.org/lang/zh-CN/)的格式提供,即版本是以英语句号`.`分割的主版本号、次版本号即及修订号
- `version``version`用于指定所使用的Liquid版本。在未来,随着Liquid不断迭代,可能会引入不兼容的功能特性,在这种情况下,您所指定的Liquid版本将会影响Liquid解析合约的方式。`version`必须以[语义化版本](https://semver.org/lang/zh-CN/)的格式提供,即版本是以英语句号`.`分割的主版本号、次版本号及修订号

- `hash_type`:Liquid在某些场合需要使用到哈希函数(如计算合约方法选择器、参数编码等)。`hash_type`提供了两个选项:`keccak256``sm3`,用于在不同的场景下,指定Liquid使用的哈希函数类型。当您的合约需要部署至非国密FISCO BCOS区块链平台时,您需要指定`hash_type``keccak256`以启用Keccak-256哈希算法;反之,若您的合约需要部署至国密FISCO BCOS区块链平台,则您需要指定`hash_type``sm3`以启用国密SM3哈希算法。`hash_type`属性是可选的,当您没有提供时,Liquid默认将`hash_type`设置为`keccak256`

Expand Down
2 changes: 1 addition & 1 deletion docs/quick_start/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

Liquid是一种[嵌入式领域特定语言](http://wiki.haskell.org/Embedded_domain_specific_language)(embedded Domain-Specific Language,eDSL),其特性可以从下列两个方面理解:

- **领域特定语言**:领域特定语言是指专用于某个应用程序领域的计算机语言。与能够被应用在各个领域的通用编程语言(如C++、Java等)不同,Liquid被设计为专注为区块链底层平台FISCO BCOS编写能够被编译为[WebAssembly](https://webassembly.org/)(Wasm)字节码格式的智能合约。使用Liquid编写的智能合约能够在内置有Wasm虚拟机的FISCO BCOS区块链节点上运行。
- **领域特定语言**:领域特定语言是指专用于某个应用程序领域的计算机语言。与能够被应用在各个领域的通用编程语言(如C++、Java等)不同,Liquid是专为区块链底层平台FISCO BCOS设计的、用于编写能够被编译为[Wasm](https://webassembly.org/)字节码格式的智能合约的语言。使用Liquid编写的智能合约能够在内置有Wasm虚拟机的FISCO BCOS区块链节点上运行。

- **嵌入式**:Liquid没有设计新的语法,而是将自身“嵌入”在通用编程语言[Rust](https://www.rust-lang.org/)中,即Rust语言是Liquid的宿主语言。Liquid对Rust语言的部分语法进行了重新诠释,从而能够借助Rust语言来方便地表达智能合约特有的语义。使用Liquid编写的应用程序,本身也是合法的Rust程序,能够使用现有Rust标准工具链进行编译、优化。

Expand Down
2 changes: 1 addition & 1 deletion docs/quick_start/prerequisite.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ make -j4

## 部署Node.js SDK

目前仅有FISCO BCOS Node.js SDK提供的CLI命令行工具支持以Wasm字节码格式的形式部署合约,因此,需要您在本地部署该SDK。部署方式可参考[Node.js SDK文档](https://github.com/FISCO-BCOS/nodejs-sdk/blob/master/README.md)。但需要注意的是,部署Wasm字节码合约功能同样未合入主干版本。因此在部署过程中,当您克隆了Node.js SDK的源码后,需要手动切换到`wasm`分支,即按照如下方式操作:
目前仅有FISCO BCOS Node.js SDK提供的CLI命令行工具支持以Wasm字节码格式的形式部署合约,因此,需要您在本地部署该SDK。部署方式可参考[Node.js SDK文档](https://github.com/FISCO-BCOS/nodejs-sdk#fisco-bcos-nodejs-sdk)。但需要注意的是,部署Wasm字节码合约功能同样未合入主干版本。因此在部署过程中,当您克隆了Node.js SDK的源码后,需要手动切换到`wasm`分支,即按照如下方式操作:

```bash
# 下列步骤来自于https://github.com/FISCO-BCOS/nodejs-sdk/blob/master/README.md#%E4%BA%8Ccli%E5%B7%A5%E5%85%B7
Expand Down

0 comments on commit d37f3c9

Please sign in to comment.