1
1
# Ask! 装饰器
2
2
3
- Ask! 提供了一组装饰器来实现智能合约,通过传递参数对象来配置装饰器的行为。目前装饰器注意分为两层: 类装饰器和字段装饰器,字段装饰器必须正确匹配相应的类装饰器。
3
+ Ask! 提供了一组装饰器来实现智能合约,通过传递参数对象来配置装饰器的行为。装饰器主要分为两层, 类装饰器和字段装饰器,字段装饰器必须正确匹配相应的类装饰器。当使用的装饰器不加参数时,可以省略小括号 。
4
4
5
- 当使用的装饰器不加参数时,可以省略小括号` () ` 。
6
-
7
- > 注意:以下的装饰器设计仅适用于当前版本,许多特性还未稳定,可能会在未来变动。
5
+ ** 注意** 以下的装饰器设计仅适用于当前版本,许多特性还未稳定,可能在未来有所变动。
8
6
9
7
## @contract
10
8
11
9
类装饰器
12
10
13
- 装饰的类会自动成为智能合约一个实例。其子字段支持 ` @constructor ` 和 ` @message ` 装饰器装饰。
14
-
15
- 一个 ` AS ` 文件 只能定义一个` @contract ` 类。
11
+ 装饰的类会自动成为智能合约一个实例。其子字段支持 ` @constructor ` 和 ` @message ` 装饰器装饰。一个` AS ` 文件 只能定义一个` @contract ` 类。
16
12
17
13
## @constructor
18
14
19
15
字段装饰器
20
16
21
- 该装饰器用于 ` @contract ` 的非静态 ` public ` 方法 ,该方法不允许返回值( 即返回类型为 ` void ` ) 。装饰的方法作为该合约的一个初始化构造方法。一个合约至少需要定义一个` @constructor ` 方法。
17
+ 该装饰器用于` @contract ` 的非静态public方法 ,该方法不允许返回值, 即返回类型为` void ` 。装饰的方法作为该合约的一个初始化构造方法。一个合约至少需要定义一个` @constructor ` 方法。
22
18
23
19
` @constructor ` 方法是在合约实例化时可执行的。合约可以定义多个构造方法,允许合约的用户以多种不同的方式实例化合约。
24
20
25
21
合约构造方法的配置总是为 ` payable = true ` 和 ` mutates = true ` 。
26
22
27
- Example:
23
+ 示例如下。
28
24
29
25
``` ts
30
26
@contract
@@ -46,12 +42,11 @@ class Flipper {
46
42
47
43
## @doc
48
44
49
- ` @doc ` 用于为` metadata.json ` 生成的信息提供文档。它可以为` @contract ` /` @event ` /` @message ` /` @constructor ` 声明添加文档注释
45
+ ` @doc ` 用于为` metadata.json ` 生成的信息提供文档。它可以为` @contract ` /` @event ` /` @message ` /` @constructor ` 声明添加文档注释。
50
46
51
- Example:
47
+ 示例如下。
52
48
53
49
``` ts
54
-
55
50
@contract
56
51
@doc (desc = " MyToken conract that implement erc20 contract" )
57
52
class MyToken {
@@ -63,16 +58,16 @@ class MyToken {
63
58
64
59
字段装饰器
65
60
66
- 该装饰器用于 ` @contract ` 的 非静态 ` public ` 方法。装饰的方法作为合约的消息 API 供用户调用该合约 。一个合约至少需要定义一个` @constructor ` 方法或者继承了其他合约。
61
+ 该装饰器用于 ` @contract ` 的非静态public方法。装饰的方法作为合约的消息API供用户调用该合约 。一个合约至少需要定义一个` @constructor ` 方法或者继承了其他合约。
67
62
68
- ` @message ` 方法是在合约执行的被调用的。合约可以定义多个消息方法。消息方法的返回值会返回给用户,因此需要实现` Codec ` 接口。如果你需要返回一些集合类型,那么需要使用 ask ! 提供的一些实现 ` Codec ` 接口的集合类型。
63
+ ` @message ` 方法是在合约执行的被调用的。合约可以定义多个消息方法。消息方法的返回值会返回给用户,因此需要实现` Codec ` 接口。如果您需要返回一些集合类型,那么需要使用Ask ! 提供的一些实现 ` Codec ` 接口的集合类型。
69
64
70
65
合约消息方法默认配置为` payable = false ` 和 ` mutates = true ` ,当配置为` true ` 时,合约会在运行时做相应的检查。
71
66
72
- - ` payable ` 表明方法可以接受 value
73
- - ` mutates ` 表明方法是否能够改变存储变量的值
67
+ - ` payable ` 表示方法可以接受value。
68
+ - ` mutates ` 表示方法是否能够改变存储变量的值。
74
69
75
- Example:
70
+ 示例如下。
76
71
77
72
``` ts
78
73
@contract
@@ -112,23 +107,21 @@ class Flipper {
112
107
113
108
类装饰器
114
109
115
- 详见 [ Event] ( ./basics.md#Events )
110
+ 详情请参见 [ Event] ( ./basics.md#Events ) 。
116
111
117
112
## @topic
118
113
119
114
字段装饰器
120
115
121
- ` @topic ` 装饰的属性字段,会额外生成一个主题索引。每个事件的索引是有数量限制的(默认最大为 4 个 )。
116
+ ` @topic ` 装饰的属性字段,会额外生成一个主题索引。每个事件的索引是有数量限制的(默认最大为4个 )。
122
117
123
118
## @dynamic
124
119
125
120
类装饰器
126
121
127
- ` @dynamic ` 装饰器用来装饰一个合约的 APIs,这个合约已经存在于链上。通过在` @dynamic ` 类里声明链上的合约接口,ask 会自动生成相应的跨合约调用代码。
128
-
129
- Example:
122
+ ` @dynamic ` 装饰器用来装饰一个合约的APIs,这个合约已经存在于链上。通过在` @dynamic ` 类里声明链上的合约接口,Ask会自动生成相应的跨合约调用代码。
130
123
131
- 假设下面的合约 A 已经存在链上:
124
+ 假设下面的合约A已经存在链上。
132
125
133
126
``` ts
134
127
@contract
@@ -145,7 +138,7 @@ class Libadd {
145
138
}
146
139
```
147
140
148
- 我们在合约 B 里面想调用该合约,那么我们可以声明一个 ` @dynamic ` 类来描述其接口:
141
+ 如果想在合约B里面想调用该合约,您可以声明一个 ` @dynamic ` 类来描述其接口。
149
142
150
143
``` ts
151
144
@dynamic
@@ -172,6 +165,6 @@ class LibaddCaller {
172
165
}
173
166
```
174
167
175
- 这里的 outAddress 是合约 Libadd 的实例地址 。
168
+ 这里的` outAddress ` 是合约Libadd的实例地址 。
176
169
177
- 该功能也可以调用其他智能合约语言编写的合约,比如 ink!,只要遵循兼容的 metadata.json 规范 。
170
+ 该功能也可以调用其他智能合约语言编写的合约,例如ink!,只要遵循兼容的metadata.json规范 。
0 commit comments