Skip to content

Commit

Permalink
Fix [ZH] translation
Browse files Browse the repository at this point in the history
  • Loading branch information
sapjax committed Jul 28, 2024
1 parent c8be176 commit 6c9506a
Show file tree
Hide file tree
Showing 18 changed files with 43 additions and 43 deletions.
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

0 comments on commit 6c9506a

Please sign in to comment.