3.2 库 (Libraries)
Libraries in Sway are files used to define new common behavior. The most prominent example of this is the Sway Standard Library that is made implicitly available to all Forc projects created using forc new
.
编写库 (Writing Libraries)
Libraries are defined using the library
keyword at the beginning of a file, followed by a name so that they can be imported.
库的定义是在文件的开头使用library
关键字,后面跟一个名字,这们就可以被导入。
A good reference library to use when learning library design is the Sway Standard Library. For example, the standard library offers an implementation of enum Option<T>
which is a generic type that represents either the existence of a value using the variant Some(..)
or a value's absence using the variant None
. The Sway file implementing Option<T>
has the following structure:
在学习库的设计时,有一个很好的参考:Sway标准库。例如,标准库提供了一个enum Option<T>
的实现,它是一个通用类型,使用变量Some(..)
表示一个值的存在,或者使用变量None
表示一个值的不存在。实现Option<T>
的Sway文件有以下结构:
The
library
keyword:library
关键字:
A
use
statement that importsrevert
from another library inside the standard library: 从标准库以外的另一个库中导入revert
的use
语句:
The
enum
definition which starts with the keywordpub
to indicate that thisOption<T>
is publically available outside theoption
library: 以关键字pub
开始的enum
定义,表明这个Option<T>
在Option
库之外是公开可用的:
An
impl
block that implements some methods forOption<T>
: 实现了Option<T>
的一些方法的一个impl
区块,:
Now that the library option
is fully written, and because Option<T>
is defined with the pub
keyword, we are now able to import Option<T>
using use std::option::Option;
from any Sway project and have access to all of its variants and methods. That being said, Option
is automatically available in the standard library prelude so you never actually have to import it manually.
现在库option
已经完全编好了,而且因为Option<T>
是用pub
关键字定义的,我们现在可以使用use std::option::Option;
从任何Sway项目中导入Option<T>
,并可以访问它的所有变体和方法。也就是说,Option
在标准库前置条件中是自动可用的,所以你实际上从来不需要手动导入它。
Libraries are composed of just a Forc.toml
file and a src
directory, unlike contracts which usually contain a tests
directory and a Cargo.toml
file as well. An example of a library's Forc.toml
:
库只由一个Forc.toml
文件和一个src
目录组成,不像合约通常包含一个tests
目录和一个Cargo.toml
文件。以一个库的 Forc.toml
为例:
which denotes the authors, an entry file, the name by which it can be imported, and any dependencies.
说明了作者,一个入口文件,可以被导入的名称,以及任何依赖。
For large libraries, it is recommended to have a lib.sw
entry point re-export all other sub-libraries.
对于大型的库,建议有一个lib.sw
入口点来重新输出所有其他子库。
The mod
keyword registers a submodule, making its items (such as functions and structs) accessible from the parent library. If used at the top level it will refer to a file in the src
folder and in other cases in a folder named after the library in which it is defined.
mod
关键字注册了一个子模块,使其项目(如函数和结构)可以从父库中访问。如果在顶层使用,它将指向src
文件夹中的一个文件,在其他情况下则指向以其定义的库来命名的文件夹。
For example, the lib.sw
of the standard library looks like:
例如,标准库的lib.sw
看起来像:
with other libraries contained in the src
folder, like the vm library (inside of src/vm.sw
):
与其他包含在 src
文件夹中的库,如vm库(在 "src/vm.sw "内):
and it's own sub-library evm located in src/vm/evm.sw
:
和它自己的子库evm,位于src/vm/evm.sw
中:
使用库 (Using Libraries)
There are two types of Sway libraries, based on their location and how they can be imported.
根据位置和其导入方式,共计有两种类型的Sway库,
内部库 (Internal Libraries)
Internal libraries are located within the project's src
directory alongside main.sw
or in the appropriate folders as shown below:
内部库位于项目的src
目录下,与main.sw
并列,或位于适当的文件夹中,如下所示:
As internal_lib
is an internal library, it can be imported into main.sw
as follows:
由于internal_lib
是一个内部库,它可以被导入到main.sw
中,方法如下:
Use the
mod
keyword followed by the library name to make the internal library a dependancy 使用mod
关键字,后面跟上库的名字,使内部库成为依赖Use the
use
keyword with a::
separating the name of the library and the imported item(s) 使用use
关键字,用::
分隔库名和导入的项目。
外部库 (External Libraries)
External libraries are located outside the main src
directory as shown below:
外部库位于主src
目录之外,如下所示:
As external_lib
is outside the src
directory of my_project
, it needs to be added as a dependency in the Forc.toml
file of my_project
, by adding the library path in the dependencies
section as shown below, before it can be imported:
由于 external_lib
在 my_project
的 src
目录之外,它需要在 my_project
的 Forc.toml
文件中被添加为一个依赖,在 dependencies
部分添加库的路径,才能被导入,如下图所示,:
Once the library dependency is added to the toml
file, you can import items from it as follows:
一旦库的依赖被添加到toml
文件中,你就可以按以下方式导入项目:
Make sure the item you want imported are declared with the
pub
keyword (if applicable, for instance:pub fn mint() {}
) 确保你想导入的项目是用pub
关键字声明的(如果适用,例如:pub fn mint() {}
)Use the
use
keyword to selectively import items from the library 使用use
关键字,有选择地从库中导入项目
Wildcard imports using *
are supported, but it is generally recommended to use explicit imports where possible.
支持使用*
的通配符导入,但一般建议尽可能使用显式/明确导入。
Note: the standard library is implicitly available to all Forc projects, that is, you are not required to manually specify
std
as an explicit dependency inForc.toml
. 注意:标准库对所有Forc项目都是隐式的,也就是说,你不需要在Forc.toml
中手动指定std
作为显式依赖。
参考Sway库 (Reference Sway Libraries)
The repository sway-libs
is a collection of external libraries that you can import and make use of in your Fuel applications. These libraries are meant to be learning references of common use-cases valuable for dapp development.
sway-libs
库是一个外部库的集合,你可以在你的Fuel应用中导入和使用。这些库的目的是为了学习参考对DApp开发有价值的常见用例。
Some Sway Libraries to try out: 一些可以尝试的Sway库:
示例 (Example)
You can import and use a Sway Library such as the NFT library just like any other external library.
你可以像其他外部库一样导入和使用Sway库,如NFT库。
Once imported, you can use the following basic functionality of the library in your smart contract: 一旦导入,你可以在你的智能合约中使用该库的以下基本功能:
Minting tokens 铸造代币
Transfering tokens 转移代币
Retrieving owner of a token 检索代币的所有者
Approving users to transfer a token 批准用户转让代币
Last updated