Skip to content

Commit 4d3eca2

Browse files
authored
Merge pull request #12889 from ethereum/may-zh-20240501163050924
chore: import translations for zh
2 parents 21f8702 + 2f6f5eb commit 4d3eca2

File tree

34 files changed

+720
-670
lines changed
  • public/content/translations/zh/developers/tutorials
    • all-you-can-cache
    • calling-a-smart-contract-from-javascript
    • create-and-deploy-a-defi-app
    • deploying-your-first-smart-contract
    • getting-started-with-ethereum-development-using-alchemy
    • guide-to-smart-contract-security-tools
    • hello-world-smart-contract-fullstack
    • how-to-implement-an-erc721-market
    • how-to-mint-an-nft
    • how-to-mock-solidity-contracts-for-testing
    • how-to-use-echidna-to-test-smart-contracts
    • how-to-use-manticore-to-find-smart-contract-bugs
    • how-to-use-slither-to-find-smart-contract-bugs
    • how-to-use-tellor-as-your-oracle
    • how-to-view-nft-in-metamask
    • how-to-write-and-deploy-an-nft
    • learn-foundational-ethereum-topics-with-sql
    • merkle-proofs-for-offline-data-integrity
    • monitoring-geth-with-influxdb-and-grafana
    • optimism-std-bridge-annotated-code
    • sending-transactions-using-web3-and-alchemy
    • set-up-web3js-to-use-ethereum-in-javascript
    • short-abi
    • smart-contract-security-guidelines
    • solidity-and-truffle-continuous-integration-setup
    • testing-erc-20-tokens-with-waffle
    • token-integration-checklist
    • understand-the-erc-20-token-smart-contract
    • uniswap-v2-annotated-code
    • using-websockets
    • waffle-dynamic-mocking-and-testing-calls
    • waffle-say-hello-world-with-hardhat-and-ethers
  • src/intl/zh

34 files changed

+720
-670
lines changed

public/content/translations/zh/developers/tutorials/all-you-can-cache/index.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ title: "一切皆可缓存"
33
description: 学习如何创建和使用缓存合约,以便进行更实惠的卷叠交易
44
author: Ori Pomerantz
55
tags:
6-
- "第二层"
6+
- "二层网络"
77
- "缓存"
8-
- "存储"
8+
- "storage"
99
skill: intermediate
1010
published: 2022-09-15
1111
lang: zh
@@ -89,8 +89,8 @@ contract Cache {
8989

9090
```solidity
9191
// Since 0xFE is a special case, the largest key the cache can
92-
// hold is 0x0D followed by 15 0xFF's. 如果缓存长度已经达到这个长度
93-
// 那么操作失败
92+
// hold is 0x0D followed by 15 0xFF's. If the cache length is already that
93+
// large, fail.
9494
// 1 2 3 4 5 6 7 8 9 A B C D E F
9595
require(key2val.length+1 < 0x0DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,
9696
"cache overflow");

public/content/translations/zh/developers/tutorials/calling-a-smart-contract-from-javascript/index.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: 通过JavaScript调用智能合约
3-
description: 以DAI通证为例展示如何通过JavaScript调用智能合约函数
3+
description: 以DAI代币为例展示如何通过JavaScript调用智能合约函数
44
author: jdourlens
55
tags:
66
- "交易"
@@ -15,15 +15,15 @@ sourceUrl: https://ethereumdev.io/calling-a-smart-contract-from-javascript/
1515
address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE"
1616
---
1717

18-
在本教程中,我们将会看到如何通过 JavaScript 调用[智能合约](/developers/docs/smart-contracts/)。 首先读取智能合约的状态(例如:ERC20 持有者的余额),然后通过通证转账修改区块链的状态。 您首先需要了解[设置 JS 环境与区块链交互](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/)
18+
在本教程中,我们将会看到如何通过JavaScript调用[智能合约](/developers/docs/smart-contracts/)。 首先读取智能合约的状态(例如:ERC20持有者的余额),然后通过代币转账修改区块链的状态。 你首先需要了解[设置JS环境与区块链交互](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/)
1919

20-
在本例中,我们将使用 DAI 通证,基于测试目的,我们将使用 ganache-cli 分叉区块链并解锁一个已经拥有很多 DAI 的地址
20+
在本例中,我们将使用DAI代币,基于测试目的,我们将使用ganache-cli分叉区块链并解锁一个已经拥有很多DAI的地址
2121

2222
```bash
2323
ganache-cli -f https://mainnet.infura.io/v3/[YOUR INFURA KEY] -d -i 66 1 --unlock 0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81
2424
```
2525

26-
要与智能合约交互,我们需要它的地址和 ABI
26+
要与智能合约交互,我们需要它的地址和ABI
2727

2828
```js
2929
const ERC20TransferABI = [
@@ -74,7 +74,7 @@ const ERC20TransferABI = [
7474
const DAI_ADDRESS = "0x6b175474e89094c44da98b954eedeac495271d0f"
7575
```
7676

77-
对于此项目,我们剥离完整的 ERC20 ABI ,仅保留`balanceOf``transfer`函数,不过您可以在这里获取完整的[ERC20 ABI](https://ethereumdev.io/abi-for-erc20-contract-on-ethereum/)
77+
对于此项目,我们剥离完整的ERC20 ABI ,仅保留`balanceOf``transfer`函数,不过你可以在这里获取完整的[ERC20 ABI](https://ethereumdev.io/abi-for-erc20-contract-on-ethereum/)
7878

7979
然后我们需要实例化我们的智能合约:
8080

@@ -98,9 +98,9 @@ const receiverAddress = "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE"
9898

9999
## 调用:从智能合约读取值 {#call-reading-value-from-a-smart-contract}
100100

101-
第一个例子,将调用“常量(constant)”方法并且在 EVM 中执行这个智能合约方法,并不发送任何交易。 为此我们将读取一个地址的 ECR20 余额[阅读关于 ECR20 代币的文章](/developers/tutorials/understand-the-erc-20-token-smart-contract/)
101+
第一个例子,将调用“常量(constant)”方法并且在EVM中执行这个智能合约方法,并不发送任何交易。 为此我们将读取一个地址的ECR20余额[阅读关于 ECR20 代币的文章](/developers/tutorials/understand-the-erc-20-token-smart-contract/)
102102

103-
您可以访问为其提供 ABI 的实例化智能合约方法,如下所示:`yourContract.methods.methodname`。 通过使用`call`函数,您可以接收执行函数的结果
103+
你可以访问为其提供 ABI 的实例化智能合约方法,如下所示:`yourContract.methods.methodname`。 通过使用`call`函数,你可以接收执行函数的结果
104104

105105
```js
106106
daiToken.methods.balanceOf(senderAddress).call(function (err, res) {
@@ -112,11 +112,11 @@ daiToken.methods.balanceOf(senderAddress).call(function (err, res) {
112112
})
113113
```
114114

115-
请记住,DAI ERC20 有 18 位小数,这意味着您需要移除 18 个零才能获得正确的数额。 uint256 将以字符串形式返回,因为 Javascript 不处理大数值。 如果不确定,请了解我们关于 bignumber.js 的教程[如何在 JS 中处理大数](https://ethereumdev.io/how-to-deal-with-big-numbers-in-javascript/)
115+
请记住,DAI ERC20有18位小数,这意味着你需要移除18个零才能获得正确的数额。 uint256 将以字符串形式返回,因为 Javascript 不处理大数值。 如果不确定,请了解我们关于bignumber.js的教程[如何在JS中处理大数](https://ethereumdev.io/how-to-deal-with-big-numbers-in-javascript/)
116116

117117
## 发送:将交易发送给智能合约函数 {#send-sending-a-transaction-to-a-smart-contract-function}
118118

119-
对于第二个示例,我们将调用 DAI 智能合约的 transfer 函数,发送 10 个 DAI 到第二个地址。 transfer 函数接受两个参数:收件人地址和转账代币的数量:
119+
对于第二个示例,我们将调用DAI智能合约的transfer函数,发送10个DAI到第二个地址。 transfer函数接受两个参数:收件人地址和转账代币的数量:
120120

121121
```js
122122
daiToken.methods

public/content/translations/zh/developers/tutorials/create-and-deploy-a-defi-app/index.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ tags:
1212
skill: intermediate
1313
lang: zh
1414
published: 2020-12-31
15-
source: www.github.com
15+
source: github.com
1616
sourceUrl: https://github.com/strykerin/DeFi-Token-Farm
1717
---
1818

1919
在本教程中,我们将使用 Solidity 构建一个去中心化金融应用程序。用户可以将 ERC20 代币存入智能合约,然后铸造流动性矿池代币并将这些代币转给他们。 用户之后可以通过消耗智能合约上的流动性矿池代币来赎回他们的 ERC20 代币,然后 ERC20 代币将会转回给他们。
2020

2121
## 安装 Truffle 和 Ganache {#install-truffle-and-ganache}
2222

23-
如果这是您第一次编写智能合约,您需要搭建您的环境。 我们将使用两个工具:[Truffle](https://www.trufflesuite.com/)[Ganache](https://www.trufflesuite.com/ganache)
23+
如果这是你第一次编写智能合约,你需要搭建你的环境。 我们将使用两个工具:[Truffle](https://www.trufflesuite.com/)[Ganache](https://www.trufflesuite.com/ganache)
2424

2525
Truffle 是用于开发以太坊智能合约的开发环境和测试框架。 使用 Truffle 可以很容易地在区块链中创建和部署智能合约。 Ganache 可以帮助我们创建一个本地以太坊区块链,用以测试智能合约。 它模拟真实的网络功能,前 10 个帐户存入了 100 个测试以太币,如此可以随意部署和测试智能合约。 Ganache 可提供桌面应用程序和命令行工具。 在本文中,我们将使用有图形界面的桌面应用程序。
2626

@@ -44,7 +44,7 @@ truffle init
4444

4545
- `truffle-config.js`:Truffle 配置文件
4646

47-
## 创建 ERC20 代币 {#create-the-erc20-token}
47+
## 创建ERC20 代币 {#create-the-erc20-token}
4848

4949
首先,我们需要创建 ERC20 代币,用于在智能合约上质押。 要创建同质化代币,我们首先需要安装 OpenZeppelin 库。 该库包含 ERC20 和 ERC721 等标准的实现。 如需安装,请运行以下命令:
5050

@@ -74,7 +74,7 @@ contract MyToken is ERC20 {
7474

7575
- 第 6 行:我们要调用 ERC20.sol 构造函数,并将名称和符号参数分别设为 `"MyToken"``"MTKN"`
7676

77-
- 第 7 行:我们为正在部署智能合约的账户铸造和转移 100 万代币(我们默认为 ERC20 代币使用 18 位小数)。这意味着,如果我们想要铸造 1 个代币,则需将其表示为 1000000000000000000,即 1 和 18 个零)。
77+
- 第 7 行:我们为正在部署智能合约的帐户铸造和转移 100 万代币(我们默认为 ERC20 代币使用 18 位小数)。这意味着,如果我们想要铸造 1 个代币,则需将其表示为 1000000000000000000,即 1 和 18 个零)。
7878

7979
我们可以看到,ERC20.sol 构造函数实现下方,`_decimals` 字段设置为 18:
8080

@@ -163,7 +163,7 @@ truffle console
163163

164164
- 获取智能合约:`myToken = await MyToken.depolyed()`
165165

166-
- 从 Ganache 获取账户组`accounts = await web3.eth.getAccounts()`
166+
- 从 Ganache 获取帐户组`accounts = await web3.eth.getAccounts()`
167167

168168
- 获取第一个帐户的余额:`balance = await myToken.balance Of(accounts[0])`
169169

@@ -210,7 +210,7 @@ contract FarmToken is ERC20 {
210210
}
211211
```
212212

213-
- 第 3-6 行:我们要从 openzepelin 导入下列合约:IERC20.sol、Address.sol、SafeERC20.sol 和 ERC20.sol。
213+
- 第 3-6 行:我们要从 openzepelin 导入下列合约:IERC20.sol、Address.sol、SafeERC20.sol 和ERC20.sol。
214214

215215
- 第 8 行:FarmToken 将继承 ERC20 合约。
216216

@@ -293,7 +293,7 @@ module.exports = async function (callback) {
293293
truffle exec .\scripts\getMyTokenBalance.js
294294
```
295295

296-
我们将得到预期结果 0。 如果您收到尚未部署 FarmToken 的错误,则表明 truffle 网络尚未收到最新版本的合约代码。 只需关闭 ganache,然后再快速启动,并确保运行 `truffle migrate`
296+
我们将得到预期结果 0。 如果你收到尚未部署 FarmToken 的错误,则表明 truffle 网络尚未收到最新版本的合约代码。 只需关闭 ganache,然后再快速启动,并确保运行 `truffle migrate`
297297

298298
现在,让我们把 MyToken 押在智能合约上。 由于 `deposit(uint256 _amount)` 函数调用了来自 ERC20 的 `safeTransferFrom` 函数,用户必须首先批准智能合约,才能以用户的名义转账 MyToken。 因此,在下面的脚本中,我们将首先批准此步骤,然后调用函数:
299299

@@ -385,7 +385,7 @@ module.exports = async function (callback) {
385385
}
386386
```
387387

388-
要运行此脚本:`truffle exec .\script\transferMyTokenToFarmToken.js`您将在控制台上看到如下输出
388+
要运行此脚本:`truffle exec .\script\transferMyTokenToFarmToken.js`你将在控制台上看到如下输出
389389

390390
![transferMyTokenToFarmToken.js 的输出](https://cdn-images-1.medium.com/max/2000/1*MoekE2QCw7vB98u5dl7ang.png)
391391

public/content/translations/zh/developers/tutorials/deploying-your-first-smart-contract/index.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
---
22
title: 部署第一个智能合约
3-
description: 介绍如何在以太坊测试网络上部署您第一个智能合约
3+
description: 介绍如何在以太坊测试网络上部署你第一个智能合约
44
author: "jdourlens"
55
tags:
66
- "智能合约"
77
- "remix"
88
- "solidity"
9-
- "部署"
9+
- "deploying"
1010
skill: beginner
1111
lang: zh
1212
published: 2020-04-03
@@ -15,13 +15,13 @@ sourceUrl: https://ethereumdev.io/deploying-your-first-smart-contract/
1515
address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE"
1616
---
1717

18-
我猜您和我们一样会很兴奋在以太坊区块链上[部署](/developers/docs/smart-contracts/deploying/)[智能合约](/developers/docs/smart-contracts/)并与之交互。
18+
我猜你和我们一样会很兴奋在以太坊区块链上[部署](/developers/docs/smart-contracts/deploying/)[智能合约](/developers/docs/smart-contracts/)并与之交互。
1919

20-
别担心,作为我们的第一个智能合约,我们会将其部署在[本地测试网络](/developers/docs/networks/)上,因此您不需要任何开销就可以随意部署和运行它
20+
别担心,作为我们的第一个智能合约,我们会将其部署在[本地测试网络](/developers/docs/networks/)上,因此你不需要任何开销就可以随意部署和运行它
2121

2222
## 编写合约 {#writing-our-contract}
2323

24-
第一步[访问 Remix](https://remix.ethereum.org/)并创建一个新文件。 在 Remix 界面的左上角添加一个新文件,并输入所需的文件名。
24+
第一步[访问Remix](https://remix.ethereum.org/)并创建一个新文件。 在Remix界面的左上角添加一个新文件,并输入所需的文件名。
2525

2626
![在Remix界面中添加一个新文件](./remix.png)
2727

@@ -49,14 +49,14 @@ contract Counter {
4949
}
5050
```
5151

52-
如果您曾经写过程序,应该可以轻松猜到这个程序是做什么的。 下面按行解释:
52+
如果你曾经写过程序,应该可以轻松猜到这个程序是做什么的。 下面按行解释:
5353

5454
- 第 4 行:我们定义了一个名为 `Counter` 的合约。
5555
- 第 7 行:我们的合约存储了一个无符号整型 `count`,从 0 开始。
5656
- 第 10 行:第一个函数将修改合约的状态,并使用 `increment()` 递增我们的变量 `count`
5757
- 第 15 行,第二个函数就是一个取值器,能够从智能合约外部读取 `count` 变量的值。 请注意,因为我们将 `count` 变量定义为公共变量,所以这个函数是不必要的,但它可以作为一个例子展示。
5858

59-
第一个简单的智能合约到此结束。 正如您所知,它看上去像是 Java 或 C++ 这样的面向对象编程 (OOP) 语言中的一个类。 现在可以运行我们的合约了。
59+
第一个简单的智能合约到此结束。 正如你所知,它看上去像是 Java 或 C++ 这样的面向对象编程 (OOP) 语言中的一个类。 现在可以运行我们的合约了。
6060

6161
## 部署合约 {#deploying-our-contract}
6262

@@ -72,27 +72,27 @@ contract Counter {
7272

7373
![Remix solidity编译器的编译按钮](./remix-compile.png)
7474

75-
您可以选择“Auto compile”选项,这样在将合约内容保存到文本编辑器时合约也随之编译。
75+
你可以选择“Auto compile”选项,这样在将合约内容保存到文本编辑器时合约也随之编译。
7676

7777
然后切换到部署和运行交易屏幕:
7878

7979
![Remix工具栏的部署图标](./remix-deploy.png)
8080

81-
在“部署和运行交易”屏幕上,仔细检查显示的合约名称并点击“部署”。 正如您在页面顶部所见,当前环境是“JavaScript 虚拟机”,这意味着我们将在本地测试区块链上部署我们的智能合约并与之交互,以便能够更快地进行测试且无须支付任何费用。
81+
在“部署和运行交易”屏幕上,仔细检查显示的合约名称并点击“部署”。 正如你在页面顶部所见,当前环境是“JavaScript 虚拟机”,这意味着我们将在本地测试区块链上部署我们的智能合约并与之交互,以便能够更快地进行测试且无须支付任何费用。
8282

8383
![Remix solidity编译器的部署按钮](./remix-deploy-button.png)
8484

85-
点击“部署”按钮后,您可以看到合约在底部显示出来。 点击左侧的箭头展开,可以看到合约的内容。 这里有我们的变量`counter`、函数`increment()`和 getter `getCounter()`
85+
点击“部署”按钮后,你可以看到合约在底部显示出来。 点击左侧的箭头展开,可以看到合约的内容。 这里有我们的变量`counter`、函数`increment()`和getter `getCounter()`
8686

87-
如果您点击`count``getCount`按钮,它将实际检索合约的`count`变量的内容,并显示出来。 因为我们尚未调用`increment`函数,它应该显示 0
87+
如果你点击`count``getCount`按钮,它将实际检索合约的`count`变量的内容,并显示出来。 因为我们尚未调用`increment`函数,它应该显示0
8888

8989
![Remix solidity编译器的函数按钮](./remix-function-button.png)
9090

91-
现在点击按钮来调用`increment`函数。 您可以在窗口底部看到交易产生的日志。 当按下检索数据按钮而非`increment`按钮时,您看到的日志有所不同。 这是因为读取区块链的数据不需要任何交易(写入)或费用。 因为只有修改区块链的状态需要进行交易。
91+
现在点击按钮来调用`increment`函数。 你可以在窗口底部看到交易产生的日志。 当按下检索数据按钮而非`increment`按钮时,你看到的日志有所不同。 这是因为读取区块链的数据不需要任何交易(写入)或费用。 因为只有修改区块链的状态需要进行交易。
9292

9393
![交易日志](./transaction-log.png)
9494

95-
在按下 increment 按钮后,将产生一个交易来调用我们的`increment()`函数,如果我们点击 count 或 getCount 按钮,将读取我们的智能合约的最新状态,count 变量大于 0
95+
在按下increment按钮后,将产生一个交易来调用我们的`increment()`函数,如果我们点击count或getCount按钮,将读取我们的智能合约的最新状态,count变量大于0
9696

9797
![智能合约状态的最新更新](./updated-state.png)
9898

0 commit comments

Comments
 (0)