Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Fix [ZH] translation #776

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions zh/10/00-overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ position: 2

为什么要部署到 **Loom**?毕竟,**_以太坊_** 才是最安全的网络。

是的,我们完全同意。但在以太坊上每个事务都要耗费 _gas_, 因此你的用户就必须为每个事务付费。而且,每个事务确认还得等上至少10秒
是的,我们完全同意。但在以太坊上每个交易都要耗费 _gas_, 因此你的用户就必须为每个交易付费。而且,每个交易确认还得等上至少10秒

简而言之,**_在以太坊上,所有事务都受益于相同的安全保障_**。对于面向用户的 dapp 或游戏等,往往并不一定需要这种级别的安全性。事实上,它只会破坏用户体验。
简而言之,**_在以太坊上,所有交易都受益于相同的安全保障_**。对于面向用户的 dapp 或游戏等,往往并不一定需要这种级别的安全性。事实上,它只会破坏用户体验。

在 **Loom** 上, 用户可以有更快速且零 gas 的事务。这使得 **Loom** 更适合游戏或面向用户的 dapp。
在 **Loom** 上, 用户可以有更快速且零 gas 的交易。这使得 **Loom** 更适合游戏或面向用户的 dapp。

好了,废话少说!现在就开始吧 😉
2 changes: 1 addition & 1 deletion zh/10/02.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ truffle.js

## truffle-hdwallet-provider

在本课中,我们将使用 _Infura_ 来把代码部署到 **_以太坊_**。这样,我们的用户便可以直接运行该应用程序,他们无需设置自己的 **_以太坊_** 节点或钱包。然而,为了保证安全,_Infura_ 不管理私钥,这也意味着它不能代表我们签署事务易。由于部署智能合约需要 **Truffle** 签署事务,所以我们将需要一个叫做 `truffle-hdwallet-provider` 的工具。它惟一的目的就是处理事务签名
在本课中,我们将使用 _Infura_ 来把代码部署到 **_以太坊_**。这样,我们的用户便可以直接运行该应用程序,他们无需设置自己的 **_以太坊_** 节点或钱包。然而,为了保证安全,_Infura_ 不管理私钥,这也意味着它不能代表我们签署交易易。由于部署智能合约需要 **Truffle** 签署交易,所以我们将需要一个叫做 `truffle-hdwallet-provider` 的工具。它惟一的目的就是处理交易签名

>注意: 也许你会问,为什么我们不在上一章安装 `truffle-hdwallet-provider`, 使用像下面这样的命令:

Expand Down
2 changes: 1 addition & 1 deletion zh/10/05.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ $ cat truffle.js

还记得第二章吗?

我们让你装了一个叫做 `truffle-hdwallet-provider` 的附加包,好帮助 **Truffle** 签署事务
我们让你装了一个叫做 `truffle-hdwallet-provider` 的附加包,好帮助 **Truffle** 签署交易

现在,我们想要编辑配置文件以使用 `HDWalletProvider`。先得在文件顶部添加一行:

Expand Down
4 changes: 2 additions & 2 deletions zh/10/07.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ material:

## Loom Basechain

现在,如果你想在 `以太坊` 上构建 DApp,有一点你应该清楚 —— 在主网上,用户需要 `为每笔事务支付 gas 费`。这对于面向用户的 DApp 或游戏来说并不理想。它很容易破坏用户体验。
现在,如果你想在 `以太坊` 上构建 DApp,有一点你应该清楚 —— 在主网上,用户需要 `为每笔交易支付 gas 费`。这对于面向用户的 DApp 或游戏来说并不理想。它很容易破坏用户体验。

相反,在 `Loom` 上,你的用户可以有更快速且无 gas 的事务,这使得它更适合游戏和其他非金融类应用。
相反,在 `Loom` 上,你的用户可以有更快速且无 gas 的交易,这使得它更适合游戏和其他非金融类应用。

这意味着你的 `Loom` 僵尸将是快僵尸!

Expand Down
2 changes: 1 addition & 1 deletion zh/10/lessoncomplete.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ material:

你已经掌握了使用 **Truffle** 部署智能合约的技能!

请记住,在 **_Loom_** 上构建将为你带来更快速、无 gas 的事务,是你创建区块链游戏和面向用户型 dapp 的完美选择。与此同时,你的用户也将享受到以太坊提供的安全保障!
请记住,在 **_Loom_** 上构建将为你带来更快速、无 gas 的交易,是你创建区块链游戏和面向用户型 dapp 的完美选择。与此同时,你的用户也将享受到以太坊提供的安全保障!

另一点也请记住,部署到 **_Loom_** 与部署到以太网差不多。你已经知道具体怎么实现,下一个项目就请选择使用最适合你的吧 😉。

Expand Down
6 changes: 3 additions & 3 deletions zh/11/05.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,9 @@ const result = await contractInstance.createRandomZombie(zombieNames[0], {from:

在使用 `artifacts.require` 指定了我们要测试的合约后,_Truffle_ 就会自动提供我们智能合约产生的日志。这意味着我们现在可以这样来检索 Alice 的新僵尸名字:`result.logs[0].args.name`。用类似的方式,我们还可以获得其 `id` 和`_dna`。

除了这些信息外,`result` 还将为我们提供关于事务的其他一些有用细节:
- `result.tx`: 事务哈希
- `result.receipt`: 包含事务收据的对象。如果 `result.receipt.status` 的值是 `true`, 表示事务成功。否则,就意味着事务失败
除了这些信息外,`result` 还将为我们提供关于交易的其他一些有用细节:
- `result.tx`: 交易哈希
- `result.receipt`: 包含交易收据的对象。如果 `result.receipt.status` 的值是 `true`, 表示交易成功。否则,就意味着交易失败


>注意:还可以选择日志来存储数据。优点是很低廉,缺点是无法从智能合约内部对其进行访问。
Expand Down
2 changes: 1 addition & 1 deletion zh/11/12.md
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ function _createZombie(string _name, uint _dna) internal {

让我来解释下这些函数是如何运行的:

- 每次挖一个新区块时,矿工都会向它添加一个时间戳。假设在第5个区块中挖到了生成僵尸的事务
- 每次挖一个新区块时,矿工都会向它添加一个时间戳。假设在第5个区块中挖到了生成僵尸的交易

- 接下来,我们调用 `evm_increaseTime`,但由于区块链是不可变的,所以不可能修改现有区块。所以,当合约检查时间时,它不会增加。

Expand Down
2 changes: 1 addition & 1 deletion zh/11/13.md
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ expect(zombieName).to.equal('My Awesome Zombie');

1. 将 `expect` 移植到我们的项目中。

2. 用 `zombieName` 继续上面的例子,我们可以使用 `expect` 来为一个成功的事务测试,如下所示:
2. 用 `zombieName` 继续上面的例子,我们可以使用 `expect` 来为一个成功的交易测试,如下所示:

```javascript
expect(result.receipt.status).to.equal(true);
Expand Down
2 changes: 1 addition & 1 deletion zh/11/14.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ material:

现在,如果不向你展示如何在 **_Loom_** 测试网上进行测试,本教程就不完整啦。

回想一下我们之前的课程,在 **_Loom_** 上,用户可以比在**以太坊**上有更快、更且无 gas 的事务。这使得 DAppChain 更适合游戏或面向用户的 DApp。
回想一下我们之前的课程,在 **_Loom_** 上,用户可以比在**以太坊**上有更快、更且无 gas 的交易。这使得 DAppChain 更适合游戏或面向用户的 DApp。

而且,你知道吗?在 **Loom** 上部署和测试没有任何不同。我们已经为你总结了在 **_Loom_** 上测试所需要做的,快来看下吧。

Expand Down
4 changes: 2 additions & 2 deletions zh/3/10-savinggasview.md
Original file line number Diff line number Diff line change
Expand Up @@ -202,11 +202,11 @@ material:

当玩家从外部调用一个`view`函数,是不需要支付一分 gas 的。

这是因为 `view` 函数不会真正改变区块链上的任何数据 - 它们只是读取。因此用 `view` 标记一个函数,意味着告诉 `web3.js`,运行这个函数只需要查询你的本地以太坊节点,而不需要在区块链上创建一个事务(事务需要运行在每个节点上,因此花费 gas)。
这是因为 `view` 函数不会真正改变区块链上的任何数据 - 它们只是读取。因此用 `view` 标记一个函数,意味着告诉 `web3.js`,运行这个函数只需要查询你的本地以太坊节点,而不需要在区块链上创建一个交易(交易需要运行在每个节点上,因此花费 gas)。

稍后我们将介绍如何在自己的节点上设置 web3.js。但现在,你关键是要记住,在所能只读的函数上标记上表示“只读”的“`external view` 声明,就能为你的玩家减少在 DApp 中 gas 用量。

>注意:如果一个 `view` 函数在另一个函数的内部被调用,而调用函数与 `view` 函数的不属于同一个合约,也会产生调用成本。这是因为如果主调函数在以太坊创建了一个事务,它仍然需要逐个节点去验证。所以标记为 `view` 的函数只有在外部调用时才是免费的。
>注意:如果一个 `view` 函数在另一个函数的内部被调用,而调用函数与 `view` 函数的不属于同一个合约,也会产生调用成本。这是因为如果主调函数在以太坊创建了一个交易,它仍然需要逐个节点去验证。所以标记为 `view` 的函数只有在外部调用时才是免费的。


## 实战演习
Expand Down
6 changes: 3 additions & 3 deletions zh/4/battle-02.md
Original file line number Diff line number Diff line change
Expand Up @@ -249,15 +249,15 @@ uint random2 = uint(keccak256(now, msg.sender, randNonce)) % 100;

### 这个方法很容易被不诚实的节点攻击

在以太坊上, 当你在和一个合约上调用函数的时候, 你会把它广播给一个节点或者在网络上的 **_transaction_** 节点们。 网络上的节点将收集很多事务, 试着成为第一个解决计算密集型数学问题的人,作为“工作证明”,然后将“工作证明”(Proof of Work, PoW)和事务一起作为一个 **_block_** 发布在网络上。
在以太坊上, 当你在和一个合约上调用函数的时候, 你会把它广播给一个节点或者在网络上的 **_transaction_** 节点们。 网络上的节点将收集很多交易, 试着成为第一个解决计算密集型数学问题的人,作为“工作证明”,然后将“工作证明”(Proof of Work, PoW)和交易一起作为一个 **_block_** 发布在网络上。

一旦一个节点解决了一个PoW, 其他节点就会停止尝试解决这个 PoW, 并验证其他节点的事务列表是有效的,然后接受这个节点转而尝试解决下一个节点。
一旦一个节点解决了一个PoW, 其他节点就会停止尝试解决这个 PoW, 并验证其他节点的交易列表是有效的,然后接受这个节点转而尝试解决下一个节点。

**这就让我们的随机数函数变得可利用了**

我们假设我们有一个硬币翻转合约——正面你赢双倍钱,反面你输掉所有的钱。假如它使用上面的方法来决定是正面还是反面 (`random >= 50` 算正面, `random < 50` 算反面)。

如果我正运行一个节点,我可以 **只对我自己的节点** 发布一个事务,且不分享它。 我可以运行硬币翻转方法来偷窥我的输赢 — 如果我输了,我就不把这个事务包含进我要解决的下一个区块中去。我可以一直运行这个方法,直到我赢得了硬币翻转并解决了下一个区块,然后获利。
如果我正运行一个节点,我可以 **只对我自己的节点** 发布一个交易,且不分享它。 我可以运行硬币翻转方法来偷窥我的输赢 — 如果我输了,我就不把这个交易包含进我要解决的下一个区块中去。我可以一直运行这个方法,直到我赢得了硬币翻转并解决了下一个区块,然后获利。

## 所以我们该如何在以太坊上安全地生成随机数呢

Expand Down
6 changes: 3 additions & 3 deletions zh/4/payable.md
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ function test() external view onlyOwner anotherModifier { /* ... */ }

先放一下。当你在调用一个普通网站服务器上的API函数的时候,你无法用你的函数传送美元——你也不能传送比特币。

但是在以太坊中, 因为钱 (_以太_), 数据 (*事务负载*), 以及合约代码本身都存在于以太坊。你可以在同时调用函数 **并**付钱给另外一个合约。
但是在以太坊中, 因为钱 (_以太_), 数据 (*交易负载*), 以及合约代码本身都存在于以太坊。你可以在同时调用函数 **并**付钱给另外一个合约。

这就允许出现很多有趣的逻辑, 比如向一个合约要求支付一定的钱来运行一个函数。

Expand All @@ -276,9 +276,9 @@ contract OnlineStore {
OnlineStore.buySomething().send(from: web3.eth.defaultAccount, value: web3.utils.toWei(0.001))
```

注意这个 `value` 字段, JavaScript 调用来指定发送多少(0.001)`以太`。如果把事务想象成一个信封,你发送到函数的参数就是信的内容。 添加一个 `value` 很像在信封里面放钱 —— 信件内容和钱同时发送给了接收者。
注意这个 `value` 字段, JavaScript 调用来指定发送多少(0.001)`以太`。如果把交易想象成一个信封,你发送到函数的参数就是信的内容。 添加一个 `value` 很像在信封里面放钱 —— 信件内容和钱同时发送给了接收者。

>注意: 如果一个函数没标记为`payable`, 而你尝试利用上面的方法发送以太,函数将拒绝你的事务
>注意: 如果一个函数没标记为`payable`, 而你尝试利用上面的方法发送以太,函数将拒绝你的交易


## 实战演习
Expand Down
4 changes: 2 additions & 2 deletions zh/6/02.md
Original file line number Diff line number Diff line change
Expand Up @@ -402,9 +402,9 @@ material:
var web3 = new Web3(new Web3.providers.WebsocketProvider("wss://mainnet.infura.io/ws"));
```

不过,因为我们的 DApp 将被很多人使用,这些用户不单会从区块链读取信息,还会向区块链 **_写_** 入信息,我们需要用一个方法让用户可以用他们的私钥给事务签名
不过,因为我们的 DApp 将被很多人使用,这些用户不单会从区块链读取信息,还会向区块链 **_写_** 入信息,我们需要用一个方法让用户可以用他们的私钥给交易签名

> 注意: 以太坊 (以及通常意义上的 blockchains )使用一个公钥/私钥对来对给事务做数字签名。把它想成一个数字签名的异常安全的密码。这样当我修改区块链上的数据的时候,我可以用我的公钥来 **证明** 我就是签名的那个。但是因为没人知道我的私钥,所以没人能伪造我的事务
> 注意: 以太坊 (以及通常意义上的 blockchains )使用一个公钥/私钥对来对给交易做数字签名。把它想成一个数字签名的异常安全的密码。这样当我修改区块链上的数据的时候,我可以用我的公钥来 **证明** 我就是签名的那个。但是因为没人知道我的私钥,所以没人能伪造我的交易

加密学非常复杂,所以除非你是个专家并且的确知道自己在做什么,你最好不要在你应用的前端中管理你用户的私钥。

Expand Down
10 changes: 5 additions & 5 deletions zh/6/04.md
Original file line number Diff line number Diff line change
Expand Up @@ -892,9 +892,9 @@ Web3.js 有两个方法来调用我们合约的函数: `call` and `send`.

### Call

`call` 用来调用 `view` 和 `pure` 函数。它只运行在本地节点,不会在区块链上创建事务
`call` 用来调用 `view` 和 `pure` 函数。它只运行在本地节点,不会在区块链上创建交易

> **复习:** `view` 和 `pure` 函数是只读的并不会改变区块链的状态。它们也不会消耗任何gas。用户也不会被要求用MetaMask对事务签名
> **复习:** `view` 和 `pure` 函数是只读的并不会改变区块链的状态。它们也不会消耗任何gas。用户也不会被要求用MetaMask对交易签名

使用 Web3.js,你可以如下 `call` 一个名为`myMethod`的方法并传入一个 `123` 作为参数:

Expand All @@ -904,11 +904,11 @@ myContract.methods.myMethod(123).call()

### Send

`send` 将创建一个事务并改变区块链上的数据。你需要用 `send` 来调用任何非 `view` 或者 `pure` 的函数。
`send` 将创建一个交易并改变区块链上的数据。你需要用 `send` 来调用任何非 `view` 或者 `pure` 的函数。

> **注意:** `send` 一个事务将要求用户支付gas,并会要求弹出对话框请求用户使用 Metamask 对事务签名。在我们使用 Metamask 作为我们的 web3 提供者的时候,所有这一切都会在我们调用 `send()` 的时候自动发生。而我们自己无需在代码中操心这一切,挺爽的吧。
> **注意:** `send` 一个交易将要求用户支付gas,并会要求弹出对话框请求用户使用 Metamask 对交易签名。在我们使用 Metamask 作为我们的 web3 提供者的时候,所有这一切都会在我们调用 `send()` 的时候自动发生。而我们自己无需在代码中操心这一切,挺爽的吧。

使用 Web3.js, 你可以像这样 `send` 一个事务调用`myMethod` 并传入 `123` 作为参数:
使用 Web3.js, 你可以像这样 `send` 一个交易调用`myMethod` 并传入 `123` 作为参数:

```
myContract.methods.myMethod(123).send()
Expand Down
Loading