Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(docs): links in Chinese translation #1206

Merged
merged 2 commits into from
Dec 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Removed the Programmatic API page due to frequent changes. To use the API, please refer to the compiler sources: PR [#1184](https://github.com/tact-lang/tact/pull/1184)
- Added a link to the article by CertiK to Security best practices page: PR [#1185](https://github.com/tact-lang/tact/pull/1185)
- Added a note on `dump()` being computationally expensive: PR [#1189](https://github.com/tact-lang/tact/pull/1189)
- Fixed links in Chinese translation: PR [#1206](https://github.com/tact-lang/tact/pull/1206)

### Release contributors

Expand Down
2 changes: 1 addition & 1 deletion docs/src/content/docs/zh-cn/book/bounced.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ contract MyContract {
}
```

要手动处理被退回的信息,您可以使用回退定义,直接处理原始的 [`Slice{:tact}`](/book/cells#slices)。请注意,这样的接收器将获得由您的合约产生的**所有**被退回的信息:
要手动处理被退回的信息,您可以使用回退定义,直接处理原始的 [`Slice{:tact}`](/zh-cn/book/cells#slices)。请注意,这样的接收器将获得由您的合约产生的**所有**被退回的信息:

```tact /rawMsg: Slice/
contract MyContract {
Expand Down
98 changes: 49 additions & 49 deletions docs/src/content/docs/zh-cn/book/cells.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ title: 细胞、建造者和切片

### Kinds {#cells-kinds}

虽然 [TVM][tvm] 类型 [`单元格{:tact}`](#cells)指的是所有单元格,但有不同的单元格类型,其内存布局也各不相同。 前面描述的单元格(#cells)通常被称为_ordinary_(或 simple)单元格--这是最简单、最常用的单元格,只能包含数据。 绝大多数关于细胞及其用法的描述、指南和[参考文献](/ref/core-cells)都假定细胞是普通的。
虽然 [TVM][tvm] 类型 [`单元格{:tact}`](#cells)指的是所有单元格,但有不同的单元格类型,其内存布局也各不相同。 前面描述的单元格(#cells)通常被称为_ordinary_(或 simple)单元格--这是最简单、最常用的单元格,只能包含数据。 绝大多数关于细胞及其用法的描述、指南和[参考文献](/zh-cn/ref/core-cells)都假定细胞是普通的。

其他类型的细胞统称为_外来细胞_(或特殊细胞)。 它们有时会出现在 TON 区块链上的区块和其他数据结构的实际表示中。 它们的内存布局和用途与普通电池大不相同。

Expand All @@ -21,7 +21,7 @@ title: 细胞、建造者和切片
[TVM][tvm]目前支持以下奇异细胞子类型:

- [剪枝单元格][c-pruned],子类型编码为 $1$ - 它们代表删除的单元格子树。
- [图书馆引用单元][c-library],子类型编码为 $2$ - 它们用于存储图书馆,通常在[masterchain](/book/masterchain)上下文中使用。
- [图书馆引用单元][c-library],子类型编码为 $2$ - 它们用于存储图书馆,通常在[masterchain](/zh-cn/book/masterchain)上下文中使用。
- [梅克尔证明单元][c-mproof],子类型编码为 $3$ - 它们用于验证其他单元的树数据的某些部分是否属于完整树。
- [梅克尔更新单元][c-mupdate],子类型编码为 $4$ - 它们总是有两个引用,对这两个引用的行为类似于[梅克尔证明][mproof]。

Expand Down Expand Up @@ -63,7 +63,7 @@ title: 细胞、建造者和切片

最后,为每个参考单元存储其标准表示的[SHA-256][sha-2] 哈希值,每个参考单元占用 $32$ 字节,并递归重复上述算法。 请注意,不允许循环引用单元格,因此递归总是以定义明确的方式结束。

如果我们要计算这个单元格的标准表示的哈希值,就需要将上述步骤中的所有字节连接在一起,然后使用 [SHA-256][sha-2] 哈希值进行散列。 这是[TVM][tvm]的[`HASHCU`和`HASHSU`指令](https://docs.ton.org/learn/tvm-instructions/instructions)以及 Tact 的[`Cell.hash(){:tact}`](/ref/core-cells#cellhash)和[`Slice.hash(){:tact}`](/ref/core-cells#slicehash)函数背后的算法。
如果我们要计算这个单元格的标准表示的哈希值,就需要将上述步骤中的所有字节连接在一起,然后使用 [SHA-256][sha-2] 哈希值进行散列。 这是[TVM][tvm]的[`HASHCU`和`HASHSU`指令](https://docs.ton.org/learn/tvm-instructions/instructions)以及 Tact 的[`Cell.hash(){:tact}`](/zh-cn/ref/core-cells#cellhash)和[`Slice.hash(){:tact}`](/zh-cn/ref/core-cells#slicehash)函数背后的算法。

#### Bag of Cells {#cells-boc}

Expand Down Expand Up @@ -122,10 +122,10 @@ title: 细胞、建造者和切片

## Serialization types

与 [`Int{:tact}`](/book/integers)类型的序列化选项类似,`Cell{:tact}`、`Builder{:tact}` 和`Slice{:tact}` 在以下情况下也有不同的值编码方式:
与 [`Int{:tact}`](/zh-cn/book/integers)类型的序列化选项类似,`Cell{:tact}`、`Builder{:tact}` 和`Slice{:tact}` 在以下情况下也有不同的值编码方式:

- 作为 [contracts](/book/contracts) 和 [traits](/book/types#traits) 的 [storage variables](/book/contracts#variables) 、
- 以及 [Structs](/book/structs and-messages#structs) 和 [Messages](/book/structs and-messages#messages) 的字段。
- 作为 [contracts](/zh-cn/book/contracts) 和 [traits](/zh-cn/book/types#traits) 的 [storage variables](/zh-cn/book/contracts#variables) 、
- 以及 [Structs](/zh-cn/book/structs and-messages#structs) 和 [Messages](/zh-cn/book/structs and-messages#messages) 的字段。

```tact {2-3}
contract SerializationExample {
Expand Down Expand Up @@ -201,9 +201,9 @@ receive(msg: JettonTransferNotification) {

:::note

注意,通过 `as remaining{:tact}` 序列化的单元格不能是 [可选](/book/optionals)。 也就是说,指定类似 `Cell? as remaining{:tact}`, `Builder? 作为剩余{:tact}` 或 `切片? 剩余的{:tact}` 会导致编译错误。
注意,通过 `as remaining{:tact}` 序列化的单元格不能是 [可选](/zh-cn/book/optionals)。 也就是说,指定类似 `Cell? as remaining{:tact}`, `Builder? 作为剩余{:tact}` 或 `切片? 剩余的{:tact}` 会导致编译错误。

另外请注意,将 `Cell{:tact}` 指定为[map](/book/maps) 值类型的 `remaining{:tact}` 会被视为错误,无法编译。
另外请注意,将 `Cell{:tact}` 指定为[map](/zh-cn/book/maps) 值类型的 `remaining{:tact}` 会被视为错误,无法编译。

:::

Expand All @@ -229,7 +229,7 @@ receive(msg: JettonTransferNotification) {

在 Tact 中,至少有两种构建和解析单元格的方法:

- [手动](#cnp-manually),其中涉及积极使用[`Builder{:tact}`](#builders)、[`Slice{:tact}`](#slices)和[相关方法](/ref/core-cells)。
- [手动](#cnp-manually),其中涉及积极使用[`Builder{:tact}`](#builders)、[`Slice{:tact}`](#slices)和[相关方法](/zh-cn/ref/core-cells)。
- [使用结构体](#cnp-structs),这是一种值得推荐且更加方便的方法。

#### Manually {#cnp-manually}
Expand All @@ -246,30 +246,30 @@ receive(msg: JettonTransferNotification) {
| [`.storeRef(cell){:tact}`][b-8] | [`Slice.loadRef(){:tact}`][s-8] |
| [`.endCell(){:tact}`][b-9] | [`Slice.endParse(){:tact}`][s-9] |

[b-1]: /ref/core-cells#begincell
[b-2]: /ref/core-cells#builderstoreuint
[b-3]: /ref/core-cells#builderstoreint
[b-4]: /ref/core-cells#builderstorebool
[b-5]: /ref/core-cells#builderstoreslice
[b-6]: /ref/core-cells#builderstorecoins
[b-7]: /ref/core-cells#builderstoreaddress
[b-8]: /ref/core-cells#builderstoreref
[b-9]: /ref/core-cells#builderendcell
[s-1]: /ref/core-cells#cellbeginparse
[s-2]: /ref/core-cells#sliceloaduint
[s-3]: /ref/core-cells#sliceloadint
[s-4]: /ref/core-cells#sliceloadbool
[s-5]: /ref/core-cells#sliceloadbits
[s-6]: /ref/core-cells#sliceloadcoins
[s-7]: /ref/core-cells#sliceloadaddress
[s-8]: /ref/core-cells#sliceloadref
[s-9]: /ref/core-cells#sliceendparse
[b-1]: /zh-cn/ref/core-cells#begincell
[b-2]: /zh-cn/ref/core-cells#builderstoreuint
[b-3]: /zh-cn/ref/core-cells#builderstoreint
[b-4]: /zh-cn/ref/core-cells#builderstorebool
[b-5]: /zh-cn/ref/core-cells#builderstoreslice
[b-6]: /zh-cn/ref/core-cells#builderstorecoins
[b-7]: /zh-cn/ref/core-cells#builderstoreaddress
[b-8]: /zh-cn/ref/core-cells#builderstoreref
[b-9]: /zh-cn/ref/core-cells#builderendcell
[s-1]: /zh-cn/ref/core-cells#cellbeginparse
[s-2]: /zh-cn/ref/core-cells#sliceloaduint
[s-3]: /zh-cn/ref/core-cells#sliceloadint
[s-4]: /zh-cn/ref/core-cells#sliceloadbool
[s-5]: /zh-cn/ref/core-cells#sliceloadbits
[s-6]: /zh-cn/ref/core-cells#sliceloadcoins
[s-7]: /zh-cn/ref/core-cells#sliceloadaddress
[s-8]: /zh-cn/ref/core-cells#sliceloadref
[s-9]: /zh-cn/ref/core-cells#sliceendparse

#### Using Structs {#cnp-structs}

[结构][struct]和[消息][messages]几乎就是活生生的[TL-B 模式][tlb]。 也就是说,它们本质上是用可维护、可验证和用户友好的 Tact 代码表达的[TL-B 模式][tlb]。

强烈建议使用它们及其 [方法](/book/functions#extension-function),如 [`Struct.toCell(){:tact}`][st-tc]和 [`Struct.fromCell(){:tact}`][st-fc],而不是手动构造和解析单元格,因为这样可以得到更多声明性和不言自明的合约。
强烈建议使用它们及其 [方法](/zh-cn/book/functions#extension-function),如 [`Struct.toCell(){:tact}`][st-tc]和 [`Struct.fromCell(){:tact}`][st-fc],而不是手动构造和解析单元格,因为这样可以得到更多声明性和不言自明的合约。

[上文](#cnp-manually)的手动解析示例可以使用[Structs][struct]重新编写,如果愿意,还可以使用字段的描述性名称:

Expand Down Expand Up @@ -313,7 +313,7 @@ fun example() {

:::note[Useful links:]

[Convert serialization](/book/func#convert-serialization)
[Convert serialization](/zh-cn/book/func#convert-serialization)
[`Struct.toCell(){:tact}` 在核心库中][st-tc]
[`Struct.fromCell(){:tact}` 在核心库中][st-fc]
[`Struct.fromSlice(){:tact}` 在核心库中][st-fs]
Expand All @@ -323,20 +323,20 @@ fun example() {

:::

[st-tc]: /ref/core-cells#structtocell
[st-fc]: /ref/core-cells#structfromcell
[st-fs]: /ref/core-cells#structfromslice
[msg-tc]: /ref/core-cells#messagetocell
[msg-fc]: /ref/core-cells#messagefromcell
[msg-fs]: /ref/core-cells#messagefromslice
[st-tc]: /zh-cn/ref/core-cells#structtocell
[st-fc]: /zh-cn/ref/core-cells#structfromcell
[st-fs]: /zh-cn/ref/core-cells#structfromslice
[msg-tc]: /zh-cn/ref/core-cells#messagetocell
[msg-fc]: /zh-cn/ref/core-cells#messagefromcell
[msg-fs]: /zh-cn/ref/core-cells#messagefromslice

### Check if empty {#operations-empty}

[`Cell{:tact}`](#cells)和[`Builder{:tact}`](#builders)都不能直接检查空性,需要先将它们转换为[`Slice{:tact}`](#slices)。

要检查是否有任何位,请使用[`Slice.dataEmpty(){:tact}`][s-de]。要检查是否存在引用,请使用[`Slice.refsEmpty(){:tact}`][s-re]。要同时检查这两项,请使用[`Slice.empty(){:tact}`][s-e]。

如果[`Slice{:tact}`](#slices)不完全为空,也要抛出[exit code 9](/book/exit-codes#9),请使用[`Slice.endParse(){:tact}`][s-ep]。
如果[`Slice{:tact}`](#slices)不完全为空,也要抛出[exit code 9](/zh-cn/book/exit-codes#9),请使用[`Slice.endParse(){:tact}`][s-ep]。

```tact
// 准备工作
Expand Down Expand Up @@ -370,19 +370,19 @@ try {

:::note[Useful links:]

[`Cell.asSlice(){:tact}` 在核心库中](/ref/core-cells#cellasslice)\
[`Builder.asSlice(){:tact}` 在核心库中](/ref/core-cells#builderasslice)\
[`Cell.asSlice(){:tact}` 在核心库中](/zh-cn/ref/core-cells#cellasslice)\
[`Builder.asSlice(){:tact}` 在核心库中](/zh-cn/ref/core-cells#builderasslice)\
[`Slice.dataEmpty(){:tact}` 在核心库中][s-de]\
[`Slice.refsEmpty(){:tact}` 在核心库中][s-re]\
[`Slice.empty(){:tact}` 在核心库中][s-e]\
[`Slice.endParse(){:tact}` 在核心库中][s-ep]

:::

[咝--咝]: /ref/core-cells#slicedataempty
[re]: /ref/core-cells#slicerefsempty
[s-e]: /ref/core-cells#sliceempty
[s-ep]: /ref/core-cells#sliceendparse
[咝--咝]: /zh-cn/ref/core-cells#slicedataempty
[re]: /zh-cn/ref/core-cells#slicerefsempty
[s-e]: /zh-cn/ref/core-cells#sliceempty
[s-ep]: /zh-cn/ref/core-cells#sliceendparse

### Check if equal {#operations-equal}

Expand Down Expand Up @@ -424,21 +424,21 @@ let areSlicesNotEqual = aSlice.hash() != bSlice.hash(); // false

:::note[Useful links:]

[核心库中的 `Cell.hash(){:tact}`](/ref/core-cells#cellhash)/
[核心库中的 `Slice.hash(){:tact}`](/ref/core-cells#slicehash)/
[核心库中的 `Cell.hash(){:tact}`](/zh-cn/ref/core-cells#cellhash)/
[核心库中的 `Slice.hash(){:tact}`](/zh-cn/ref/core-cells#slicehash)/
[`=={:tact}`和`!={:tact}`][bin-eq]。

:::

[p]: /book/types#primitive-types
[struct]: /book/structs-and-messages#structs
[message]: /book/structs-and-messages#messages
[recv]: /book/contracts#receiver-functions
[p]: /zh-cn/book/types#primitive-types
[struct]: /zh-cn/book/structs-and-messages#structs
[message]: /zh-cn/book/structs-and-messages#messages
[recv]: /zh-cn/book/contracts#receiver-functions

[tvm]: https://docs.ton.org/learn/tvm-instructions/tvm-overview
[tlb]: https://docs.ton.org/develop/data-formats/tl-b-language
[jetton]: https://docs.ton.org/develop/dapps/asset-processing/jettons
[sha-2]: https://en.wikipedia.org/wiki/SHA-2#Hash_standard

[quadtree]: https://en.wikipedia.org/wiki/Quadtree
[bin-eq]: /book/operators#binary-equality
[bin-eq]: /zh-cn/book/operators#binary-equality
16 changes: 8 additions & 8 deletions docs/src/content/docs/zh-cn/book/config.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -144,15 +144,15 @@ title: 配置

:::note

更多信息,请访问专用页面:[调试](/book/debug)。
更多信息,请访问专用页面:[调试](/zh-cn/book/debug)。

:::

#### `masterchain` {#options-masterchain}

默认为 `false{:json}`。

如果设置为 `true{:json}`,则启用 [masterchain](/book/masterchain) 支持。
如果设置为 `true{:json}`,则启用 [masterchain](/zh-cn/book/masterchain) 支持。

```json filename="tact.config.json" {8,14}
{
Expand All @@ -177,15 +177,15 @@ title: 配置

:::note

更多信息,请访问专用页面:[大师链](/book/masterchain)。
更多信息,请访问专用页面:[大师链](/zh-cn/book/masterchain)。

:::

#### `external` {#options-external}

默认为 `false{:json}`。

如果设置为 `true{:json}`,则启用对 [external](/book/external) 消息接收器的支持。
如果设置为 `true{:json}`,则启用对 [external](/zh-cn/book/external) 消息接收器的支持。

```json filename="tact.config.json" {8,14}
{
Expand All @@ -210,15 +210,15 @@ title: 配置

:::note

更多信息,请访问专用页面:[外部信息](/book/external)。
更多信息,请访问专用页面:[外部信息](/zh-cn/book/external)。

:::

#### `ipfsAbiGetter` {#options-ipfsabigetter}

默认为 `false{:json}`。

如果设置为 `true{:json}`,则可生成带有描述合同 ABI 的 IPFS 链接的[getter](/book/contracts#getter-functions)。
如果设置为 `true{:json}`,则可生成带有描述合同 ABI 的 IPFS 链接的[getter](/zh-cn/book/contracts#getter-functions)。

```json filename="tact.config.json" {8,14}
{
Expand All @@ -243,7 +243,7 @@ title: 配置

:::note

在专用网页上阅读更多信息:[OTP-003:自我 ABI 报告](/ref/evolution/otp-003)。
在专用网页上阅读更多信息:[OTP-003:自我 ABI 报告](/zh-cn/ref/evolution/otp-003)。

:::

Expand Down Expand Up @@ -276,7 +276,7 @@ title: 配置

:::note

了解更多信息:[支持的接口](/book/contracts#interfaces)。
了解更多信息:[支持的接口](/zh-cn/book/contracts#interfaces)。

:::

Expand Down
2 changes: 1 addition & 1 deletion docs/src/content/docs/zh-cn/book/constants.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ contract MyContract {
}
```

## 虚拟常量和抽象常量
## 虚拟常量和抽象常量 {#virtual-and-abstract-constants}

虚拟常量是可以在特质中定义但在合约中改变的常量。 当您需要在编译时配置某些特征时,它非常有用。 让我们定义一个虚拟常量和一个抽象常量:

Expand Down
Loading
Loading