diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..084d75e --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# build spec + +open-spec + +# Dependencies +/node_modules + +# Production +/build + +# Generated files +.docusaurus +.cache-loader + +# Misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* +package-lock.json +.vercel +.env*.local diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..c27d889 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +lint-staged diff --git a/README.md b/README.md index 2a7d407..1e45ff7 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ pnpm install pnpm build ``` -这在首次克隆仓库时是必需的,因为它将[下载OpenRPC规范]((/docs/site/src/utils/getopenrpcspecs.js)),这是部署站点所必需的。 +这在首次克隆仓库时是必需的,因为它将[下载 OpenRPC 规范]((/docs/site/src/utils/getopenrpcspecs.js)),这是部署站点所必需的。 接下来,使用以下命令将站点的开发预览部署到 `localhost:3000`: @@ -28,17 +28,17 @@ pnpm start 完成更改后,再次运行 `pnpm build`,这将构建静态站点并将文件放置在 `site\build` 中。在提交更改进行审查之前运行此命令很重要,因为构建将在诸如坏的内部链接之类的错误上失败,并将错误原因显示到控制台。开发预览会忽略此类错误,以提供更灵活的环境。 -Sui Foundation 无法提供本地构建文档站点的支持。如果遇到问题,请查阅 [Docusaurus文档](https://docusaurus.io/)。 +Sui Foundation 无法提供本地构建文档站点的支持。如果遇到问题,请查阅 [Docusaurus 文档](https://docusaurus.io/)。 ## 拉取请求 -Sui使用Vercel来托管其文档站点。Vercel为每个提交到Sui仓库的拉取请求构建文档的预览。你可以在 Vercel 机器人的 PR 注释部分找到指向此预览的链接。点击 **Visit Preview** 链接以验证你的更改是否按你的期望进行。 +Sui 使用 Vercel 来托管其文档站点。Vercel 为每个提交到 Sui 仓库的拉取请求构建文档的预览。你可以在 Vercel 机器人的 PR 注释部分找到指向此预览的链接。点击 **Visit Preview** 链接以验证你的更改是否按你的期望进行。 -如果你想在准备好进行审查之前查看Vercel预览,那么[请将你的 PR 标记为草稿](https://github.blog/2019-02-14-introducing-draft-pull-requests/)。 +如果你想在准备好进行审查之前查看 Vercel 预览,那么[请将你的 PR 标记为草稿](https://github.blog/2019-02-14-introducing-draft-pull-requests/)。 ## 贡献 -Sui是为社区而设。为了所有人的利益做出贡献。 +Sui 是为社区而设。为了所有人的利益做出贡献。 - [文档贡献指南](https://docs.sui.io/references/contribute/contribution-process) - [仓库贡献指南](https://docs.sui.io/contribute-to-sui-repos) @@ -48,4 +48,4 @@ Sui是为社区而设。为了所有人的利益做出贡献。 ## License -Sui文档在 [LICENSE](CC BY 4.0 license) 下分发。 +Sui 文档在 [LICENSE](CC BY 4.0 license) 下分发。 diff --git a/content/concepts.mdx b/content/concepts.mdx index 37ccf73..986232c 100644 --- a/content/concepts.mdx +++ b/content/concepts.mdx @@ -5,7 +5,7 @@ sidebar_label: 概览 import { Card, Cards } from '../site/src/components/Cards'; -在Sui区块链上,标准是你可以扩展或自定义的功能、框架或应用程序。 +在 Sui 区块链上,标准是你可以扩展或自定义的功能、框架或应用程序。 diff --git a/content/concepts/components.mdx b/content/concepts/components.mdx index 205965c..3d7e07a 100644 --- a/content/concepts/components.mdx +++ b/content/concepts/components.mdx @@ -2,23 +2,23 @@ title: Sui 的组成部分 --- -Sui 这个名称在英语中发音为 `swē`,源自日语中表示水元素的一个词汇。你可以在区块链的名称、其本地代币元素 (SUI和MIST) ,以及其品牌形象中看到这种影响。 +Sui 这个名称在英语中发音为 `swē`,源自日语中表示水元素的一个词汇。你可以在区块链的名称、其本地代币元素 (SUI 和 MIST) ,以及其品牌形象中看到这种影响。 -在本文档中,当提到Sui时,指的是构成该区块链系统的所有部分。这包括区块链本身、其各种网络(例如Mainnet)、区块链上的活动(交易块)、验证此活动的分布式实体(验证器)以及执行交易块的全节点。文档将所有这些元素的整体称为Sui平台,或简称Sui。 +在本文档中,当提到 Sui 时,指的是构成该区块链系统的所有部分。这包括区块链本身、其各种网络(例如 Mainnet)、区块链上的活动(交易块)、验证此活动的分布式实体(验证器)以及执行交易块的全节点。文档将所有这些元素的整体称为 Sui 平台,或简称 Sui。 ## Sui 区块链 -Sui被定义为Layer 1协议的区块链。简而言之,这意味着Sui在其网络上使用自己的本地代币(在这种情况下是SUI)执行交易块(活动)的一致性和验证。以太坊(ETH)和比特币(BTC)是Layer 1区块链的其他示例。 +Sui 被定义为 Layer 1 协议的区块链。简而言之,这意味着 Sui 在其网络上使用自己的本地代币(在这种情况下是 SUI)执行交易块(活动)的一致性和验证。以太坊(ETH)和比特币(BTC)是 Layer 1 区块链的其他示例。 -相比之下,Layer 2区块链利用Layer 1网络的基础设施,依赖于Layer 1区块链来完成交易块。Polygon (MATIC) 是扩展以太坊的Layer 2区块链的一个示例。 +相比之下,Layer 2 区块链利用 Layer 1 网络的基础设施,依赖于 Layer 1 区块链来完成交易块。Polygon (MATIC) 是扩展以太坊的 Layer 2 区块链的一个示例。 ## SUI 代币 -Sui的本地代币是SUI。每当文档提到SUI(全大写字母),都指的是这个代币。Sui上的交易块通常涉及到一个SUI值的小部分。为了更方便地处理这些交易块,Sui提供了MIST。一亿MIST等于一个SUI。 +Sui 的本地代币是 SUI。每当文档提到 SUI(全大写字母),都指的是这个代币。Sui 上的交易块通常涉及到一个 SUI 值的小部分。为了更方便地处理这些交易块,Sui 提供了 MIST。一亿 MIST 等于一个 SUI。 -一切都有成本,区块链交易也不例外。提供计算能力来处理交易块并存储其结果是需要花费的。处理交易块的成本术语是“gas”。你使用区块链的本地代币,这种情况下是SUI(或MIST),支付gas和存储数据的成本。 +一切都有成本,区块链交易也不例外。提供计算能力来处理交易块并存储其结果是需要花费的。处理交易块的成本术语是“gas”。你使用区块链的本地代币,这种情况下是 SUI(或 MIST),支付 gas 和存储数据的成本。 -要了解有关Sui代币经济学的更多信息,请参阅以下主题: +要了解有关 Sui 代币经济学的更多信息,请参阅以下主题: - [Sui 代币经济学](./tokenomics.mdx) - [Sui 代币](./tokenomics/sui-token.mdx) @@ -27,29 +27,29 @@ Sui的本地代币是SUI。每当文档提到SUI(全大写字母),都指 ## 委托权益证明共识 -Sui使用委托权益证明(DPoS)共识机制来验证链上的交易块。这意味着Sui网络上的验证器必须在Sui Mainnet上拥有一定数量的SUI,可以是他们自己的资金,也可以是与Sui基金会合作,以证明他们对区块链安全性的兴趣。这种方法使所有验证器的兴趣与Sui用户的兴趣(高效、安全的区块链)保持一致,而无需像早期区块链那样对能源资源的高需求。 +Sui 使用委托权益证明(DPoS)共识机制来验证链上的交易块。这意味着 Sui 网络上的验证器必须在 Sui Mainnet 上拥有一定数量的 SUI,可以是他们自己的资金,也可以是与 Sui 基金会合作,以证明他们对区块链安全性的兴趣。这种方法使所有验证器的兴趣与 Sui 用户的兴趣(高效、安全的区块链)保持一致,而无需像早期区块链那样对能源资源的高需求。 -要了解有关Sui共识的更多信息,请参阅以下指南和主题: +要了解有关 Sui 共识的更多信息,请参阅以下指南和主题: - [验证器委员会](guides/operator/validator-committee.mdx) -- [Sui全节点数据管理](guides/operator/data-management.mdx) +- [Sui 全节点数据管理](guides/operator/data-management.mdx) ## Sui 网络 -Sui有几个网络可用,每个网络都具有不同的用途。 +Sui 有几个网络可用,每个网络都具有不同的用途。 -- **Mainnet:** 处理生产交易块的网络。当你交易SUI或最终基于法定货币的NFT时,你是在Sui的Mainnet网络上进行的。 -- **Testnet:** 作为一个分阶段网络,提供质量保证,确保对Sui的任何计划更改不会对性能产生不利影响。开发人员可以使用此网络在将其代码投入生产之前测试其代码。 -- **Devnet:** 一个更不稳定的网络,用于开发新功能。开发人员可以利用此网络编写针对Sui最新计划功能的代码。 -- **Localnet:** 你可以在本地计算机上运行Sui网络。在受控制的环境中,使用本地网络进行开发提供了一种优化的工作流程。 +- **Mainnet:** 处理生产交易块的网络。当你交易 SUI 或最终基于法定货币的 NFT 时,你是在 Sui 的 Mainnet 网络上进行的。 +- **Testnet:** 作为一个分阶段网络,提供质量保证,确保对 Sui 的任何计划更改不会对性能产生不利影响。开发人员可以使用此网络在将其代码投入生产之前测试其代码。 +- **Devnet:** 一个更不稳定的网络,用于开发新功能。开发人员可以利用此网络编写针对 Sui 最新计划功能的代码。 +- **Localnet:** 你可以在本地计算机上运行 Sui 网络。在受控制的环境中,使用本地网络进行开发提供了一种优化的工作流程。 要了解有关这些网络以及如何与它们交互的更多信息,请参阅以下指南: -- [创建本地Sui网络](guides/developer/getting-started/local-network.mdx) -- [连接到Sui](guides/developer/getting-started/connect.mdx) +- [创建本地 Sui 网络](guides/developer/getting-started/local-network.mdx) +- [连接到 Sui](guides/developer/getting-started/connect.mdx) ## Move -Move语言为Sui上的所有活动提供逻辑,如交易NFT、玩Sui集成的游戏(dApps)以及所有其他基于交易的事件。Sui平台采用了早期区块链不同的概念,其中链上的块实际上是定义资产的对象,而不是定义地址的简单键值存储。对象固有的增强可编程性要求更强大的逻辑引擎,以最大程度地发挥这种区块链技术的新方法的好处。 +Move 语言为 Sui 上的所有活动提供逻辑,如交易 NFT、玩 Sui 集成的游戏(dApps)以及所有其他基于交易的事件。Sui 平台采用了早期区块链不同的概念,其中链上的块实际上是定义资产的对象,而不是定义地址的简单键值存储。对象固有的增强可编程性要求更强大的逻辑引擎,以最大程度地发挥这种区块链技术的新方法的好处。 -要了解有关Move的更多信息,请参阅 [Move概念](./sui-move-concepts.mdx)。 +要了解有关 Move 的更多信息,请参阅 [Move 概念](./sui-move-concepts.mdx)。 diff --git a/content/concepts/cryptography.mdx b/content/concepts/cryptography.mdx index cb3396b..10e6bde 100644 --- a/content/concepts/cryptography.mdx +++ b/content/concepts/cryptography.mdx @@ -2,14 +2,14 @@ title: 加密学 --- -密码学的灵活性是Sui的核心。该系统支持多种密码算法和原语,并能够快速切换其中。使用Sui,你可以为你的系统选择合适的密码解决方案,并在最新算法推出时实施它们。 +密码学的灵活性是 Sui 的核心。该系统支持多种密码算法和原语,并能够快速切换其中。使用 Sui,你可以为你的系统选择合适的密码解决方案,并在最新算法推出时实施它们。 -Sui定义了其密码原语,如公钥、签名、聚合签名和哈希函数,都在一个统一的类型别名或枚举包装器下,这在整个存储库中是共享的。对这些原语进行更改会影响应用程序的所有组件。你可以快速更新应用程序的密码学,并确保统一的安全性。 +Sui 定义了其密码原语,如公钥、签名、聚合签名和哈希函数,都在一个统一的类型别名或枚举包装器下,这在整个存储库中是共享的。对这些原语进行更改会影响应用程序的所有组件。你可以快速更新应用程序的密码学,并确保统一的安全性。 ## 交易身份验证 -Sui上的交易身份验证功能提供了对链上数据的未经授权访问的安全性。请参阅 [交易身份验证](./cryptography/transaction-auth.mdx) 以获取相关主题的概述。 +Sui 上的交易身份验证功能提供了对链上数据的未经授权访问的安全性。请参阅 [交易身份验证](./cryptography/transaction-auth.mdx) 以获取相关主题的概述。 ## zkLogin -zkLogin是Sui的一个原语,使你能够使用OAuth凭据从Sui地址发送交易,而不会公开地将两者关联。请参阅 [zkLogin](./cryptography/zklogin.mdx) 以了解有关该原语以及如何实施它的描述。 +zkLogin 是 Sui 的一个原语,使你能够使用 OAuth 凭据从 Sui 地址发送交易,而不会公开地将两者关联。请参阅 [zkLogin](./cryptography/zklogin.mdx) 以了解有关该原语以及如何实施它的描述。 diff --git a/content/concepts/cryptography/transaction-auth.mdx b/content/concepts/cryptography/transaction-auth.mdx index c7e65d5..6ab4927 100644 --- a/content/concepts/cryptography/transaction-auth.mdx +++ b/content/concepts/cryptography/transaction-auth.mdx @@ -1,26 +1,26 @@ --- title: 交易身份验证 -description: 交易安全性可以说是区块链最重要的特性之一。Sui提供多种功能来保护你的交易,无论是在链上还是离线。 +description: 交易安全性可以说是区块链最重要的特性之一。Sui 提供多种功能来保护你的交易,无论是在链上还是离线。 --- -Sui上的交易身份验证功能提供了对链上数据的未经授权访问的安全性。 +Sui 上的交易身份验证功能提供了对链上数据的未经授权访问的安全性。 ## 密钥和地址 -Sui遵循加密货币行业中广泛接受的钱包规范,包括BIP-32(及其变体SLIP-0010)、BIP-44和BIP-39,以便为用户提供密钥管理。目前,Sui支持纯Ed25519、ECDSA Secp256k1、ECDSA Secp256r1和多重签名用于签名的交易。查看 [密钥和地址](./transaction-auth/keys-addresses.mdx) 以了解更多信息。 +Sui 遵循加密货币行业中广泛接受的钱包规范,包括 BIP-32(及其变体 SLIP-0010)、BIP-44 和 BIP-39,以便为用户提供密钥管理。目前,Sui 支持纯 Ed25519、ECDSA Secp256k1、ECDSA Secp256r1 和多重签名用于签名的交易。查看 [密钥和地址](./transaction-auth/keys-addresses.mdx) 以了解更多信息。 ## 签名 -密码学的灵活性是Sui的核心。该系统支持多种密码算法和原语,并能够在它们之间快速切换。使用Sui,你可以为你的系统选择合适的密码学解决方案,并在最新算法可用时实施它们。查看 [签名](./transaction-auth/signatures.mdx) 以了解更多信息。 +密码学的灵活性是 Sui 的核心。该系统支持多种密码算法和原语,并能够在它们之间快速切换。使用 Sui,你可以为你的系统选择合适的密码学解决方案,并在最新算法可用时实施它们。查看 [签名](./transaction-auth/signatures.mdx) 以了解更多信息。 ## 多重签名 -Sui支持多重签名(multisig)交易,这需要多个密钥进行授权,而不是单一的单键签名。查看 [多重签名](./transaction-auth/multisig.mdx) 以了解更多信息。 +Sui 支持多重签名(multisig)交易,这需要多个密钥进行授权,而不是单一的单键签名。查看 [多重签名](./transaction-auth/multisig.mdx) 以了解更多信息。 ## 离线签名 -Sui支持离线签名,即使用未连接到Sui网络的设备签署交易,或者在使用不依赖于Sui密钥存储的不同编程语言实现的钱包中签署交易。查看 [离线签名](./transaction-auth/offline-signing.mdx) 以了解更多信息。 +Sui 支持离线签名,即使用未连接到 Sui 网络的设备签署交易,或者在使用不依赖于 Sui 密钥存储的不同编程语言实现的钱包中签署交易。查看 [离线签名](./transaction-auth/offline-signing.mdx) 以了解更多信息。 ## 意图签名 -在Sui中,意图是一个紧凑的结构,充当签名承诺的消息的域分隔器。签名承诺的数据是一个意图消息。Sui中的所有签名都必须承诺一个意图消息,而不是消息本身。查看 [意图签名](./transaction-auth/intent-signing.mdx) 以了解更多信息。 +在 Sui 中,意图是一个紧凑的结构,充当签名承诺的消息的域分隔器。签名承诺的数据是一个意图消息。Sui 中的所有签名都必须承诺一个意图消息,而不是消息本身。查看 [意图签名](./transaction-auth/intent-signing.mdx) 以了解更多信息。 diff --git a/content/concepts/cryptography/transaction-auth/intent-signing.mdx b/content/concepts/cryptography/transaction-auth/intent-signing.mdx index 5aed1d8..f0c7472 100644 --- a/content/concepts/cryptography/transaction-auth/intent-signing.mdx +++ b/content/concepts/cryptography/transaction-auth/intent-signing.mdx @@ -69,7 +69,7 @@ const signature = await this.signData(intentMessage); 在底层,Rust 中的 `new_secure` 方法和 TypeScript 中的 `signData` 方法执行以下操作: 1. 将意图消息序列化为包含 3 字节意图和交易数据的 BCS 序列化字节的连接。 1. 应用 Blake2b 哈希以获取 32 字节摘要。 - 1. 将摘要传递给签名 API,对应于签名者的每个支持的方案。支持的签名方案有纯 Ed25519、ECDSA Secp256k1 和 ECDSA Secp256r1。请查看[Sui签名](./signatures.mdx#signature-requirements)以获取每种方案的要求。 + 1. 将摘要传递给签名 API,对应于签名者的每个支持的方案。支持的签名方案有纯 Ed25519、ECDSA Secp256k1 和 ECDSA Secp256r1。请查看[Sui 签名](./signatures.mdx#signature-requirements)以获取每种方案的要求。 ## 权威签名 diff --git a/content/concepts/cryptography/transaction-auth/multisig.mdx b/content/concepts/cryptography/transaction-auth/multisig.mdx index 09d3392..629d731 100644 --- a/content/concepts/cryptography/transaction-auth/multisig.mdx +++ b/content/concepts/cryptography/transaction-auth/multisig.mdx @@ -106,7 +106,7 @@ sui keytool multi-sig-address --pks `。 @@ -120,9 +120,9 @@ curl --location --request POST 'http://127.0.0.1:9123/gas' --header 'Content-Typ {"transferred_gas_objects":[{"amount":200000,"id":"", ...}]} ``` -## 步骤5:序列化任何交易 +## 步骤 5:序列化任何交易 -本节演示如何使用属于多签地址的对象,并将要签名的转账序列化。`tx_bytes` 值可以是任何序列化的交易数据,其中发送者是多签地址。在`sui client -h`的支持命令中(`publish`、`upgrade`、`call`、`transfer`、`transfer-sui`、`pay`、`pay-all-sui`、`pay-sui`、`split`、`merge-coin`),使用`--serialize-unsigned-transaction`标志以输出Base64编码的交易字节。 +本节演示如何使用属于多签地址的对象,并将要签名的转账序列化。`tx_bytes` 值可以是任何序列化的交易数据,其中发送者是多签地址。在`sui client -h`的支持命令中(`publish`、`upgrade`、`call`、`transfer`、`transfer-sui`、`pay`、`pay-all-sui`、`pay-sui`、`split`、`merge-coin`),使用`--serialize-unsigned-transaction`标志以输出 Base64 编码的交易字节。 ```shell sui client transfer --to --object-id --gas-budget --serialize-unsigned-transaction @@ -130,7 +130,7 @@ sui client transfer --to --object-id --gas-budget ``` -## 步骤6:使用两个密钥签名交易 +## 步骤 6:使用两个密钥签名交易 使用以下代码示例,使用`sui.keystore`中的两个密钥对交易进行签名。只要将其序列化为`flag || sig || pk`,你可以使用其他工具完成此操作。 @@ -146,7 +146,7 @@ Raw tx_bytes to execute: Serialized signature (`flag || sig || pk` in Base64): $SIG_2 ``` -## 步骤7:将单个签名合并为多签名 +## 步骤 7:将单个签名合并为多签名 此示例演示如何将两个签名合并: @@ -160,7 +160,7 @@ multisig serialized: 你只需要参与签名的签署者的签名,其权重总和`>=k`。你必须提供所有公钥及其权重,以及定义多签地址的阈值。 -## 步骤8:使用多签执行交易 +## 步骤 8:使用多签执行交易 使用`sui client`来执行使用多签的交易: diff --git a/content/concepts/cryptography/transaction-auth/offline-signing.mdx b/content/concepts/cryptography/transaction-auth/offline-signing.mdx index 91a422e..002bda1 100644 --- a/content/concepts/cryptography/transaction-auth/offline-signing.mdx +++ b/content/concepts/cryptography/transaction-auth/offline-signing.mdx @@ -2,7 +2,7 @@ title: 离线签名 --- -Sui支持离线签名,即使用未连接到Sui网络的设备签署交易,或者在不依赖Sui密钥存储的情况下使用其他编程语言实现的钱包签署。实现离线签名的步骤包括: +Sui 支持离线签名,即使用未连接到 Sui 网络的设备签署交易,或者在不依赖 Sui 密钥存储的情况下使用其他编程语言实现的钱包签署。实现离线签名的步骤包括: 1. 对要签署的数据进行序列化。 2. 对序列化的数据进行签名。将序列化的数据放在要签名的位置(例如你选择的钱包,或其他编程语言中的工具)并生成与相应公钥对应的签名。 @@ -12,7 +12,7 @@ Sui支持离线签名,即使用未连接到Sui网络的设备签署交易, 你必须按照 [Binary Canonical Serialization](https://crates.io/crates/bcs) (BCS) 对交易数据进行序列化。它在其他语言中也受支持。 -以下示例演示了如何使用 [Sui CLI](/references/cli.mdx) 对转账数据进行序列化。这将返回以Base64编码的序列化交易数据。提交原始交易以执行,作为 `tx_bytes`。 +以下示例演示了如何使用 [Sui CLI](/references/cli.mdx) 对转账数据进行序列化。这将返回以 Base64 编码的序列化交易数据。提交原始交易以执行,作为 `tx_bytes`。 ```shell sui client transfer-sui --to --sui-coin-object-id --gas-budget --serialize-unsigned-transaction @@ -23,15 +23,15 @@ sui client transfer-sui --to --sui-coin-object-id :::tip -所有其他创建交易的CLI命令(例如 `sui client publish` 和 `sui client call`)也接受与相同方式使用的 `--serialize-unsigned-transaction` 标志。 +所有其他创建交易的 CLI 命令(例如 `sui client publish` 和 `sui client call`)也接受与相同方式使用的 `--serialize-unsigned-transaction` 标志。 ::: ## 对序列化数据进行签名 {#sign} -你可以使用所选择的设备和编程语言对数据进行签名。Sui接受纯Ed25519、ECDSA secp256k1、ECDSA secp256r1和本地多签的签名。要了解有关签名要求的更多信息,请参阅[Sui签名](./signatures.mdx)。 +你可以使用所选择的设备和编程语言对数据进行签名。Sui 接受纯 Ed25519、ECDSA secp256k1、ECDSA secp256r1 和本地多签的签名。要了解有关签名要求的更多信息,请参阅[Sui 签名](./signatures.mdx)。 -此示例使用 `sui keytool` 命令进行签名,使用存储在 `sui.keystore` 中的提供地址对应的Ed25519密钥。此命令输出签名、公钥和以Base64编码的标志。此命令由fastcrypto支持。 +此示例使用 `sui keytool` 命令进行签名,使用存储在 `sui.keystore` 中的提供地址对应的 Ed25519 密钥。此命令输出签名、公钥和以 Base64 编码的标志。此命令由 fastcrypto 支持。 `sui keytool sign --address --data ` 你将收到以下响应: @@ -45,19 +45,19 @@ Digest to sign: Serialized signature (`flag || sig || pk` in Base64): ``` -为了确保离线生成的签名符合Sui的测试目的的有效性规则,你可以使用 `sui keytool import` 将助记词导入到 `sui.keystore` 中。然后,你可以使用 `sui keytool sign` 对其进行签名,然后比较签名结果。此外,你可以在 `~/sui/sdk/typescript/test/e2e/raw-signer.test.ts` 中找到测试向量。 +为了确保离线生成的签名符合 Sui 的测试目的的有效性规则,你可以使用 `sui keytool import` 将助记词导入到 `sui.keystore` 中。然后,你可以使用 `sui keytool sign` 对其进行签名,然后比较签名结果。此外,你可以在 `~/sui/sdk/typescript/test/e2e/raw-signer.test.ts` 中找到测试向量。 -在调试时,要针对支持Sui的密码库验证签名,请参阅 [sigs-cli](https://github.com/MystenLabs/fastcrypto/blob/4cf71bd8b3a373495beeb77ce81c27827516c218/fastcrypto-cli/src/sigs_cli.rs)。 +在调试时,要针对支持 Sui 的密码库验证签名,请参阅 [sigs-cli](https://github.com/MystenLabs/fastcrypto/blob/4cf71bd8b3a373495beeb77ce81c27827516c218/fastcrypto-cli/src/sigs_cli.rs)。 ## 执行已签名的交易 {#execute} -在获得序列化签名之后,你可以使用执行交易命令提交它。此命令以 `--tx-bytes` 作为要执行的原始交易字节(请参见先前 `sui client transfer` 命令的输出)和序列化签名(Base64编码的 `flag || sig || pk`,请参见 `sui keytool sign` 命令的输出)。这将执行已签名的交易,如果成功,则返回证书和交易效果。 +在获得序列化签名之后,你可以使用执行交易命令提交它。此命令以 `--tx-bytes` 作为要执行的原始交易字节(请参见先前 `sui client transfer` 命令的输出)和序列化签名(Base64 编码的 `flag || sig || pk`,请参见 `sui keytool sign` 命令的输出)。这将执行已签名的交易,如果成功,则返回证书和交易效果。 ```shell sui client execute-signed-tx --tx-bytes --signatures ``` -你将收到以下回应: +你将收到以下回应: ```shell ----- Certificate ---- diff --git a/content/concepts/cryptography/transaction-auth/signatures.mdx b/content/concepts/cryptography/transaction-auth/signatures.mdx index f26f3ab..d40ba8d 100644 --- a/content/concepts/cryptography/transaction-auth/signatures.mdx +++ b/content/concepts/cryptography/transaction-auth/signatures.mdx @@ -1,11 +1,11 @@ --- title: 签名 -description: Sui支持多种密码算法和原语,并能够快速切换其中。 +description: Sui 支持多种密码算法和原语,并能够快速切换其中。 --- -当用户提交一个已签名的交易时,会提交一个序列化的签名和一个序列化的交易数据。序列化的交易数据是结构体 `TransactionData` 的BCS序列化字节,而序列化的签名被定义为 `flag || sig || pk` 字节的串联。 +当用户提交一个已签名的交易时,会提交一个序列化的签名和一个序列化的交易数据。序列化的交易数据是结构体 `TransactionData` 的 BCS 序列化字节,而序列化的签名被定义为 `flag || sig || pk` 字节的串联。 -`flag` 是一个1字节的表示,对应于签名者选择的签名方案。以下表列出了每个签名方案及其对应的标志: +`flag` 是一个 1 字节的表示,对应于签名者选择的签名方案。以下表列出了每个签名方案及其对应的标志: | Scheme | Flag | | --------------- | ---- | @@ -14,7 +14,7 @@ description: Sui支持多种密码算法和原语,并能够快速切换其中 | ECDSA Secp256r1 | 0x02 | | multisig | 0x03 | -`sig` 字节是签名的压缩字节表示,而不是DER编码。以下表列出了每种格式的预期大小: +`sig` 字节是签名的压缩字节表示,而不是 DER 编码。以下表列出了每种格式的预期大小: | Scheme | Signature | | --------------- | ------------------------------------------ | @@ -34,28 +34,28 @@ The `pk` bytes are the bytes representation of the public key corresponding to t ## 签名要求 {#signature-requirements} -签名必须与交易数据的意图消息的哈希相对应,你可以通过在BCS序列化交易数据之前附加3字节的意图来构造这个消息。要了解有关意图是什么以及如何构造意图消息的更多信息,请参见[Sui意图签名](intent-signing.mdx)。 +签名必须与交易数据的意图消息的哈希相对应,你可以通过在 BCS 序列化交易数据之前附加 3 字节的意图来构造这个消息。要了解有关意图是什么以及如何构造意图消息的更多信息,请参见[Sui 意图签名](intent-signing.mdx)。 -在调用签名API时,必须首先对交易数据的意图消息进行哈希处理,使用Blake2b将其哈希为32字节。此外部哈希与签名API内部执行的哈希处理是不同的。为了与现有标准和硬件安全模块(HSMs)兼容,签名算法在内部执行额外的哈希处理。对于ECDSA Secp256k1和Secp256r1,必须使用SHA-2 SHA256作为内部哈希函数。对于纯Ed25519,必须使用SHA-512。 +在调用签名 API 时,必须首先对交易数据的意图消息进行哈希处理,使用 Blake2b 将其哈希为 32 字节。此外部哈希与签名 API 内部执行的哈希处理是不同的。为了与现有标准和硬件安全模块(HSMs)兼容,签名算法在内部执行额外的哈希处理。对于 ECDSA Secp256k1 和 Secp256r1,必须使用 SHA-2 SHA256 作为内部哈希函数。对于纯 Ed25519,必须使用 SHA-512。 -接受的ECDSA secp256k1和secp256r1签名必须遵循: +接受的 ECDSA secp256k1 和 secp256r1 签名必须遵循: -1. ECDSA使用的内部哈希必须是SHA256 [SHA-2](https://en.wikipedia.org/wiki/SHA-2) 对交易数据的哈希。Sui使用SHA256,因为它得到了[Apple](https://developer.apple.com/forums/thread/89619)、HSMs和[cloud](https://developer.apple.com/forums/thread/89619)的支持,并且被[Bitcoin](https://en.bitcoin.it/wiki/Elliptic_Curve_Digital_Signature_Algorithm)广泛采用。 -1. 签名必须以 `[r, s]` 的形式,长度为64字节,其中前32字节是 `r`,后32字节是 `s`。 +1. ECDSA 使用的内部哈希必须是 SHA256 [SHA-2](https://en.wikipedia.org/wiki/SHA-2) 对交易数据的哈希。Sui 使用 SHA256,因为它得到了[Apple](https://developer.apple.com/forums/thread/89619)、HSMs 和[cloud](https://developer.apple.com/forums/thread/89619)的支持,并且被[Bitcoin](https://en.bitcoin.it/wiki/Elliptic_Curve_Digital_Signature_Algorithm)广泛采用。 +1. 签名必须以 `[r, s]` 的形式,长度为 64 字节,其中前 32 字节是 `r`,后 32 字节是 `s`。 1. `r` 的值可以介于 `0x1` 和 `0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364140`(含)之间。 -1. `s` 的值必须在曲线顺序的下半部分。如果签名太高,请按照 [BIP-0062](https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki#low-s-values-in-signatures) 使用 `order - s` 将其转换为较低的 `s`。对于secp256k1,曲线顺序是 `0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141`。对于secp256r1,曲线顺序是在 [Standards for Efficient Cryptography](https://secg.org/SEC2-Ver-1.0.pdf) 中定义的 `0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551`。 -1. 理想情况下,签名必须是使用确定性nonce生成的,根据[RFC6979](https://www.rfc-editor.org/rfc/rfc6979)。 +1. `s` 的值必须在曲线顺序的下半部分。如果签名太高,请按照 [BIP-0062](https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki#low-s-values-in-signatures) 使用 `order - s` 将其转换为较低的 `s`。对于 secp256k1,曲线顺序是 `0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141`。对于 secp256r1,曲线顺序是在 [Standards for Efficient Cryptography](https://secg.org/SEC2-Ver-1.0.pdf) 中定义的 `0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551`。 +1. 理想情况下,签名必须是使用确定性 nonce 生成的,根据[RFC6979](https://www.rfc-editor.org/rfc/rfc6979)。 -接受的纯Ed25519签名必须遵循: +接受的纯 Ed25519 签名必须遵循: -1. 签名必须根据[RFC 8032](https://www.rfc-editor.org/rfc/rfc8032.html#section-5.1.6)生成。内部使用的哈希是SHA-512。 +1. 签名必须根据[RFC 8032](https://www.rfc-editor.org/rfc/rfc8032.html#section-5.1.6)生成。内部使用的哈希是 SHA-512。 1. 签名必须根据[ZIP215](https://github.com/zcash/zips/blob/main/zip-0215.rst)有效。 -在[Offline Signing](../transaction-auth/offline-signing.mdx)主题中查看使用CLI进行离线签名的具体示例。 +在[Offline Signing](../transaction-auth/offline-signing.mdx)主题中查看使用 CLI 进行离线签名的具体示例。 ## 权威签名 -Sui上的权威(验证者集合)持有三个独特的密钥对: +Sui 上的权威(验证者集合)持有三个独特的密钥对: 1. [协议密钥对](#protocol-pair) 1. [账户密钥对](#account-pair) @@ -63,18 +63,18 @@ Sui上的权威(验证者集合)持有三个独特的密钥对: ### 协议密钥对 {#protocol-pair} -协议密钥对在验证用户签署的交易时提供权威签名,如果验证通过,当提供签署用户交易的权威的股份超过所需的三分之二阈值时,Sui执行交易。Sui使用BLS12381方案对给定数量的权威的聚合签名进行快速验证。特别是,Sui使用minSig BLS模式,其中每个单独的公钥为96字节,而签名为48字节。后者很重要,因为通常验证者在每个时期的开始时注册他们的密钥一次,然后他们不断地签署交易;因此,我们在最小签名大小上进行了优化。 +协议密钥对在验证用户签署的交易时提供权威签名,如果验证通过,当提供签署用户交易的权威的股份超过所需的三分之二阈值时,Sui 执行交易。Sui 使用 BLS12381 方案对给定数量的权威的聚合签名进行快速验证。特别是,Sui 使用 minSig BLS 模式,其中每个单独的公钥为 96 字节,而签名为 48 字节。后者很重要,因为通常验证者在每个时期的开始时注册他们的密钥一次,然后他们不断地签署交易;因此,我们在最小签名大小上进行了优化。 -与BLS方案一样,你可以聚合独立的签名,从而得到单个的BLS签名负载。Sui还将聚合签名与一个位图一起发送,以表示哪些验证者进行了签署。这有效地将权威的签名大小从(2f + 1) × `BLS_sig`大小减少到仅一个 `BLS_sig`负载,从而在验证者集大小上独立压缩交易证书,从而带来了显著的网络成本优势。 +与 BLS 方案一样,你可以聚合独立的签名,从而得到单个的 BLS 签名负载。Sui 还将聚合签名与一个位图一起发送,以表示哪些验证者进行了签署。这有效地将权威的签名大小从 (2f + 1) × `BLS_sig`大小减少到仅一个 `BLS_sig`负载,从而在验证者集大小上独立压缩交易证书,从而带来了显著的网络成本优势。 -为了对抗BLS12381聚合签名的潜在的恶意密钥攻击,在权威注册期间使用了秘密密钥的知识证明(KOSK)。当一个权威请求添加到验证器集时,会提交并验证所有权威都会提供的所有权证明。请参阅[Intent Signing](../transaction-auth/intent-signing.mdx)以了解如何创建所有权证明。与大多数标准不同,Sui的知识证明方案还承诺了地址,这提供了额外的保护,防止对来自另一个恶意验证器的验证者的BLS密钥的敌对重用。 +为了对抗 BLS12381 聚合签名的潜在的恶意密钥攻击,在权威注册期间使用了秘密密钥的知识证明(KOSK)。当一个权威请求添加到验证器集时,会提交并验证所有权威都会提供的所有权证明。请参阅[Intent Signing](../transaction-auth/intent-signing.mdx)以了解如何创建所有权证明。与大多数标准不同,Sui 的知识证明方案还承诺了地址,这提供了额外的保护,防止对来自另一个恶意验证器的验证者的 BLS 密钥的敌对重用。 ### 账户密钥对 {#account-pair} -权威用于接收在权益奖励上的支付的账户由账户密钥对保护。Sui使用纯Ed25519作为签名方案。 +权威用于接收在权益奖励上的支付的账户由账户密钥对保护。Sui 使用纯 Ed25519 作为签名方案。 ### 网络密钥对 {#network-pair} -私钥用于执行QUIC所需的TLS握手,用于Narwhal主节点及其工作网络接口。公钥用于验证器对等标识。纯Ed25519用作签名方案。 +私钥用于执行 QUIC 所需的 TLS 握手,用于 Narwhal 主节点及其工作网络接口。公钥用于验证器对等标识。纯 Ed25519 用作签名方案。 在[验证器工具](https://github.com/MystenLabs/sui/blob/f8b5ad9aaecc3c4b30a060ec5e00bdad9ba75a93/nre/validator_tool.md)中查看更多权威密钥工具。 diff --git a/content/concepts/cryptography/zklogin.mdx b/content/concepts/cryptography/zklogin.mdx index 01ba741..a3da8c8 100644 --- a/content/concepts/cryptography/zklogin.mdx +++ b/content/concepts/cryptography/zklogin.mdx @@ -1,31 +1,31 @@ --- title: zkLogin -description: zkLogin是Sui的一种基元,使你能够使用OAuth凭证从Sui地址发送交易,而无需公开将两者关联起来。 +description: zkLogin 是 Sui 的一种基元,使你能够使用 OAuth 凭证从 Sui 地址发送交易,而无需公开将两者关联起来。 --- -zkLogin是Sui的一种基元,它使你能够使用OAuth凭证从Sui地址发送交易,而无需公开将两者关联起来。 +zkLogin 是 Sui 的一种基元,它使你能够使用 OAuth 凭证从 Sui 地址发送交易,而无需公开将两者关联起来。 -zkLogin设计时考虑了以下目标: +zkLogin 设计时考虑了以下目标: -- **简化入门流程:** zkLogin使你能够使用熟悉的OAuth登录流程在Sui上进行交易,消除了处理加密密钥或记住助记词的摩擦。 -- **自我托管:** zkLogin交易需要用户通过标准的OAuth登录流程进行批准,OAuth提供商不能代表用户进行交易。 -- **安全性:** zkLogin是一种两因素身份验证方案:发送交易需要来自最近OAuth登录的凭据和不由OAuth提供商管理的盐。攻击者即使攻击了OAuth帐户,也不能从用户对应的Sui地址进行交易,除非它们单独攻击了盐。 -- **隐私:** 零知识证明阻止第三方将Sui地址与其相应的OAuth标识符关联起来。 -- **可选的已验证身份:** 用户可以选择验证用于派生特定Sui地址的OAuth标识符。这为可验证的链上身份层奠定了基础。 -- **可访问性:** 由于Sui的[密码学灵活性](./transaction-auth/signatures.mdx),zkLogin是几种原生Sui签名方案之一。它与其他Sui基元(如赞助交易和多重签名)集成。 -- **严谨性:** zkLogin的代码已由两家专门从事零知识的公司进行了独立的[审计](https://github.com/sui-foundation/security-audits/blob/main/docs/zksecurity_zklogin-circuits.pdf)。用于创建通用参考字符串的公共zkLogin仪式吸引了100多名参与者的贡献。 +- **简化入门流程:** zkLogin 使你能够使用熟悉的 OAuth 登录流程在 Sui 上进行交易,消除了处理加密密钥或记住助记词的摩擦。 +- **自我托管:** zkLogin 交易需要用户通过标准的 OAuth 登录流程进行批准,OAuth 提供商不能代表用户进行交易。 +- **安全性:** zkLogin 是一种两因素身份验证方案:发送交易需要来自最近 OAuth 登录的凭据和不由 OAuth 提供商管理的盐。攻击者即使攻击了 OAuth 帐户,也不能从用户对应的 Sui 地址进行交易,除非它们单独攻击了盐。 +- **隐私:** 零知识证明阻止第三方将 Sui 地址与其相应的 OAuth 标识符关联起来。 +- **可选的已验证身份:** 用户可以选择验证用于派生特定 Sui 地址的 OAuth 标识符。这为可验证的链上身份层奠定了基础。 +- **可访问性:** 由于 Sui 的[密码学灵活性](./transaction-auth/signatures.mdx),zkLogin 是几种原生 Sui 签名方案之一。它与其他 Sui 基元(如赞助交易和多重签名)集成。 +- **严谨性:** zkLogin 的代码已由两家专门从事零知识的公司进行了独立的[审计](https://github.com/sui-foundation/security-audits/blob/main/docs/zksecurity_zklogin-circuits.pdf)。用于创建通用参考字符串的公共 zkLogin 仪式吸引了 100 多名参与者的贡献。 -你是希望将zkLogin集成到你的应用程序或钱包中的开发者吗?深入了解我们的[集成指南](#integration-guide)。 +你是希望将 zkLogin 集成到你的应用程序或钱包中的开发者吗?深入了解我们的[集成指南](#integration-guide)。 -如果你想了解zkLogin的工作原理,包括如何生成零知识证明以及Sui如何验证zkLogin交易,请参阅[此部分](#how-zklogin-works)。 +如果你想了解 zkLogin 的工作原理,包括如何生成零知识证明以及 Sui 如何验证 zkLogin 交易,请参阅[此部分](#how-zklogin-works)。 -如果你对zkLogin的安全模型和隐私考虑感兴趣,请访问此[页面](#security-and-privacy)。 +如果你对 zkLogin 的安全模型和隐私考虑感兴趣,请访问此[页面](#security-and-privacy)。 -还有更多问题吗?请查看[FAQ部分](#faq)。 +还有更多问题吗?请查看[FAQ 部分](#faq)。 -## OpenID提供商 +## OpenID 提供商 -以下表列出了可以支持zkLogin或目前正在审核中以确定它们是否可以支持zkLogin的OpenID提供商。 +以下表列出了可以支持 zkLogin 或目前正在审核中以确定它们是否可以支持 zkLogin 的 OpenID 提供商。 | Provider | Can support? | Devnet | Testnet | Mainnet | | ------------ | ---------- | -------- | -------- | -------- | @@ -45,20 +45,20 @@ zkLogin设计时考虑了以下目标: ## 集成指南 -以下是支持zkLogin启用交易的钱包或前端应用程序必须实现的高级流程: +以下是支持 zkLogin 启用交易的钱包或前端应用程序必须实现的高级流程: -1. 钱包创建一个临时KeyPair。 -1. 钱包提示用户完成OAuth登录流程,其中包含与临时公钥对应的随机数。 -1. 在收到JWT令牌后,钱包获取零知识证明。 -1. 钱包基于JWT令牌获取唯一的用户盐。OAuth主题标识符和盐可用于计算zkLogin Sui地址。 +1. 钱包创建一个临时 KeyPair。 +1. 钱包提示用户完成 OAuth 登录流程,其中包含与临时公钥对应的随机数。 +1. 在收到 JWT 令牌后,钱包获取零知识证明。 +1. 钱包基于 JWT 令牌获取唯一的用户盐。OAuth 主题标识符和盐可用于计算 zkLogin Sui 地址。 1. 钱包使用临时私钥签署交易。 1. 钱包提交交易,包括临时签名和零知识证明。 让我们深入了解具体的实现细节。 -## 安装zkLogin TypeScript SDK +## 安装 zkLogin TypeScript SDK -要在项目中使用zkLogin TypeScript SDK,请在项目根目录中运行以下命令: +要在项目中使用 zkLogin TypeScript SDK,请在项目根目录中运行以下命令: ```typescript npm install @mysten/zklogin @@ -67,11 +67,11 @@ npm install @mysten/zklogin npm install @mysten/zklogin@experimental ``` -## 配置与OpenID提供商的开发者账户 +## 配置与 OpenID 提供商的开发者账户 -Sui目前支持Google、Facebook和Twitch。将来将启用更多兼容OpenID的提供商。 +Sui 目前支持 Google、Facebook 和 Twitch。将来将启用更多兼容 OpenID 的提供商。 -例如,以下TypeScript代码可用于构建用于测试的登录URL。 +例如,以下 TypeScript 代码可用于构建用于测试的登录 URL。 ```typescript const REDIRECT_URI = ''; @@ -89,104 +89,104 @@ const params = new URLSearchParams({ const loginURL = `https://accounts.google.com/o/oauth2/v2/auth?${params}`; ``` -你必须在每个提供商中配置客户端ID(`$CLIENT_ID`)和重定向URL(`$REDIRECT_URL`): +你必须在每个提供商中配置客户端 ID(`$CLIENT_ID`)和重定向 URL(`$REDIRECT_URL`): ### Google -1. 注册Google Cloud账户并访问[仪表板](https://console.cloud.google.com/home/dashboard)。 -1. 选择"APIs & Services"然后选择"Credentials",在那里可以找到客户端ID。设置重定向URL。这应该是钱包或应用程序前端。 +1. 注册 Google Cloud 账户并访问[仪表板](https://console.cloud.google.com/home/dashboard)。 +1. 选择"APIs & Services"然后选择"Credentials",在那里可以找到客户端 ID。设置重定向 URL。这应该是钱包或应用程序前端。 ![1](images/zklogin-google1.png '注册Google开发者账户') -_注册Google开发者账户_ +_注册 Google 开发者账户_ ![2](images/zklogin-google2.png '转到Credentials') -_转到Credentials_ +_转到 Credentials_ ![3](images/zklogin-google3.png '配置重定向URL') -_配置重定向URL_ +_配置重定向 URL_ ### Facebook -1. 注册Facebook开发者账户并访问[仪表板](https://developers.facebook.com/apps/)。 +1. 注册 Facebook 开发者账户并访问[仪表板](https://developers.facebook.com/apps/)。 -1. 选择"Build your app",然后选择"Products",然后选择"Facebook Login",在那里可以找到客户端ID。设置重定向URL。这应该是钱包或应用程序前端。 +1. 选择"Build your app",然后选择"Products",然后选择"Facebook Login",在那里可以找到客户端 ID。设置重定向 URL。这应该是钱包或应用程序前端。 ![1](images/zklogin-facebook1.png '注册Facebook开发者账户') -_注册Facebook开发者账户_ +_注册 Facebook 开发者账户_ ![2](images/zklogin-facebook2.png '转到Settings') -_转到Settings_ +_转到 Settings_ ### Twitch -1. 注册Twitch开发者账户。访问[仪表板](https://dev.twitch.tv/console)。 +1. 注册 Twitch 开发者账户。访问[仪表板](https://dev.twitch.tv/console)。 -1. 转到"Register Your Application",然后选择"Application",在那里可以找到客户端ID。设置重定向URL。这应该是钱包或应用程序前端。 +1. 转到"Register Your Application",然后选择"Application",在那里可以找到客户端 ID。设置重定向 URL。这应该是钱包或应用程序前端。 ![1](images/zklogin-twitch1.png "注册Twitch开发者账户") -*注册Twitch开发者账户* +*注册 Twitch 开发者账户* ![2](images/zklogin-twitch2.png "转到Console") -*转到Console* +*转到 Console* ### Kakao -1. 注册Kakao开发者账户。访问[仪表板](https://developers.kakao.com/console/app)并添加一个应用。 +1. 注册 Kakao 开发者账户。访问[仪表板](https://developers.kakao.com/console/app)并添加一个应用。 ![1](images/zklogin-kakao1.png "向Kakao添加应用") -*向Kakao添加应用* +*向 Kakao 添加应用* -1. 转到"App Keys",在那里可以找到不同平台对应的客户端ID。 +1. 转到"App Keys",在那里可以找到不同平台对应的客户端 ID。 -- Native app key:用于通过Android或iOS SDK调用API。 -- JavaScript key:用于通过JavaScript SDK调用API。 -- REST API key:用于通过REST API调用API。 +- Native app key:用于通过 Android 或 iOS SDK 调用 API。 +- JavaScript key:用于通过 JavaScript SDK 调用 API。 +- REST API key:用于通过 REST API 调用 API。 ![2](images/zklogin-kakao2.png "找到Client ID") -*找到Client ID* +*找到 Client ID* -1. 切换打开"Kakao Login Activation"和"OpenID Connect Activation"。在"Product Settings"下的"Kakao Login"中设置重定向URL。这应该是钱包或应用程序前端。 +1. 切换打开"Kakao Login Activation"和"OpenID Connect Activation"。在"Product Settings"下的"Kakao Login"中设置重定向 URL。这应该是钱包或应用程序前端。 ![1](images/zklogin-kakao3.png "设置重定向URL") -*设置重定向URL* +*设置重定向 URL* ### Slack -1. 注册Slack开发者账户。访问[仪表板](https://api.slack.com/apps)并转到"Create New App",然后选择"From scratch"。 +1. 注册 Slack 开发者账户。访问[仪表板](https://api.slack.com/apps)并转到"Create New App",然后选择"From scratch"。 ![1](images/zklogin-slack1.png "在Slack中创建应用") - *在Slack中创建应用* + *在 Slack 中创建应用* -1. 在"App Credentials"下找到Client ID和Client Secret。 +1. 在"App Credentials"下找到 Client ID 和 Client Secret。 ![1](images/zklogin-slack2.png "找到Client ID和Client Secret") - *找到Client ID和Client Secret* + *找到 Client ID 和 Client Secret* -1. 在"Features"下的"OAuth & Permissions"中设置重定向URL。这应该是钱包或应用程序前端。 +1. 在"Features"下的"OAuth & Permissions"中设置重定向 URL。这应该是钱包或应用程序前端。 ![1](images/zklogin-slack3.png "设置重定向URL") - *设置重定向URL* + *设置重定向 URL* -## 获取JWT令牌 +## 获取 JWT 令牌 -1. 生成一个临时KeyPair。按照在传统钱包中生成KeyPair的相同过程进行。详细信息请参见 [Sui SDK](https://sdk.mystenlabs.com/typescript/cryptography/keypairs)。 +1. 生成一个临时 KeyPair。按照在传统钱包中生成 KeyPair 的相同过程进行。详细信息请参见 [Sui SDK](https://sdk.mystenlabs.com/typescript/cryptography/keypairs)。 -1. 为临时KeyPair设置过期时间。钱包决定最大时期是当前时期还是以后的时期。钱包还确定是否用户可以调整此设置。 +1. 为临时 KeyPair 设置过期时间。钱包决定最大时期是当前时期还是以后的时期。钱包还确定是否用户可以调整此设置。 -1. 使用配置的客户端ID、重定向URL、临时公钥和随机数组装OAuth URL:这是应用程序发送给用户以完成登录流程的内容,其中包括计算的[随机数](#notations)。 +1. 使用配置的客户端 ID、重定向 URL、临时公钥和随机数组装 OAuth URL:这是应用程序发送给用户以完成登录流程的内容,其中包括计算的[随机数](#notations)。 ```typescript import { generateNonce, generateRandomness } from '@mysten/zklogin'; @@ -200,11 +200,11 @@ const ephemeralKeyPair = new Ed25519Keypair(); const randomness = generateRandomness(); const nonce = generateNonce(ephemeralKeyPair.getPublicKey(), maxEpoch, randomness); ``` -T认证流URL可以使用 `$CLIENT_ID`、`$REDIRECT_URL` 和 `$NONCE` 构建。 +T 认证流 URL 可以使用 `$CLIENT_ID`、`$REDIRECT_URL` 和 `$NONCE` 构建。 -对于某些提供商(在“仅认证流”中选择“是”),JWT令牌可以立即在认证流之后的重定向URL中找到。 +对于某些提供商(在“仅认证流”中选择“是”),JWT 令牌可以立即在认证流之后的重定向 URL 中找到。 -对于其他提供商(在“仅认证流”中选择“否”),认证流只返回重定向URL中的代码(`$AUTH_CODE`)。要检索JWT令牌,需要使用“Token Exchange URL”进行额外的POST调用。 +对于其他提供商(在“仅认证流”中选择“否”),认证流只返回重定向 URL 中的代码(`$AUTH_CODE`)。要检索 JWT 令牌,需要使用“Token Exchange URL”进行额外的 POST 调用。 | Provider | Auth Flow URL | Token Exchange URL | Auth Flow Only | | ----------- | ----------- | ----------- | ----------- | @@ -215,17 +215,17 @@ T认证流URL可以使用 `$CLIENT_ID`、`$REDIRECT_URL` 和 `$NONCE` 构建。 | Apple | `https://appleid.apple.com/auth/authorize?client_id=$CLIENT_ID&redirect_uri=$REDIRECT_URL&scope=email&response_mode=form_post&response_type=code%20id_token&nonce=$NONCE` | N/A | Yes | | Slack | `https://slack.com/openid/connect/authorize?response_type=code&client_id=$CLIENT_ID&redirect_uri=$REDIRECT_URL&nonce=$NONCE&scope=openid` | `https://slack.com/api/openid.connect.token?code=$AUTH_CODE&client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET` | No | -## 解码JWT +## 解码 JWT -在成功重定向后,身份提供商将JWT令牌作为URL参数附加(以Google流程为例) +在成功重定向后,身份提供商将 JWT 令牌作为 URL 参数附加(以 Google 流程为例) ``` http://host/auth?id_token=tokenPartA.tokenPartB.tokenPartC&authuser=0&prompt=none ``` -`id_token` 参数是以编码格式的JWT令牌。你可以通过将其粘贴到 [jwt.io](https://jwt.io) 网站中来验证编码令牌的正确性并调查其结构。 +`id_token` 参数是以编码格式的 JWT 令牌。你可以通过将其粘贴到 [jwt.io](https://jwt.io) 网站中来验证编码令牌的正确性并调查其结构。 -要解码JWT,你可以使用类似 `jwt_decode` 的库,并将响应映射到提供的类型 `JwtPayload`: +要解码 JWT,你可以使用类似 `jwt_decode` 的库,并将响应映射到提供的类型 `JwtPayload`: ```typescript @@ -244,15 +244,15 @@ export interface JwtPayload { ## 用户盐管理 -在计算zkLogin Sui地址时使用用户盐(请参见 [定义](#address-definition))。盐必须是一个16字节的值,或者小于`2n**128n`的整数。应用程序在维护用户盐时有几个选项: +在计算 zkLogin Sui 地址时使用用户盐(请参见 [定义](#address-definition))。盐必须是一个 16 字节的值,或者小于`2n**128n`的整数。应用程序在维护用户盐时有几个选项: 1. 客户端端: - - 选项1:在访问钱包时请求用户输入盐,将责任转移到用户身上,用户需要记住盐。 - - 选项2:浏览器或移动存储:确保适当的工作流程,以防止用户在更改设备或浏览器时失去钱包访问。一种方法是在设置新钱包时通过电子邮件发送盐。 + - 选项 1:在访问钱包时请求用户输入盐,将责任转移到用户身上,用户需要记住盐。 + - 选项 2:浏览器或移动存储:确保适当的工作流程,以防止用户在更改设备或浏览器时失去钱包访问。一种方法是在设置新钱包时通过电子邮件发送盐。 2. 公开一个端点的后端服务,该端点为每个用户一致返回唯一的盐。 - - 选项3:在传统数据库中(例如 `user` 或 `password` 表)存储从用户标识符(例如 `sub`)到用户盐的映射。每个用户的盐是唯一的。 - - 选项4:实现一个服务,保留主种子值,并通过验证和解析JWT令牌派生用户盐,使用密钥派生,例如使用 `HKDF(ikm = seed, salt = iss || aud, info = sub)` 在 [这里](https://github.com/MystenLabs/fastcrypto/blob/e6161f9279510e89bd9e9089a09edc018b30fbfe/fastcrypto/src/hmac.rs#L121)定义。请注意,此选项不允许在主种子上进行旋转或更改客户端ID(即aud),否则将导致派生不同用户地址,可能会导致资金丢失。 + - 选项 3:在传统数据库中(例如 `user` 或 `password` 表)存储从用户标识符(例如 `sub`)到用户盐的映射。每个用户的盐是唯一的。 + - 选项 4:实现一个服务,保留主种子值,并通过验证和解析 JWT 令牌派生用户盐,使用密钥派生,例如使用 `HKDF(ikm = seed, salt = iss || aud, info = sub)` 在 [这里](https://github.com/MystenLabs/fastcrypto/blob/e6161f9279510e89bd9e9089a09edc018b30fbfe/fastcrypto/src/hmac.rs#L121)定义。请注意,此选项不允许在主种子上进行旋转或更改客户端 ID(即 aud),否则将导致派生不同用户地址,可能会导致资金丢失。 -以下是Mysten Labs维护的盐服务器的示例请求和响应(使用选项4)。如果你希望使用Mysten运行的盐服务器,请联系我们以将你注册的客户端ID列入白名单。只有使用已列入白名单的客户端ID进行身份验证的有效JWT令牌才会被接受。 +以下是 Mysten Labs 维护的盐服务器的示例请求和响应(使用选项 4)。如果你希望使用 Mysten 运行的盐服务器,请联系我们以将你注册的客户端 ID 列入白名单。只有使用已列入白名单的客户端 ID 进行身份验证的有效 JWT 令牌才会被接受。 ```bash curl -X POST https://salt.api.mystenlabs.com/get_salt -H 'Content-Type: application/json' -d '{"token": "$JWT_TOKEN"}' @@ -260,11 +260,11 @@ curl -X POST https://salt.api.mystenlabs.com/get_salt -H 'Content-Type: applicat Response: {"salt":"129390038577185583942388216820280642146"} ``` -用户盐用于断开OAuth标识符(sub)与链上Sui地址之间的关联,以避免将Web2凭据与Web3凭据关联起来。尽管失去或滥用盐可能会启用此关联,但不会危及资金控制或zkLogin资产权限。请参阅更多讨论 [这里](#security-and-privacy)。 +用户盐用于断开 OAuth 标识符(sub)与链上 Sui 地址之间的关联,以避免将 Web2 凭据与 Web3 凭据关联起来。尽管失去或滥用盐可能会启用此关联,但不会危及资金控制或 zkLogin 资产权限。请参阅更多讨论 [这里](#security-and-privacy)。 -## 获取用户的Sui地址 +## 获取用户的 Sui 地址 -一旦OAuth流程完成,JWT令牌可以在重定向URL中找到。结合用户盐,可以按照以下步骤派生zkLogin地址: +一旦 OAuth 流程完成,JWT 令牌可以在重定向 URL 中找到。结合用户盐,可以按照以下步骤派生 zkLogin 地址: ```typescript import { jwtToAddress } from '@mysten/zklogin'; @@ -274,9 +274,9 @@ const zkLoginUserAddress = jwtToAddress(jwt, userSalt); ## 获取零知识证明 -下一步是获取ZK证明。这是对临时密钥对的一种证明,证明临时密钥对是有效的。 +下一步是获取 ZK 证明。这是对临时密钥对的一种证明,证明临时密钥对是有效的。 -首先,生成扩展的临时公钥,以将其用作ZKP的输入。 +首先,生成扩展的临时公钥,以将其用作 ZKP 的输入。 ```typescript import { getExtendedEphemeralPublicKey } from '@mysten/zklogin'; @@ -284,26 +284,26 @@ import { getExtendedEphemeralPublicKey } from '@mysten/zklogin'; const extendedEphemeralPublicKey = getExtendedEphemeralPublicKey(ephemeralKeyPair.getPublicKey()); ``` -如果之前的临时密钥对已过期或无法访问,你需要获取一个新的ZK证明。 +如果之前的临时密钥对已过期或无法访问,你需要获取一个新的 ZK 证明。 -由于在客户端生成ZK证明可能会消耗大量资源并且潜在地较慢,建议钱包使用专用于ZK证明生成的后端服务端点。 +由于在客户端生成 ZK 证明可能会消耗大量资源并且潜在地较慢,建议钱包使用专用于 ZK 证明生成的后端服务端点。 有两个选项: -1. 调用Mysten Labs维护的证明服务 -1. 在你的后端使用提供的Docker映像运行证明服务。 +1. 调用 Mysten Labs 维护的证明服务 +1. 在你的后端使用提供的 Docker 映像运行证明服务。 -### 调用Mysten Labs维护的证明服务 +### 调用 Mysten Labs 维护的证明服务 -如果你希望在Mainnet上使用Mysten运行的ZK Proving Service,请联系我们,以便将你的注册客户端ID列入白名单。仅接受使用列入白名单的客户端ID进行身份验证的有效JWT令牌。 +如果你希望在 Mainnet 上使用 Mysten 运行的 ZK Proving Service,请联系我们,以便将你的注册客户端 ID 列入白名单。仅接受使用列入白名单的客户端 ID 进行身份验证的有效 JWT 令牌。 -要使用`prover-dev`端点,你无需列入白名单客户端ID。请注意,使用`prover-dev`端点生成的证明只能提交用于Devnet zkLogin交易,将其提交到Testnet或Mainnet将失败。 +要使用`prover-dev`端点,你无需列入白名单客户端 ID。请注意,使用`prover-dev`端点生成的证明只能提交用于 Devnet zkLogin 交易,将其提交到 Testnet 或 Mainnet 将失败。 | 网络 | Prover URL | | ------- | ---------- | | Mainnet, Testnet | https://prover.mystenlabs.com/v1 | | Devnet | https://prover-dev.mystenlabs.com/v1 | -你可以使用BigInt或Base64编码来处理 `extendedEphemeralPublicKey`,`jwtRandomness`和 `salt`。以下示例展示了两个样本请求,第一个使用BigInt编码,第二个使用Base64。 +你可以使用 BigInt 或 Base64 编码来处理 `extendedEphemeralPublicKey`,`jwtRandomness`和 `salt`。以下示例展示了两个样本请求,第一个使用 BigInt 编码,第二个使用 Base64。 ```bash curl -X POST $PROVER_URL -H 'Content-Type: application/json' \ @@ -347,9 +347,9 @@ curl -X POST $PROVER_URL -H 'Content-Type: application/json' \ } ``` -### 如何处理CORS错误 +### 如何处理 CORS 错误 -为了避免在前端应用中可能出现的CORS错误,建议将此调用委托给后端服务。 +为了避免在前端应用中可能出现的 CORS 错误,建议将此调用委托给后端服务。 响应可以映射到 zkLogin SDK 的 `getZkLoginSignature` 方法的输入参数类型。 @@ -555,7 +555,7 @@ client.executeTransactionBlock({ ### JWT 令牌 (JSON Web Token) -JWT 令牌可以在用户完成 OAuth 登录流程后在 RP 的重定向 URL 中找到(即 `https://redirect.com?id_token=$JWT_TOKEN`)。JWT 令牌包含一个 `header`、`payload` 和一个 `signature`。签名是可以根据 `jwt_message = header + . + payload` 及其由 `kid` 标识的 JWK 验证的 RSA 签名。`payload` 包含许多声明的 JSON,是名称-值对。请参阅下文,了解与 zkLogin 协议相关的特定声明。 +JWT 令牌可以在用户完成 OAuth 登录流程后在 RP 的重定向 URL 中找到(即 `https://redirect.com?id_token=$JWT_TOKEN`)。JWT 令牌包含一个 `header`、`payload` 和一个 `signature`。签名是可以根据 `jwt_message = header + . + payload` 及其由 `kid` 标识的 JWK 验证的 RSA 签名。`payload` 包含许多声明的 JSON,是名称 - 值对。请参阅下文,了解与 zkLogin 协议相关的特定声明。 **Header** diff --git a/content/concepts/cryptography/zklogin/zklogin-example.mdx b/content/concepts/cryptography/zklogin/zklogin-example.mdx index 26be05f..b87f91f 100644 --- a/content/concepts/cryptography/zklogin/zklogin-example.mdx +++ b/content/concepts/cryptography/zklogin/zklogin-example.mdx @@ -1,28 +1,28 @@ --- -title: zkLogin示例 -description: 一个分解Sui zkLogin每个步骤逻辑的示例。 +title: zkLogin 示例 +description: 一个分解 Sui zkLogin 每个步骤逻辑的示例。 --- -Sui社区创建了一个示例,以便为开发人员提供Sui zkLogin涉及的每个步骤的全面理解。 +Sui 社区创建了一个示例,以便为开发人员提供 Sui zkLogin 涉及的每个步骤的全面理解。 -- [Sui zkLogin示例](https://sui-zklogin.vercel.app/) +- [Sui zkLogin 示例](https://sui-zklogin.vercel.app/) -![ZKLogin概览](./images/overview.png "ZKLogin概览") -这个示例将Sui zkLogin的完整过程分解为七个步骤,如下: +![ZKLogin 概览](./images/overview.png "ZKLogin概览") +这个示例将 Sui zkLogin 的完整过程分解为七个步骤,如下: 1. 生成临时密钥对 -1. 获取JWT -1. 解码JWT +1. 获取 JWT +1. 解码 JWT 1. 生成盐 -1. 生成用户Sui地址 -1. 获取ZK证明 -1. 组装zkLogin签名 +1. 生成用户 Sui 地址 +1. 获取 ZK 证明 +1. 组装 zkLogin 签名 每个步骤都包括相应的代码片段,提供了如何获取每个步骤所需数据的说明。 ## 操作环境 -该示例在Sui Devnet中运行。用户生成的所有数据都存储在客户端(浏览器)的本地。获取零知识证明(ZK证明)是通过调用[Mysten Labs维护的证明服务](../zklogin.mdx#call-the-mysten-labs-maintained-proving-service)完成的。因此,运行示例不需要额外部署的后端服务器(或Docker容器)。 +该示例在 Sui Devnet 中运行。用户生成的所有数据都存储在客户端(浏览器)的本地。获取零知识证明(ZK 证明)是通过调用[Mysten Labs 维护的证明服务](../zklogin.mdx#call-the-mysten-labs-maintained-proving-service)完成的。因此,运行示例不需要额外部署的后端服务器(或 Docker 容器)。 ## 密钥数据的存储位置 @@ -35,23 +35,23 @@ Sui社区创建了一个示例,以便为开发人员提供Sui zkLogin涉及的 | User salt | `window.localStorage` | | Max epoch | `window.localStorage` | -因为用户盐值(Salt)长期存储在浏览器的 `localStorage` 中,只要不手动清除 `localStorage`,你可以随时使用相同的JWT(在此示例中,使用相同的Google帐户登录)访问从当前盐值生成的相应zkLogin地址。 +因为用户盐值 (Salt) 长期存储在浏览器的 `localStorage` 中,只要不手动清除 `localStorage`,你可以随时使用相同的 JWT(在此示例中,使用相同的 Google 帐户登录)访问从当前盐值生成的相应 zkLogin 地址。 :::注意 -更改浏览器或设备会导致无法访问以前生成的Sui zkLogin地址,即使使用相同的JWT。 +更改浏览器或设备会导致无法访问以前生成的 Sui zkLogin 地址,即使使用相同的 JWT。 ::: ## 故障排除 -- **ZK证明请求失败:** - - 这可能是由于创建多个随机性或用户盐时存在不一致,导致请求失败。点击UI右上角的 **Reset按钮** 重新启动整个过程。 +- **ZK 证明请求失败:** + - 这可能是由于创建多个随机性或用户盐时存在不一致,导致请求失败。点击 UI 右上角的 **Reset 按钮** 重新启动整个过程。 - **请求测试令牌失败:** - - 这是因为你超过了faucet服务器请求频率限制。 - - 你可以访问Sui的 [#devnet-faucet](https://discord.com/channels/916379725201563759/971488439931392130) 或 [#testnet-faucet](https://discord.com/channels/916379725201563759/1037811694564560966) Discord频道来获取测试币。 + - 这是因为你超过了 faucet 服务器请求频率限制。 + - 你可以访问 Sui 的 [#devnet-faucet](https://discord.com/channels/916379725201563759/971488439931392130) 或 [#testnet-faucet](https://discord.com/channels/916379725201563759/1037811694564560966) Discord 频道来获取测试币。 -- 对于项目的GitHub仓库,欢迎提出任何建议或问题,当然,我们非常感谢拉取请求。 +- 对于项目的 GitHub 仓库,欢迎提出任何建议或问题,当然,我们非常感谢拉取请求。 -- 有关zkLogin的更多常见问题解答,请查看 [zkLogin FAQ](../zklogin.mdx#faq)。 +- 有关 zkLogin 的更多常见问题解答,请查看 [zkLogin FAQ](../zklogin.mdx#faq)。 diff --git a/content/concepts/dynamic-fields/transfers/custom-rules.mdx b/content/concepts/dynamic-fields/transfers/custom-rules.mdx index 6dd7e0c..1a72249 100644 --- a/content/concepts/dynamic-fields/transfers/custom-rules.mdx +++ b/content/concepts/dynamic-fields/transfers/custom-rules.mdx @@ -1,16 +1,16 @@ --- title: 自定义转账规则 -description: 自定义转账规则使你能够在Sui考虑转账操作有效之前定义必须满足的一组规则。 +description: 自定义转账规则使你能够在 Sui 考虑转账操作有效之前定义必须满足的一组规则。 --- -每个Sui对象必须具有`key`能力。另一方面,`store`能力是你可以添加到Sui对象的可选能力。具有`store`能力的对象: +每个 Sui 对象必须具有`key`能力。另一方面,`store`能力是你可以添加到 Sui 对象的可选能力。具有`store`能力的对象: - 可以被任何人使用`sui::transfer::public_transfer`函数进行转账; - 可以被包装在其他对象中。 -对于自定义转账规则来说,如果Sui对象`O`没有`store`能力,则不能调用`sui::transfer::public_transfer`函数对其进行转账。定义`O`的Move模块是唯一能够使用`sui::transfer::transfer`函数转移该类型对象的实体。因此,定义对象`O`的模块可以为`O`定义自定义转账函数,该函数可以接受任意数量的参数,并强制执行对执行转账操作所需的任何限制(例如,必须支付费用才能转移对象)。 +对于自定义转账规则来说,如果 Sui 对象`O`没有`store`能力,则不能调用`sui::transfer::public_transfer`函数对其进行转账。定义`O`的 Move 模块是唯一能够使用`sui::transfer::transfer`函数转移该类型对象的实体。因此,定义对象`O`的模块可以为`O`定义自定义转账函数,该函数可以接受任意数量的参数,并强制执行对执行转账操作所需的任何限制(例如,必须支付费用才能转移对象)。 -## store能力和转账规则 +## store 能力和转账规则 对象的自定义转账规则使你能够定义必须满足的有效转账操作的转账条件。在将`store`能力添加到对象时,你应该有意识地添加,因为这样你可以在无需通过定义它的模块的情况下提供对该对象的无限制访问。在启用了对象的公共转账之后,就无法重新启用自定义转账规则或关于对象转账的任何类型的限制。 diff --git a/content/concepts/object-model.mdx b/content/concepts/object-model.mdx index f0b3263..4c12f0f 100644 --- a/content/concepts/object-model.mdx +++ b/content/concepts/object-model.mdx @@ -1,47 +1,47 @@ --- title: 对象模型 -description: Sui区块链上的一切都是对象,具有元数据、所有权类型和引用方案。 +description: Sui 区块链上的一切都是对象,具有元数据、所有权类型和引用方案。 --- -在Sui中,存储的基本单位是对象。与许多其他区块链不同,这里的存储围绕着包含键值存储的账户中心展开,Sui的存储围绕着可以通过唯一ID在链上寻址的对象。智能合约是一个对象(称为Sui Move包),这些智能合约操纵Sui网络上的对象: +在 Sui 中,存储的基本单位是对象。与许多其他区块链不同,这里的存储围绕着包含键值存储的账户中心展开,Sui 的存储围绕着可以通过唯一 ID 在链上寻址的对象。智能合约是一个对象(称为 Sui Move 包),这些智能合约操纵 Sui 网络上的对象: -- Sui Move包:一组Sui Move字节码模块。每个模块都有一个在包内是唯一的名称。包的链上ID和模块名称的组合唯一标识模块。在将智能合约发布到Sui时,包是发布的单位。发布了包对象后,它是不可变的,永远无法更改或删除。包对象可以依赖于先前发布到Sui的其他包对象。 -- Sui Move对象:由Sui Move包中的特定Sui Move模块管理的类型数据。每个对象值都是一个包含原始类型(如整数和地址)、其他对象和非对象结构的结构。 +- Sui Move 包:一组 Sui Move 字节码模块。每个模块都有一个在包内是唯一的名称。包的链上 ID 和模块名称的组合唯一标识模块。在将智能合约发布到 Sui 时,包是发布的单位。发布了包对象后,它是不可变的,永远无法更改或删除。包对象可以依赖于先前发布到 Sui 的其他包对象。 +- Sui Move 对象:由 Sui Move 包中的特定 Sui Move 模块管理的类型数据。每个对象值都是一个包含原始类型(如整数和地址)、其他对象和非对象结构的结构。 ## 对象元数据 -每个Sui对象都具有以下元数据: +每个 Sui 对象都具有以下元数据: -- 32字节的全局唯一ID。对象ID是从创建对象的交易的摘要和编码交易生成的ID数量的计数器派生的。 -- 8字节无符号整数版本,随着每次修改它的事务而单调递增(参见 [对象和包版本](./versioning.mdx))。 -- 32字节事务摘要,指示上次将此对象作为输出包含在内的交易。 -- 33字节所有者字段,指示如何访问此对象。有关更多信息,请参阅 [对象所有权](./object-ownership.mdx)。 +- 32 字节的全局唯一 ID。对象 ID 是从创建对象的交易的摘要和编码交易生成的 ID 数量的计数器派生的。 +- 8 字节无符号整数版本,随着每次修改它的事务而单调递增(参见 [对象和包版本](./versioning.mdx))。 +- 32 字节事务摘要,指示上次将此对象作为输出包含在内的交易。 +- 33 字节所有者字段,指示如何访问此对象。有关更多信息,请参阅 [对象所有权](./object-ownership.mdx)。 除了常见的元数据之外,对象还有一个特定于类别的、可变大小的内容字段,其中包含一个 [二进制规范序列化(BCS)](https://docs.rs/bcs/latest/bcs/) 编码的有效载荷。 -- Move对象包含其Move类型、对象是否可以使用`public_transfer`进行转移,以及其字段,再次编码为BCS。 -- Move包含包中的字节码模块、一个表标识包的每个类型是由该包的哪个版本引入的(类型起源表),以及一个表将其所有传递依赖项映射到要使用的该包的特定版本(链接表)。 +- Move 对象包含其 Move 类型、对象是否可以使用`public_transfer`进行转移,以及其字段,再次编码为 BCS。 +- Move 包含包中的字节码模块、一个表标识包的每个类型是由该包的哪个版本引入的(类型起源表),以及一个表将其所有传递依赖项映射到要使用的该包的特定版本(链接表)。 ## 引用对象 有几种不同的方式可以简洁地引用一个对象,而无需指定其全部内容和元数据,每种方式都略有不同的用途: -- **ID:** 上面提到的对象的全局唯一ID。ID是对象随时间的稳定标识符,对于查询对象的当前状态或描述在两个地址之间传输的对象,都非常有用。 -- **带版本的ID:** 一个(ID,版本)对。带版本的ID描述了对象在对象历史的特定点的状态,非常适用于询问对象在过去某个时点的值或确定对象的某个视图现在有多新鲜。 +- **ID:** 上面提到的对象的全局唯一 ID。ID 是对象随时间的稳定标识符,对于查询对象的当前状态或描述在两个地址之间传输的对象,都非常有用。 +- **带版本的 ID:** 一个(ID,版本)对。带版本的 ID 描述了对象在对象历史的特定点的状态,非常适用于询问对象在过去某个时点的值或确定对象的某个视图现在有多新鲜。 - **对象引用:** 一个(ID,版本,对象摘要)三元组。对象摘要是对象内容和元数据的哈希。对象引用提供了对象在对象历史的特定点的身份验证视图。交易要求通过对象引用指定对象输入,以确保交易的发送者和处理交易的验证器对对象的内容和元数据达成一致。 -## 事务-对象DAG:关联对象和事务 +## 事务 - 对象 DAG:关联对象和事务 事务以对象作为输入,读取/写入/变异这些输入,并产生变异或新创建的对象作为输出。每个对象都知道产生它的最后一个事务(的哈希)是什么。因此,表示对象和事务之间关系的一种自然方式是使用一个有向无环图(DAG),其中: - 节点是事务。 - 有向边从事务`A`指向事务`B`,如果`A`的输出对象是`B`的输入对象。它们由所讨论对象的引用标记(指定了由`A`创建且由`B`使用的对象的确切版本)。 -此DAG的根是一个起源事务,它不接受任何输入并产生存在于系统初始状态的对象。可以通过识别尚未被任何提交事务消耗的可变事务输出,并发送一个新的事务,该事务将这些输出(以及可选的不可变事务输出)作为输入来扩展此DAG。 +此 DAG 的根是一个起源事务,它不接受任何输入并产生存在于系统初始状态的对象。可以通过识别尚未被任何提交事务消耗的可变事务输出,并发送一个新的事务,该事务将这些输出(以及可选的不可变事务输出)作为输入来扩展此 DAG。 -可以作为事务输入的对象集合称为活动对象,由Sui维护的全局状态包括所有这些对象的总和。对于特定的Sui地址A,A拥有的所有对象以及系统中的所有共享对象和不可变对象都属于活动对象。 +可以作为事务输入的对象集合称为活动对象,由 Sui 维护的全局状态包括所有这些对象的总和。对于特定的 Sui 地址 A,A 拥有的所有对象以及系统中的所有共享对象和不可变对象都属于活动对象。 -当此DAG包含系统中的所有提交事务时,它形成了系统状态和历史的完整(且经过加密审计的)视图。此外,你可以使用上述方案构建一个子集的事务或对象的相关历史的DAG(例如,由单个地址拥有的对象)。 +当此 DAG 包含系统中的所有提交事务时,它形成了系统状态和历史的完整(且经过加密审计的)视图。此外,你可以使用上述方案构建一个子集的事务或对象的相关历史的 DAG(例如,由单个地址拥有的对象)。 ## 事务、对象和数据的限制 -Sui对事务和事务中使用的数据有一些限制,例如最大大小和使用的对象数量。 \ No newline at end of file +Sui 对事务和事务中使用的数据有一些限制,例如最大大小和使用的对象数量。 \ No newline at end of file diff --git a/content/concepts/object-ownership.mdx b/content/concepts/object-ownership.mdx index d3cfc37..63e78e1 100644 --- a/content/concepts/object-ownership.mdx +++ b/content/concepts/object-ownership.mdx @@ -6,13 +6,13 @@ title: 对象所有权 ## Address-owned -一个地址拥有的对象是由一个特定的32字节地址拥有的,该地址可以是账户地址(从特定签名方案派生)或对象ID。地址拥有的对象仅对其所有者可访问,其他人无法访问。 +一个地址拥有的对象是由一个特定的 32 字节地址拥有的,该地址可以是账户地址(从特定签名方案派生)或对象 ID。地址拥有的对象仅对其所有者可访问,其他人无法访问。 详细了解请参见 [地址拥有的对象](./object-ownership/address-owned.mdx)。 ## 动态字段 -在Sui上,动态字段和动态对象字段是动态添加和删除的,仅在访问时影响gas,并存储异构值。 +在 Sui 上,动态字段和动态对象字段是动态添加和删除的,仅在访问时影响 gas,并存储异构值。 详细了解请参见 [动态(对象)字段](./dynamic-fields.mdx)。 @@ -30,6 +30,6 @@ title: 对象所有权 ## 封装的 -在Move中,你可以通过将 `struct` 类型的字段放入另一个结构中来组织数据结构。 +在 Move 中,你可以通过将 `struct` 类型的字段放入另一个结构中来组织数据结构。 详细了解请参见 [封装的对象](./object-ownership/wrapped.mdx)。 diff --git a/content/concepts/sui-architecture/consensus.mdx b/content/concepts/sui-architecture/consensus.mdx index 059404c..4ec4c7b 100644 --- a/content/concepts/sui-architecture/consensus.mdx +++ b/content/concepts/sui-architecture/consensus.mdx @@ -1,7 +1,7 @@ --- title: Sui Mempool and Consensus Engines sidebar_label: Mempool and Consensus Engines -description: "Sui 内存池和共识引擎概述, Narwhal and Bullshark." +description: "Sui 内存池和共识引擎概述,Narwhal and Bullshark." --- 这是对 Mysten Labs 提供的高吞吐量内存池和共识引擎 [Narwhal](https://github.com/MystenLabs/sui/tree/main/narwhal) 和 [Bullshark](https://arxiv.org/abs/2209.05633) 的简要介绍。Sui 默认使用 Narwhal 作为内存池,使用 Bullshark 作为共识引擎,以对需要总排序的事务进行排序,同步验证者之间的事务,并定期检查网络的状态。 @@ -34,7 +34,7 @@ Narwhal 实例建立了一个消息传递系统,由一组 $3f+1$ 股权单位 图的 *顶点* 由经过认证的集合组成。由其验证者作者签署的每个有效集合必须包含一个回合数,并且必须由验证者股权的四分之三(2f+1)签署。这 2f+1 个签名称为 _可用性证书_。此外,该集合必须包含指向上一轮的有效证书的四分之三的哈希指针(即具有 2f + 1 股权单位的验证者的证书),这构成了图的 *边*。 -每个集合是以以下方式形成的:每个验证者都 _可靠地广播_ 了每一轮的集合。在指定的有效条件下,如果具有 2f + 1 股权的验证者接收到一个集合,他们将用各自的签名确认它。 2f + 1 个验证者的签名形成一个可用性证书,然后在第 r + 1 轮共享并可能包含在该轮的集合中。 +每个集合是以以下方式形成的:每个验证者都 _可靠地广播_ 了每一轮的集合。在指定的有效条件下,如果具有 2f + 1 股权的验证者接收到一个集合,他们将用各自的签名确认它。2f + 1 个验证者的签名形成一个可用性证书,然后在第 r + 1 轮共享并可能包含在该轮的集合中。 以下图表示了构建这样一个 DAG 的五轮过程(1 到 5),参与其中的权威为 A、B、C 和 D。为简单起见,每个验证者持有 1 股权单位。A5 最新一轮中由 A 明确承认的集合在图中以实线表示。 diff --git a/content/concepts/sui-architecture/staking-rewards.mdx b/content/concepts/sui-architecture/staking-rewards.mdx index 7b4e431..8578782 100644 --- a/content/concepts/sui-architecture/staking-rewards.mdx +++ b/content/concepts/sui-architecture/staking-rewards.mdx @@ -20,7 +20,7 @@ Sui 的权益委托机制有一些与其他区块链的权益委托不同的特 在每个纪元结束时,收集的燃气费用以及权益补贴与验证器和权益持有者一起作为权益奖励分配。验证器获得的奖励量取决于以下因素: - 表现。如果验证器的运行性能不佳,其他验证器可能会选择通过计票规则进行举报。被举报的验证器的整个权益奖励将在该纪元中被削减。 -- 佣金率。佣金率确定验证器从其权益持有者那里获取的权益奖励的比例。例如,如果验证器的佣金率为10%,则该验证器从与其合作的权益持有者的所有权益奖励中每个纪元获得10%作为新的由验证器拥有的权益对象。 +- 佣金率。佣金率确定验证器从其权益持有者那里获取的权益奖励的比例。例如,如果验证器的佣金率为 10%,则该验证器从与其合作的权益持有者的所有权益奖励中每个纪元获得 10% 作为新的由验证器拥有的权益对象。 ## 奖励提取 diff --git a/content/concepts/sui-move-concepts.mdx b/content/concepts/sui-move-concepts.mdx index 0438115..befc102 100644 --- a/content/concepts/sui-move-concepts.mdx +++ b/content/concepts/sui-move-concepts.mdx @@ -36,7 +36,7 @@ Move 在 Sui 上的关键区别包括: 在 Diem 上的 Move 中,全局存储是编程模型的一部分。资源和模块存储在全局存储中,由一个带有地址的帐户拥有。事务可以自由地在运行时使用特殊操作(如 `move_to` 和 `move_from`)从全局存储中的任何帐户访问资源。 -这种方法引入了一个扩展问题,因为无法静态确定哪些事务正在争用相同的资源,哪些不是。 这类似于其他区块链面临的问题,智能合约通常在大型内部映射中存储帐户信息,从而限制了吞吐量。 +这种方法引入了一个扩展问题,因为无法静态确定哪些事务正在争用相同的资源,哪些不是。这类似于其他区块链面临的问题,智能合约通常在大型内部映射中存储帐户信息,从而限制了吞吐量。 Sui 通过不具有全局存储或其相关操作来解决扩展问题。当对象(与资源相对)和包(模块集合)存储在 Sui 上时,它们分别被赋予唯一标识符。通过使用这些唯一标识符,事务的所有输入都是明确指定的,以允许链调度具有不重叠输入的事务以并行方式执行。 @@ -50,7 +50,7 @@ Sui 没有全局存储,因此 `address` 被重新用作用于对象和帐户 在 Diem 上的 Move 中,`key` 能力表示该类型是资源,这意味着它(连同帐户地址)可以在全局存储中用作键。 -在 Sui 上,`key` 能力表示结构是对象类型,并伴随额外要求,即结构的第一个字段具有签名 `id: UID`,以包含对象在链上的唯一地址。 Sui 的字节码验证器确保新对象始终被分配新的 `UID`(标识符永不重用)。 +在 Sui 上,`key` 能力表示结构是对象类型,并伴随额外要求,即结构的第一个字段具有签名 `id: UID`,以包含对象在链上的唯一地址。Sui 的字节码验证器确保新对象始终被分配新的 `UID`(标识符永不重用)。 ### 模块初始化程序 {#module-initializers} diff --git a/content/concepts/sui-move-concepts/packages/custom-policies.mdx b/content/concepts/sui-move-concepts/packages/custom-policies.mdx index c0200e3..2a408ce 100644 --- a/content/concepts/sui-move-concepts/packages/custom-policies.mdx +++ b/content/concepts/sui-move-concepts/packages/custom-policies.mdx @@ -152,7 +152,7 @@ module sui::package { 这些最佳实践有助于维护**知情用户同意**和**有界风险**,因为它清楚地表明用户在将价值锁定到包中时包的升级策略是什么,并确保策略不会随时间演变为更宽松的形式,而用户没有意识到并选择接受新条款。 -## 示例:“星期几” 升级策略 {#example-upgrade} +## 示例:“星期几”升级策略 {#example-upgrade} 通过编写一个玩具升级策略来将所有内容付诸实践,该策略仅在一周的特定某一天(由包创建者选择)授权升级。 diff --git a/content/concepts/sui-move-concepts/patterns.mdx b/content/concepts/sui-move-concepts/patterns.mdx index 742743e..b35c349 100644 --- a/content/concepts/sui-move-concepts/patterns.mdx +++ b/content/concepts/sui-move-concepts/patterns.mdx @@ -11,7 +11,7 @@ Capability 是一种允许使用对象授权操作的模式。请参阅[Capabili ## Witness 和 transferrable witness -Witness 是一种具有 `drop` 的类型,用于证明其所有者在某些特权操作的时间点出现,例如,访问模块的一次性见证 (OTW)证明了代码正在模块首次发布时运行。有关详细信息,请参阅以下主题。 +Witness 是一种具有 `drop` 的类型,用于证明其所有者在某些特权操作的时间点出现,例如,访问模块的一次性见证 (OTW) 证明了代码正在模块首次发布时运行。有关详细信息,请参阅以下主题。 - [Witness](./patterns/witness) - [Transferrable Witness](./patterns/transferrable-witness) diff --git a/content/concepts/sui-move-concepts/patterns/hot-potato.mdx b/content/concepts/sui-move-concepts/patterns/hot-potato.mdx index dc3c96c..0e44147 100644 --- a/content/concepts/sui-move-concepts/patterns/hot-potato.mdx +++ b/content/concepts/sui-move-concepts/patterns/hot-potato.mdx @@ -71,5 +71,5 @@ module examples::trade_in { } ``` -Sui存储库包含多个示例,演示了Sui的各种功能。这些示例中的[闪电贷款](https://github.com/MystenLabs/sui/blob/main/examples/move/flash_lender/sources/example.move)代码演示了本主题描述的模式。 +Sui 存储库包含多个示例,演示了 Sui 的各种功能。这些示例中的[闪电贷款](https://github.com/MystenLabs/sui/blob/main/examples/move/flash_lender/sources/example.move)代码演示了本主题描述的模式。 diff --git a/content/concepts/sui-move-concepts/patterns/id-pointer.mdx b/content/concepts/sui-move-concepts/patterns/id-pointer.mdx index 02095eb..3851bce 100644 --- a/content/concepts/sui-move-concepts/patterns/id-pointer.mdx +++ b/content/concepts/sui-move-concepts/patterns/id-pointer.mdx @@ -1,14 +1,14 @@ --- -title: ID指针 +title: ID 指针 --- -ID指针是一种将主要数据(对象)与其访问器/功能分离的技术,通过将后者与原始数据链接起来。有几种不同的方式可以使用这种模式: +ID 指针是一种将主要数据(对象)与其访问器/功能分离的技术,通过将后者与原始数据链接起来。有几种不同的方式可以使用这种模式: -- 发行共享对象的可转让功能(例如,更改共享对象的'所有者'字段的TransferCap) -- 拆分动态数据和静态数据(例如,NFT及其集合信息) -- 在通用应用程序中避免不必要的类型链接(和见证要求)(LiquidityPool的LP代币) +- 发行共享对象的可转让功能(例如,更改共享对象的'所有者'字段的 TransferCap) +- 拆分动态数据和静态数据(例如,NFT 及其集合信息) +- 在通用应用程序中避免不必要的类型链接(和见证要求)(LiquidityPool 的 LP 代币) -以下示例在Sui上实现了基本的`Lock`和`Key`机制,其中`Lock`是一个共享对象,可以包含任何对象,而`Key`是一个拥有的对象,需要获取对锁内容的访问权限。 +以下示例在 Sui 上实现了基本的`Lock`和`Key`机制,其中`Lock`是一个共享对象,可以包含任何对象,而`Key`是一个拥有的对象,需要获取对锁内容的访问权限。 `Key`通过一个`ID`字段与其`Lock`关联。这种检查允许在链下发现目标,同时拆分动态可转让的功能和“静态”内容。这种方法的另一个好处是目标资产始终是可发现的,同时你可以将其`Key`包装到另一个对象中(例如市场上的列表)。 diff --git a/content/concepts/sui-move-concepts/patterns/transferrable-witness.mdx b/content/concepts/sui-move-concepts/patterns/transferrable-witness.mdx index e81778f..6a8ee66 100644 --- a/content/concepts/sui-move-concepts/patterns/transferrable-witness.mdx +++ b/content/concepts/sui-move-concepts/patterns/transferrable-witness.mdx @@ -2,7 +2,7 @@ title: 可转让见证模式 --- -可转让见证模式是基于能力和见证模式的结合。由于见证模式需要谨慎使用,你应该只允许经授权的用户生成它(最好只允许一次)。然而,某些场景需要模块X的类型授权可在另一个模块Y中使用。或者,可能存在需要在一段时间后执行授权的情况。 +可转让见证模式是基于能力和见证模式的结合。由于见证模式需要谨慎使用,你应该只允许经授权的用户生成它(最好只允许一次)。然而,某些场景需要模块 X 的类型授权可在另一个模块 Y 中使用。或者,可能存在需要在一段时间后执行授权的情况。 对于这些相当罕见的场景,可存储见证是一个不错的解决方案。 diff --git a/content/concepts/tokenomics/proof-of-stake.mdx b/content/concepts/tokenomics/proof-of-stake.mdx index 2098046..4fd6651 100644 --- a/content/concepts/tokenomics/proof-of-stake.mdx +++ b/content/concepts/tokenomics/proof-of-stake.mdx @@ -2,32 +2,32 @@ title: 权益证明 --- -Sui平台依赖委托权益证明 (DPoS) 来确定处理交易的验证器集。 +Sui 平台依赖委托权益证明 (DPoS) 来确定处理交易的验证器集。 -## SUI代币质押 {#staking} +## SUI 代币质押 {#staking} -在每个纪元内,一组固定的验证器处理操作,每个验证器都有来自SUI代币持有者的特定数量的质押。验证器在总质押中的份额是相关的,因为它决定了每个验证器在处理交易时的投票权份额。质押SUI意味着SUI代币将在整个纪元内被锁定。SUI代币持有者可以在纪元更改时自由提取其SUI或更改其选择的验证器。 +在每个纪元内,一组固定的验证器处理操作,每个验证器都有来自 SUI 代币持有者的特定数量的质押。验证器在总质押中的份额是相关的,因为它决定了每个验证器在处理交易时的投票权份额。质押 SUI 意味着 SUI 代币将在整个纪元内被锁定。SUI 代币持有者可以在纪元更改时自由提取其 SUI 或更改其选择的验证器。 ## 经济模型 {#economic-model} -本节介绍了Sui经济的不同组成部分如何相互作用,引入了Sui DPoS系统。有关参考,请查看[Sui Tokenomics](../tokenomics.mdx)概述中的Staking和Tokenomics图表。 +本节介绍了 Sui 经济的不同组成部分如何相互作用,引入了 Sui DPoS 系统。有关参考,请查看[Sui Tokenomics](../tokenomics.mdx)概述中的 Staking 和 Tokenomics 图表。 -Sui经济模型工作如下: +Sui 经济模型工作如下: 在每个纪元开始时,发生三个重要事件: -- SUI持有者向验证器质押(一些)他们的代币,形成一个新的[委员会](../../guides/operator/validator-committee.mdx)。 +- SUI 持有者向验证器质押(一些)他们的代币,形成一个新的[委员会](../../guides/operator/validator-committee.mdx)。 - 参考气价按照[Sui Gas Pricing](./gas-pricing.mdx)中描述的方式设定。 - 利用上一纪元的净流入调整[存储基金](./storage-fund.mdx)的规模。 -在执行这些操作后,协议计算质押总额,将质押的SUI和存储基金之和称为用户质押份额 $\alpha$。 +在执行这些操作后,协议计算质押总额,将质押的 SUI 和存储基金之和称为用户质押份额 $\alpha$。 -在每个纪元期间:用户向Sui平台提交交易,验证器处理这些交易。对于每笔交易,用户支付相关的计算和存储气体费用。在用户删除先前交易数据的情况下,用户将获得存储费用的部分退款。验证器观察其他验证器的行为并评估彼此的表现。 +在每个纪元期间:用户向 Sui 平台提交交易,验证器处理这些交易。对于每笔交易,用户支付相关的计算和存储气体费用。在用户删除先前交易数据的情况下,用户将获得存储费用的部分退款。验证器观察其他验证器的行为并评估彼此的表现。 -在每个纪元结束时:协议向DPoS机制的参与者分配权益奖励。这通过两个主要步骤进行: +在每个纪元结束时:协议向 DPoS 机制的参与者分配权益奖励。这通过两个主要步骤进行: -- 质押奖励的总额被计算为整个纪元中累积的计算费用加上纪元质押奖励补贴的总和。后者是临时的,仅存在于网络的最初几年,并在SUI的总供应达到其总供应时长期消失。 -- 质押奖励的总额分配给各种实体。值得注意的是,存储基金在计算纪元总质押时被考虑在内。然而,存储基金不属于任何实体,就像质押的SUI一样。相反,Sui经济模型将分配给存储基金的质押奖励份额(总质押奖励的 $(1-\alpha)$ 部分)支付给验证器,以补偿他们的存储成本。在这些奖励中,份额 $\gamma$ 被支付给验证器,而剩下的 $(1-\gamma)$ 用于再投资基金的资本。最后,让 $\beta_v$ 表示由验证器 $v$ 管理的质押份额中由自己拥有的份额,而 $(1-\beta_v)$ 表示由第三方质押者拥有的份额。验证器获得其自己质押的全部奖励,但仅保留由用户质押的SUI代币的佣金 $\delta_v\\%` 作为管理该质押的费用。用户质押池在验证器 $v$ 处的质押奖励的分配和验证器本身的质押奖励的分配相等: +- 质押奖励的总额被计算为整个纪元中累积的计算费用加上纪元质押奖励补贴的总和。后者是临时的,仅存在于网络的最初几年,并在 SUI 的总供应达到其总供应时长期消失。 +- 质押奖励的总额分配给各种实体。值得注意的是,存储基金在计算纪元总质押时被考虑在内。然而,存储基金不属于任何实体,就像质押的 SUI 一样。相反,Sui 经济模型将分配给存储基金的质押奖励份额(总质押奖励的 $(1-\alpha)$ 部分)支付给验证器,以补偿他们的存储成本。在这些奖励中,份额 $\gamma$ 被支付给验证器,而剩下的 $(1-\gamma)$ 用于再投资基金的资本。最后,让 $\beta_v$ 表示由验证器 $v$ 管理的质押份额中由自己拥有的份额,而 $(1-\beta_v)$ 表示由第三方质押者拥有的份额。验证器获得其自己质押的全部奖励,但仅保留由用户质押的 SUI 代币的佣金 $\delta_v\\%` 作为管理该质押的费用。用户质押池在验证器 $v$ 处的质押奖励的分配和验证器本身的质押奖励的分配相等: $$ UserStakeRewards_v \ = \Big[ \alpha(1-\delta_v)(1-\beta_v)\Big]\mu_v\sigma_v \times StakeRewards @@ -37,14 +37,14 @@ $$ ValidatorRewards_v \ = \ \Bigg[\alpha\Big(\beta_v+\delta_v(1-\beta_v)\Big)\mu_v\sigma_v+(1-\alpha)\frac{\gamma}{N}\Bigg] \times StakeRewards $$ -变量 $\mu_v$ 捕捉了[tallying rule](gas-pricing.mdx#tallying-rule)的输出,作为[gas price mechanism](./gas-pricing.mdx)的一部分计算,并对于性能良好的验证器来说 $\mu_v\geq1$,对于性能较差的验证器来说 $\mu_v<1$。这个变量确保验证器有"参与游戏"并有动力高效运营Sui。参数 $\sigma_v$ 捕捉每个验证器在总质押中的份额。 +变量 $\mu_v$ 捕捉了[tallying rule](gas-pricing.mdx#tallying-rule)的输出,作为[gas price mechanism](./gas-pricing.mdx)的一部分计算,并对于性能良好的验证器来说 $\mu_v\geq1$,对于性能较差的验证器来说 $\mu_v<1$。这个变量确保验证器有"参与游戏"并有动力高效运营 Sui。参数 $\sigma_v$ 捕捉每个验证器在总质押中的份额。 因此,拥有更多质押的验证器赚取更多质押奖励,联合 $\mu_v\sigma_v$ 项激励验证器增加其质押份额,同时也高效运营网络。从长远来看,这个激励鼓励用户将质押分布转向网络效率最高的验证器,提供了成本高效和去中心化的网络。 最后,存储基金奖励平均分配给所有 $N$ 个验证器(因为所有验证器都面临相似的存储数据负担)。未分配给用户或验证器的少量质押奖励,即份额 $(1-\alpha)(1-\gamma)$ 的质押奖励,重新投资到存储基金中。 -总体而言,这个设计鼓励验证器以较低的气价报价运作,但不能太低,否则将受到削减的质押奖励。因此,Sui气价机制和DPoS系统鼓励以可行的商业模式设定低气费的公平价格竞争。 +总体而言,这个设计鼓励验证器以较低的气价报价运作,但不能太低,否则将受到削减的质押奖励。因此,Sui 气价机制和 DPoS 系统鼓励以可行的商业模式设定低气费的公平价格竞争。 -## Sui激励 {#incentives} +## Sui 激励 {#incentives} -Sui经济模型赋予Sui用户一个重要的监控角色。一方面,用户希望他们的交易尽快而高效地处理。用户客户端,如钱包,通过优先与响应最快的验证器通信来鼓励这一点。这种高效的操作通过相对于响应较慢的验证器而言的提升奖励得到补偿。另一方面,SUI代币持有者接收与其选择的验证器相同的提升或惩罚的奖励。因此,一个不响应的验证器在Sui激励方面受到双重影响:他们直接通过被削减的奖励损失,间接地通过在未来纪元中减少用户质押而损失。 +Sui 经济模型赋予 Sui 用户一个重要的监控角色。一方面,用户希望他们的交易尽快而高效地处理。用户客户端,如钱包,通过优先与响应最快的验证器通信来鼓励这一点。这种高效的操作通过相对于响应较慢的验证器而言的提升奖励得到补偿。另一方面,SUI 代币持有者接收与其选择的验证器相同的提升或惩罚的奖励。因此,一个不响应的验证器在 Sui 激励方面受到双重影响:他们直接通过被削减的奖励损失,间接地通过在未来纪元中减少用户质押而损失。 diff --git a/content/concepts/tokenomics/staking-unstaking.mdx b/content/concepts/tokenomics/staking-unstaking.mdx index 479329d..bb53914 100644 --- a/content/concepts/tokenomics/staking-unstaking.mdx +++ b/content/concepts/tokenomics/staking-unstaking.mdx @@ -1,25 +1,25 @@ --- title: 质押和赎回 -description: 通过与验证器一起质押和赎回SUI,可以赚取来自气费的奖励百分比。 +description: 通过与验证器一起质押和赎回 SUI,可以赚取来自气费的奖励百分比。 --- -Sui使用委托权益证明(DPoS)系统来保护和操作网络,这意味着网络中验证器的投票权由SUI代币持有者委托给他们的质押量决定。委托给验证器的质押量越多,他们就拥有越多的投票权。作为处理交易和执行共识的交换,验证器根据收集到的气费奖励,赚取相应的奖励。然后,这些奖励作为质押奖励分享给质押者。 +Sui 使用委托权益证明(DPoS)系统来保护和操作网络,这意味着网络中验证器的投票权由 SUI 代币持有者委托给他们的质押量决定。委托给验证器的质押量越多,他们就拥有越多的投票权。作为处理交易和执行共识的交换,验证器根据收集到的气费奖励,赚取相应的奖励。然后,这些奖励作为质押奖励分享给质押者。 ## 质押 -你通过向网络发送调用系统Move包的实施的质押功能的交易来质押你的SUI代币。该交易将SUI代币包装在自托管的质押对象中。此质押对象包含有关验证器质押池ID和质押激活纪元的信息。引入[SIP-6](https://blog.sui.io/liquid-staking-coming-sui/)后,你可以使用你的质押对象参与液体质押协议。 +你通过向网络发送调用系统 Move 包的实施的质押功能的交易来质押你的 SUI 代币。该交易将 SUI 代币包装在自托管的质押对象中。此质押对象包含有关验证器质押池 ID 和质押激活纪元的信息。引入[SIP-6](https://blog.sui.io/liquid-staking-coming-sui/)后,你可以使用你的质押对象参与液体质押协议。 -与Sui兼容的加密钱包通常具有从你的Sui地址开始进行质押和赎回的功能。请参阅这些工具的相应文档,以开始质押你的SUI。 +与 Sui 兼容的加密钱包通常具有从你的 Sui 地址开始进行质押和赎回的功能。请参阅这些工具的相应文档,以开始质押你的 SUI。 ## 赎回 -与质押类似,用户通过发送调用系统Move包中的赎回功能的交易,从验证器那里撤回质押。该交易解开质押对象,并将本金和累积奖励一同作为SUI代币发送给用户。你只在质押在整个纪元内处于活动状态期间获得奖励。从验证器的奖励池中提取的奖励是基于质押的激活纪元和赎回纪元计算的。 +与质押类似,用户通过发送调用系统 Move 包中的赎回功能的交易,从验证器那里撤回质押。该交易解开质押对象,并将本金和累积奖励一同作为 SUI 代币发送给用户。你只在质押在整个纪元内处于活动状态期间获得奖励。从验证器的奖励池中提取的奖励是基于质押的激活纪元和赎回纪元计算的。 ## 选择质押的验证器 -当你在Sui上进行质押时,你必须选择你想要质押的特定验证器。选择验证器可能会影响你获得的质押奖励的金额。确定此金额的因素包括但不限于: +当你在 Sui 上进行质押时,你必须选择你想要质押的特定验证器。选择验证器可能会影响你获得的质押奖励的金额。确定此金额的因素包括但不限于: -- 验证器佣金率:验证器可以选择设置非零佣金率,指定他们从质押者那里获取的质押奖励的百分比。例如,如果一个验证器的佣金率为10%,那么每个质押者的质押奖励的10%将给予验证器。请注意,验证器可以在未来的某个时刻选择更改其佣金,而无需事先通知。 +- 验证器佣金率:验证器可以选择设置非零佣金率,指定他们从质押者那里获取的质押奖励的百分比。例如,如果一个验证器的佣金率为 10%,那么每个质押者的质押奖励的 10%将给予验证器。请注意,验证器可以在未来的某个时刻选择更改其佣金,而无需事先通知。 - 验证器性能:性能差的验证器可能会根据[tallying rule](./gas-pricing.mdx#tallying-rule)受到惩罚。受到惩罚的验证器在受到惩罚的纪元内不会获得任何质押奖励,而当你从该验证器撤回质押时,你也不会获得该纪元的奖励。 -与Sui兼容的加密钱包和浏览器通常提供验证器信息,例如佣金和APY。请参阅这些工具的相应文档,了解如何检索此数据。 +与 Sui 兼容的加密钱包和浏览器通常提供验证器信息,例如佣金和 APY。请参阅这些工具的相应文档,了解如何检索此数据。 diff --git a/content/concepts/tokenomics/storage-fund.mdx b/content/concepts/tokenomics/storage-fund.mdx index 68e6330..6cdbfbd 100644 --- a/content/concepts/tokenomics/storage-fund.mdx +++ b/content/concepts/tokenomics/storage-fund.mdx @@ -1,27 +1,27 @@ --- title: 存储基金 -description: Sui包含一个高效和可持续的经济机制,用于资助数据存储,考虑到Sui具有存储任意大量的链上数据的能力。 +description: Sui 包含一个高效和可持续的经济机制,用于资助数据存储,考虑到 Sui 具有存储任意大量的链上数据的能力。 --- -Sui包含一个高效和可持续的经济机制,用于资助数据存储,考虑到Sui具有存储任意大量的链上数据的能力。 +Sui 包含一个高效和可持续的经济机制,用于资助数据存储,考虑到 Sui 具有存储任意大量的链上数据的能力。 -从财务角度来看,链上数据存储引入了一个严重的跨时间挑战:今天处理和写入数据到存储的验证器可能与未来需要存储该数据的验证器不同。如果用户仅在写入时支付计算能力的费用,那么未来的用户将需要为过去的用户提供存储补贴,并支付不成比例的高费用。如果不加以解决,这种负面的网络外部性对于Sui未来可能变得非常繁重。 +从财务角度来看,链上数据存储引入了一个严重的跨时间挑战:今天处理和写入数据到存储的验证器可能与未来需要存储该数据的验证器不同。如果用户仅在写入时支付计算能力的费用,那么未来的用户将需要为过去的用户提供存储补贴,并支付不成比例的高费用。如果不加以解决,这种负面的网络外部性对于 Sui 未来可能变得非常繁重。 -Sui的经济设计包括一个存储基金,将过去交易的存储费重新分配给未来的验证器。当用户在Sui上进行交易时,他们预先支付计算和存储的费用。存储费用被存入一个存储基金,用于调整未来分配给验证器的质押奖励份额,相对于与他们质押SUI的用户。这个设计为未来的Sui验证器提供了可行的商业模型。 +Sui 的经济设计包括一个存储基金,将过去交易的存储费重新分配给未来的验证器。当用户在 Sui 上进行交易时,他们预先支付计算和存储的费用。存储费用被存入一个存储基金,用于调整未来分配给验证器的质押奖励份额,相对于与他们质押 SUI 的用户。这个设计为未来的 Sui 验证器提供了可行的商业模型。 ## 存储基金奖励 {#rewards} -Sui的委托权益证明(PoS)机制计算总质押为用户质押和存储基金中存入的SUI代币的总和。因此,存储基金根据其与总质押的大小相对应的份额,获得了整体质押奖励的相应份额。这些质押奖励的大部分,即份额 $\gamma$,支付给当前验证器以补偿存储成本,而剩余的 $(1-\gamma)$ 的奖励用于再投资基金。换句话说,分配给过去交易提交的存储费用的质押奖励被支付给当前验证器,以补偿他们的数据存储成本。当链上存储要求较高时,验证器会因为存储成本而获得可观的额外奖励,反之亦然。 +Sui 的委托权益证明(PoS)机制计算总质押为用户质押和存储基金中存入的 SUI 代币的总和。因此,存储基金根据其与总质押的大小相对应的份额,获得了整体质押奖励的相应份额。这些质押奖励的大部分,即份额 $\gamma$,支付给当前验证器以补偿存储成本,而剩余的 $(1-\gamma)$ 的奖励用于再投资基金。换句话说,分配给过去交易提交的存储费用的质押奖励被支付给当前验证器,以补偿他们的数据存储成本。当链上存储要求较高时,验证器会因为存储成本而获得可观的额外奖励,反之亦然。 具体而言,存储基金具有三个关键特征: - 存储基金由过去的交易资助,并作为将气费在不同纪元之间移动的工具。这确保未来的验证器得到了对过去的用户提出的存储要求的补偿。 -- 存储基金仅支付其资本的回报,不分发其本金。实际上,这就好像验证器能够借用存储基金的SUI作为额外的质押,并保留大部分质押奖励(占 $\gamma$%)。但请注意,验证器不会直接从存储基金获得资金。这确保了基金永远不会失去其资本化,并且可以无限期生存。这一特性得到了在基金中再投资的 $(1-\gamma)$% 的质押奖励的进一步支持。 +- 存储基金仅支付其资本的回报,不分发其本金。实际上,这就好像验证器能够借用存储基金的 SUI 作为额外的质押,并保留大部分质押奖励(占 $\gamma$%)。但请注意,验证器不会直接从存储基金获得资金。这确保了基金永远不会失去其资本化,并且可以无限期生存。这一特性得到了在基金中再投资的 $(1-\gamma)$% 的质押奖励的进一步支持。 - 存储基金包括一个“删除选项”。如果你删除数据,则将对最初支付的存储费用获得部分退款。存储费用存在是为了在数据生命周期内支付存储费用。在删除数据后,继续收费是没有理由的,因此这些费用会被退还。 :::info -“删除选项”不应与删除过去交易的概念混淆。Sui上的活动在每个纪元边界都是最终的,过去的交易是不可变的,永远无法撤销。可以删除的数据类型,例如不再存在的对象的数据,如NFT元数据,已兑换的门票,已结束的拍卖等。 +“删除选项”不应与删除过去交易的概念混淆。Sui 上的活动在每个纪元边界都是最终的,过去的交易是不可变的,永远无法撤销。可以删除的数据类型,例如不再存在的对象的数据,如 NFT 元数据,已兑换的门票,已结束的拍卖等。 ::: @@ -38,8 +38,8 @@ Sui的委托权益证明(PoS)机制计算总质押为用户质押和存储 ## 存储基金激励 {#incentives} -存储基金引入了各种有益的激励措施到Sui经济中: +存储基金引入了各种有益的激励措施到 Sui 经济中: - 其机制激励用户删除数据,并在存储这些数据的成本超过在链上保留数据所获得的价值时获得存储费用的退款。这引入了一个有用的基于市场的机制,用户在无法经济上保留数据时释放存储。 -- 它对SUI代币施加通货紧缩压力,因为活动增加会导致更大的存储需求,从而导致更多的SUI从流通中移除。 +- 它对 SUI 代币施加通货紧缩压力,因为活动增加会导致更大的存储需求,从而导致更多的 SUI 从流通中移除。 - 它在资本效率上非常高,因为它在经济上相当于一种租赁模型,用户通过按期支付的方式支付存储费用。 diff --git a/content/concepts/tokenomics/sui-bridging.mdx b/content/concepts/tokenomics/sui-bridging.mdx index b8a61da..075fad1 100644 --- a/content/concepts/tokenomics/sui-bridging.mdx +++ b/content/concepts/tokenomics/sui-bridging.mdx @@ -2,31 +2,31 @@ title: SUI 桥接 --- -桥接是将代币从一个区块链移动到另一个区块链的过程。当你使用桥接在不兼容的区块链之间移动代币时,桥接会将代币“包裹”起来,这意味着它们会转换为目标区块链的衍生代币。你可以将其他区块链的代币转移到SUI,也可以将SUI代币转移到其他区块链。 +桥接是将代币从一个区块链移动到另一个区块链的过程。当你使用桥接在不兼容的区块链之间移动代币时,桥接会将代币“包裹”起来,这意味着它们会转换为目标区块链的衍生代币。你可以将其他区块链的代币转移到 SUI,也可以将 SUI 代币转移到其他区块链。 -Sui通过[Wormhole Connect](#wormhole-connect)和[Wormhole Portal Bridge](#wormhole-portal-bridge)支持桥接。 +Sui 通过[Wormhole Connect](#wormhole-connect)和[Wormhole Portal Bridge](#wormhole-portal-bridge)支持桥接。 ## Wormhole Connect {#wormhole-connect} -用于将来自任何Wormhole支持链的代币桥接到Sui,并附带额外的Sui支付气费。开发人员还可以将Connect Token Bridge直接嵌入到其自己的网站和dApps中。 +用于将来自任何 Wormhole 支持链的代币桥接到 Sui,并附带额外的 Sui 支付气费。开发人员还可以将 Connect Token Bridge 直接嵌入到其自己的网站和 dApps 中。 -### Wormhole Connect资产支持 {#asset-support} +### Wormhole Connect 资产支持 {#asset-support} -最初,Wormhole Connect仅支持ETH、WETH、USDC、MATIC、WMATIC、BNB、WBNB、AVAX、WAVAX、FTM、WFTM、CELO、GLMR、WGLRM和SOL在Ethereum、Polygon、BSC、Avalanche、Celo、Moonbeam、Solana和Sui之间的锁定和铸造桥接。这意味着通过Wormhole Connect和底层Wormhole Token Bridge桥接的任何原生代币都将作为Wormhole铸造的代币接收到目标链上。在某些情况下,Wormhole铸造的代币是链上的规范表示。请参阅GitHub上的[Wormhole token list](https://github.com/wormhole-foundation/wormhole-token-list)。一些Wormhole铸造的代币支持在目标链的DEX上交换,以获取你需要的任何资产。 +最初,Wormhole Connect 仅支持 ETH、WETH、USDC、MATIC、WMATIC、BNB、WBNB、AVAX、WAVAX、FTM、WFTM、CELO、GLMR、WGLRM 和 SOL 在 Ethereum、Polygon、BSC、Avalanche、Celo、Moonbeam、Solana 和 Sui 之间的锁定和铸造桥接。这意味着通过 Wormhole Connect 和底层 Wormhole Token Bridge 桥接的任何原生代币都将作为 Wormhole 铸造的代币接收到目标链上。在某些情况下,Wormhole 铸造的代币是链上的规范表示。请参阅 GitHub 上的[Wormhole token list](https://github.com/wormhole-foundation/wormhole-token-list)。一些 Wormhole 铸造的代币支持在目标链的 DEX 上交换,以获取你需要的任何资产。 -### Wormhole Connect自动中继 {#automatic-relay} +### Wormhole Connect 自动中继 {#automatic-relay} -在基于EVM的链和Sui上,Wormhole Connect允许你在只在源链上支付气费的情况下桥接资产。自动中继功能代表用户在目标链上支付气费。 +在基于 EVM 的链和 Sui 上,Wormhole Connect 允许你在只在源链上支付气费的情况下桥接资产。自动中继功能代表用户在目标链上支付气费。 -### Wormhole Connect气费降落 {#gas-drop-off} +### Wormhole Connect 气费降落 {#gas-drop-off} -气费降落功能使用户能够在源链上支付额外的费用,以请求在目标链上获得少量的本地气体。例如,从以太坊桥接USDC到Sui的用户可以从其发送钱包支付以USDC计价的费用,以在其接收钱包中收到一些本地的SUI。这是除去他们正在桥接的USDC之外的额外费用。目前,气费降落仅在基于EVM的链和Sui上受支持。 +气费降落功能使用户能够在源链上支付额外的费用,以请求在目标链上获得少量的本地气体。例如,从以太坊桥接 USDC 到 Sui 的用户可以从其发送钱包支付以 USDC 计价的费用,以在其接收钱包中收到一些本地的 SUI。这是除去他们正在桥接的 USDC 之外的额外费用。目前,气费降落仅在基于 EVM 的链和 Sui 上受支持。 -要了解有关Wormhole Connect的更多信息,请参阅他们的[FAQ](https://docs.wormhole.com/wormhole/faqs)页面。 +要了解有关 Wormhole Connect 的更多信息,请参阅他们的[FAQ](https://docs.wormhole.com/wormhole/faqs)页面。 ## Wormhole Portal Bridge {#bridge} -由Wormhole提供动力的[Portal Bridge](https://www.portalbridge.com/sui)支持从[22个支持的Wormhole链](https://www.wormhole.com/network)中的任何一个桥接任何资产。 +由 Wormhole 提供动力的[Portal Bridge](https://www.portalbridge.com/sui)支持从[22 个支持的 Wormhole 链](https://www.wormhole.com/network)中的任何一个桥接任何资产。 ## 代币地址列表 {#token-address-list} diff --git a/content/concepts/tokenomics/sui-token.mdx b/content/concepts/tokenomics/sui-token.mdx index 6a1d568..68dbd87 100644 --- a/content/concepts/tokenomics/sui-token.mdx +++ b/content/concepts/tokenomics/sui-token.mdx @@ -1,17 +1,17 @@ --- title: SUI 代币 -description: Sui上的本地资产称为SUI。为了将代币与Sui网络区分开,代币使用大写的SUI。 +description: Sui 上的本地资产称为 SUI。为了将代币与 Sui 网络区分开,代币使用大写的 SUI。 --- -Sui上的本地资产称为SUI。为了将代币与Sui网络区分开,代币使用大写的SUI。 +Sui 上的本地资产称为 SUI。为了将代币与 Sui 网络区分开,代币使用大写的 SUI。 -SUI的总供应量上限为**10,000,000,000**(一百亿个代币)。SUI总供应的一部分在主网启动时变为流动性,其余代币将在未来几年内解锁,或者作为未来的质押奖励补贴进行分发。 +SUI 的总供应量上限为**10,000,000,000**(一百亿个代币)。SUI 总供应的一部分在主网启动时变为流动性,其余代币将在未来几年内解锁,或者作为未来的质押奖励补贴进行分发。 -SUI代币在Sui网络上有四个用途: +SUI 代币在 Sui 网络上有四个用途: -- 你可以质押SUI参与权益证明机制。 -- SUI是支付在Sui网络上执行和存储交易或其他操作所需的气费的资产。 -- 你可以将SUI用作各种应用程序的多功能和流动性资产,包括货币的标准功能 - 记账单位、交换媒介或价值存储 - 以及智能合约启用的更复杂功能、Sui生态系统中的互操作性和可组合性。 -- SUI代币通过作为参与链上投票的权利,在治理中发挥重要作用,涉及协议升级等问题。 +- 你可以质押 SUI 参与权益证明机制。 +- SUI 是支付在 Sui 网络上执行和存储交易或其他操作所需的气费的资产。 +- 你可以将 SUI 用作各种应用程序的多功能和流动性资产,包括货币的标准功能 - 记账单位、交换媒介或价值存储 - 以及智能合约启用的更复杂功能、Sui 生态系统中的互操作性和可组合性。 +- SUI 代币通过作为参与链上投票的权利,在治理中发挥重要作用,涉及协议升级等问题。 -由于SUI代币的供应是有限的,如果Sui解锁了许多用例并且数百万用户迁移到该平台,从长远来看,相同数量的代币需要用于更多的经济活动。此外,存储基金的存在创造了重要的货币动态,即更高的链上数据需求会转化为更大的存储基金,从而减少SUI在流通中的数量。 +由于 SUI 代币的供应是有限的,如果 Sui 解锁了许多用例并且数百万用户迁移到该平台,从长远来看,相同数量的代币需要用于更多的经济活动。此外,存储基金的存在创造了重要的货币动态,即更高的链上数据需求会转化为更大的存储基金,从而减少 SUI 在流通中的数量。 diff --git a/content/concepts/tokenomics/validators-staking.mdx b/content/concepts/tokenomics/validators-staking.mdx index b769c2a..5db54df 100644 --- a/content/concepts/tokenomics/validators-staking.mdx +++ b/content/concepts/tokenomics/validators-staking.mdx @@ -2,19 +2,19 @@ title: 验证者和质押池 --- -每个Sui验证者都维护自己的质押池,以跟踪质押金额并累积质押奖励。验证者池与在每个纪元边界计算的一系列汇率一起运作。这些汇率确定了每个过去的SUI质押者在将来可以提取的SUI代币数量。重要的是,随着越来越多的奖励存入质押池,汇率会增加,而且SUI存入质押池的时间越长,将会累积更多奖励。 +每个 Sui 验证者都维护自己的质押池,以跟踪质押金额并累积质押奖励。验证者池与在每个纪元边界计算的一系列汇率一起运作。这些汇率确定了每个过去的 SUI 质押者在将来可以提取的 SUI 代币数量。重要的是,随着越来越多的奖励存入质押池,汇率会增加,而且 SUI 存入质押池的时间越长,将会累积更多奖励。 -当SUI在纪元`E`存入质押池时,这些SUI会按照纪元`E`的汇率转换为流动性代币。随着质押池获得奖励,汇率会升值。在纪元`E'`,这些流动性代币价值更高,可以转化为更多的SUI。 -Sui质押池与典型的流动性池之间唯一的区别在于,在Sui中,流动性代币不存在。相反,全局汇率表用于跟踪会计。因为质押池中的所有SUI代币都被视为相同,无论它们最初是作为新的质押还是质押奖励存入,所有SUI代币立即被视为质押,因此立即累积奖励。 +当 SUI 在纪元`E`存入质押池时,这些 SUI 会按照纪元`E`的汇率转换为流动性代币。随着质押池获得奖励,汇率会升值。在纪元`E'`,这些流动性代币价值更高,可以转化为更多的 SUI。 +Sui 质押池与典型的流动性池之间唯一的区别在于,在 Sui 中,流动性代币不存在。相反,全局汇率表用于跟踪会计。因为质押池中的所有 SUI 代币都被视为相同,无论它们最初是作为新的质押还是质押奖励存入,所有 SUI 代币立即被视为质押,因此立即累积奖励。 -质押池是在系统级别的智能合约中实现的([staking_pool.move](https://github.com/MystenLabs/sui/blob/main/crates/sui-framework/packages/sui-system/sources/staking_pool.move)),并且是Sui框架的一部分。 +质押池是在系统级别的智能合约中实现的([staking_pool.move](https://github.com/MystenLabs/sui/blob/main/crates/sui-framework/packages/sui-system/sources/staking_pool.move)),并且是 Sui 框架的一部分。 ## 验证者池汇率 每个验证者池的汇率在每个纪元边界计算如下: -E+1的汇率 = ( 1 + ( E时第三方质押者奖励 / E时第三方质押 )) ( E时的汇率 ) +E+1 的汇率 = ( 1 + ( E 时第三方质押者奖励 / E 时第三方质押 )) ( E 时的汇率 ) -第三方拥有的奖励和质押与验证者拥有的奖励和质押之间的区别在于,验证者赚取质押池的代币上的佣金,而第三方质押者不会。这种会计方法使Sui能够使用单一的全局汇率表跟踪验证者和第三方代币持有者累积的奖励。 +第三方拥有的奖励和质押与验证者拥有的奖励和质押之间的区别在于,验证者赚取质押池的代币上的佣金,而第三方质押者不会。这种会计方法使 Sui 能够使用单一的全局汇率表跟踪验证者和第三方代币持有者累积的奖励。 {@include: ../../snippets/staking-pool-reqs.mdx} \ No newline at end of file diff --git a/content/concepts/transactions/gas-smashing.mdx b/content/concepts/transactions/gas-smashing.mdx index 1a4e471..453dd18 100644 --- a/content/concepts/transactions/gas-smashing.mdx +++ b/content/concepts/transactions/gas-smashing.mdx @@ -1,18 +1,18 @@ --- title: Gas Smashing -description: Sui通过将多个代币合并成一个对象来优化代币管理,以支付气费。 +description: Sui 通过将多个代币合并成一个对象来优化代币管理,以支付气费。 --- -在Sui上的每笔交易都与其执行相关联的气费,必须支付才能成功执行交易。Gas smashing使你能够使用多个代币而不仅仅是一个代币来支付这笔气费。这种机制在你可能有许多面额较小的代币的情况下特别有帮助,或者如果你只是想将你账户下的SUI代币数量最小化。Gas smashing通常是代币管理的有用工具,尤其是与`GasCoin`可编程交易块(PTB)参数一起使用时。 +在 Sui 上的每笔交易都与其执行相关联的气费,必须支付才能成功执行交易。Gas smashing 使你能够使用多个代币而不仅仅是一个代币来支付这笔气费。这种机制在你可能有许多面额较小的代币的情况下特别有帮助,或者如果你只是想将你账户下的 SUI 代币数量最小化。Gas smashing 通常是代币管理的有用工具,尤其是与`GasCoin`可编程交易块(PTB)参数一起使用时。 ## Gas smashing -如果你提供多个代币来支付气费,Gas smashing将在交易中自动发生。当Sui执行交易时,Sui将你提供的所有代币合并或“smash”以支付气费,将它们合并为一个单一的代币。这种合并发生在交易中提供的代币金额或交易中提供的气费预算之间(只要它在最小和最大气费预算之间)。Sui从单一代币中扣除气费,而不考虑交易的执行状态。特别地,这意味着即使交易由于某种原因(例如执行错误)未能执行,你提供的作为气费代币的代币在交易执行后仍然被smash。 +如果你提供多个代币来支付气费,Gas smashing 将在交易中自动发生。当 Sui 执行交易时,Sui 将你提供的所有代币合并或“smash”以支付气费,将它们合并为一个单一的代币。这种合并发生在交易中提供的代币金额或交易中提供的气费预算之间(只要它在最小和最大气费预算之间)。Sui 从单一代币中扣除气费,而不考虑交易的执行状态。特别地,这意味着即使交易由于某种原因(例如执行错误)未能执行,你提供的作为气费代币的代币在交易执行后仍然被 smash。 -Gas smashing是进行代币管理的高效方式,可以将许多较小的代币合并成一个单一的代币,你可以使用该代币不仅支付气费,还可以用于交易中合并代币的其他操作。特别是,你可以使用gas smashing合并多个代币以支付PTB的气费,然后相同的PTB可以从`GasCoin`中提取。PTB中提供了一个特殊的参数,该参数引用Sui从中扣除气费后用于支付gas的代币,你可以使用它将剩余的SUI转移到另一个地址。由于在交易中提供了多个气费代币,Gas smashing会自动发生,因此你可以将多个代币合并为其他交易的一部分,以与非代币管理特定交易并行进行代币管理。 +Gas smashing 是进行代币管理的高效方式,可以将许多较小的代币合并成一个单一的代币,你可以使用该代币不仅支付气费,还可以用于交易中合并代币的其他操作。特别是,你可以使用 gas smashing 合并多个代币以支付 PTB 的气费,然后相同的 PTB 可以从`GasCoin`中提取。PTB 中提供了一个特殊的参数,该参数引用 Sui 从中扣除气费后用于支付 gas 的代币,你可以使用它将剩余的 SUI 转移到另一个地址。由于在交易中提供了多个气费代币,Gas smashing 会自动发生,因此你可以将多个代币合并为其他交易的一部分,以与非代币管理特定交易并行进行代币管理。 -Sui在单个PTB中最多可以smash 256个代币 - 如果gas代币数量超过此数量,则不处理该交易。此外,在smash gas代币时,Sui会删除所有代币,除了第一个代币。由于这个原因,通常与删除这些代币相关联的存储回扣。与其他存储回扣一样,你不能使用所得的退款支付交易的气费(直到交易执行后才记入代币),但它可能在交易执行后导致退款。此退款与交易的气费余额一起存储在交易执行后提供的第一个gas代币中。 +Sui 在单个 PTB 中最多可以 smash 256 个代币 - 如果 gas 代币数量超过此数量,则不处理该交易。此外,在 smash gas 代币时,Sui 会删除所有代币,除了第一个代币。由于这个原因,通常与删除这些代币相关联的存储回扣。与其他存储回扣一样,你不能使用所得的退款支付交易的气费(直到交易执行后才记入代币),但它可能在交易执行后导致退款。此退款与交易的气费余额一起存储在交易执行后提供的第一个 gas 代币中。 ## 在有退款的情况下耗尽气体 -由于代币无论执行状态如何都会被smash,存储回扣可能导致看似奇怪的情况,即交易既可能耗尽气体,又可能以负气体和存储费(从交易中获得退款)结束。作为可能发生这种情况的示例,考虑具有气体预算为`5000`的交易`T`,并且你提供值为`1000`、`2000`、`3000`、`4000`和`5000`的代币`C1`、`C2`、`C3`、`C4`、`C5`来支付气体。如果代币对象的存储回扣为`2000`,并且`T`执行的气体费用超过了提供的`5000`气体预算(因此`T`耗尽气体),则其执行状态为`OutOfGas`。`C1`代币的余额为`1000` + `2000` + `3000` + `4000` + `5000` - `5000` + `2000` * `4` = `15000` - `5000` + `8000` = `18000`,并且`T`最终以负气体和存储费(即`3000`的退款)结束。 +由于代币无论执行状态如何都会被 smash,存储回扣可能导致看似奇怪的情况,即交易既可能耗尽气体,又可能以负气体和存储费(从交易中获得退款)结束。作为可能发生这种情况的示例,考虑具有气体预算为`5000`的交易`T`,并且你提供值为`1000`、`2000`、`3000`、`4000`和`5000`的代币`C1`、`C2`、`C3`、`C4`、`C5`来支付气体。如果代币对象的存储回扣为`2000`,并且`T`执行的气体费用超过了提供的`5000`气体预算(因此`T`耗尽气体),则其执行状态为`OutOfGas`。`C1`代币的余额为`1000` + `2000` + `3000` + `4000` + `5000` - `5000` + `2000` * `4` = `15000` - `5000` + `8000` = `18000`,并且`T`最终以负气体和存储费(即`3000`的退款)结束。 diff --git a/content/concepts/transactions/prog-txn-blocks.mdx b/content/concepts/transactions/prog-txn-blocks.mdx index e46d99c..47fcc63 100644 --- a/content/concepts/transactions/prog-txn-blocks.mdx +++ b/content/concepts/transactions/prog-txn-blocks.mdx @@ -1,22 +1,22 @@ --- title: 可编程交易块 -description: 可编程交易块是在Sui上完成交易的一组命令。 +description: 可编程交易块是在 Sui 上完成交易的一组命令。 --- -在Sui上,交易不仅仅是资产流动的基本记录。Sui上的交易由一系列命令组成,这些命令在输入上执行以定义交易的结果。这些命令组被称为可编程交易块(PTBs),它们定义了Sui上的所有用户交易。PTBs允许用户在单个交易中调用多个Move函数,管理其对象和代币,而无需发布新的Move包。PTBs专为自动化和交易构建器而设计,是生成交易的轻量而灵活的方式。然而,不支持更复杂的编程模式,如循环,在这些情况下,你必须发布新的Move包。 +在 Sui 上,交易不仅仅是资产流动的基本记录。Sui 上的交易由一系列命令组成,这些命令在输入上执行以定义交易的结果。这些命令组被称为可编程交易块(PTBs),它们定义了 Sui 上的所有用户交易。PTBs 允许用户在单个交易中调用多个 Move 函数,管理其对象和代币,而无需发布新的 Move 包。PTBs 专为自动化和交易构建器而设计,是生成交易的轻量而灵活的方式。然而,不支持更复杂的编程模式,如循环,在这些情况下,你必须发布新的 Move 包。 -正如前面提到的,每个PTB由独立的交易命令(有时简称为交易或命令)组成。每个交易命令按顺序执行,你可以在任何后续交易命令中使用一个交易命令的结果。所有块中所有交易命令的效果,特别是对象修改或转移,在交易结束时以原子方式应用。如果一个交易命令失败,则整个块失败,不会应用来自命令的任何效果。 +正如前面提到的,每个 PTB 由独立的交易命令(有时简称为交易或命令)组成。每个交易命令按顺序执行,你可以在任何后续交易命令中使用一个交易命令的结果。所有块中所有交易命令的效果,特别是对象修改或转移,在交易结束时以原子方式应用。如果一个交易命令失败,则整个块失败,不会应用来自命令的任何效果。 -一个PTB可以在单个执行中执行多达1,024个独特的操作,而在传统区块链上的交易需要执行1,024次以实现相同的结果。该结构还促进了更便宜的气费。单独执行交易的成本总是高于将这些相同的交易集中在PTB中的成本。 +一个 PTB 可以在单个执行中执行多达 1,024 个独特的操作,而在传统区块链上的交易需要执行 1,024 次以实现相同的结果。该结构还促进了更便宜的气费。单独执行交易的成本总是高于将这些相同的交易集中在 PTB 中的成本。 -本主题的其余部分介绍了交易命令的执行语义。它假设对Sui对象模型和Move语言有一定的了解。有关这些主题的更多信息,请参见以下文档: +本主题的其余部分介绍了交易命令的执行语义。它假设对 Sui 对象模型和 Move 语言有一定的了解。有关这些主题的更多信息,请参见以下文档: - [对象模型](../object-model.mdx) -- [Move概念](../sui-move-concepts.mdx) +- [Move 概念](../sui-move-concepts.mdx) ## 交易类型 -与执行语义相关的PTB的两个部分。其他交易信息,如交易发件人或气体限制,可能会被引用,但超出了范围。PTB的结构如下: +与执行语义相关的 PTB 的两个部分。其他交易信息,如交易发件人或气体限制,可能会被引用,但超出了范围。PTB 的结构如下: ```rust { @@ -26,35 +26,35 @@ description: 可编程交易块是在Sui上完成交易的一组命令。 ``` 深入了解两个主要组成部分: -- `inputs` 值是一个参数向量,`[Input]`。这些参数可以是对象或纯值,你可以在命令中使用它们。这些对象要么由发送方拥有,要么是共享/不可变对象。纯值表示简单的Move值,如 `u64` 或 `String` 值,你可以纯粹地通过它们的字节构建。由于历史原因,在Rust实现中,`Input` 被称为 `CallArg`。 +- `inputs` 值是一个参数向量,`[Input]`。这些参数可以是对象或纯值,你可以在命令中使用它们。这些对象要么由发送方拥有,要么是共享/不可变对象。纯值表示简单的 Move 值,如 `u64` 或 `String` 值,你可以纯粹地通过它们的字节构建。由于历史原因,在 Rust 实现中,`Input` 被称为 `CallArg`。 - `commands` 值是一个命令向量,`[Command]`。可能的命令包括: - `TransferObjects` 将多个(一个或多个)对象发送到指定地址。 - `SplitCoins` 从单个代币中拆分多个(一个或多个)代币。可以是任何 `sui::coin::Coin<_>` 对象。 - `MergeCoins` 将多个(一个或多个)代币合并为一个代币。可以合并任何 `sui::coin::Coin<_>` 对象,只要它们都是相同类型的。 - - `MakeMoveVec` 创建一个Move值的向量(可能为空)。主要用于构造将用作 `MoveCall` 参数的Move值的向量。 - - `MoveCall` 调用已发布包中的 `entry` 或 `public` Move函数。 + - `MakeMoveVec` 创建一个 Move 值的向量(可能为空)。主要用于构造将用作 `MoveCall` 参数的 Move 值的向量。 + - `MoveCall` 调用已发布包中的 `entry` 或 `public` Move 函数。 - `Publish` 创建一个新包并调用该包中每个模块的 `init` 函数。 - `Upgrade` 升级现有包。升级由该包的 `sui::package::UpgradeCap` 限制。 ## 输入和结果 -输入和结果是你可以在交易命令中使用的两种类型的值。输入是提供给PTB的值,而结果是由PTB命令产生的值。输入可以是对象或简单的Move值,而结果可以是任意的Move值(包括对象)。 +输入和结果是你可以在交易命令中使用的两种类型的值。输入是提供给 PTB 的值,而结果是由 PTB 命令产生的值。输入可以是对象或简单的 Move 值,而结果可以是任意的 Move 值(包括对象)。 可以将输入和结果看作填充值数组。对于输入,有一个单一的数组,但对于结果,对于每个单独的交易命令都有一个数组,从而创建了一个结果值的二维数组。你可以通过借用(可变或不可变)、复制(如果类型允许)或移动(从数组中取出值而不重新索引)来访问这些值。 ### 输入 -PTB的输入参数可广泛分为对象或纯值两种。这些参数的直接实现通常由交易构建器或SDK所隐藏。本节描述了在指定输入列表 `[Input]` 时Sui网络需要的信息或数据。每个 `Input` 都是一个对象,`Input::Object(ObjectArg)`,其中包含指定要使用的对象的必要元数据,或者是纯值,`Input::Pure(PureArg)`,其中包含值的字节。 +PTB 的输入参数可广泛分为对象或纯值两种。这些参数的直接实现通常由交易构建器或 SDK 所隐藏。本节描述了在指定输入列表 `[Input]` 时 Sui 网络需要的信息或数据。每个 `Input` 都是一个对象,`Input::Object(ObjectArg)`,其中包含指定要使用的对象的必要元数据,或者是纯值,`Input::Pure(PureArg)`,其中包含值的字节。 对于对象输入,所需的元数据取决于对象的[所有权](../object-ownership.mdx)类型。`ObjectArg` 枚举的数据如下: -如果对象由地址拥有(或它是不可变的),则使用 `ObjectArg::ImmOrOwnedObject(ObjectID, SequenceNumber, ObjectDigest)`。三元组分别指定对象的ID、其序列号(也称为版本)和对象数据的摘要。 +如果对象由地址拥有(或它是不可变的),则使用 `ObjectArg::ImmOrOwnedObject(ObjectID, SequenceNumber, ObjectDigest)`。三元组分别指定对象的 ID、其序列号(也称为版本)和对象数据的摘要。 如果对象是共享的,则使用 `Object::SharedObject { id: ObjectID, initial_shared_version: SequenceNumber, mutable: bool }`。与 `ImmOrOwnedObject` 不同,共享对象的版本和摘要由网络的共识协议确定。`initial_shared_version` 是对象首次共享时的版本,当协议尚未看到带有该对象的事务时,它由共识使用。虽然所有共享对象都可以被变更,但 `mutable` 标志指示该对象在此事务中是否可变。在 `mutable` 标志设置为 `false` 的情况下,对象是只读的,系统可以并行安排其他只读事务。 -如果对象由另一个对象拥有,例如通过 `TransferObjects` 命令或 `sui::transfer::transfer` 函数将其发送到对象的ID,则使用 `ObjectArg::Receiving(ObjectID, SequenceNumber, ObjectDigest)`。对象数据与 `ImmOrOwnedObject` 案例相同。 +如果对象由另一个对象拥有,例如通过 `TransferObjects` 命令或 `sui::transfer::transfer` 函数将其发送到对象的 ID,则使用 `ObjectArg::Receiving(ObjectID, SequenceNumber, ObjectDigest)`。对象数据与 `ImmOrOwnedObject` 案例相同。 -对于纯输入,提供的唯一数据是[BCS](https://github.com/MystenLabs/sui/blob/main/crates/sui-framework/docs/bcs.md)字节,这些字节被反序列化以构造Move值。并非所有Move值都可以从BCS字节构造出来。这意味着即使字节与给定Move类型的预期布局匹配,它们也不能被反序列化为该类型的值,除非该类型是 `Pure` 值允许的类型之一。以下类型允许与纯值一起使用: +对于纯输入,提供的唯一数据是[BCS](https://github.com/MystenLabs/sui/blob/main/crates/sui-framework/docs/bcs.md)字节,这些字节被反序列化以构造 Move 值。并非所有 Move 值都可以从 BCS 字节构造出来。这意味着即使字节与给定 Move 类型的预期布局匹配,它们也不能被反序列化为该类型的值,除非该类型是 `Pure` 值允许的类型之一。以下类型允许与纯值一起使用: - 所有原始类型: - `u8` @@ -65,12 +65,12 @@ PTB的输入参数可广泛分为对象或纯值两种。这些参数的直接 - `u256` - `bool` - `address` -- 一个字符串,可以是ASCII字符串 (`std::ascii::String`) 或UTF8字符串 (`std::string::String`)。在任何情况下,都会验证字节是否是具有相应编码的有效字符串。 -- 一个对象ID `sui::object::ID`。 +- 一个字符串,可以是 ASCII 字符串 (`std::ascii::String`) 或 UTF8 字符串 (`std::string::String`)。在任何情况下,都会验证字节是否是具有相应编码的有效字符串。 +- 一个对象 ID `sui::object::ID`。 - 一个向量,`vector`,其中 `T` 是对纯输入有效类型的递归检查。 - 一个选项,`std::option::Option`,其中 `T` 是对纯输入有效类型的递归检查。 -有趣的是,字节在类型在命令中指定之前不会被验证,例如在 `MoveCall` 或 `MakeMoveVec` 中。这意味着给定的纯输入可以用于实例化多种类型的Move值。有关更多详细信息,请参见 [Arguments section](#arguments)。 +有趣的是,字节在类型在命令中指定之前不会被验证,例如在 `MoveCall` 或 `MakeMoveVec` 中。这意味着给定的纯输入可以用于实例化多种类型的 Move 值。有关更多详细信息,请参见 [Arguments section](#arguments)。 ### 结果 diff --git a/content/concepts/transactions/transaction-lifecycle.mdx b/content/concepts/transactions/transaction-lifecycle.mdx index 09fa9e0..9c9def9 100644 --- a/content/concepts/transactions/transaction-lifecycle.mdx +++ b/content/concepts/transactions/transaction-lifecycle.mdx @@ -1,13 +1,13 @@ --- title: 交易的生命周期 -description: 在Sui网络上,交易的生命周期与其他区块链存在一些差异。 +description: 在 Sui 网络上,交易的生命周期与其他区块链存在一些差异。 --- -Sui网络上的交易在其生命周期内经历了许多不同的步骤。 +Sui 网络上的交易在其生命周期内经历了许多不同的步骤。 ## 生命周期概述 -在高层次上,以下图表概述了Sui区块链上交易的生命周期。 +在高层次上,以下图表概述了 Sui 区块链上交易的生命周期。 ![交易生命周期](./images/txn-lifecycle.png) @@ -15,38 +15,38 @@ Sui网络上的交易在其生命周期内经历了许多不同的步骤。 1. 过程的第一步是创建交易。具有私钥的用户创建并签署用户交易,以改变其拥有的对象,或改变其拥有的对象和[共享对象](../object-ownership/shared.mdx)的混合。 -2. Sui将交易发送给每个验证器(通常通过全节点)。验证器执行一系列有效性和安全性检查,对其进行签名,并将已签名的交易返回给客户端。 +2. Sui 将交易发送给每个验证器(通常通过全节点)。验证器执行一系列有效性和安全性检查,对其进行签名,并将已签名的交易返回给客户端。 -3. 然后客户端从至少占Sui总股份的2/3的验证器集合中收集响应,形成一个交易证书。因此,与基于共识的区块链不同,Sui验证器无需传播签名(八卦签名)或聚合证书,这个工作现在是客户端或网关的责任。 +3. 然后客户端从至少占 Sui 总股份的 2/3 的验证器集合中收集响应,形成一个交易证书。因此,与基于共识的区块链不同,Sui 验证器无需传播签名(八卦签名)或聚合证书,这个工作现在是客户端或网关的责任。 -4. 在组装证书之后,客户端将其发送回所有验证器,验证器检查其有效性并向客户端确认其收到。如果交易仅涉及拥有的对象,则Sui可以立即处理交易证书并执行它,而无需等待[共识引擎](../sui-architecture/consensus.mdx)(**直接快速路径**)。所有证书都将转发到Sui基于DAG的共识协议(也由Sui验证器操作)。 +4. 在组装证书之后,客户端将其发送回所有验证器,验证器检查其有效性并向客户端确认其收到。如果交易仅涉及拥有的对象,则 Sui 可以立即处理交易证书并执行它,而无需等待[共识引擎](../sui-architecture/consensus.mdx)(**直接快速路径**)。所有证书都将转发到 Sui 基于 DAG 的共识协议(也由 Sui 验证器操作)。 5. 共识最终输出证书的总排序;验证器检查并执行其中包含共享对象的证书。 6. 客户端可以收集大多数验证器的响应,将其组装成一个效应证书,并将其用作交易结算的证明。 -7. 随后,Sui为每个共识提交形成检查点,还用它来驱动重新配置协议。 +7. 随后,Sui 为每个共识提交形成检查点,还用它来驱动重新配置协议。 完整的[Sui Lutris](https://docs.sui.io/paper/sui-lutris.pdf)文件提供了有关安全性和活跃性协议如何运作以及它们在具有拜占庭参与者的部分同步标准分布式系统模型中的安全性证明的详细信息。以下各节详细介绍了交易生命周期的各个阶段。 ## 提交 -在Sui上的所有交易都是在提交到网络时开始的。例如,假设你想将你在钱包中拥有的NFT转移到你朋友的地址。首先,你将使用钱包或其他应用程序创建一个交易。交易包括你的燃气支付对象和一个命令,将NFT对象转移到你朋友的地址。在钱包或应用程序将交易提交到网络之前,它还必须对其进行签名。 +在 Sui 上的所有交易都是在提交到网络时开始的。例如,假设你想将你在钱包中拥有的 NFT 转移到你朋友的地址。首先,你将使用钱包或其他应用程序创建一个交易。交易包括你的燃气支付对象和一个命令,将 NFT 对象转移到你朋友的地址。在钱包或应用程序将交易提交到网络之前,它还必须对其进行签名。 -交易签名后,钱包或应用程序代表用户将交易提交给Sui全节点。 +交易签名后,钱包或应用程序代表用户将交易提交给 Sui 全节点。 ## 认证 认证发生在交易提交到全节点之后。提交后,全节点开始认证交易的过程。全节点无法单独认证交易,因为它无法完全了解网络上的所有交易。因此,全节点必须将交易发送给验证器。验证器对交易进行有效性检查,并在通过时对其进行签名。为了被视为有效,交易必须通过以下检查: - 交易具有有效的用户签名。 - - 交易的发起者必须可以访问交易使用的所有拥有的输入对象。在前述NFT示例中,有效性检查确保你拥有要发送给朋友的NFT。 + - 交易的发起者必须可以访问交易使用的所有拥有的输入对象。在前述 NFT 示例中,有效性检查确保你拥有要发送给朋友的 NFT。 - 交易使用的所有共享输入对象存在。 - 燃气币是一个`Coin`对象,并且它包含至少与交易的燃气预算指定的一样多的燃气。 -如果所有有效性检查都通过,则验证器尝试锁定所有拥有的输入对象到给定的交易摘要。这确保每个拥有的输入对象一次只能被一个交易使用,这是Sui防止双重花费的方式。换句话说,这确保你只将你的NFT发送给一个朋友,而不是试图将同样的NFT发送给所有朋友。 +如果所有有效性检查都通过,则验证器尝试锁定所有拥有的输入对象到给定的交易摘要。这确保每个拥有的输入对象一次只能被一个交易使用,这是 Sui 防止双重花费的方式。换句话说,这确保你只将你的 NFT 发送给一个朋友,而不是试图将同样的 NFT 发送给所有朋友。 -如果锁定成功,验证器使用其BLS私钥对交易进行签名,并将签名返回给全节点。然而,单个验证器的签名是不够的。全节点必须从足够多的验证器收集签名,以形成超过半数的超过半数。 +如果锁定成功,验证器使用其 BLS 私钥对交易进行签名,并将签名返回给全节点。然而,单个验证器的签名是不够的。全节点必须从足够多的验证器收集签名,以形成超过半数的超过半数。 :::info @@ -58,7 +58,7 @@ Sui网络上的交易在其生命周期内经历了许多不同的步骤。 由于先前描述的锁定步骤,不可能同时为两个尝试使用相同拥有对象的不同交易形成证书。即使有一些不诚实的验证器非法签署了两笔交易,这也是由于分布式计算中的“法定人数交集”原则。 -如果不到1/3的验证器是不诚实的(拜占庭式),则任何两个证书的签署者集合必须有一个包含至少一个诚实的验证器 +如果不到 1/3 的验证器是不诚实的(拜占庭式),则任何两个证书的签署者集合必须有一个包含至少一个诚实的验证器 ## 执行 @@ -67,7 +67,7 @@ Sui网络上的交易在其生命周期内经历了许多不同的步骤。 然后,每个验证器根据交易是否: - 不访问任何共享输入对象,此时立即执行。 -- 访问共享输入对象,在这种情况下,将对象提交到Sui的共识层,该层使用相同共享对象的其他交易对其进行排序,然后执行它。 +- 访问共享输入对象,在这种情况下,将对象提交到 Sui 的共识层,该层使用相同共享对象的其他交易对其进行排序,然后执行它。 ## 认证效果 @@ -87,7 +87,7 @@ Sui网络上的交易在其生命周期内经历了许多不同的步骤。 在你或全节点观察到效果证书之后,你可以确信交易将被包含在检查点中,这意味着交易无法被撤销。 -如果愿意,你可以向朋友展示效果证书,以证明你已向其发送NFT。验证器签名的存在意味着效果证书无法伪造。 +如果愿意,你可以向朋友展示效果证书,以证明你已向其发送 NFT。验证器签名的存在意味着效果证书无法伪造。 ## 检查点 @@ -101,7 +101,7 @@ Sui网络上的交易在其生命周期内经历了许多不同的步骤。 然后,验证器构建检查点,其中(除其他数据外)包含交易摘要的列表以及每个交易的交易效果的摘要。由于检查点必须完整,网络有时必须等待所有交易可用以形成检查点,这可能需要几个提交的时间。这个过程通常在几秒钟内完成。 -在这一点上,交易已经达到了其生命周期的末端,并包含在Sui网络上交易活动的永久记录中。 +在这一点上,交易已经达到了其生命周期的末端,并包含在 Sui 网络上交易活动的永久记录中。 ## 交易最终性 @@ -119,23 +119,23 @@ Sui网络上的交易在其生命周期内经历了许多不同的步骤。 ## 达到效果证书的示例路径 -作为一个现实世界的例子,假设你想支付当地咖啡店10 SUI购买早晨的咖啡。咖啡店如何确保支付已完成并允许你拿取咖啡呢? +作为一个现实世界的例子,假设你想支付当地咖啡店 10 SUI 购买早晨的咖啡。咖啡店如何确保支付已完成并允许你拿取咖啡呢? -第1步:交易创建 +第 1 步:交易创建 -你打开手机上的钱包应用,扫描包含收款人链上地址的咖啡店二维码。钱包应用构建一个交易,从你的Sui地址向咖啡店地址转移10 Sui。你审核交易详情并批准。然后,钱包应用使用你的私钥对交易进行签名。现在你有一个已签名的交易。 +你打开手机上的钱包应用,扫描包含收款人链上地址的咖啡店二维码。钱包应用构建一个交易,从你的 Sui 地址向咖啡店地址转移 10 Sui。你审核交易详情并批准。然后,钱包应用使用你的私钥对交易进行签名。现在你有一个已签名的交易。 -第2步:交易广播 +第 2 步:交易广播 你的钱包应用将已签名的交易提交给一个全节点。全节点将交易广播到网络中的所有验证器。 -第3步:交易认证 +第 3 步:交易认证 验证器从全节点接收交易。在检查其有效性后,验证器锁定了引用的拥有对象,并将其交易签名返回给全节点。 在全节点收集到法定人数的签名之后,它形成了一个交易证书。交易证书包含交易和来自大多数验证器的签名。 -第4步:交易完成 +第 4 步:交易完成 全节点将交易证书广播到所有验证器。验证器接收交易证书,验证其有效性(例如,是否确实有足够的签名),执行交易,并解锁先前锁定的拥有对象。交易效果是执行的交易的输出。验证器对交易效果进行签名并将其与其签名一起返回给全节点。 @@ -167,9 +167,9 @@ Sui网络上的交易在其生命周期内经历了许多不同的步骤。 ### 纪元更改 -定期(~24小时),Sui网络进入纪元更改的过程。在纪元更改期间,网络计算并分发质押奖励,验证器元数据生效,以及执行其他网络过程。所有用户交易都延迟到新纪元开始。 +定期(~24 小时),Sui 网络进入纪元更改的过程。在纪元更改期间,网络计算并分发质押奖励,验证器元数据生效,以及执行其他网络过程。所有用户交易都延迟到新纪元开始。 -如果你的交易在纪元边界提交,以极少数的完美时机,可能法定人数的验证器已经决定在当前纪元中不接受任何新的交易证书。当然,这意味着你的咖啡购买也不会被检查点化。对于已认证但未最终化的任何交易,如果执行了,它们将被撤销,或者其拥有的对象将被解锁但尚未执行。在这种情况下,交易证书不能保证最终性。在新纪元中,该交易证书将变为无效,因为验证器签名是对纪元ID的签名。要继续进行此交易,需要具有新纪元ID的新交易证书。标准的全节点实现会自动处理这个问题。 +如果你的交易在纪元边界提交,以极少数的完美时机,可能法定人数的验证器已经决定在当前纪元中不接受任何新的交易证书。当然,这意味着你的咖啡购买也不会被检查点化。对于已认证但未最终化的任何交易,如果执行了,它们将被撤销,或者其拥有的对象将被解锁但尚未执行。在这种情况下,交易证书不能保证最终性。在新纪元中,该交易证书将变为无效,因为验证器签名是对纪元 ID 的签名。要继续进行此交易,需要具有新纪元 ID 的新交易证书。标准的全节点实现会自动处理这个问题。 ### 验证最终性 diff --git a/content/concepts/versioning.mdx b/content/concepts/versioning.mdx index 0dbea67..832fe24 100644 --- a/content/concepts/versioning.mdx +++ b/content/concepts/versioning.mdx @@ -19,7 +19,7 @@ description: 版本控制提供了在 Sui 网络上升级包和对象的能力 Sui 在其对象版本控制算法中使用 [Lamport 时间戳](https://en.wikipedia.org/wiki/Lamport_timestamp)。使用 Lamport 时间戳可以保证版本永远不会被重复使用,因为事务触及的对象的新版本是事务所有输入对象的最新版本加一。例如,使用版本 5 的 gas 对象 `G` 进行转移的事务将更新 `O` 和 `G` 的版本至 `1 + max(5, 3) = 6`(版本 6)。 -以下部分详细说明了 Lamport 版本的相关性,以维持“不重复使用 (ID, version)” 不变性或在访问对象的事务输入发生变化的情况下访问对象,具体取决于该对象的所有权。 +以下部分详细说明了 Lamport 版本的相关性,以维持“不重复使用 (ID, version)”不变性或在访问对象的事务输入发生变化的情况下访问对象,具体取决于该对象的所有权。 ### 地址所有的对象 diff --git a/content/guides.mdx b/content/guides.mdx index 798cbe2..0259ea2 100644 --- a/content/guides.mdx +++ b/content/guides.mdx @@ -5,11 +5,11 @@ sidebar_label: 概览 import { Cards, Card } from "../site/src/components/Cards" -通常,学习一项新技术的最佳方式是通过实践。本部分的内容包含具体示例,以指导你在Sui网络上进行开发。无论你是Web3新手还是经验丰富的Sui专业人员,本部分的指南都将帮助你充分利用Sui开发经验。 +通常,学习一项新技术的最佳方式是通过实践。本部分的内容包含具体示例,以指导你在 Sui 网络上进行开发。无论你是 Web3 新手还是经验丰富的 Sui 专业人员,本部分的指南都将帮助你充分利用 Sui 开发经验。 ## 按角色分类的指南 -根据你在Sui生态系统中的角色,提供常见任务的说明。 +根据你在 Sui 生态系统中的角色,提供常见任务的说明。 适用于所有级别开发者的指南。 @@ -19,43 +19,43 @@ import { Cards, Card } from "../site/src/components/Cards" -## 开始在Sui上进行开发 +## 开始在 Sui 上进行开发 -在你跑之前,你必须先爬。从这里开始你的Sui之旅。 +在你跑之前,你必须先爬。从这里开始你的 Sui 之旅。 -了解Sui工具和推荐的开发环境。 +了解 Sui 工具和推荐的开发环境。 - -在Windows、MacOS或Linux系统上安装Sui。 + +在 Windows、MacOS 或 Linux 系统上安装 Sui。 - -安装了Sui,你就准备好开始开发了。 + +安装了 Sui,你就准备好开始开发了。 -## 面向开发者的Sui 101 +## 面向开发者的 Sui 101 -学习Sui的基础知识以及它们与其他区块链的区别。 +学习 Sui 的基础知识以及它们与其他区块链的区别。 - -Sui上的交易比其他区块链更强大。了解为什么以及如何使用它们。 + +Sui 上的交易比其他区块链更强大。了解为什么以及如何使用它们。 -监视Sui网络并对链上事件进行编程反应。 +监视 Sui 网络并对链上事件进行编程反应。 -## 在Sui上验证和操作节点 +## 在 Sui 上验证和操作节点 -适用于Sui网络的验证人和节点运营者的过程和指南。 +适用于 Sui 网络的验证人和节点运营者的过程和指南。 - -学习如何在Sui上操作全节点。 + +学习如何在 Sui 上操作全节点。 优化全节点配置以实现高效的节点运营。 diff --git a/content/guides/developer.mdx b/content/guides/developer.mdx index 7dc5893..bdfb18c 100644 --- a/content/guides/developer.mdx +++ b/content/guides/developer.mdx @@ -1,6 +1,6 @@ --- title: 开发者指南 -description: 面向Sui网络开发者的指南。无论你是初学者还是Move专家,这些指南都将帮助你快速启动Sui开发。 +description: 面向 Sui 网络开发者的指南。无论你是初学者还是 Move 专家,这些指南都将帮助你快速启动 Sui 开发。 --- 开发者指南旨在通过示例、任务和概念内容向你介绍 Move 编程语言及其在 Sui 网络上的实现。 diff --git a/content/guides/developer/advanced/asset-tokenization.mdx b/content/guides/developer/advanced/asset-tokenization.mdx index de2fa39..a8a2453 100644 --- a/content/guides/developer/advanced/asset-tokenization.mdx +++ b/content/guides/developer/advanced/asset-tokenization.mdx @@ -303,7 +303,7 @@ import Tabs from '@theme/Tabs'; - `new_display` - 该函数利用嵌套在注册表中的发布者和发送者的发布者,生成并返回类型为`TokenizedAsset`的空Display,其中'T'被封装在发布者对象中。 + 该函数利用嵌套在注册表中的发布者和发送者的发布者,生成并返回类型为`TokenizedAsset`的空 Display,其中'T'被封装在发布者对象中。 ```rust public fun new_display( @@ -592,7 +592,7 @@ public fun kiosk_join( ::: -假设你希望允许用户燃烧资产,而不仅仅是管理员。这仍然需要是一个经过授权的操作,但它将允许以用例特定的目的(例如,燃烧你收集到的所有收藏品以合并它们)使用代币化资产。为了实现这一功能,管理员可以铸造包含他们被允许燃烧的资产ID的门票。为了支持此功能,你必须重新设计智能合同,并将管理员与每个资产的资金库分开,后者现在仅保存与供应相关的信息。需要进行的示例更改如下: +假设你希望允许用户燃烧资产,而不仅仅是管理员。这仍然需要是一个经过授权的操作,但它将允许以用例特定的目的(例如,燃烧你收集到的所有收藏品以合并它们)使用代币化资产。为了实现这一功能,管理员可以铸造包含他们被允许燃烧的资产 ID 的门票。为了支持此功能,你必须重新设计智能合同,并将管理员与每个资产的资金库分开,后者现在仅保存与供应相关的信息。需要进行的示例更改如下: **结构体** diff --git a/content/guides/developer/app-examples.mdx b/content/guides/developer/app-examples.mdx index db7ba93..8560a06 100644 --- a/content/guides/developer/app-examples.mdx +++ b/content/guides/developer/app-examples.mdx @@ -1,16 +1,16 @@ --- title: 应用示例 -description: 由Sui和Move专家编写的演示构建在Sui区块链上的解决方案的示例包的不断增长列表。使用这些示例来学习Sui和Move,并提取你可以应用于自己的Sui项目的技术。 +description: 由 Sui 和 Move 专家编写的演示构建在 Sui 区块链上的解决方案的示例包的不断增长列表。使用这些示例来学习 Sui 和 Move,并提取你可以应用于自己的 Sui 项目的技术。 --- -本部分中不断增长的示例数量展示了Sui区块链的包。提取这些示例中使用的技术,应用到你自己的Sui项目中,因为它们是由Sui和Move专家编写的。 +本部分中不断增长的示例数量展示了 Sui 区块链的包。提取这些示例中使用的技术,应用到你自己的 Sui 项目中,因为它们是由 Sui 和 Move 专家编写的。 ## 示例 -Sui致力于提供各种示例,以指导你正确地为Sui区块链编写程序。此列表将继续增长,请经常查看。 +Sui 致力于提供各种示例,以指导你正确地为 Sui 区块链编写程序。此列表将继续增长,请经常查看。 -- [Blackjack](./app-examples/blackjack.mdx):此示例演示了流行的赌场纸牌游戏Blackjack的链上版本背后的逻辑。 -- [Coin Flip](./app-examples/coin-flip.mdx):Coin Flip应用演示了链上随机性。 -- [分布式计数器](./app-examples/e2e-counter.mdx):一个端到端的示例,创建一个基本的分布式计数器,任何人都可以递增,但只有对象所有者可以重置。该示例包括Move代码以创建该包,并利用Sui TypeScript SDK提供基本的前端。 -- [井字游戏](./app-examples/tic-tac-toe.mdx):在Sui网络上展示经典井字游戏的三种实现,以展示对用户交互的不同方法。 +- [Blackjack](./app-examples/blackjack.mdx):此示例演示了流行的赌场纸牌游戏 Blackjack 的链上版本背后的逻辑。 +- [Coin Flip](./app-examples/coin-flip.mdx):Coin Flip 应用演示了链上随机性。 +- [分布式计数器](./app-examples/e2e-counter.mdx):一个端到端的示例,创建一个基本的分布式计数器,任何人都可以递增,但只有对象所有者可以重置。该示例包括 Move 代码以创建该包,并利用 Sui TypeScript SDK 提供基本的前端。 +- [井字游戏](./app-examples/tic-tac-toe.mdx):在 Sui 网络上展示经典井字游戏的三种实现,以展示对用户交互的不同方法。 - [天气 Oracle](./app-examples/weather-oracle.mdx):Sui 天气预言机演示了如何创建一个提供实时天气数据的基本天气预言机。 diff --git a/content/guides/developer/app-examples/coin-flip.mdx b/content/guides/developer/app-examples/coin-flip.mdx index cba4442..ee6a78f 100644 --- a/content/guides/developer/app-examples/coin-flip.mdx +++ b/content/guides/developer/app-examples/coin-flip.mdx @@ -2,27 +2,27 @@ title: 抛硬币 --- -本指南演示了在Move中编写模块 (智能合约),在Devnet上部署它,并添加一个TypeScript前端以与该模块进行通信。 +本指南演示了在 Move 中编写模块 (智能合约),在 Devnet 上部署它,并添加一个 TypeScript 前端以与该模块进行通信。 -Satoshi Coin Flip是一个dApp,利用可验证随机函数 (VRF) 在 Sui 区块链上创建一个公平的硬币游戏。用户(人类)与庄家(模块)进行游戏,并在正反面之间下注。然后,根据游戏的结果,用户要么获得其下注金额的两倍,要么什么都没有。 +Satoshi Coin Flip 是一个 dApp,利用可验证随机函数 (VRF) 在 Sui 区块链上创建一个公平的硬币游戏。用户(人类)与庄家(模块)进行游戏,并在正反面之间下注。然后,根据游戏的结果,用户要么获得其下注金额的两倍,要么什么都没有。 -本指南假定你已经[安装了Sui](../getting-started/sui-install.mdx)并了解Sui的基础知识。 +本指南假定你已经[安装了 Sui](../getting-started/sui-install.mdx)并了解 Sui 的基础知识。 ## 后端 -与所有Sui dApp一样,Satoshi Coin Flip的逻辑由链上的Move包提供支持。以下说明将带你完成创建和发布该模块的步骤。 +与所有 Sui dApp 一样,Satoshi Coin Flip 的逻辑由链上的 Move 包提供支持。以下说明将带你完成创建和发布该模块的步骤。 ### House 模块 -这个示例使用了多个模块来创建Satoshi Coin Flip游戏的包。第一个模块是`house_data.move`。你需要在某个地方存储游戏数据,在这个模块中,你为所有房屋数据创建了一个[共享对象](concepts/object-ownership/shared.mdx)。 +这个示例使用了多个模块来创建 Satoshi Coin Flip 游戏的包。第一个模块是`house_data.move`。你需要在某个地方存储游戏数据,在这个模块中,你为所有房屋数据创建了一个[共享对象](concepts/object-ownership/shared.mdx)。 :::info -Move模块的完整源代码,包括注释和其密码学概述,可以在[Satoshi Coin Flip存储库](https://github.com/MystenLabs/satoshi-coin-flip)中找到。 +Move 模块的完整源代码,包括注释和其密码学概述,可以在[Satoshi Coin Flip 存储库](https://github.com/MystenLabs/satoshi-coin-flip)中找到。 ::: -在开始之前,你必须初始化一个Move包。在你想要存储示例的目录中打开终端或控制台,并运行以下命令创建一个名为`satoshi_flip`的空包: +在开始之前,你必须初始化一个 Move 包。在你想要存储示例的目录中打开终端或控制台,并运行以下命令创建一个名为`satoshi_flip`的空包: ```shell sui move new satoshi_flip @@ -561,7 +561,7 @@ module satoshi_flip::single_player_satoshi { {@include: ../../../snippets/publish-to-devnet-with-coins.mdx} -该包应该成功部署。 现在,是时候创建一个可以与之交互的前端了。 +该包应该成功部署。现在,是时候创建一个可以与之交互的前端了。 ## 前端 @@ -571,17 +571,17 @@ module satoshi_flip::single_player_satoshi { ::: -为了向用户公开你创建的后端,你需要一个前端 (UI)。 在本部分中,你将使用 [Sui Typescript SDK](https://sdk.mystenlabs.com/typescript) 和 [Sui dApp Kit](https://sdk.mystenlabs.com/dapp-) 创建一个 React 前端项目 kit 与已部署的智能合约进行交互。 +为了向用户公开你创建的后端,你需要一个前端 (UI)。在本部分中,你将使用 [Sui Typescript SDK](https://sdk.mystenlabs.com/typescript) 和 [Sui dApp Kit](https://sdk.mystenlabs.com/dapp-) 创建一个 React 前端项目 kit 与已部署的智能合约进行交互。 ### 初始化项目 :::info -以下说明使用“pnpm”作为包管理器。 如果需要,请按照 [`pnpm` 安装说明](https://pnpm.io/installation) 进行操作。 +以下说明使用“pnpm”作为包管理器。如果需要,请按照 [`pnpm` 安装说明](https://pnpm.io/installation) 进行操作。 ::: -首先,初始化你的前端项目。 要快速完成此操作,请使用 [`create-dapp` 工具](https://sdk.mystenlabs.com/dapp-kit/create-dapp) 使用 [dApp Kit](https://sdk. mystenlabs.com/dapp-kit)。 在终端或控制台中运行以下命令: +首先,初始化你的前端项目。要快速完成此操作,请使用 [`create-dapp` 工具](https://sdk.mystenlabs.com/dapp-kit/create-dapp) 使用 [dApp Kit](https://sdk. mystenlabs.com/dapp-kit)。在终端或控制台中运行以下命令: ``` pnpm create @mysten/dapp diff --git a/content/guides/developer/app-examples/e2e-counter.mdx b/content/guides/developer/app-examples/e2e-counter.mdx index 3577411..f61e092 100644 --- a/content/guides/developer/app-examples/e2e-counter.mdx +++ b/content/guides/developer/app-examples/e2e-counter.mdx @@ -142,7 +142,7 @@ export const COUNTER_PACKAGE_ID = ## 创建计数器 -现在你已经发布了 Move 代码,你可以开始构建 UI 以使用 Move 包。 你需要一种方法来创建新的 `Counter` 对象。 通过创建一个新的 `CreateCounter` 组件来完成此操作: +现在你已经发布了 Move 代码,你可以开始构建 UI 以使用 Move 包。你需要一种方法来创建新的 `Counter` 对象。通过创建一个新的 `CreateCounter` 组件来完成此操作: ```ts export function CreateCounter(props: { onCreated: (id: string) => void }) { @@ -164,11 +164,11 @@ export function CreateCounter(props: { onCreated: (id: string) => void }) { } ``` -该组件呈现一个按钮,使用户能够创建计数器。 现在,更新你的 `create` 函数,以便它调用 Move 模块中的 `create` 函数。 +该组件呈现一个按钮,使用户能够创建计数器。现在,更新你的 `create` 函数,以便它调用 Move 模块中的 `create` 函数。 为此,你需要使用适当的 `moveCall` 交易构造一个 `TransactionBlock`,然后签署并执行可编程交易块 (PTB)。 -首先,从 `@mysten/sui.js` 导入 `TransactionBlock`,从之前创建的constants.ts文件导入“COUNTER_PACKAGE_ID”,从 `@mysten/dapp-kit` 导入 `useSignAndExecuteTransactionBlock`。 +首先,从 `@mysten/sui.js` 导入 `TransactionBlock`,从之前创建的 constants.ts 文件导入“COUNTER_PACKAGE_ID”,从 `@mysten/dapp-kit` 导入 `useSignAndExecuteTransactionBlock`。 ```ts import { useSignAndExecuteTransactionBlock } from '@mysten/dapp-kit'; import { TransactionBlock } from '@mysten/sui.js/transactions'; @@ -231,7 +231,7 @@ function create() { } ``` -你现在有了一个可以创建新的 `Counter` 对象的功能组件,但如果按原样使用它,可能会遇到一些一致性问题,即你成功执行了 `TransactionBlock`,但数据尚未索引以供读取 来自 RPC 节点。 为了确保 TransactionBlock 可用,你可以使用 SuiClient 的 waitForTransactionBlock 方法。 +你现在有了一个可以创建新的 `Counter` 对象的功能组件,但如果按原样使用它,可能会遇到一些一致性问题,即你成功执行了 `TransactionBlock`,但数据尚未索引以供读取 来自 RPC 节点。为了确保 TransactionBlock 可用,你可以使用 SuiClient 的 waitForTransactionBlock 方法。 要获取 `SuiClient` 的实例,你可以使用 dApp Kit 中的 `useSuiClient` 挂钩: ```ts import { useSignAndExecuteTransactionBlock, useSuiClient } from '@mysten/dapp-kit'; @@ -281,7 +281,7 @@ function create() { ## 设置路由 -现在你的用户可以创建计数器,你需要一种路由到他们的方法。 React 应用程序中的路由可能很复杂,但此示例使其保持基本。 设置你的应用程序,以便默认呈现 `CreateCounter` 组件,如果你想显示特定计数器,你可以将其 ID 放入 URL 的哈希部分。 +现在你的用户可以创建计数器,你需要一种路由到他们的方法。React 应用程序中的路由可能很复杂,但此示例使其保持基本。设置你的应用程序,以便默认呈现 `CreateCounter` 组件,如果你想显示特定计数器,你可以将其 ID 放入 URL 的哈希部分。 ```ts import { ConnectButton, useCurrentAccount } from '@mysten/dapp-kit'; @@ -425,4 +425,4 @@ export function Counter({ id }: { id: string }) { } ``` -你的计数器应用程序现在已准备好进行计数。 要了解有关 dApp Kit 的更多信息,请查看 [dApp Kit 文档](https://sdk.mystenlabs.com/dapp-kit)。 +你的计数器应用程序现在已准备好进行计数。要了解有关 dApp Kit 的更多信息,请查看 [dApp Kit 文档](https://sdk.mystenlabs.com/dapp-kit)。 diff --git a/content/guides/developer/app-examples/recaptcha.mdx b/content/guides/developer/app-examples/recaptcha.mdx index c6784fd..27ba866 100644 --- a/content/guides/developer/app-examples/recaptcha.mdx +++ b/content/guides/developer/app-examples/recaptcha.mdx @@ -20,7 +20,7 @@ draft: true sui move new recaptcha ``` -完成后,就可以开始编写一些代码了。 在 `ources` 目录中创建一个名为 `recaptcha.move` 的新文件,并使用以下代码填充该文件: +完成后,就可以开始编写一些代码了。在 `ources` 目录中创建一个名为 `recaptcha.move` 的新文件,并使用以下代码填充该文件: ```rust title='recaptcha.move' // Copyright (c) Mysten Labs, Inc. diff --git a/content/guides/developer/app-examples/weather-oracle.mdx b/content/guides/developer/app-examples/weather-oracle.mdx index d3c2efe..89e53d3 100644 --- a/content/guides/developer/app-examples/weather-oracle.mdx +++ b/content/guides/developer/app-examples/weather-oracle.mdx @@ -1,21 +1,21 @@ --- title: Sui 天气 Oracle -description: 编写一个在 Move 中从 OpenWeather API 获取天气数据并每10分钟更新全球 1000 多个地点天气状况的模块(智能合约)。 +description: 编写一个在 Move 中从 OpenWeather API 获取天气数据并每 10 分钟更新全球 1000 多个地点天气状况的模块(智能合约)。 --- -本指南演示了如何在Move中编写一个模块(智能合约),在Devnet上部署它,并添加一个后端,每10分钟从OpenWeather API获取天气数据并更新每个城市的天气状况。本指南创建的dApp称为Sui天气Oracle,它为全球1000多个地点提供实时天气数据。 +本指南演示了如何在 Move 中编写一个模块(智能合约),在 Devnet 上部署它,并添加一个后端,每 10 分钟从 OpenWeather API 获取天气数据并更新每个城市的天气状况。本指南创建的 dApp 称为 Sui 天气 Oracle,它为全球 1000 多个地点提供实时天气数据。 -你可以访问并使用OpenWeather API的天气数据用于各种应用,例如随机性、投注、游戏、保险、旅行、教育或研究。你还可以基于城市的天气数据使用SUI天气Oracle智能合约的`mint`函数铸造天气NFT。 +你可以访问并使用 OpenWeather API 的天气数据用于各种应用,例如随机性、投注、游戏、保险、旅行、教育或研究。你还可以基于城市的天气数据使用 SUI 天气 Oracle 智能合约的`mint`函数铸造天气 NFT。 -本指南假定你已经[安装了Sui](../getting-started/sui-install.mdx)并了解Sui的基本知识。 +本指南假定你已经[安装了 Sui](../getting-started/sui-install.mdx)并了解 Sui 的基本知识。 -## Move智能合约 +## Move 智能合约 -与所有Sui dApps一样,Move链上的一个Move包支持Sui天气Oracle的逻辑。以下说明将指导你创建和发布该模块。 +与所有 Sui dApps 一样,Move 链上的一个 Move 包支持 Sui 天气 Oracle 的逻辑。以下说明将指导你创建和发布该模块。 -### 天气Oracle模块 +### 天气 Oracle 模块 -在开始之前,你必须初始化一个Move包。在要存储示例的目录中打开终端或控制台,并运行以下命令以创建一个名为 `weather_oracle` 的空包: +在开始之前,你必须初始化一个 Move 包。在要存储示例的目录中打开终端或控制台,并运行以下命令以创建一个名为 `weather_oracle` 的空包: ```bash sui move new weather_oracle diff --git a/content/guides/developer/coin-token.mdx b/content/guides/developer/coin-token.mdx index 6523a26..f6ed96f 100644 --- a/content/guides/developer/coin-token.mdx +++ b/content/guides/developer/coin-token.mdx @@ -1,10 +1,10 @@ --- -title: 创建Coin和Token -description: 构建你的第一个dApp并在链上发布。这些指南演示了你在Sui上开始开发之前需要了解的基础知识。 +title: 创建 Coin 和 Token +description: 构建你的第一个 dApp 并在链上发布。这些指南演示了你在 Sui 上开始开发之前需要了解的基础知识。 --- 在 Sui 上,币(Coins)和代币(Tokens)是相似的。在实际操作中,这两个术语常常可以互换使用,但它们在实现上存在一些差异。 -你可以在相关的标准文档中了解这些差异,分别是 [封闭回路代币](https://docs.sui.io/standards/closed-loop-token)(Closed-Loop Token) 和 [币](https://docs.sui.io/standards/coin)(Coin) +你可以在相关的标准文档中了解这些差异,分别是 [封闭回路代币](https://docs.sui.io/standards/closed-loop-token)(Closed-Loop Token)和 [币](https://docs.sui.io/standards/coin)(Coin) 在 Sui 上发布一个币类似于发布一个新的类型。主要的区别在于创建币时需要一个一次性见证(`One-Time Witness` 简称“owt”)。 diff --git a/content/guides/developer/coin-token/loyalty-tokens.mdx b/content/guides/developer/coin-token/loyalty-tokens.mdx index 230367d..7e24ac4 100644 --- a/content/guides/developer/coin-token/loyalty-tokens.mdx +++ b/content/guides/developer/coin-token/loyalty-tokens.mdx @@ -2,7 +2,7 @@ title: 忠诚代币 --- -使用 Sui 的`Closed-Loop Token`的标准 ,您可以创建仅适用于一些特定服务的代币, +使用 Sui 的`Closed-Loop Token`的标准,您可以创建仅适用于一些特定服务的代币, 例如:航空公司希望向经常乘坐飞机的旅客发放代币以购买机票或升级舱位。 下面的示例演示了创建一种忠诚度代币,持有者可以使用该代币在数字礼品店购买商品 diff --git a/content/guides/developer/coin-token/regulated-coin-and-deny-list.mdx b/content/guides/developer/coin-token/regulated-coin-and-deny-list.mdx index 835c789..d578aff 100644 --- a/content/guides/developer/coin-token/regulated-coin-and-deny-list.mdx +++ b/content/guides/developer/coin-token/regulated-coin-and-deny-list.mdx @@ -81,7 +81,7 @@ Created Objects: ... ``` -可以看到,发布操作创建了一个`RegulatedCoinMetadata`对象,以及标准的`CoinMetadata`对象。你不需要显式调用 `freeze_object` 来冻结 `RegulatedCoinMetadata `对象,因为 `create_regulated_currency `会自动执行此操作 。 +可以看到,发布操作创建了一个`RegulatedCoinMetadata`对象,以及标准的`CoinMetadata`对象。你不需要显式调用 `freeze_object` 来冻结 `RegulatedCoinMetadata `对象,因为 `create_regulated_currency `会自动执行此操作。 输出还显示发布者现在拥有的三个对象:用于包升级的 `UpgradeCap`、用于铸造或销毁代币的 `TreasuryCap`,以及用于添加或移除拒绝列表地址的 `DenyCap`。 diff --git a/content/guides/developer/dev-cheat-sheet.mdx b/content/guides/developer/dev-cheat-sheet.mdx index 42f147c..ce2248a 100644 --- a/content/guides/developer/dev-cheat-sheet.mdx +++ b/content/guides/developer/dev-cheat-sheet.mdx @@ -1,9 +1,9 @@ --- -title: Sui开发者速查表 +title: Sui 开发者速查表 sidebar_label: 开发速查表 --- -Sui网络开发人员的最佳实践快速参考。 +Sui 网络开发人员的最佳实践快速参考。 ## Move @@ -12,15 +12,15 @@ Sui网络开发人员的最佳实践快速参考。 - 阅读关于包升级的文章并编写友好于升级的代码: - 包是不可变的,因此有错误的包代码可以永远调用。在对象级别添加保护,而不是在包级别。 - 如果将包`P`升级到`P'`,依赖于`P`的其他包和客户端将继续使用`P`,而不会自动更新为`P'`。必须显式更新依赖包和客户端代码以指向`P'`。 - - 期望被依赖包扩展的包可以通过提供所有版本都符合的标准(不变)接口来避免在每次升级时破坏其扩展。查看Wormhole的[消息发送示例](https://github.com/wormhole-foundation/wormhole/blob/74dea3bf22f0e27628b432c3e9eac05c85786a99/sui/wormhole/sources/publish_message.move),通过Wormhole从桥接发送消息。生成消息以发送的扩展包可以使用任何版本的Wormhole包中的[`prepare_message`](https://github.com/wormhole-foundation/wormhole/blob/74dea3bf22f0e27628b432c3e9eac05c85786a99/sui/wormhole/sources/publish_message.move#L68-L90)生成[`MessageTicket`](https://github.com/wormhole-foundation/wormhole/blob/74dea3bf22f0e27628b432c3e9eac05c85786a99/sui/wormhole/sources/publish_message.move#L52-L66),而用于发送消息的客户端代码必须将该`MessageTicket`传递给包的最新版本中的[`publish_message`](https://github.com/wormhole-foundation/wormhole/blob/74dea3bf22f0e27628b432c3e9eac05c85786a99/sui/wormhole/sources/publish_message.move#L92-L152)。 + - 期望被依赖包扩展的包可以通过提供所有版本都符合的标准(不变)接口来避免在每次升级时破坏其扩展。查看 Wormhole 的[消息发送示例](https://github.com/wormhole-foundation/wormhole/blob/74dea3bf22f0e27628b432c3e9eac05c85786a99/sui/wormhole/sources/publish_message.move),通过 Wormhole 从桥接发送消息。生成消息以发送的扩展包可以使用任何版本的 Wormhole 包中的[`prepare_message`](https://github.com/wormhole-foundation/wormhole/blob/74dea3bf22f0e27628b432c3e9eac05c85786a99/sui/wormhole/sources/publish_message.move#L68-L90)生成[`MessageTicket`](https://github.com/wormhole-foundation/wormhole/blob/74dea3bf22f0e27628b432c3e9eac05c85786a99/sui/wormhole/sources/publish_message.move#L52-L66),而用于发送消息的客户端代码必须将该`MessageTicket`传递给包的最新版本中的[`publish_message`](https://github.com/wormhole-foundation/wormhole/blob/74dea3bf22f0e27628b432c3e9eac05c85786a99/sui/wormhole/sources/publish_message.move#L92-L152)。 - 无法删除`public`函数签名,但可以删除或更改`public(friend)`函数签名。除非暴露将永远存在的库函数,否则请自由使用`public(friend)`或私有可见性。 - 无法删除`struct`类型,添加新字段(尽管可以添加动态字段)或通过升级添加新的[abilities](https://move-language.github.io/move/abilities.html)。谨慎引入新类型——它们将永远存在! -- 使用`vector`支持的集合(`vector`、`VecSet`、`VecMap`、`PriorityQueue`)时要考虑**已知**的最大大小≤ 1000项。 +- 使用`vector`支持的集合(`vector`、`VecSet`、`VecMap`、`PriorityQueue`)时要考虑**已知**的最大大小≤ 1000 项。 - 对于允许第三方添加、更大的集合以及未知大小的集合,请使用基于动态字段的集合(`Table`、`Bag`、`ObjectBag`、`ObjectTable`、`LinkedTable`)。 - - Move对象的最大大小为250KB——任何尝试创建更大的对象都将导致中止的交易。确保你的对象没有一个不断增长的`vector`支持的集合。 -- 如果你的函数`f`需要来自调用者的(例如)SUI的支付,请使用`fun f(payment: Coin)`而不是`fun f(payment: &mut Coin, amount: u64)`。这对于调用者更安全——他们知道自己支付了多少,无需信任`f`来提取正确的金额。 -- 不要过度优化气体使用。Sui计算成本将四舍五入到最接近的_gas bucket_,因此只有非常 drastica的变化才会有所不同。特别是,如果你的交易已经在最低成本桶中,它将无法更便宜。 -- 遵循[Move编码约定](https://move-language.github.io/move/coding-conventions.html)以保持一致的风格。 + - Move 对象的最大大小为 250KB——任何尝试创建更大的对象都将导致中止的交易。确保你的对象没有一个不断增长的`vector`支持的集合。 +- 如果你的函数`f`需要来自调用者的(例如)SUI 的支付,请使用`fun f(payment: Coin)`而不是`fun f(payment: &mut Coin, amount: u64)`。这对于调用者更安全——他们知道自己支付了多少,无需信任`f`来提取正确的金额。 +- 不要过度优化气体使用。Sui 计算成本将四舍五入到最接近的_gas bucket_,因此只有非常 drastica 的变化才会有所不同。特别是,如果你的交易已经在最低成本桶中,它将无法更便宜。 +- 遵循[Move 编码约定](https://move-language.github.io/move/coding-conventions.html)以保持一致的风格。 ### 可组合性 @@ -31,11 +31,11 @@ Sui网络开发人员的最佳实践快速参考。 - 使用[`sui::test_scenario`](https://github.com/MystenLabs/sui/blob/main/crates/sui-framework/packages/sui-framework/sources/test/test_scenario.move)来模拟多交易、多发送方的测试场景。 - 使用[`sui::test_utils`](https://github.com/MystenLabs/sui/blob/main/crates/sui-framework/packages/sui-framework/sources/test/test_utils.move#L5)模块以通过`assert_eq`获得更好的测试错误消息,通过`print`进行调试打印,通过`destroy`进行仅用于测试的销毁。 -- 使用`sui move test --coverage`来计算测试的代码覆盖信息,使用`sui move coverage source --module `来查看未覆盖的行高亮显示为红色。如果可行,将覆盖率推到100%。 +- 使用`sui move test --coverage`来计算测试的代码覆盖信息,使用`sui move coverage source --module `来查看未覆盖的行高亮显示为红色。如果可行,将覆盖率推到 100%。 ## 应用 -- 为了最佳性能和数据一致性,应用程序应该将写入和读取提交到同一个全节点。在TS SDK中,这意味着应用程序应该使用钱包的[`signTransactionBlock`](https://sdk.mystenlabs.com/dapp-kit) API,然后通过对应用程序的全节点调用[`execute_transactionBlock`](/sui-api-ref#sui_executetransactionblock)来提交事务,而不是使用钱包的`signAndExecuteTransactionBlock` API。这确保读取-写入一致性——来自应用程序的全节点的读取将立即反映事务的写入,而不需要等待检查点。 +- 为了最佳性能和数据一致性,应用程序应该将写入和读取提交到同一个全节点。在 TS SDK 中,这意味着应用程序应该使用钱包的[`signTransactionBlock`](https://sdk.mystenlabs.com/dapp-kit) API,然后通过对应用程序的全节点调用[`execute_transactionBlock`](/sui-api-ref#sui_executetransactionblock)来提交事务,而不是使用钱包的`signAndExecuteTransactionBlock` API。这确保读取 - 写入一致性——来自应用程序的全节点的读取将立即反映事务的写入,而不需要等待检查点。 - 为了更低的延迟,如果应用程序需要知道事务已确认但不立即需要看到事务效果或读取事务写入的对象/事件,请使用[`executeTransactionBlock`](/sui-api-ref#sui_executetransactionblock)与`"showEffects": false`和`"showEvents": false`。 - 应用程序应该为频繁读取的数据实现本地缓存,而不是从全节点过度获取。 - 在可能的情况下,使用可编程交易块来组合现有的链上功能,而不是发布新的智能合约代码。可编程交易块允许大规模批处理和异构组合,将已经很低的燃气费用进一步降低。 @@ -44,10 +44,10 @@ Sui网络开发人员的最佳实践快速参考。 ## 签名 - **永远不要**为同时触及相同拥有对象的两个并发事务签名。要么使用独立的拥有对象,要么在发送下一个事务之前等待一个事务结束。违反此规则可能导致客户端[equivocation](/references/sui-glossary.mdx#equivocation),将牵涉到两个事务中的拥有对象锁定直到当前时期结束。 -- 任何`sui client`命令(例如`sui client publish`、`sui client call`)都可以接受`--serialize-output`标志,以输出要签名的Base64事务。 -- Sui支持多种用于事务签名的签名方案,包括本地多重签名。 +- 任何`sui client`命令(例如`sui client publish`、`sui client call`)都可以接受`--serialize-output`标志,以输出要签名的 Base64 事务。 +- Sui 支持多种用于事务签名的签名方案,包括本地多重签名。 ## zkLogin - 尽可能地少调用证明服务。设计你的应用程序流程,以便只有在用户即将执行真实交易时才调用证明服务。 -- 注意如何缓存临时私钥。将私钥视为高度敏感数据,例如密码。如果(未过期的)临时私钥及其对应的ZK证明泄漏,则攻击者可以窃取用户资产。 +- 注意如何缓存临时私钥。将私钥视为高度敏感数据,例如密码。如果(未过期的)临时私钥及其对应的 ZK 证明泄漏,则攻击者可以窃取用户资产。 diff --git a/content/guides/developer/first-app.mdx b/content/guides/developer/first-app.mdx index b69df22..b14442b 100644 --- a/content/guides/developer/first-app.mdx +++ b/content/guides/developer/first-app.mdx @@ -1,19 +1,19 @@ --- -title: 你的第一个Sui dApp -description: 构建你的第一个dApp并在链上发布。这些指南演示了你在Sui上开始开发之前需要了解的基础知识。 +title: 你的第一个 Sui dApp +description: 构建你的第一个 dApp 并在链上发布。这些指南演示了你在 Sui 上开始开发之前需要了解的基础知识。 --- -在你能够创建你的第一个dApp之前,你必须已经[安装了Sui](./getting-started/sui-install.mdx)。 +在你能够创建你的第一个 dApp 之前,你必须已经[安装了 Sui](./getting-started/sui-install.mdx)。 -你使用Move编写在链上存在的软件包,这意味着它们存在于你发布它们的Sui网络上。本节中的说明将引导你完成编写基本软件包、调试和测试代码以及发布的过程。你需要按照这些说明顺序完成练习。 +你使用 Move 编写在链上存在的软件包,这意味着它们存在于你发布它们的 Sui 网络上。本节中的说明将引导你完成编写基本软件包、调试和测试代码以及发布的过程。你需要按照这些说明顺序完成练习。 -某些说明中你将使用`move` Sui CLI 命令。Sui CLI是与二进制文件一起安装的,因此如果你按照安装说明进行了安装,它就已经在你的系统上。为了验证你已经安装了它,请在终端或控制台中运行以下命令。 +某些说明中你将使用`move` Sui CLI 命令。Sui CLI 是与二进制文件一起安装的,因此如果你按照安装说明进行了安装,它就已经在你的系统上。为了验证你已经安装了它,请在终端或控制台中运行以下命令。 ```shell sui --version ``` -如果控制台没有回应类似于以下版本号的内容,请参阅安装Sui的说明。 +如果控制台没有回应类似于以下版本号的内容,请参阅安装 Sui 的说明。 ```shell sui 1.xx.x-abc123xyz diff --git a/content/guides/developer/first-app/build-test.mdx b/content/guides/developer/first-app/build-test.mdx index 8e13383..c92924b 100644 --- a/content/guides/developer/first-app/build-test.mdx +++ b/content/guides/developer/first-app/build-test.mdx @@ -135,7 +135,7 @@ Test result: OK. Total tests: 1; passed: 1; failed: 0 ::: -例子: +例子: ```bash sui move test sword diff --git a/content/guides/developer/getting-started.mdx b/content/guides/developer/getting-started.mdx index 7269bef..da5f461 100644 --- a/content/guides/developer/getting-started.mdx +++ b/content/guides/developer/getting-started.mdx @@ -2,21 +2,21 @@ title: 入门指南 --- -Sui是第一个具有互联网规模的可编程区块链平台。这可能听起来像市场用语,但当你阅读文档以了解技术时,你将发现Sui解决了许多阻碍区块链大规模采用的问题。 +Sui 是第一个具有互联网规模的可编程区块链平台。这可能听起来像市场用语,但当你阅读文档以了解技术时,你将发现 Sui 解决了许多阻碍区块链大规模采用的问题。 -在开始在Sui上开发之前,你需要了解代码仓库并安装其二进制文件。因此,你需要的前两个主题是: +在开始在 Sui 上开发之前,你需要了解代码仓库并安装其二进制文件。因此,你需要的前两个主题是: -- [Sui环境设置](./getting-started/sui-environment.mdx) -- [安装Sui](./getting-started/sui-install.mdx) +- [Sui 环境设置](./getting-started/sui-environment.mdx) +- [安装 Sui](./getting-started/sui-install.mdx) -## 安装Sui之后 +## 安装 Sui 之后 -在你的系统上安装了Sui之后,你可以开始开发。你可以学习有关系统基本方面的信息,了解Sui 101中的内容,或者直接按照“你的第一个dApp”中的说明编写和发布软件包。还有越来越多的代码示例,你可以从中获取灵感,这些示例是由Sui和Move专家编写的。 +在你的系统上安装了 Sui 之后,你可以开始开发。你可以学习有关系统基本方面的信息,了解 Sui 101 中的内容,或者直接按照“你的第一个 dApp”中的说明编写和发布软件包。还有越来越多的代码示例,你可以从中获取灵感,这些示例是由 Sui 和 Move 专家编写的。 - [Sui 101](./sui-101.mdx) -- [你的第一个dApp](./first-app.mdx) +- [你的第一个 dApp](./first-app.mdx) - [示例](./app-examples.mdx) ## Move -Move是在Sui上驱动智能合约的编程语言。Move非常灵活,许多区块链使用该语言。Sui使该语言适应了Sui区块链独特的需求,因此尽管你可能熟悉其他区块链上的Move,但在Sui上使用时有一些独特的功能。有关该语言在Sui上的操作方式与其原始用例的详细信息,请参阅概念部分中的[Move](/concepts/sui-move-concepts.mdx)。 +Move 是在 Sui 上驱动智能合约的编程语言。Move 非常灵活,许多区块链使用该语言。Sui 使该语言适应了 Sui 区块链独特的需求,因此尽管你可能熟悉其他区块链上的 Move,但在 Sui 上使用时有一些独特的功能。有关该语言在 Sui 上的操作方式与其原始用例的详细信息,请参阅概念部分中的[Move](/concepts/sui-move-concepts.mdx)。 diff --git a/content/guides/developer/getting-started/connect.mdx b/content/guides/developer/getting-started/connect.mdx index 5ba3e58..1507f42 100644 --- a/content/guides/developer/getting-started/connect.mdx +++ b/content/guides/developer/getting-started/connect.mdx @@ -106,7 +106,7 @@ localnet => http://0.0.0.0:9000 (active) devnet => https://fullnode.devnet.sui.io:443 ``` -要添加一个自定义RPC端点的新别名,请运行以下命令。使用你安装的值替换 `<` `>` 中的值 +要添加一个自定义 RPC 端点的新别名,请运行以下命令。使用你安装的值替换 `<` `>` 中的值 ```shell sui client new-env --alias --rpc @@ -118,5 +118,5 @@ sui client new-env --alias --rpc sui client switch --env ``` -如果遇到问题,请删除Sui配置目录 (~/.sui/sui_config) 并重新安装最新的 [Sui二进制文件](./sui-install.mdx#install-sui-binaries)。 +如果遇到问题,请删除 Sui 配置目录 (~/.sui/sui_config) 并重新安装最新的 [Sui 二进制文件](./sui-install.mdx#install-sui-binaries)。 diff --git a/content/guides/developer/getting-started/local-network.mdx b/content/guides/developer/getting-started/local-network.mdx index 3d223ad..a84b1c2 100644 --- a/content/guides/developer/getting-started/local-network.mdx +++ b/content/guides/developer/getting-started/local-network.mdx @@ -161,7 +161,7 @@ curl --location --request POST 'http://127.0.0.1:9123/gas' \ sui client gas ``` -响应类似于以下内容,但具有不同的ID: +响应类似于以下内容,但具有不同的 ID: ```shell ╭────────────────────────────────────────────────────────────────────┬────────────╮ @@ -191,33 +191,33 @@ pnpm install pnpm turbo build ``` -如果你遇到Turbo Build的错误,请确认没有`package-lock.json'。 如果文件存在,请将其删除,然后再次运行命令。 +如果你遇到 Turbo Build 的错误,请确认没有`package-lock.json'。如果文件存在,请将其删除,然后再次运行命令。 -###在你的本地网络上设置SUI Explorer +###在你的本地网络上设置 SUI Explorer -要将实时SUI Explorer连接到你的本地网络,请打开URL:[https://suiexplorer.com/?network=local](https://suiexplorer.com/?network=local)。 SUI Explorer的实时版本可能不包括SUI Repo的“ Main”分支中添加的最新更新。 要使用SUI Explorer,其中包括最新更新,请从SUI Repo的本地克隆中安装和运行SUI Explorer。 +要将实时 SUI Explorer 连接到你的本地网络,请打开 URL:[https://suiexplorer.com/?network=local](https://suiexplorer.com/?network=local)。SUI Explorer 的实时版本可能不包括 SUI Repo 的“Main”分支中添加的最新更新。要使用 SUI Explorer,其中包括最新更新,请从 SUI Repo 的本地克隆中安装和运行 SUI Explorer。 -从“ sui”根文件夹中运行以下命令: +从“sui”根文件夹中运行以下命令: -**注意:**运行已安装`pnpm`的命令。 有关详细信息,请参见[在本地安装SUI Wallet和Sui Explorer](#安装sui-wallet and-sui-explorer)。 +**注意:**运行已安装`pnpm`的命令。有关详细信息,请参见[在本地安装 SUI Wallet 和 Sui Explorer](#安装 sui-wallet and-sui-explorer)。 ```bash pnpm explorer dev ``` -命令完成后,通过以下URL打开你的本地SUI Explorer:[http:// localhost:3000/](http:// localhost:3000/)。 +命令完成后,通过以下 URL 打开你的本地 SUI Explorer:[http:// localhost:3000/](http:// localhost:3000/)。 -有关SUI Explorer的更多详细信息,请参见[Explorer Readme](https://github.com/mystenlabs/sui/sui/blob/main/main/main/apps/explorer/readme.md#set-up)。 +有关 SUI Explorer 的更多详细信息,请参见[Explorer Readme](https://github.com/mystenlabs/sui/sui/blob/main/main/main/apps/explorer/readme.md#set-up)。 -##设置当地的SUI钱包 +##设置当地的 SUI 钱包 -你还可以使用本地SUI钱包来测试本地网络。 然后,你可以在本地SUI Explorer上看到从本地SUI钱包执行的交易。 +你还可以使用本地 SUI 钱包来测试本地网络。然后,你可以在本地 SUI Explorer 上看到从本地 SUI 钱包执行的交易。 -**注意:**要运行命令,你必须安装`pnpm`。 有关详细信息,请参见[在本地安装SUI Wallet和Sui Explorer](#安装sui-wallet and-sui-explorer)。 +**注意:**要运行命令,你必须安装`pnpm`。有关详细信息,请参见[在本地安装 SUI Wallet 和 Sui Explorer](#安装 sui-wallet and-sui-explorer)。 -在启动SUI Wallet应用程序之前,请更新其默认环境,以指向你的本地网络。 为此,首先制作`sui/apps/wallet/configs/vosings/.env.defaults“并将其重命名为同一目录中的.env”的副本。 在你的`.env`文件中,编辑第一行读取`api_env = local`然后保存文件。 +在启动 SUI Wallet 应用程序之前,请更新其默认环境,以指向你的本地网络。为此,首先制作`sui/apps/wallet/configs/vosings/.env.defaults“并将其重命名为同一目录中的.env”的副本。 在你的`.env`文件中,编辑第一行读取`api_env = local`然后保存文件。 -从“ SUI”根文件夹中运行以下命令,以在本地网络上启动SUI钱包: +从“SUI”根文件夹中运行以下命令,以在本地网络上启动 SUI 钱包: ```bash pnpm wallet dev diff --git a/content/guides/developer/getting-started/sui-environment.mdx b/content/guides/developer/getting-started/sui-environment.mdx index b23a9fe..e079c08 100644 --- a/content/guides/developer/getting-started/sui-environment.mdx +++ b/content/guides/developer/getting-started/sui-environment.mdx @@ -1,11 +1,11 @@ --- -title: Sui环境设置 -description: 在开始使用Sui和Move进行开发之前,你应该了解如何贡献给Sui,Sui的结构是如何的,存在哪些工具和SDK,以及你的IDE中有哪些可用的插件。 +title: Sui 环境设置 +description: 在开始使用 Sui 和 Move 进行开发之前,你应该了解如何贡献给 Sui,Sui 的结构是如何的,存在哪些工具和 SDK,以及你的 IDE 中有哪些可用的插件。 --- ## Fork Sui 存储库 {#fork} -贡献给 Sui 存储库的推荐方式是 fork 项目,在你的 fork 上进行更改,然后提交 pull 请求(PR)。Sui 存储库在 GitHub 上可用:https://github.com/MystenLabs/sui 。 +贡献给 Sui 存储库的推荐方式是 fork 项目,在你的 fork 上进行更改,然后提交 pull 请求(PR)。Sui 存储库在 GitHub 上可用:https://github.com/MystenLabs/sui。 创建本地 Sui 存储库的步骤如下: diff --git a/content/guides/developer/getting-started/sui-install.mdx b/content/guides/developer/getting-started/sui-install.mdx index f57923d..e5f3852 100644 --- a/content/guides/developer/getting-started/sui-install.mdx +++ b/content/guides/developer/getting-started/sui-install.mdx @@ -75,11 +75,11 @@ Sui 在所有支持的操作系统上都需要 Rust 和 Cargo(Rust 的包管 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ``` -如果你使用的是 Windows 11,请查看[Rust安装程序](https://www.rust-lang.org/tools/install)上 Rust 网站的相关信息。安装程序会检查是否存在 C++ 构建工具,并在必要时提示你安装它们。选择最符合你环境的选项,并按照安装向导中的说明操作。 +如果你使用的是 Windows 11,请查看[Rust 安装程序](https://www.rust-lang.org/tools/install)上 Rust 网站的相关信息。安装程序会检查是否存在 C++ 构建工具,并在必要时提示你安装它们。选择最符合你环境的选项,并按照安装向导中的说明操作。 有关其他安装选项,请参阅[安装 Rust](https://www.rust-lang.org/tools/install)。 -Sui 使用最新版本的 Cargo 来构建和管理依赖关系。有关更多信息,请参阅 Rust 网站上的[Cargo安装](https://doc.rust-lang.org/cargo/getting-started/installation.html)页面。 +Sui 使用最新版本的 Cargo 来构建和管理依赖关系。有关更多信息,请参阅 Rust 网站上的[Cargo 安装](https://doc.rust-lang.org/cargo/getting-started/installation.html)页面。 使用以下命令使用 `rustup` 更新 Rust: @@ -158,7 +158,7 @@ sudo apt-get install git-all sudo apt-get install cmake ``` -要自定义安装,请参阅 CMake 网站上的[安装 CMake](https://cmake.org/install/)。 +要自定义安装,请参阅 CMake 网站上的 [安装 CMake](https://cmake.org/install/)。 #### GCC {#gcc} diff --git a/content/guides/developer/nft.mdx b/content/guides/developer/nft.mdx index 0f5a387..4c389d4 100644 --- a/content/guides/developer/nft.mdx +++ b/content/guides/developer/nft.mdx @@ -1,5 +1,5 @@ --- -title: 创建一个NFT(非同质化代币) +title: 创建一个 NFT(非同质化代币) --- 在 Sui 中,所有的一切都是对象`object`。此外,因为`object`都是独一无二、不可替代和可拥有的,所以在` sui` 上面的所有都可以看作是非同质化代币 diff --git a/content/guides/developer/nft/asset-tokenization.mdx b/content/guides/developer/nft/asset-tokenization.mdx index e2be37e..dd1386b 100644 --- a/content/guides/developer/nft/asset-tokenization.mdx +++ b/content/guides/developer/nft/asset-tokenization.mdx @@ -11,7 +11,7 @@ description: 了解如何在 Sui 区块链上对资产进行代币化。资产 这种策略使得更多的投资者能够参与,他们可能希望通过投资资产的一部分来降低风险,而不是成为唯一的所有者,从而扩大了对更广泛投资者的可访问性。 -这种代币模式类似于 [ERC1155](https://eips.ethereum.org/EIPS/eip-1155) 具有附加功能的多代币标准。 这使其成为在 Sui 上实现 Solidity 基于用例的合适选择。 +这种代币模式类似于 [ERC1155](https://eips.ethereum.org/EIPS/eip-1155) 具有附加功能的多代币标准。这使其成为在 Sui 上实现 Solidity 基于用例的合适选择。 - **资产创建** @@ -57,7 +57,7 @@ FT 具有合并(加入)或拆分的能力,当余额大于一时可以进 `tokenized_asset` 模块的运作方式类似于`coin `库 -当它接收到一个新的[one-time witness](concepts/sui-move-concepts/one-time-witness.mdx) 类型时, 它会创建一个数字化资产的独特表示。 该模块采用与 Coin 模块中某些方法类似的实现。它包含与资产代币化相关的功能,包括新资产创建、铸造、拆分、合并和燃烧。 +当它接收到一个新的[one-time witness](concepts/sui-move-concepts/one-time-witness.mdx) 类型时,它会创建一个数字化资产的独特表示。该模块采用与 Coin 模块中某些方法类似的实现。它包含与资产代币化相关的功能,包括新资产创建、铸造、拆分、合并和燃烧。 **结构** @@ -435,7 +435,7 @@ public fun publisher_mut( 这类似于 launchpad 方法,并作为模板包用于每当需要将新资产表示为代币化资产时。 有效地允许用户实时编辑此模板合约的字段并发布包含编辑内容的合约。 -此包实现了两个基本模块,每个模块满足资产代币化所需的不同功能。有关如何实现 Rust WASM 的更多详细信息,请参见 [Web Assembly](#webassembly-wasm-and-template-package) 部分. +此包实现了两个基本模块,每个模块满足资产代币化所需的不同功能。有关如何实现 Rust WASM 的更多详细信息,请参见 [Web Assembly](#webassembly-wasm-and-template-package) 部分。 - **模块** @@ -784,7 +784,7 @@ Successfully verified dependencies on-chain against source. - 运行 npm run publish-template。 - 选择并存储创建对象中的 Template Package ID、asset metadata ID、asset cap ID 和 publisher ID,并将其存储在您的 .env 文件中的相应字段中。 -有关此过程的更多详细信息,请参阅 setup 文件夹的[README](https://github.com/MystenLabs/asset-tokenization/tree/main/setup)。 +有关此过程的更多详细信息,请参阅 setup 文件夹的 [README](https://github.com/MystenLabs/asset-tokenization/tree/main/setup)。 diff --git a/content/guides/developer/nft/nft-rental.mdx b/content/guides/developer/nft/nft-rental.mdx index a81e05e..d8be896 100644 --- a/content/guides/developer/nft/nft-rental.mdx +++ b/content/guides/developer/nft/nft-rental.mdx @@ -489,7 +489,7 @@ rect rgba(191, 223, 255, 0.2) end ``` -### 列出-出租-借用-回收 +### 列出 - 出租 - 借用 - 回收 ```mermaid sequenceDiagram @@ -546,7 +546,7 @@ rect rgba(191, 223, 255, 0.2) end ``` -### 列入-除名 +### 列入 - 除名 ```mermaid sequenceDiagram @@ -603,7 +603,7 @@ Sui Full node server URL (Defaults to Sui Devnet if not specified) : Select key scheme to generate keypair (0 for ed25519, 1 for secp256k1, 2: for secp256r1): ``` -选择 0 ,现在你应该已经设置了一个 Sui 地址。 +选择 0,现在你应该已经设置了一个 Sui 地址。 在能够将包发布到 `Testnet` 之前,你需要 `Testnet SUI` 代币。要获取一些,请加入[` Sui Discord`](https://discord.gg/Sui),完成验证步骤,进入`#testnet-faucet` 频道并输入 `!faucet `。有关将 SUI 添加到 Testnet 账户的其他方式,请参阅获取 SUI 代币。 diff --git a/content/guides/developer/sui-101.mdx b/content/guides/developer/sui-101.mdx index d0fc9da..9faca3a 100644 --- a/content/guides/developer/sui-101.mdx +++ b/content/guides/developer/sui-101.mdx @@ -1,29 +1,29 @@ --- title: Sui 101 -description: Sui核心概念的集合,开发人员用于在Sui区块链上创建对象并与之交互。 +description: Sui 核心概念的集合,开发人员用于在 Sui 区块链上创建对象并与之交互。 --- -在许多教育体系中,101级课程是教授核心竞争力的课程,为即将到来的更高级主题打下基础。本节中的主题为Sui区块链提供了相同的体验。它们探讨了你在Sui上构建应用程序时使用的核心Sui开发概念。随着你开始开发更高级的解决方案,对这些主题的了解将为理解你将使用的更高级概念提供良好的基础。 +在许多教育体系中,101 级课程是教授核心竞争力的课程,为即将到来的更高级主题打下基础。本节中的主题为 Sui 区块链提供了相同的体验。它们探讨了你在 Sui 上构建应用程序时使用的核心 Sui 开发概念。随着你开始开发更高级的解决方案,对这些主题的了解将为理解你将使用的更高级概念提供良好的基础。 -## 在Sui上创建货币和NFTs +## 在 Sui 上创建货币和 NFTs -Sui区块链上的一切都是对象。这些主题使用代码示例演示如何创建这些特定类型的对象。 +Sui 区块链上的一切都是对象。这些主题使用代码示例演示如何创建这些特定类型的对象。 - [创建货币](./sui-101/create-coin.mdx) -- [创建NFTs](./sui-101/create-nft.mdx) +- [创建 NFTs](./sui-101/create-nft.mdx) ## 构建可编程交易块 -你可以在Sui上创建可编程交易块 (PTBs),以执行单个交易中的多个命令。[构建可编程交易块](./sui-101/building-ptb.mdx)主题演示了如何使用Sui TypeScript SDK构建PTB。 +你可以在 Sui 上创建可编程交易块 (PTBs),以执行单个交易中的多个命令。[构建可编程交易块](./sui-101/building-ptb.mdx)主题演示了如何使用 Sui TypeScript SDK 构建 PTB。 ## 使用事件 -你可以从Sui网络上的已发布包中发出事件。[使用事件](./sui-101/using-events.mdx)演示了如何从你的链上包中发出事件以及监视发出事件的其他对象的活动。 +你可以从 Sui 网络上的已发布包中发出事件。[使用事件](./sui-101/using-events.mdx)演示了如何从你的链上包中发出事件以及监视发出事件的其他对象的活动。 ## 共享与拥有对象 -与其他区块链不同,Sui上的对象既可以是拥有的,也可以是共享的。你可以创建利用任一类型或两者的交易。[共享与拥有对象](./sui-101/shared-owned.mdx)检查了差异以及在决定如何构建链上应用程序结构时应考虑的因素。 +与其他区块链不同,Sui 上的对象既可以是拥有的,也可以是共享的。你可以创建利用任一类型或两者的交易。[共享与拥有对象](./sui-101/shared-owned.mdx)检查了差异以及在决定如何构建链上应用程序结构时应考虑的因素。 ## 访问链上时间 -Sui提供了一个`Clock`模块,你可以使用它获取基于网络的时间。[访问链上时间](./sui-101/access-time.mdx)检查了`Clock`模块以及影响交易处理速度和你接收到的数据的时间准确性的可用方法的行为。 +Sui 提供了一个`Clock`模块,你可以使用它获取基于网络的时间。[访问链上时间](./sui-101/access-time.mdx)检查了`Clock`模块以及影响交易处理速度和你接收到的数据的时间准确性的可用方法的行为。 diff --git a/content/guides/developer/sui-101/sign-and-send-txn.mdx b/content/guides/developer/sui-101/sign-and-send-txn.mdx index 8a1c5eb..c69884f 100644 --- a/content/guides/developer/sui-101/sign-and-send-txn.mdx +++ b/content/guides/developer/sui-101/sign-and-send-txn.mdx @@ -211,7 +211,7 @@ Sui 使用 `SuiKeyPair` 生成签名,该签名与意图消息(`intent || tx_ -当首次使用[Sui CLI](/references/cli.mdx)时,它会在你的机器上的 `~/.sui/keystore` 目录下创建一个本地文件,其中包含私钥列表(编码为 Base64 编码的 `flag || 32-byte-private-key`)。你可以通过指定其地址使用任何密钥来签署交易。使用 `sui keytool list` 查看地址列表。 +当首次使用 [Sui CLI](/references/cli.mdx) 时,它会在你的机器上的 `~/.sui/keystore` 目录下创建一个本地文件,其中包含私钥列表(编码为 Base64 编码的 `flag || 32-byte-private-key`)。你可以通过指定其地址使用任何密钥来签署交易。使用 `sui keytool list` 查看地址列表。 有三种初始化密钥的方法: @@ -234,7 +234,7 @@ sui keytool import "$MNEMONICS" secp256k1 sui keytool import "$MNEMONICS" secp256r1 ``` -在 CLI 中创建转账交易。将 `$SUI_ADDRESS` 设置为用于签署的密钥对应的地址。`$GAS_COIN_ID` 是发送方拥有的用于支付 gas 的对象 ID。`$GAS_BUDGET` 是用于执行交易的预算。然后使用与发送方地址对应的私钥进行签名。`$MNEMONICS` 是从助记词表中选择的 12/15/18/21/24 个单词,例如 "retire skin goose will hurry this field stadium drastic label husband venture cruel toe wire"。有关更多信息,请参阅[密钥和地址](/concepts/cryptography/transaction-auth/keys-addresses.mdx)。 +在 CLI 中创建转账交易。将 `$SUI_ADDRESS` 设置为用于签署的密钥对应的地址。`$GAS_COIN_ID` 是发送方拥有的用于支付 gas 的对象 ID。`$GAS_BUDGET` 是用于执行交易的预算。然后使用与发送方地址对应的私钥进行签名。`$MNEMONICS` 是从助记词表中选择的 12/15/18/21/24 个单词,例如 "retire skin goose will hurry this field stadium drastic label husband venture cruel toe wire"。有关更多信息,请参阅 [密钥和地址](/concepts/cryptography/transaction-auth/keys-addresses.mdx)。 ```shell sui client gas diff --git a/content/guides/operator.mdx b/content/guides/operator.mdx index 9099497..c098ae8 100644 --- a/content/guides/operator.mdx +++ b/content/guides/operator.mdx @@ -1,24 +1,24 @@ --- title: 操作者指南 -description: 面向Sui网络操作者的指南。无论你是为你的dApp运行全节点还是作为Sui网络的验证人运营,这些指南都将帮助你设置环境并操作你的网络。 +description: 面向 Sui 网络操作者的指南。无论你是为你的 dApp 运行全节点还是作为 Sui 网络的验证人运营,这些指南都将帮助你设置环境并操作你的网络。 --- -操作者指南演示了如何在Sui上运行全节点,无论是作为验证人还是全节点运营者。 +操作者指南演示了如何在 Sui 上运行全节点,无论是作为验证人还是全节点运营者。 -## Sui全节点运营者 +## Sui 全节点运营者 全节点运营者的指南包括: -- [Sui全节点配置](./operator/sui-full-node.mdx) +- [Sui 全节点配置](./operator/sui-full-node.mdx) -## Sui验证人 +## Sui 验证人 -Sui验证人的指南包括: +Sui 验证人的指南包括: - [验证者委员会](./operator/validator-committee.mdx) - [验证者配置](./operator/validator-config.mdx) -## Sui全节点运营者和验证人 +## Sui 全节点运营者和验证人 既适用于全节点运营者又适用于验证人的指南包括: diff --git a/content/guides/operator/observability.mdx b/content/guides/operator/observability.mdx index 416fa12..d19c28a 100644 --- a/content/guides/operator/observability.mdx +++ b/content/guides/operator/observability.mdx @@ -37,7 +37,7 @@ Sui 中的可观察性栈基于 [Tokio tracing](https://tokio.rs/blog/2019-08-tr - 纪元 - 主机信息,对于客户端和验证器都是如此 -在摘要中,`process_tx` 是一个覆盖处理初始事务请求的跨度,“Checked locks” 是验证器中处理事务的方法中的单个日志消息。 +在摘要中,`process_tx` 是一个覆盖处理初始事务请求的跨度,“Checked locks”是验证器中处理事务的方法中的单个日志消息。 在跨度中定义的键值对属性,包括 `tx_digest` 和添加的任何其他字段,每个发生在跨度内的日志消息都会继承。日志消息可以设置它们自己的键和值。日志继承跨度属性的事实允许你跟踪例如事务跨越线程和进程边界的流程。 diff --git a/content/guides/operator/snapshots.mdx b/content/guides/operator/snapshots.mdx index 79b0d07..c667124 100644 --- a/content/guides/operator/snapshots.mdx +++ b/content/guides/operator/snapshots.mdx @@ -132,17 +132,17 @@ Mysten Labs 托管了两个快照存储访问级别。**高吞吐量、开启付 * 如果你正在寻找最佳的下载速度,我们建议使用启用了 [传输加速](https://aws.amazon.com/s3/transfer-acceleration/) * 如果你寻找最佳的下载速度,我们建议使用启用了 [transfer acceleration](https://aws.amazon.com/s3/transfer-acceleration/) 的 S3 存储桶。 -**免费、无权限的存储桶:** +**免费、无权限的存储桶:** * 这些目前托管在 Cloudflare R2,目前仅在北美,但我们计划很快添加更多的区域。 * 由于存储桶对互联网开放,无需提供任何云凭据。 ### 存储桶名称 **S3** -测试网: `s3://mysten-testnet-snapshots/`, `s3://mysten-testnet-formal/` -主网: `s3://mysten-mainnet-snapshots/`, `s3://mysten-mainnet-formal/` +测试网:`s3://mysten-testnet-snapshots/`, `s3://mysten-testnet-formal/` +主网:`s3://mysten-mainnet-snapshots/`, `s3://mysten-mainnet-formal/` **GCS** -测试网: `gs://mysten-testnet-snapshots/`, `gs://mysten-testnet-formal/` -主网: `gs://mysten-mainnet-snapshots/`, `gs://mysten-mainnet-formal/` +测试网:`gs://mysten-testnet-snapshots/`, `gs://mysten-testnet-formal/` +主网:`gs://mysten-mainnet-snapshots/`, `gs://mysten-mainnet-formal/` ![Mysten 托管的快照](./images/mysten-cloud-snapshots.png "显示 Mysten 快照可用性的当前架构的图表") diff --git a/content/guides/operator/sui-full-node.mdx b/content/guides/operator/sui-full-node.mdx index 6363b2c..08f2b60 100644 --- a/content/guides/operator/sui-full-node.mdx +++ b/content/guides/operator/sui-full-node.mdx @@ -1,64 +1,64 @@ --- -title: Sui全节点配置 -description: 运行Sui全节点以验证区块链活动,如交易、检查点和时期更改。 +title: Sui 全节点配置 +description: 运行 Sui 全节点以验证区块链活动,如交易、检查点和时期更改。 --- :::info -这些说明适用于高级用户。如果你只需要一个本地开发环境,你应该按照[创建本地Sui网络](../developer/getting-started/local-network.mdx)中的说明创建本地全节点、验证器和水龙头。 +这些说明适用于高级用户。如果你只需要一个本地开发环境,你应该按照[创建本地 Sui 网络](../developer/getting-started/local-network.mdx)中的说明创建本地全节点、验证器和水龙头。 ::: -Sui全节点验证区块链活动,包括交易、检查点和时期更改。每个全节点都存储并为区块链状态和历史提供查询服务。 +Sui 全节点验证区块链活动,包括交易、检查点和时期更改。每个全节点都存储并为区块链状态和历史提供查询服务。 此角色使验证器能够专注于为服务和处理交易。当验证器提交一组新的交易(或交易块)时,验证器将该块推送到所有连接的全节点,然后这些全节点将为客户端的查询提供服务。 ## 特性 -Sui全节点: +Sui 全节点: - 跟踪并验证区块链的状态,独立并在本地进行。 - 为客户端提供读取请求服务。 ## 状态同步 -Sui全节点与验证器同步以接收网络上的新交易。 +Sui 全节点与验证器同步以接收网络上的新交易。 -一笔交易需要与2f+1个验证器进行几轮通信,以形成交易证书(TxCert)。 +一笔交易需要与 2f+1 个验证器进行几轮通信,以形成交易证书(TxCert)。 此同步过程包括: -1. 跟随2f+1个验证器并监听新提交的交易。 -1. 确保2f+1个验证器认识该交易并且它达到最终性。 +1. 跟随 2f+1 个验证器并监听新提交的交易。 +1. 确保 2f+1 个验证器认识该交易并且它达到最终性。 1. 在本地执行交易并更新本地数据库。 -此同步过程要求至少听取2f+1个验证器,以确保全节点已正确处理所有新交易。Sui将通过引入检查点和与其他全节点同步的能力来改进同步过程。 +此同步过程要求至少听取 2f+1 个验证器,以确保全节点已正确处理所有新交易。Sui 将通过引入检查点和与其他全节点同步的能力来改进同步过程。 ## 架构 -Sui全节点本质上是网络状态的只读视图。与验证器节点不同,全节点无法签署交易,尽管它们可以通过重新执行先前由验证器半数提交的交易来验证链的完整性。 +Sui 全节点本质上是网络状态的只读视图。与验证器节点不同,全节点无法签署交易,尽管它们可以通过重新执行先前由验证器半数提交的交易来验证链的完整性。 -目前,Sui全节点保留链的完整历史。 +目前,Sui 全节点保留链的完整历史。 -验证器节点仅存储对象图前沿上的最新交易(例如,具有>0未花费输出对象的交易)。 +验证器节点仅存储对象图前沿上的最新交易(例如,具有>0 未花费输出对象的交易)。 ## 全节点设置 -按照这里的说明运行你自己的Sui全节点。 +按照这里的说明运行你自己的 Sui 全节点。 ### 硬件要求 -运行Sui全节点的建议最低硬件要求: +运行 Sui 全节点的建议最低硬件要求: -- CPU:8个物理核心/16个虚拟核心 +- CPU:8 个物理核心/16 个虚拟核心 - RAM:128 GB -- 存储(SSD):4 TB NVMe驱动器 +- 存储(SSD):4 TB NVMe 驱动器 ### 软件要求 -Sui建议在Linux上运行Sui全节点。Sui支持Ubuntu和Debian发行版。你也可以在macOS上运行Sui全节点。 +Sui 建议在 Linux 上运行 Sui 全节点。Sui 支持 Ubuntu 和 Debian 发行版。你也可以在 macOS 上运行 Sui 全节点。 -确保[更新Rust](https://doc.rust-lang.org/book/ch01-01-installation.html#updating-and-uninstalling)。 +确保[更新 Rust](https://doc.rust-lang.org/book/ch01-01-installation.html#updating-and-uninstalling)。 -使用以下命令安装额外的Linux依赖项。 +使用以下命令安装额外的 Linux 依赖项。 ```shell sudo apt-get update \ @@ -79,42 +79,42 @@ cmake ## 配置全节点 -你可以通过使用Docker或从源代码构建来配置Sui全节点。 +你可以通过使用 Docker 或从源代码构建来配置 Sui 全节点。 -### 使用Docker Compose +### 使用 Docker Compose -按照[Full node Docker Readme](https://github.com/MystenLabs/sui/tree/main/docker/fullnode#readme)中的说明来运行Sui全节点,包括[重置环境](https://github.com/MystenLabs/sui/tree/main/docker/fullnode#reset-the-environment)。 +按照[Full node Docker Readme](https://github.com/MystenLabs/sui/tree/main/docker/fullnode#readme)中的说明来运行 Sui 全节点,包括[重置环境](https://github.com/MystenLabs/sui/tree/main/docker/fullnode#reset-the-environment)。 -### 设置本地Sui存储库 +### 设置本地 Sui 存储库 -你必须从Sui GitHub存储库获取最新的源文件。 -1. 设置Sui存储库的分支: - 1. 转到GitHub上的[Sui存储库](https://github.com/MystenLabs/sui),并单击屏幕右上角的Fork按钮。 - 1. 将Sui存储库的个人分支克隆到本地计算机(确保将你的GitHub用户名插入到URL中): +你必须从 Sui GitHub 存储库获取最新的源文件。 +1. 设置 Sui 存储库的分支: + 1. 转到 GitHub 上的[Sui 存储库](https://github.com/MystenLabs/sui),并单击屏幕右上角的 Fork 按钮。 + 1. 将 Sui 存储库的个人分支克隆到本地计算机(确保将你的 GitHub 用户名插入到 URL 中): `git clone https://github.com//sui.git` 1. 进入你的`sui`存储库: `cd sui` -1. 将Sui存储库设置为git远程: +1. 将 Sui 存储库设置为 git 远程: `git remote add upstream https://github.com/MystenLabs/sui` 1. 同步你的分支: `git fetch upstream` -1. 检出与你想要运行的网络版本相关联的分支(例如,使用`devnet`来运行Devnet全节点): +1. 检出与你想要运行的网络版本相关联的分支(例如,使用`devnet`来运行 Devnet 全节点): `git checkout --track upstream/` ### 从源代码设置全节点 {#set-up-from-source} 打开终端或控制台,转到你在前面步骤中下载的`sui`目录,完成以下步骤: 1. 安装所需的先决条件。 -1. 复制[Full node YAML模板](https://github.com/MystenLabs/sui/blob/main/crates/sui-config/data/fullnode-template.yaml): +1. 复制[Full node YAML 模板](https://github.com/MystenLabs/sui/blob/main/crates/sui-config/data/fullnode-template.yaml): `cp crates/sui-config/data/fullnode-template.yaml fullnode.yaml` 1. 下载要使用的网络的创世块: - - [Devnet创世块](https://github.com/MystenLabs/sui-genesis/raw/main/devnet/genesis.blob): + - [Devnet 创世块](https://github.com/MystenLabs/sui-genesis/raw/main/devnet/genesis.blob): `curl -fLJO https://github.com/MystenLabs/sui-genesis/raw/main/devnet/genesis.blob` - - [Testnet创世块](https://github.com/MystenLabs/sui-genesis/raw/main/testnet/genesis.blob): + - [Testnet 创世块](https://github.com/MystenLabs/sui-genesis/raw/main/testnet/genesis.blob): `curl -fLJO https://github.com/MystenLabs/sui-genesis/raw/main/testnet/genesis.blob` - - [Mainnet创世块](https://github.com/MystenLabs/sui-genesis/raw/main/mainnet/genesis.blob): + - [Mainnet 创世块](https://github.com/MystenLabs/sui-genesis/raw/main/mainnet/genesis.blob): `curl -fLJO https://github.com/MystenLabs/sui-genesis/raw/main/mainnet/genesis.blob` -1. 仅适用于Testnet全节点:编辑`fullnode.yaml`文件以包含状态同步的对等节点。在当前配置的末尾追加以下内容: +1. 仅适用于 Testnet 全节点:编辑`fullnode.yaml`文件以包含状态同步的对等节点。在当前配置的末尾追加以下内容: ```shell p2p-config: seed-peers: @@ -125,8 +125,8 @@ cmake - peer-id: 9393d6056bb9c9d8475a3cf3525c747257f17c6a698a7062cbbd1875bc6ef71e address: /dns/mel-tnt-ssfn-00.testnet.sui.io/udp/8084 ``` -1. 可选:跳过此步骤以接受资源的默认路径。编辑fullnode.yaml文件以使用自定义路径。 -1. 使用Full节点数据库路径更新`db-path`字段。 +1. 可选:跳过此步骤以接受资源的默认路径。编辑 fullnode.yaml 文件以使用自定义路径。 +1. 使用 Full 节点数据库路径更新`db-path`字段。 `db-path: "/db-files/sui-fullnode"` 1. 使用创世块路径更新`genesis-file-location`: ```shell @@ -136,20 +136,20 @@ cmake ### 启动服务 -此时,你的Sui全节点已准备好连接到Sui网络。 +此时,你的 Sui 全节点已准备好连接到 Sui 网络。 -1. 打开终端或控制台,进入sui目录。 -1. 启动Sui全节点: +1. 打开终端或控制台,进入 sui 目录。 +1. 启动 Sui 全节点: `cargo run --release --bin sui-node -- --config-path fullnode.yaml` -1. 可选:通过JSON-RPC通过websocket发布/订阅通知。 +1. 可选:通过 JSON-RPC 通过 websocket 发布/订阅通知。 -如果你的设置成功,你的Sui全节点现在已连接到适当的网络。 +如果你的设置成功,你的 Sui 全节点现在已连接到适当的网络。 -你的全节点为Sui JSON-RPC API的读取端点提供服务:`http://127.0.0.1:9000`。 +你的全节点为 Sui JSON-RPC API 的读取端点提供服务:`http://127.0.0.1:9000`。 ### 故障排除 -如果收到`cannot find -lpq`错误,则缺少`libpq`库。在Linux上使用`sudo apt-get install libpq-dev`进行安装,或在macOS上使用`brew install libpq`。在macOS上安装后,请使用`brew link --force libpq`创建Homebrew链接。有关更多上下文,请参考[Stack Overflow上的问题](https://stackoverflow.com/questions/70313347/ld-library-not-found-for-lpq-when-build-rust-in-macos?rq=1)。 +如果收到`cannot find -lpq`错误,则缺少`libpq`库。在 Linux 上使用`sudo apt-get install libpq-dev`进行安装,或在 macOS 上使用`brew install libpq`。在 macOS 上安装后,请使用`brew link --force libpq`创建 Homebrew 链接。有关更多上下文,请参考[Stack Overflow 上的问题](https://stackoverflow.com/questions/70313347/ld-library-not-found-for-lpq-when-build-rust-in-macos?rq=1)。 如果收到以下错误: @@ -157,33 +157,33 @@ cmake panicked at error binding to 0.0.0.0:9184: error creating server listener: Address already in use (os error 98) ``` -然后,将你的fullnode.yaml文件中的指标地址更新为使用端口`9180`。 +然后,将你的 fullnode.yaml 文件中的指标地址更新为使用端口`9180`。 ```shell metrics-address: "0.0.0.0:9180" ``` -## 使用你的全节点的Sui Explorer +## 使用你的全节点的 Sui Explorer -[Sui Explorer](https://suiexplorer.com/)支持连接到自定义RPC URL和本地网络。你可以将Explorer指向你的本地全节点,查看它从网络同步的交易。 +[Sui Explorer](https://suiexplorer.com/)支持连接到自定义 RPC URL 和本地网络。你可以将 Explorer 指向你的本地全节点,查看它从网络同步的交易。 1. 打开浏览器并转到:https://suiexplorer.com/ 1. 在右上角的网络下拉 -菜单(或较小屏幕上的三条杠)中点击**Mainnet**,选择**Local**以连接到本地网络,或选择**Custom RPC URL**,然后输入URL。 +菜单(或较小屏幕上的三条杠)中点击**Mainnet**,选择**Local**以连接到本地网络,或选择**Custom RPC URL**,然后输入 URL。 -Sui Explorer显示有关所选网络的信息。 +Sui Explorer 显示有关所选网络的信息。 ## 监控 -使用Logging、Tracing、Metrics和Observability中的说明监视你的全节点。 +使用 Logging、Tracing、Metrics 和 Observability 中的说明监视你的全节点。 -默认的度量端口是`9184`。要更改端口,请编辑你的fullnode.yaml文件。 +默认的度量端口是`9184`。要更改端口,请编辑你的 fullnode.yaml 文件。 ## 更新你的全节点 -每当Sui发布新版本时,你必须使用发布更新你的全节点,以确保其与连接的网络兼容。例如,如果你使用Sui Testnet,则应安装运行在Sui Testnet上的Sui版本。 +每当 Sui 发布新版本时,你必须使用发布更新你的全节点,以确保其与连接的网络兼容。例如,如果你使用 Sui Testnet,则应安装运行在 Sui Testnet 上的 Sui 版本。 -### 使用Docker Compose进行更新 +### 使用 Docker Compose 进行更新 按照[重置环境](https://github.com/MystenLabs/sui/tree/main/docker/fullnode#reset-the-environment)的说明进行更新,即通过运行以下命令: @@ -196,7 +196,7 @@ docker-compose down --volumes 如果你按照从源代码构建的说明进行操作,请使用以下步骤更新你的完整节点: 1. 关闭正在运行的完整节点。 -2. 进入你的本地Sui存储库所在的目录: +2. 进入你的本地 Sui 存储库所在的目录: ```shell cd sui ``` @@ -227,13 +227,13 @@ docker-compose down --volumes cargo run --release --bin sui-node -- --config-path fullnode.yaml ``` -你的全节点开始于: http://127.0.0.1:9000. +你的全节点开始于:http://127.0.0.1:9000. ## 对象修剪 {#object-pruning} -Sui在事务执行的过程中向数据库添加新的对象版本。这使得以前的版本可以进行垃圾收集。然而,如果不进行修剪,这可能导致数据库性能下降并且需要大量的存储空间。Sui在每个检查点中识别出适合进行修剪的对象,然后在后台执行修剪。 +Sui 在事务执行的过程中向数据库添加新的对象版本。这使得以前的版本可以进行垃圾收集。然而,如果不进行修剪,这可能导致数据库性能下降并且需要大量的存储空间。Sui 在每个检查点中识别出适合进行修剪的对象,然后在后台执行修剪。 -你可以通过在 `fullnode.yaml` 文件中添加 `authority-store-pruning-config` 配置来启用Sui节点的修剪: +你可以通过在 `fullnode.yaml` 文件中添加 `authority-store-pruning-config` 配置来启用 Sui 节点的修剪: ```yaml authority-store-pruning-config: @@ -267,9 +267,9 @@ authority-store-pruning-config: ``` ## 事务修剪 {#transaction-pruning} -事务修剪会从数据库中删除先前的事务和影响。Sui周期性地创建检查点。每个检查点包含在检查点期间发生的事务及其相关的影响。 +事务修剪会从数据库中删除先前的事务和影响。Sui 周期性地创建检查点。每个检查点包含在检查点期间发生的事务及其相关的影响。 -Sui在检查点完成后后台执行事务修剪。 +Sui 在检查点完成后后台执行事务修剪。 你可以通过将 `num-epochs-to-retain-for-checkpoints` 添加到节点的 `authority-store-pruning-config` 配置来启用 Full 节点或 Validator 节点的事务修剪: diff --git a/content/guides/operator/validator-committee.mdx b/content/guides/operator/validator-committee.mdx index 4f72c42..125ae80 100644 --- a/content/guides/operator/validator-committee.mdx +++ b/content/guides/operator/validator-committee.mdx @@ -1,23 +1,23 @@ --- title: 验证者委员会 -description: Sui拥有一个验证者委员会来验证链上交易。时期、法定人数、交易、证书和共识是该委员会的关键点。 +description: Sui 拥有一个验证者委员会来验证链上交易。时期、法定人数、交易、证书和共识是该委员会的关键点。 --- -一组独立的验证者参与Sui网络,每个都在单独的机器上(或同一实体操作的分片集群上)运行其自己的Sui软件实例。每个验证者处理客户端发送的读写请求,验证交易并更新链上信息。 +一组独立的验证者参与 Sui 网络,每个都在单独的机器上(或同一实体操作的分片集群上)运行其自己的 Sui 软件实例。每个验证者处理客户端发送的读写请求,验证交易并更新链上信息。 -要了解如何设置和运行Sui验证者节点,包括质押和奖励的工作原理,请参阅[Sui验证者节点配置](./validator-config.mdx)。 +要了解如何设置和运行 Sui 验证者节点,包括质押和奖励的工作原理,请参阅[Sui 验证者节点配置](./validator-config.mdx)。 -Sui使用委托权益证明(DPoS)来确定哪些验证者操作网络以及它们的投票权。通过交易费用的一部分、质押奖励以及在不当行为的情况下削减质押和质押奖励,激励验证者以善意参与。 +Sui 使用委托权益证明(DPoS)来确定哪些验证者操作网络以及它们的投票权。通过交易费用的一部分、质押奖励以及在不当行为的情况下削减质押和质押奖励,激励验证者以善意参与。 ## 时期 -Sui网络的运行被时间分割为不重叠的、近似固定时长(~24小时)的时期。在特定的时期内,参与网络的验证者集合及其投票权是固定的。在时期边界,可能发生重新配置,并且可以更改参与网络的验证者集合及其投票权。从概念上讲,重新配置启动Sui协议的一个新实例,将前一个时期的最终状态作为[起源](./genesis.mdx)和新的验证者集合作为操作者。除了验证者集合的更改外,时期边界还处理诸如质押/解质押以及在时期边界进行的质押奖励分配等令牌经济学操作。 +Sui 网络的运行被时间分割为不重叠的、近似固定时长(~24 小时)的时期。在特定的时期内,参与网络的验证者集合及其投票权是固定的。在时期边界,可能发生重新配置,并且可以更改参与网络的验证者集合及其投票权。从概念上讲,重新配置启动 Sui 协议的一个新实例,将前一个时期的最终状态作为[起源](./genesis.mdx)和新的验证者集合作为操作者。除了验证者集合的更改外,时期边界还处理诸如质押/解质押以及在时期边界进行的质押奖励分配等令牌经济学操作。 ## 法定人数 -法定人数是在特定时期内其组合投票权超过总数的验证者集。例如,在由四个具有相同投票权的验证者操作的Sui实例中,任何包含三个验证者的组合都是法定人数。 +法定人数是在特定时期内其组合投票权超过总数的验证者集。例如,在由四个具有相同投票权的验证者操作的 Sui 实例中,任何包含三个验证者的组合都是法定人数。 -> 法定人数的大小超过2/3,确保了拜占庭容错(BFT)。验证者仅在交易伴随着法定人数的密码签名时(伴随交易的密码签名用于耐用地存储交易并更新其内部状态),才会提交交易。Sui将交易和法定人数对其字节的签名的组合称为*证书*。只有提交证书才能确保拜占庭容错:如果超过2/3的验证者忠实地遵循协议,它们将最终同意提交的证书集合及其效果。 +> 法定人数的大小超过 2/3,确保了拜占庭容错 (BFT)。验证者仅在交易伴随着法定人数的密码签名时(伴随交易的密码签名用于耐用地存储交易并更新其内部状态),才会提交交易。Sui 将交易和法定人数对其字节的签名的组合称为*证书*。只有提交证书才能确保拜占庭容错:如果超过 2/3 的验证者忠实地遵循协议,它们将最终同意提交的证书集合及其效果。 ## 写入请求 @@ -40,13 +40,13 @@ Sui网络的运行被时间分割为不重叠的、近似固定时长(~24小 ## 独角鲸和牛鲨的作用 -Sui利用独角鲸和牛鲨作为其内存池和共识引擎。独角鲸/牛鲨(N/B)也在Sui中实现,因此在需要拜占庭协议时,它使用基于DAG的高吞吐量共识来管理在不同共享对象上并行执行时的共享锁。 +Sui 利用独角鲸和牛鲨作为其内存池和共识引擎。独角鲸/牛鲨 (N/B) 也在 Sui 中实现,因此在需要拜占庭协议时,它使用基于 DAG 的高吞吐量共识来管理在不同共享对象上并行执行时的共享锁。 -独角鲸使交易能够并行排序成批次,这些批次被并发地提议为块,并且牛鲨定义了执行这些块形成的DAG的算法。N/B组合构建了块的DAG,同时提议,并在DAG的构建过程中产生了这些块之间的顺序。但是,该顺序叠加在Sui事务的因果顺序之上(这里的Narwhal/Bullshark的“有效载荷”),并不代替它: +独角鲸使交易能够并行排序成批次,这些批次被并发地提议为块,并且牛鲨定义了执行这些块形成的 DAG 的算法。N/B 组合构建了块的 DAG,同时提议,并在 DAG 的构建过程中产生了这些块之间的顺序。但是,该顺序叠加在 Sui 事务的因果顺序之上(这里的 Narwhal/Bullshark 的“有效载荷”),并不代替它: -- N/B以OX模式运行,而不是XO模式(O = order,X = execute);执行发生在Narwhal/Bullshark排序之后。 -- 因此,N/B的输出是一系列交易,其中交易数据本身存储了交易的内部依赖关系。 +- N/B 以 OX 模式运行,而不是 XO 模式(O = order,X = execute);执行发生在 Narwhal/Bullshark 排序之后。 +- 因此,N/B 的输出是一系列交易,其中交易数据本身存储了交易的内部依赖关系。 -共识顺序证书交易。这些代表已经呈现给2/3的验证者的交易,这些验证者检查它们所有拥有的对象都可以被操作,并签署了交易。一旦证书被排序,Sui将共享对象的锁设置为下一个可用版本,以映射到该证书的执行。例如,如果你有一个共享对象X,版本为2,并且你排序了证书T,那么Sui将T -> [(X,2)]存储。这就是当Sui达成共识时所做的全部工作,因此Sui可以吸收大量经过排序的交易。 +共识顺序证书交易。这些代表已经呈现给 2/3 的验证者的交易,这些验证者检查它们所有拥有的对象都可以被操作,并签署了交易。一旦证书被排序,Sui 将共享对象的锁设置为下一个可用版本,以映射到该证书的执行。例如,如果你有一个共享对象 X,版本为 2,并且你排序了证书 T,那么 Sui 将 T -> [(X,2)]存储。这就是当 Sui 达成共识时所做的全部工作,因此 Sui 可以吸收大量经过排序的交易。 -现在,在完成此操作后,Sui可以在一个或多个核心上执行所有已设置锁的证书。显然,需要首先处理对象早期版本的交易(因果关系),这会降低并发度。事务的读写集可以从其版本化的对象输入中静态确定--执行只能读取/写入作为事务输入的对象,或者由事务创建的对象。 +现在,在完成此操作后,Sui 可以在一个或多个核心上执行所有已设置锁的证书。显然,需要首先处理对象早期版本的交易(因果关系),这会降低并发度。事务的读写集可以从其版本化的对象输入中静态确定--执行只能读取/写入作为事务输入的对象,或者由事务创建的对象。 diff --git a/content/guides/operator/validator-config.mdx b/content/guides/operator/validator-config.mdx index 307c64d..c2afd31 100644 --- a/content/guides/operator/validator-config.mdx +++ b/content/guides/operator/validator-config.mdx @@ -1,19 +1,19 @@ --- -title: Sui验证者节点配置 -description: 学习如何设置、配置和管理Sui验证者节点,包括质押、参考燃气价格和计票规则。 +title: Sui 验证者节点配置 +description: 学习如何设置、配置和管理 Sui 验证者节点,包括质押、参考燃气价格和计票规则。 --- -Sui网络上的验证者运行特殊节点,并且除完整节点运算符的任务和责任外,还有其他任务和责任。 +Sui 网络上的验证者运行特殊节点,并且除完整节点运算符的任务和责任外,还有其他任务和责任。 -## 运行Sui验证者所需的条件 +## 运行 Sui 验证者所需的条件 -要运行Sui验证者,你必须设置和配置一个Sui验证者节点。在运行节点之后,你必须在Sui网络的验证者集中拥有至少3000万SUI的质押池才能加入。 +要运行 Sui 验证者,你必须设置和配置一个 Sui 验证者节点。在运行节点之后,你必须在 Sui 网络的验证者集中拥有至少 3000 万 SUI 的质押池才能加入。 -要了解如何设置和配置Sui验证者节点,请参阅GitHub上的[Sui for Node Operators](https://github.com/MystenLabs/sui/blob/main/nre/sui_for_node_operators.md)。该指南包含配置验证者节点所需的所有信息。它还提供了加入验证者集后必须执行的任务的指导。 +要了解如何设置和配置 Sui 验证者节点,请参阅 GitHub 上的[Sui for Node Operators](https://github.com/MystenLabs/sui/blob/main/nre/sui_for_node_operators.md)。该指南包含配置验证者节点所需的所有信息。它还提供了加入验证者集后必须执行的任务的指导。 你必须执行的具体步骤包括: -- 安装和配置Sui +- 安装和配置 Sui - 配置端口和协议设置 - 密钥管理 - 存储配置 @@ -26,28 +26,28 @@ Sui网络上的验证者运行特殊节点,并且除完整节点运算符的 ## 运行验证者节点的硬件要求 -运行Sui完整节点的建议的最低硬件规格: +运行 Sui 完整节点的建议的最低硬件规格: -- CPU:24个物理核心(或48个虚拟核心) +- CPU:24 个物理核心(或 48 个虚拟核心) - 内存:128 GB - 存储:4 TB NVME - 网络:1 Gbps ## 验证者共识和投票权 -Sui上的总投票权始终为10,000,不论抵押金额如何。因此,法定人数门槛为6,667。用户对验证者的抵押金额没有限制。每个验证者的共识投票权与其抵押池中的SUI数量成比例,但有一个例外:个别验证者的投票权被限制在1,000(总量的10%)。如果验证者的累计抵押超过总抵押的10%,则验证者的投票权保持固定在10%,其余的投票权分配给验证者集的其余部分。 +Sui 上的总投票权始终为 10,000,不论抵押金额如何。因此,法定人数门槛为 6,667。用户对验证者的抵押金额没有限制。每个验证者的共识投票权与其抵押池中的 SUI 数量成比例,但有一个例外:个别验证者的投票权被限制在 1,000(总量的 10%)。如果验证者的累计抵押超过总抵押的 10%,则验证者的投票权保持固定在 10%,其余的投票权分配给验证者集的其余部分。 ### 用户质押和提现 -当用户质押SUI代币时,这些SUI对象将被包装到StakedSUI对象中。确定每个用户对质押池相对所有权的计算是通过StakedSUI对象的时间戳(确定存款发生的时刻)和存款时期和提款时期之间的汇率变化来完成的。每个质押池的数据结构都包含该池的汇率的时间序列。这些汇率可以用于确定该池的任何质押者的提款。 +当用户质押 SUI 代币时,这些 SUI 对象将被包装到 StakedSUI 对象中。确定每个用户对质押池相对所有权的计算是通过 StakedSUI 对象的时间戳(确定存款发生的时刻)和存款时期和提款时期之间的汇率变化来完成的。每个质押池的数据结构都包含该池的汇率的时间序列。这些汇率可以用于确定该池的任何质押者的提款。 -提款立即在以前时期的汇率下进行处理。提款无需等待当前时期关闭。提款包括用户存入的原始SUI和截至前一个时期边界累积的所有质押奖励。质押者在他们提款的时期内不会获得其质押收益。由于在当前时期关闭之前无法知道在当前时期内将累积多少质押奖励,因此这些无法包含在提款中。因此,任何用户都可以立即提取他们的质押,并获得: +提款立即在以前时期的汇率下进行处理。提款无需等待当前时期关闭。提款包括用户存入的原始 SUI 和截至前一个时期边界累积的所有质押奖励。质押者在他们提款的时期内不会获得其质押收益。由于在当前时期关闭之前无法知道在当前时期内将累积多少质押奖励,因此这些无法包含在提款中。因此,任何用户都可以立即提取他们的质押,并获得: -E'时提取的SUI = (E时存入的SUI)*(E'-1时的汇率 / E时的汇率) +E'时提取的 SUI = (E 时存入的 SUI)*(E'-1 时的汇率 / E 时的汇率) ### 查找汇率 -每个时期更改都会发出`0x2::validator_set::ValidatorEpochInfo`事件,每个验证者都会附带汇率信息。你可以使用Events API查询事件。 +每个时期更改都会发出`0x2::validator_set::ValidatorEpochInfo`事件,每个验证者都会附带汇率信息。你可以使用 Events API 查询事件。 ## 质押奖励 @@ -57,12 +57,12 @@ E'时提取的SUI = (E时存入的SUI)*(E'-1时的汇率 / E时的汇率 质押奖励 = 质押奖励 + 燃气费 -质押奖励旨在在网络的早期阶段资助网络,并由SUI代币的10%分配资金。在此分配用尽之后,整个质押奖励将由通过常规网络运算收集的燃气费组成。 +质押奖励旨在在网络的早期阶段资助网络,并由 SUI 代币的 10% 分配资金。在此分配用尽之后,整个质押奖励将由通过常规网络运算收集的燃气费组成。 质押奖励由燃气费和质押奖励组成。每个时期分配的总金额如下确定: - **质押奖励:**每个时期分配的金额在时期开始之前根据预定义的时间表确定。 -- **燃气费:**每个时期的金额取决于在整个时期内收集的总燃气费。每个Sui交易支付燃气费,具体取决于两个变量,即执行的燃气单元数量和燃气价格: +- **燃气费:**每个时期的金额取决于在整个时期内收集的总燃气费。每个 Sui 交易支付燃气费,具体取决于两个变量,即执行的燃气单元数量和燃气价格: _GasFee = GasPrice _ GasUnits* 收集的燃气费总额对应于在时期内处理的所有交易中的燃气费总和。在常规市场条件下,绝大多数交易的`GasPrice`应与`ReferenceGasPrice`相等。 @@ -71,26 +71,26 @@ E'时提取的SUI = (E时存入的SUI)*(E'-1时的汇率 / E时的汇率 ### 用户质押和奖励 -质押请求在提交后立即进入质押池中的挂起状态。Sui Wallet反映用户帐户的任何挂起的质押请求。但是,挂起的质押请求直到其提交的时期结束时才生效。 +质押请求在提交后立即进入质押池中的挂起状态。Sui Wallet 反映用户帐户的任何挂起的质押请求。但是,挂起的质押请求直到其提交的时期结束时才生效。 -撤回(取消质押)请求在接收到时立即进行处理。质押者获得最初存入的SUI以及截至前一个时期边界的所有累积质押奖励,换句话说,他们不包括当前时期的质押奖励。 +撤回(取消质押)请求在接收到时立即进行处理。质押者获得最初存入的 SUI 以及截至前一个时期边界的所有累积质押奖励,换句话说,他们不包括当前时期的质押奖励。 -用户无法撤回其活动质押的一部分。他们必须同时撤回所有已质押的SUI。然而,用户可以通过将其SUI分成多个硬币并将其分成多个`StakedSui`对象来进行质押。然后,他们可以从验证者中撤回仅部分`StakedSUI`对象。 +用户无法撤回其活动质押的一部分。他们必须同时撤回所有已质押的 SUI。然而,用户可以通过将其 SUI 分成多个硬币并将其分成多个`StakedSui`对象来进行质押。然后,他们可以从验证者中撤回仅部分`StakedSUI`对象。 ## 参考燃气价格 -Sui被设计为使最终用户在常规网络运作期间能够期望燃气价格保持稳定和可预测。这通过在每个时期开始时由验证者设置网络的参考燃气价格来实现。 +Sui 被设计为使最终用户在常规网络运作期间能够期望燃气价格保持稳定和可预测。这通过在每个时期开始时由验证者设置网络的参考燃气价格来实现。 在操作上,通过燃气价格调查实现如下: -- 在每个时期E期间,每个验证者都会提交他们认为下一个时期E+1的最佳参考燃气价格应该是什么。 -- 在时期结束时,当Sui从时期E过渡到时期E+1时,网络会观察验证者集中的燃气价格报价,并将2/3的加权百分位数作为该时期的参考燃气价格。因此,参考燃气价格在每个时期内保持恒定,并且仅在时期更改时更新。 +- 在每个时期 E 期间,每个验证者都会提交他们认为下一个时期 E+1 的最佳参考燃气价格应该是什么。 +- 在时期结束时,当 Sui 从时期 E 过渡到时期 E+1 时,网络会观察验证者集中的燃气价格报价,并将 2/3 的加权百分位数作为该时期的参考燃气价格。因此,参考燃气价格在每个时期内保持恒定,并且仅在时期更改时更新。 -例如,假设有七个投票者拥有相等的股权,他们提交的价格报价为`{15, 1, 4, 2, 8, 3, 23}`。协议将参考燃气价格设置为8。 +例如,假设有七个投票者拥有相等的股权,他们提交的价格报价为`{15, 1, 4, 2, 8, 3, 23}`。协议将参考燃气价格设置为 8。 实际上,提交燃气价格报价进行燃气价格调查的过程是一个简单的过程。每个验证者都拥有一个包含其对参考燃气价格的报价的对象。要更改其响应,它们必须更新该对象中的值。 -例如,要将下一个时期的价格报价设置为42,请运行: +例如,要将下一个时期的价格报价设置为 42,请运行: ```shell sui client call --package --module sui_system --function request_set_gas_price --args 0x5 \"42\" --gas-budget @@ -100,14 +100,14 @@ sui client call --package --module sui_system --function request_se ## 验证者惩罚和计分规则 -Sui旨在鼓励和强制执行验证者集的社区监控。这是通过计票规则完成的,其中每个验证者都监视和评分每个其他验证者,以确保每个人都以网络的最佳利益高效运作。得分较低的验证者可能会因削减质押奖励而受到惩罚。 +Sui 旨在鼓励和强制执行验证者集的社区监控。这是通过计票规则完成的,其中每个验证者都监视和评分每个其他验证者,以确保每个人都以网络的最佳利益高效运作。得分较低的验证者可能会因削减质押奖励而受到惩罚。 -协议仅在时期边界计算全局计票规则得分,因此依赖于验证者积极监控并在检测到其他验证者行为变化时更改其个体得分。通常,计票规则的默认选项应始终是所有验证者的得分为1,并且只有在确定操作不良时才更改为零。实际上,计票规则由每个验证者拥有的一组对象组成,这些对象的默认分数为1,因此验证者通常会被动地仅在需要时更新与另一验证者的分数相对应的对象。 +协议仅在时期边界计算全局计票规则得分,因此依赖于验证者积极监控并在检测到其他验证者行为变化时更改其个体得分。通常,计票规则的默认选项应始终是所有验证者的得分为 1,并且只有在确定操作不良时才更改为零。实际上,计票规则由每个验证者拥有的一组对象组成,这些对象的默认分数为 1,因此验证者通常会被动地仅在需要时更新与另一验证者的分数相对应的对象。 -例如,要报告Sui地址为`0x44840a79dd5cf1f5efeff1379f5eece04c72db13512a2e31e8750f5176285446`的验证者为不良或性能不佳,请运行: +例如,要报告 Sui 地址为`0x44840a79dd5cf1f5efeff1379f5eece04c72db13512a2e31e8750f5176285446`的验证者为不良或性能不佳,请运行: ```shell sui client call --package --module sui_system --function report_validator --args 0x5 0x44840a79dd5cf1f5efeff1379f5eece04c72db13512a2e31e8750f5176285446 --gas-budget ``` -计票规则应通过社交平衡实现。验证者集应积极监控自己,如果一个验证者明显表现不佳,则其他验证者应该为该验证者打分为0并削减其奖励。社区成员可以启动跟踪验证者性能的公共仪表板,这可以用作对验证者操作的进一步信号。在一个时期中,可以接收到获得0计分的验证者数量没有限制。 +计票规则应通过社交平衡实现。验证者集应积极监控自己,如果一个验证者明显表现不佳,则其他验证者应该为该验证者打分为 0 并削减其奖励。社区成员可以启动跟踪验证者性能的公共仪表板,这可以用作对验证者操作的进一步信号。在一个时期中,可以接收到获得 0 计分的验证者数量没有限制。 diff --git a/content/guides/operator/validator-tasks.mdx b/content/guides/operator/validator-tasks.mdx index c3cbbc6..61a3466 100644 --- a/content/guides/operator/validator-tasks.mdx +++ b/content/guides/operator/validator-tasks.mdx @@ -45,7 +45,7 @@ cargo build --release --bin sui-node ## 配置 -Sui 节点通过提供的单一配置文件作为参数来运行,例如: +Sui 节点通过提供的单一配置文件作为参数来运行,例如: `./sui-node --config-path /opt/sui/config/validator.yaml`. @@ -87,7 +87,7 @@ du -sh /opt/sui/db/authorities_db du -sh /opt/sui/db/consensus_db ``` -- 删除本地 Sui 节点数据库: +- 删除本地 Sui 节点数据库: ```shell sudo systemctl stop sui-node @@ -105,7 +105,7 @@ Sui 节点使用以下键: | network.key | ed25519 | narwhal primary, sui state sync | | worker.key | ed25519 | validate narwhal workers | -这些配置在[Sui节点配置文件](#configuration)中进行了设置。 +这些配置在[Sui 节点配置文件](#configuration)中进行了设置。 ## 监控 diff --git a/content/references.mdx b/content/references.mdx index b941550..bb697c0 100644 --- a/content/references.mdx +++ b/content/references.mdx @@ -5,29 +5,29 @@ sidebar_label: 概览 import { Cards, Card } from "../site/src/components/Cards" -已经熟悉Sui了吗?使用这些宝贵的资源来继续你的开发之旅。 +已经熟悉 Sui 了吗?使用这些宝贵的资源来继续你的开发之旅。 ## Sui API 和框架 -参考Sui框架文档以了解驱动Sui区块链的Move代码。文档是通过Markdown自动生成的,目前托管在GitHub上。 +参考 Sui 框架文档以了解驱动 Sui 区块链的 Move 代码。文档是通过 Markdown 自动生成的,目前托管在 GitHub 上。 - -Sui框架参考,用于支持区块链的Move包。 + +Sui 框架参考,用于支持区块链的 Move 包。 -以JSON RPC格式提供的SUI API的API参考。 +以 JSON RPC 格式提供的 SUI API 的 API 参考。 -## Move编程 +## Move 编程 -Move为Sui区块链提供智能合约逻辑。使用这些资源来学习Move或刷新你的记忆。 +Move 为 Sui 区块链提供智能合约逻辑。使用这些资源来学习 Move 或刷新你的记忆。 - -GitHub上Move编程语言的文档。 + +GitHub 上 Move 编程语言的文档。 @@ -35,27 +35,27 @@ GitHub上Move编程语言的文档。 ## Sui CLI -使用Sui命令行界面 (CLI) 直接与Sui网络及其功能交互。CLI分为不同的基本命令,以针对特定功能集。 +使用 Sui 命令行界面 (CLI) 直接与 Sui 网络及其功能交互。CLI 分为不同的基本命令,以针对特定功能集。 - -在Sui网络上创建客户端,使用Sui客户端CLI生成地址,访问网络等。 + +在 Sui 网络上创建客户端,使用 Sui 客户端 CLI 生成地址,访问网络等。 -使用Sui Move CLI在链上访问Sui Move功能。 +使用 Sui Move CLI 在链上访问 Sui Move 功能。 -使用Sui Keytool CLI利用各种加密工具。 +使用 Sui Keytool CLI 利用各种加密工具。 -## Sui软件开发工具包 +## Sui 软件开发工具包 -Sui的官方软件开发工具包 (SDK) 包括TypeScript SDK和Rust SDK。 +Sui 的官方软件开发工具包 (SDK) 包括 TypeScript SDK 和 Rust SDK。 -Sui TypeScript SDK有自己的微网站。点击此框前往。 +Sui TypeScript SDK 有自己的微网站。点击此框前往。 diff --git a/content/references/cli.mdx b/content/references/cli.mdx index d045b7d..dd61bff 100644 --- a/content/references/cli.mdx +++ b/content/references/cli.mdx @@ -1,15 +1,15 @@ --- title: Sui CLI -description: Sui提供了命令行工具箱,用于与Sui网络、其功能和Move编程语言进行交互。 包括 Sui Client CLI, Sui Console CLI, Sui Keytool CLI, Sui Move CLI, 以及 Sui Validator CLI。 +description: Sui 提供了命令行工具箱,用于与 Sui 网络、其功能和 Move 编程语言进行交互。包括 Sui Client CLI,Sui Console CLI,Sui Keytool CLI,Sui Move CLI,以及 Sui Validator CLI。 --- -Sui提供了命令行工具箱,用于与Sui网络、其功能和Move编程语言进行交互。 包括 Sui Client CLI, Sui Console CLI, Sui Keytool CLI, Sui Move CLI, 以及 Sui Validator CLI。 +Sui 提供了命令行工具箱,用于与 Sui 网络、其功能和 Move 编程语言进行交互。包括 Sui Client CLI,Sui Console CLI,Sui Keytool CLI,Sui Move CLI,以及 Sui Validator CLI。 {@include: ../snippets/cli-check-install.mdx} ## 更新 CLI -想要获取CLI的最新版本,您可以从终端或控制台运行以下命令。请确保将``替换为`main`、`devnet`、`testnet`或`mainnet`以获取所需版本。有关可用分支的更多信息,请参阅[Sui环境设置](/guides/developer/getting-started/sui-environment.mdx)。 +想要获取 CLI 的最新版本,您可以从终端或控制台运行以下命令。请确保将``替换为`main`、`devnet`、`testnet`或`mainnet`以获取所需版本。有关可用分支的更多信息,请参阅[Sui 环境设置](/guides/developer/getting-started/sui-environment.mdx)。 ```shell cargo install --locked --git https://github.com/MystenLabs/sui.git --branch sui @@ -17,12 +17,12 @@ cargo install --locked --git https://github.com/MystenLabs/sui.git --branch ` 命令来列出您提供的ID的对象信息。这个示例显示了一个Coin对象的信息: +使用 `sui client object ` 命令来列出您提供的 ID 的对象信息。这个示例显示了一个 Coin 对象的信息: ``` $ sui client object 0xfffbb30ccb631f15f6cd36700589fc9c31cb04af28a95f3ed26d62daf3acb57f @@ -158,7 +158,7 @@ $ sui client object 0xfffbb30ccb631f15f6cd36700589fc9c31cb04af28a95f3ed26d62daf3 ### 获取一个对象的动态(对象)字段 -使用 `sui client dynamic-field ` 命令来列出您提供的ID的动态字段的详细信息。 +使用 `sui client dynamic-field ` 命令来列出您提供的 ID 的动态字段的详细信息。 ``` $ sui client dynamic-field 0x5 @@ -184,16 +184,16 @@ $ sui client dynamic-field 0x5 ## 发布 Move 包 -`sui client` 命令的主要用途之一是在Sui网络上发布智能合约。以下示例将当前环境切换到Devnet,然后构建、测试并发布[Sui 代码库](https://github.com/MystenLabs/sui/tree/main/examples/move)中提供的一个现有Move示例: +`sui client` 命令的主要用途之一是在 Sui 网络上发布智能合约。以下示例将当前环境切换到 Devnet,然后构建、测试并发布[Sui 代码库](https://github.com/MystenLabs/sui/tree/main/examples/move)中提供的一个现有 Move 示例: -此示例中还使用了sui move命令。要了解更多有关这些命令的信息,请参阅 [Sui Move CLI](./move.mdx)。 +此示例中还使用了 sui move 命令。要了解更多有关这些命令的信息,请参阅 [Sui Move CLI](./move.mdx)。 -1. 打开终端或控制台,导航到您本地Sui存储库的根目录,然后转到move_tutorial示例。 +1. 打开终端或控制台,导航到您本地 Sui 存储库的根目录,然后转到 move_tutorial 示例。 ```shell cd examples/move cd first_package ``` -2. 切换到Devnet网络。此命令使用了一个别名,所以devnet的值可能会因您在配置中设置的别名而不同。根据您的配置设置,请使用正确的别名值执行以下命令。 +2. 切换到 Devnet 网络。此命令使用了一个别名,所以 devnet 的值可能会因您在配置中设置的别名而不同。根据您的配置设置,请使用正确的别名值执行以下命令。 ```shell sui client switch --env devnet ``` @@ -227,12 +227,12 @@ $ sui client dynamic-field 0x5 │ Used │ 4565 │ 4565 │ ╰────────┴────────────┴────────────╯ ``` -6. 使用 `sui client gas` 命令来验证当前地址是否具有用于支付Gas的代币。在这个示例中,控制台会返回当前地址没有代币。 +6. 使用 `sui client gas` 命令来验证当前地址是否具有用于支付 Gas 的代币。在这个示例中,控制台会返回当前地址没有代币。 ```shell $ sui client gas No gas coins are owned by this address ``` -7. 如果您需要代币,请使用cURL命令为地址获取Gas(在Mainnet不可用)。有关在开发网络上为地址获取燃料的更多信息,请参阅[获取Sui代币](/guides/developer/getting-started/get-coins.mdx)。 +7. 如果您需要代币,请使用 cURL 命令为地址获取 Gas(在 Mainnet 不可用)。有关在开发网络上为地址获取燃料的更多信息,请参阅[获取 Sui 代币](/guides/developer/getting-started/get-coins.mdx)。 ```shell $ curl --location --request POST 'https://faucet.devnet.sui.io/v1/gas' \ --header 'Content-Type: application/json' \ @@ -348,7 +348,7 @@ $ sui client dynamic-field 0x5 ## 帮助 -Sui CLI 中每一个命令都提供了相关帮助提示. 例如`sui client call --help`: +Sui CLI 中每一个命令都提供了相关帮助提示。例如`sui client call --help`: ``` Call Move function diff --git a/content/references/cli/console.mdx b/content/references/cli/console.mdx index e628a7d..7af7773 100644 --- a/content/references/cli/console.mdx +++ b/content/references/cli/console.mdx @@ -1,15 +1,15 @@ --- title: Sui Console CLI -description: Sui CLI的console命令提供了命令级别的访问,通过将 `Sui Client CLI` 命令包装在类似shell的功能中,与Sui网络进行交互。此命令启动一个新进程,并为用户提供一个运行所有可用 `Sui Client CLI` 命令的环境。此外,它还提供命令历史记录支持。 +description: Sui CLI 的 console 命令提供了命令级别的访问,通过将 `Sui Client CLI` 命令包装在类似 shell 的功能中,与 Sui 网络进行交互。此命令启动一个新进程,并为用户提供一个运行所有可用 `Sui Client CLI` 命令的环境。此外,它还提供命令历史记录支持。 --- -Sui CLI的console命令提供了命令级别的访问,通过将 `Sui Client CLI` 命令包装在类似shell的功能中,与Sui网络进行交互。此命令启动一个新进程,并为用户提供一个运行所有可用 `Sui Client CLI` 命令的环境。此外,它还提供命令历史记录支持。 +Sui CLI 的 console 命令提供了命令级别的访问,通过将 `Sui Client CLI` 命令包装在类似 shell 的功能中,与 Sui 网络进行交互。此命令启动一个新进程,并为用户提供一个运行所有可用 `Sui Client CLI` 命令的环境。此外,它还提供命令历史记录支持。 {@include: ../../snippets/cli-check-install.mdx} ## 命令 -要查看所有可用的命令,请参阅Sui Client CLI文档。要启动Sui控制台,请输入`sui console`,它会显示类似以下信息: +要查看所有可用的命令,请参阅 Sui Client CLI 文档。要启动 Sui 控制台,请输入`sui console`,它会显示类似以下信息: ```shell 🚀 ~ % sui console diff --git a/content/references/cli/keytool.mdx b/content/references/cli/keytool.mdx index ae15e5e..e43b9ba 100644 --- a/content/references/cli/keytool.mdx +++ b/content/references/cli/keytool.mdx @@ -1,9 +1,9 @@ --- title: Sui Keytool CLI -description: Sui CLI的keytool命令提供了多个命令级别的访问,用于管理和生成地址,以及处理私钥、签名或zkLogin。 +description: Sui CLI 的 keytool 命令提供了多个命令级别的访问,用于管理和生成地址,以及处理私钥、签名或 zkLogin。 --- -Sui CLI的keytool命令提供了多个命令级别的访问,用于管理和生成地址,以及处理私钥、签名或zkLogin。例如,用户可以使用 `sui keytool import [...]` 命令从Sui钱包导出私钥,并将其导入到本地Sui CLI钱包。 +Sui CLI 的 keytool 命令提供了多个命令级别的访问,用于管理和生成地址,以及处理私钥、签名或 zkLogin。例如,用户可以使用 `sui keytool import [...]` 命令从 Sui 钱包导出私钥,并将其导入到本地 Sui CLI 钱包。 {@include: ../../snippets/cli-check-install.mdx} @@ -60,7 +60,7 @@ Options: ## JSON 格式输出 -要将响应格式化为JSON而不是默认的Sui CLI输出,可以在命令后附加 `--json` 标志。例如,输出结果为极大的数据集,在较小的屏幕上可能会出现显示困难的问题。 +要将响应格式化为 JSON 而不是默认的 Sui CLI 输出,可以在命令后附加 `--json` 标志。例如,输出结果为极大的数据集,在较小的屏幕上可能会出现显示困难的问题。 ## 示例 @@ -92,7 +92,7 @@ $ sui keytool list ### 生成新的密钥对并存储 -当生成ed25519密钥对时,请使用 `sui keytool generate ed25519` 命令。对于其他方案,请参阅 `sui keytool generate --help`。密钥对文件将保存在当前目录中,其文件名将是地址。文件的内容是一个33字节的 `flag || privkey` 的Base64编码字符串。 +当生成 ed25519 密钥对时,请使用 `sui keytool generate ed25519` 命令。对于其他方案,请参阅 `sui keytool generate --help`。密钥对文件将保存在当前目录中,其文件名将是地址。文件的内容是一个 33 字节的 `flag || privkey` 的 Base64 编码字符串。 ```shell $ sui keytool generate ed25519 diff --git a/content/references/cli/move.mdx b/content/references/cli/move.mdx index 8456bc2..e8a21ac 100644 --- a/content/references/cli/move.mdx +++ b/content/references/cli/move.mdx @@ -132,7 +132,7 @@ Module 0000000000000000000000000000000000000000000000000000000000000000::example ## 帮助 -每个命令都提供了帮助信息。例如, `sui move build --help` 会显示以下提示: +每个命令都提供了帮助信息。例如,`sui move build --help` 会显示以下提示: ```shell diff --git a/content/references/research-papers.mdx b/content/references/research-papers.mdx index 7600a17..ce940f1 100644 --- a/content/references/research-papers.mdx +++ b/content/references/research-papers.mdx @@ -137,7 +137,7 @@ sidebar_label: 研究论文 Twins 可以帮助开发人员在更新代码库、引入新功能或执行常规维护任务时防止正确性降低。 Twins 只需要在 DiemBFT 上做一个薄层封装;因此,我们预见其他系统也可以使用它。 在这个想法的基础上,针对其他 BFT 协议的一个新攻击和几个已知攻击被构建为 Twins 场景。 - 在所有情况下,目标协议在不到十几个协议轮次内就崩溃了。因此,利用Twins 方法暴露问题是现实可行的。 + 在所有情况下,目标协议在不到十几个协议轮次内就崩溃了。因此,利用 Twins 方法暴露问题是现实可行的。 ## SybilQuorum: Open Distributed Ledgers Through Trust Networks {#sybilquorum} diff --git a/content/references/rust-sdk.mdx b/content/references/rust-sdk.mdx index edb9b84..0c1c84e 100644 --- a/content/references/rust-sdk.mdx +++ b/content/references/rust-sdk.mdx @@ -1,8 +1,8 @@ --- title: Sui Rust SDK -description: Sui Rust SDK提供了Sui API的Rust包装器。使用该SDK,您可以使用Rust编程语言与Sui网络进行交互。 +description: Sui Rust SDK 提供了 Sui API 的 Rust 包装器。使用该 SDK,您可以使用 Rust 编程语言与 Sui 网络进行交互。 --- -Sui Rust SDK被包含在 [**crates\sui-sdk** directory](https://github.com/MystenLabs/sui/tree/main/crates/sui-sdk). +Sui Rust SDK 被包含在 [**crates\sui-sdk** directory](https://github.com/MystenLabs/sui/tree/main/crates/sui-sdk). {@include: ../../../crates/sui-sdk/README.md} \ No newline at end of file diff --git a/content/references/sui-framework-reference.mdx b/content/references/sui-framework-reference.mdx index 6f46b20..a80a54b 100644 --- a/content/references/sui-framework-reference.mdx +++ b/content/references/sui-framework-reference.mdx @@ -1,6 +1,6 @@ --- -title: Sui框架参考文档 +title: Sui 框架参考文档 slug: /sui-framework-reference --- -Sui框架包括Move开发人员所需的核心链上库。您可以在Sui GitHub存储库的Markdown格式中查看[Sui框架参考文档]((https://github.com/MystenLabs/sui/tree/main/crates/sui-framework/docs))。 \ No newline at end of file +Sui 框架包括 Move 开发人员所需的核心链上库。您可以在 Sui GitHub 存储库的 Markdown 格式中查看[Sui 框架参考文档]((https://github.com/MystenLabs/sui/tree/main/crates/sui-framework/docs))。 \ No newline at end of file diff --git a/content/references/sui-glossary.mdx b/content/references/sui-glossary.mdx index 154142a..7455678 100644 --- a/content/references/sui-glossary.mdx +++ b/content/references/sui-glossary.mdx @@ -52,7 +52,7 @@ Sui 的基本存储单位是对象(Object)。与许多其他以地址为中 [权益证明](https://en.wikipedia.org/wiki/Proof_of_stake) 是一种区块链共识机制,其中验证者的投票权与他们在网络中绑定的原生货币数量(称为他们在网络中的股份)成正比。这通过迫使恶意行为者需要在区块链中持有大量份额,从而减轻 [Sybil 攻击](https://en.wikipedia.org/wiki/Sybil_attack)。 ### 单写对象(Single-writer Objects) {#single-writer-objects} -单写对象是由一个地址拥有的对象。在 Sui 中,只影响同一地址拥有的单写对象的交易可以仅通过验证发送者地址进行处理,大大加快了交易时间。这些是 _简单交易(simple transactions)_。有关此简单交易模型的示例应用,请参见单写应用(Single-Writer Apps)。 +单写对象是由一个地址拥有的对象。在 Sui 中,只影响同一地址拥有的单写对象的交易可以仅通过验证发送者地址进行处理,大大加快了交易时间。这些是 _简单交易 (simple transactions)_。有关此简单交易模型的示例应用,请参见单写应用(Single-Writer Apps)。 ### 智能合约(Smart Contract) {#smart-contract} [智能合约](https://en.wikipedia.org/wiki/Smart_contract) 是基于区块链交易的协议的一种协议。在 Sui 中,智能合约是用 Move 编程语言编写的。 diff --git a/content/references/sui-move.mdx b/content/references/sui-move.mdx index 320970d..9594d8e 100644 --- a/content/references/sui-move.mdx +++ b/content/references/sui-move.mdx @@ -4,4 +4,4 @@ title: Move References {@include: ../snippets/move-summary.mdx} -所有Move软件包都包含一个清单和锁定文件。有关这些文件的详细信息,请参阅 [Move.toml](./move/move-toml.mdx) 文件 和 [Move.lock](./move/move-lock.mdx) 文件。有关Move语言的详细信息,请参阅GitHub上的[Move语言参考](https://github.com/move-language/move/blob/main/language/documentation/book/src/introduction.md)。 \ No newline at end of file +所有 Move 软件包都包含一个清单和锁定文件。有关这些文件的详细信息,请参阅 [Move.toml](./move/move-toml.mdx) 文件 和 [Move.lock](./move/move-lock.mdx) 文件。有关 Move 语言的详细信息,请参阅 GitHub 上的[Move 语言参考](https://github.com/move-language/move/blob/main/language/documentation/book/src/introduction.md)。 \ No newline at end of file diff --git a/content/references/sui-sdks.mdx b/content/references/sui-sdks.mdx index 455c819..4489b10 100644 --- a/content/references/sui-sdks.mdx +++ b/content/references/sui-sdks.mdx @@ -2,12 +2,12 @@ title: Sui SDKs --- -Sui提供开发工具包,作为Sui API的包装器。 +Sui 提供开发工具包,作为 Sui API 的包装器。 ## Sui TypeScript SDK -Sui TypeScript SDK文档可在其专用子站上找到 [Sui Typescript SDK](https://sdk.mystenlabs.com/typescript). +Sui TypeScript SDK 文档可在其专用子站上找到 [Sui Typescript SDK](https://sdk.mystenlabs.com/typescript). ## Sui Rust SDK -请查看[Sui Rust SDK]((https://github.com/MystenLabs/sui/tree/main/crates/sui-sdk)) GitHub存储库,以获取有关SDK配置以及在Rust中使用Sui API的示例。 \ No newline at end of file +请查看[Sui Rust SDK]((https://github.com/MystenLabs/sui/tree/main/crates/sui-sdk)) GitHub 存储库,以获取有关 SDK 配置以及在 Rust 中使用 Sui API 的示例。 \ No newline at end of file diff --git a/content/references/sui-security.mdx b/content/references/sui-security.mdx index 0e3a044..cbe6537 100644 --- a/content/references/sui-security.mdx +++ b/content/references/sui-security.mdx @@ -17,10 +17,10 @@ Sui 系统的安全特性包括: - 只有资产的拥有者才能授权处理这些资产的交易。授权操作是通过资产所有者独有的私钥签名来完成的。 - 每个人都可以操作共享资产或不可变资产,但智能合约可以设置额外的访问控制逻辑。 - 交易根据智能合约创建者为资产类型设置的预定义规则来操作资产。这些规则采用 Move 语言来表达。 -- 一旦交易完成,其产生的效果 -无论是对操作资产的更改还是创建新的资产- 都将被永久保存,并且这些资产可以用于后续的处理。 +- 一旦交易完成,其产生的效果 -无论是对操作资产的更改还是创建新的资产 - 都将被永久保存,并且这些资产可以用于后续的处理。 - Sui 系统通过一组独立验证者之间的协议运行。即使有部分验证者未遵循协议,系统的所有安全属性仍然保持不变。 - Sui 中的所有操作都是可审计的,以确保所有资产均得到正确处理。这意味着 Sui 上的所有操作都是公开的,用户可能会希望使用多个不同的地址来保护他们的隐私。 -- 验证者是通过Sui用户锁定并委托他们的 SUI 代币的数量定期确定的。 +- 验证者是通过 Sui 用户锁定并委托他们的 SUI 代币的数量定期确定的。 ## 安全架构 {#security-architecture} @@ -48,7 +48,7 @@ Move 智能合约语言以易于审计和验证为出发点。您可能会对我 一个有效的交易必须经过所有验证者的认证,并且其证明也必须提交给所有验证者以完成最终确认。即使有部分验证者不遵循协议,剩余遵循 Sui 协议的验证者也可以完成交易的最终确认。这是通过使用 Sui 协议定义的拜占庭容错加密协议来实现的,这些协议确保了安全性(错误的验证者无法使正确的客户端接受错误的状态)和活性(错误的验证者无法阻止交易处理)。 -Sui 中的所有交易都必须关联一个 “gas”,用以支付 Sui 处理的成本。有效的交易可能会被成功执行,也可能被中止。交易的执行可能因为智能合约中的某些条件或因缺乏足够的“gas”而中止。如果执行成功,操作的效果将被确认;否则,交易中的资产状态保持不变。但是,为防止对整个系统的服务拒绝攻击(DoS),总会收取一定“gas”费用。 +Sui 中的所有交易都必须关联一个“gas”,用以支付 Sui 处理的成本。有效的交易可能会被成功执行,也可能被中止。交易的执行可能因为智能合约中的某些条件或因缺乏足够的“gas”而中止。如果执行成功,操作的效果将被确认;否则,交易中的资产状态保持不变。但是,为防止对整个系统的服务拒绝攻击(DoS),总会收取一定“gas”费用。 用户可以自己提交交易和证明,或者依赖第三方服务来提交交易并与验证者互动。这些第三方无需拥有用户的私钥,也无法伪造用户的交易。他们可以通过一组验证者的签名来向用户确认一个交易已经被最终确认及其效果。在这之后,用户可以确信交易所带来的变化将在 Sui 的中得到最终确认。 diff --git a/content/sidebars/references.js b/content/sidebars/references.js index acca962..c0891e0 100644 --- a/content/sidebars/references.js +++ b/content/sidebars/references.js @@ -31,7 +31,7 @@ const references = [ }, { type: 'category', - label: 'Sui 命令行工具(CLI)', + label: 'Sui 命令行工具 (CLI)', link: { type: 'doc', id: 'references/cli', @@ -46,7 +46,7 @@ const references = [ }, { type: 'category', - label: 'Sui 开发包(SDK)', + label: 'Sui 开发包 (SDK)', link: { type: 'doc', id: 'references/sui-sdks', diff --git a/content/snippets/info-pnpm-required.mdx b/content/snippets/info-pnpm-required.mdx index 99be337..6f8bd05 100644 --- a/content/snippets/info-pnpm-required.mdx +++ b/content/snippets/info-pnpm-required.mdx @@ -1,5 +1,5 @@ :::info -创建 Sui 项目脚手架时,您需要使用 pnpm 包管理器。如尚未安装,可参照 [pnpm 安装指南](https://pnpm.io/installation) 进行安装. +创建 Sui 项目脚手架时,您需要使用 pnpm 包管理器。如尚未安装,可参照 [pnpm 安装指南](https://pnpm.io/installation) 进行安装。 ::: diff --git a/content/snippets/move-summary.mdx b/content/snippets/move-summary.mdx index 2bb7a5b..b15759a 100644 --- a/content/snippets/move-summary.mdx +++ b/content/snippets/move-summary.mdx @@ -1 +1 @@ -Move 是一种开源编程语言,主要用于创建可安全操控链上对象(俗称 “智能合约”)的包。它是一种与平台无关的语言,能够促进不同数据结构和执行模型的区块链之间共享库、工具和开发者社区的建立。Move 的设计灵活,可以根据运行它的区块链的具体需求进行调整。要了解 Move 在 Sui 区块链上的优化情况,请参阅 [Move on Sui](concepts/sui-move-concepts.mdx#differences) 相关章节,其中讨论了Move语言为适应 Sui 区块链而进行的改进。 \ No newline at end of file +Move 是一种开源编程语言,主要用于创建可安全操控链上对象(俗称“智能合约”)的包。它是一种与平台无关的语言,能够促进不同数据结构和执行模型的区块链之间共享库、工具和开发者社区的建立。Move 的设计灵活,可以根据运行它的区块链的具体需求进行调整。要了解 Move 在 Sui 区块链上的优化情况,请参阅 [Move on Sui](concepts/sui-move-concepts.mdx#differences) 相关章节,其中讨论了 Move 语言为适应 Sui 区块链而进行的改进。 \ No newline at end of file diff --git a/content/standards.mdx b/content/standards.mdx index d22315c..986232c 100644 --- a/content/standards.mdx +++ b/content/standards.mdx @@ -1,11 +1,11 @@ --- -title: Sui标准概览 +title: Sui 标准概览 sidebar_label: 概览 --- import { Card, Cards } from '../site/src/components/Cards'; -在Sui区块链上,标准是你可以扩展或自定义的功能、框架或应用程序。 +在 Sui 区块链上,标准是你可以扩展或自定义的功能、框架或应用程序。 diff --git a/content/standards/closed-loop-token/spending.mdx b/content/standards/closed-loop-token/spending.mdx index 4aef5b9..be506e2 100644 --- a/content/standards/closed-loop-token/spending.mdx +++ b/content/standards/closed-loop-token/spending.mdx @@ -17,7 +17,7 @@ public fun spend(token: Token, ctx: &mut TxContext): ActionRequest; ## 消费的 Token -“消费” 操作的 `ActionRequest` 包含被消费的 `Token` 的 `Balance`,可以通过 [使用 `TreasuryCap` 确认](./action-request#confirming-with-treasurycap) 或者 [交付给 TokenPolicy](./action-request#confirming-with-tokenpolicy)。在第一种情况下,余额将直接在 `TreasuryCap` 中 "销毁",在第二种情况下,它将被交付到 TokenPolicy 的 "spent_balance"。 +“消费”操作的 `ActionRequest` 包含被消费的 `Token` 的 `Balance`,可以通过 [使用 `TreasuryCap` 确认](./action-request#confirming-with-treasurycap) 或者 [交付给 TokenPolicy](./action-request#confirming-with-tokenpolicy)。在第一种情况下,余额将直接在 `TreasuryCap` 中 "销毁",在第二种情况下,它将被交付到 TokenPolicy 的 "spent_balance"。 已消费的余额无法以任何方式使用,也不可能 "提取" 它。唯一可用的操作是 ["刷新"](./token-policy#consume-spent-balance) - 通过提供 `TreasuryCap` 来销毁 `spent_balance`。 diff --git a/content/standards/closed-loop-token/token-policy.mdx b/content/standards/closed-loop-token/token-policy.mdx index 15919d4..d9c0c5a 100644 --- a/content/standards/closed-loop-token/token-policy.mdx +++ b/content/standards/closed-loop-token/token-policy.mdx @@ -86,7 +86,7 @@ public fun flush( ); ``` -## 速查表: TokenPolicy API +## 速查表:TokenPolicy API | Function | Note | |-----------------------------|----------------------------------------------------------------------| diff --git a/content/standards/kiosk.mdx b/content/standards/kiosk.mdx index e69d208..99749ee 100644 --- a/content/standards/kiosk.mdx +++ b/content/standards/kiosk.mdx @@ -382,7 +382,7 @@ module examples::mutable_borrow ### 使用 borrow_val 进行可变借用 -你可以使用 PTB-friendly 的 kiosk::borrow_val 函数。它允许你获取资产并在同一事务中放回。为确保资产被放回 kiosk,该函数通过 “Hot Potato” 强制调用者。 +你可以使用 PTB-friendly 的 kiosk::borrow_val 函数。它允许你获取资产并在同一事务中放回。为确保资产被放回 kiosk,该函数通过“Hot Potato”强制调用者。 ### 使用 `borrow_val` 进行可变借用,使用可编程交易块 diff --git a/package.json b/package.json new file mode 100644 index 0000000..c7a16fa --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "private": true, + "devDependencies": { + "autocorrect-node": "^2.14.0", + "husky": "^9.1.7", + "lint-staged": "^16.1.6" + }, + "lint-staged": { + "content/**/*.{md,mdx}": [ + "autocorrect --fix" + ], + "README.md": [ + "autocorrect --fix" + ], + "site/src/pages/**/*.js": [ + "autocorrect --fix" + ] + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..b6c9625 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,398 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + autocorrect-node: + specifier: ^2.14.0 + version: 2.14.0 + husky: + specifier: ^9.1.7 + version: 9.1.7 + lint-staged: + specifier: ^16.1.6 + version: 16.1.6 + +packages: + + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + + ansi-regex@6.2.0: + resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==} + engines: {node: '>=12'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + autocorrect-node-darwin-arm64@2.14.0: + resolution: {integrity: sha512-l5IRTQz6zYAlkfEc5emIDXBkayD0MIwPPAVXCFMceFwyTNhAJ5veoKqRrsPuBVthIbfYKtAUs9oy9oFoHQn7bw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + autocorrect-node-darwin-x64@2.14.0: + resolution: {integrity: sha512-vRO0lwfXff2Fs41NzdDqN5t4VQ03M0Xsn6Tk4OjMrbjoWJqaEq05KZOTSaSF/wEs/7E1VoaI9Kz+c0fqylVX4Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + autocorrect-node-linux-x64-gnu@2.14.0: + resolution: {integrity: sha512-v1y1wh340cbhrHSZZP0oPkvWUprDtUIwnBP69Bls27VhQ2ZyVV4eijDNOP//yGUyUunMB0rtWoZaBsq8ugt1Kg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + autocorrect-node-linux-x64-musl@2.14.0: + resolution: {integrity: sha512-3LifiLG61VIXBrOITpD/REcg/ZEUuLz/P2XUWMCfGqhzoUb8oFgM3o0A6extvIH2NefiHMndB9kNbfQjXCl3zA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + autocorrect-node-win32-x64-msvc@2.14.0: + resolution: {integrity: sha512-OM6TeGUW0+4R9KtUYTYNEwlInd+b2kumw/B1HCbCzb1F7HpfaNxnZiMk1li0bdPPBDzD5YuzwM30VJZMCWIi5A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + autocorrect-node@2.14.0: + resolution: {integrity: sha512-Pkdw3Hr1Wbtpm8f7KYOaPnHFa7TNVo9dyuOffVaNGN3iWWRBs011XBuCJUEmHV097kJkab94cs4P6KJ4pvI41g==} + engines: {node: '>= 10'} + hasBin: true + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + chalk@5.6.0: + resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + commander@14.0.0: + resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} + engines: {node: '>=20'} + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + emoji-regex@10.5.0: + resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + get-east-asian-width@1.3.1: + resolution: {integrity: sha512-R1QfovbPsKmosqTnPoRFiJ7CF9MLRgb53ChvMZm+r4p76/+8yKDy17qLL2PKInORy2RkZZekuK0efYgmzTkXyQ==} + engines: {node: '>=18'} + + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lint-staged@16.1.6: + resolution: {integrity: sha512-U4kuulU3CKIytlkLlaHcGgKscNfJPNTiDF2avIUGFCv7K95/DCYQ7Ra62ydeRWmgQGg9zJYw2dzdbztwJlqrow==} + engines: {node: '>=20.17'} + hasBin: true + + listr2@9.0.3: + resolution: {integrity: sha512-0aeh5HHHgmq1KRdMMDHfhMWQmIT/m7nRDTlxlFqni2Sp0had9baqsjJRvDGdlvgd6NmPE0nPloOipiQJGFtTHQ==} + engines: {node: '>=20.0.0'} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nano-spawn@1.0.3: + resolution: {integrity: sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==} + engines: {node: '>=20.17'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + engines: {node: '>= 14.6'} + hasBin: true + +snapshots: + + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 + + ansi-regex@6.2.0: {} + + ansi-styles@6.2.1: {} + + autocorrect-node-darwin-arm64@2.14.0: + optional: true + + autocorrect-node-darwin-x64@2.14.0: + optional: true + + autocorrect-node-linux-x64-gnu@2.14.0: + optional: true + + autocorrect-node-linux-x64-musl@2.14.0: + optional: true + + autocorrect-node-win32-x64-msvc@2.14.0: + optional: true + + autocorrect-node@2.14.0: + optionalDependencies: + autocorrect-node-darwin-arm64: 2.14.0 + autocorrect-node-darwin-x64: 2.14.0 + autocorrect-node-linux-x64-gnu: 2.14.0 + autocorrect-node-linux-x64-musl: 2.14.0 + autocorrect-node-win32-x64-msvc: 2.14.0 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + chalk@5.6.0: {} + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + + colorette@2.0.20: {} + + commander@14.0.0: {} + + debug@4.4.1: + dependencies: + ms: 2.1.3 + + emoji-regex@10.5.0: {} + + environment@1.1.0: {} + + eventemitter3@5.0.1: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + get-east-asian-width@1.3.1: {} + + husky@9.1.7: {} + + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.3.1 + + is-number@7.0.0: {} + + lilconfig@3.1.3: {} + + lint-staged@16.1.6: + dependencies: + chalk: 5.6.0 + commander: 14.0.0 + debug: 4.4.1 + lilconfig: 3.1.3 + listr2: 9.0.3 + micromatch: 4.0.8 + nano-spawn: 1.0.3 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.8.1 + transitivePeerDependencies: + - supports-color + + listr2@9.0.3: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mimic-function@5.0.1: {} + + ms@2.1.3: {} + + nano-spawn@1.0.3: {} + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + picomatch@2.3.1: {} + + pidtree@0.6.0: {} + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + rfdc@1.4.1: {} + + signal-exit@4.1.0: {} + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.1.0 + + string-argv@0.3.2: {} + + string-width@7.2.0: + dependencies: + emoji-regex: 10.5.0 + get-east-asian-width: 1.3.1 + strip-ansi: 7.1.0 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.2.0 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + yaml@2.8.1: {} diff --git a/site/src/pages/index.js b/site/src/pages/index.js index 6a74f94..dd93919 100644 --- a/site/src/pages/index.js +++ b/site/src/pages/index.js @@ -192,7 +192,7 @@ export default function Home() { 为何是 Sui?

- Sui是第一个互联网规模的可编程区块链平台 + Sui 是第一个互联网规模的可编程区块链平台

@@ -228,23 +228,23 @@ export default function Home() {
- Sui可以水平扩展以满足应用程序的需求。 + Sui 可以水平扩展以满足应用程序的需求。 通过增加工作人员,网络容量与 Sui 验证器处理能力的增加成正比,从而即使在网络流量较高的情况下,gas 费用也较低。 这种可扩展性特征与其他具有刚性瓶颈的区块链形成鲜明对比。 Move 设计防止了诸如可重入攻击、毒令牌和仿冒令牌批准等问题,这些是攻击者在其他平台上利用的手段,用以窃取数百万资产。 - 对安全性和表现力的强调使开发人员更容易从 Web2.0 过渡到 Web3 ,无需理解基础基础设施的复杂性。 + 对安全性和表现力的强调使开发人员更容易从 Web2.0 过渡到 Web3,无需理解基础基础设施的复杂性。 丰富的链上资产使得基于效用的新应用和经济体能够脱离对人为稀缺性的过度依赖。 - 开发人员可以实现动态NFT,可以在应用程序特定的方式中升级、打包和分组,例如根据游戏玩法的变化进行头像和可定制物品的更改。 + 开发人员可以实现动态 NFT,可以在应用程序特定的方式中升级、打包和分组,例如根据游戏玩法的变化进行头像和可定制物品的更改。 这种能力使 NFT 的行为完全反映在链上,从而增强了游戏内经济,使 NFT 更有价值,提供更引人入胜的反馈循环。 - Sui的目标是成为最易访问的智能合约平台,赋予开发人员在 Web3 中创建出色用户体验的能力。 - 为了引领下一个十亿用户,Sui为开发人员提供各种工具,以充分利用Sui区块链的威力。 - Sui开发工具包 (SDK) 将使开发人员能够无拘无束地构建。 + Sui 的目标是成为最易访问的智能合约平台,赋予开发人员在 Web3 中创建出色用户体验的能力。 + 为了引领下一个十亿用户,Sui 为开发人员提供各种工具,以充分利用 Sui 区块链的威力。 + Sui 开发工具包 (SDK) 将使开发人员能够无拘无束地构建。