From e28895c3c7beec8cd2cc274f6a5a090eb676d5a0 Mon Sep 17 00:00:00 2001 From: knarfeh Date: Mon, 19 Feb 2018 12:23:19 +0800 Subject: [PATCH] [cn]Fix some chinese translation --- _docs/cn/2017-01-10-technical.md | 4 +--- _docs/cn/cn-cardano/2017-01-04-differences.md | 3 +-- _docs/cn/cn-cardano/2017-01-16-updating.md | 6 +++--- _docs/cn/cn-cardano/2017-02-01-monetary-policy.md | 2 +- _docs/cn/cn-cardano/2017-02-05-explorer.md | 2 +- _docs/cn/cn-technical/2017-02-15-pvss.md | 2 +- _docs/cn/cn-technical/plutus/2017-01-01-introduction.md | 4 ++-- _docs/cn/cn-technical/plutus/2017-01-02-types.md | 2 +- _docs/cn/cn-technical/plutus/2017-01-03-examples.md | 2 +- .../cn-technical/protocols/2017-01-01-application-level.md | 3 +-- .../cn-technical/protocols/2017-01-10-network-transport.md | 4 ++-- _docs/cn/cn-technical/protocols/2017-01-13-binary.md | 2 +- 12 files changed, 16 insertions(+), 20 deletions(-) diff --git a/_docs/cn/2017-01-10-technical.md b/_docs/cn/2017-01-10-technical.md index d2c4d33e5..41ecc4164 100755 --- a/_docs/cn/2017-01-10-technical.md +++ b/_docs/cn/2017-01-10-technical.md @@ -83,9 +83,7 @@ language: cn ## 分叉 -通常,一个链(主链)由一个节点维护,但最终可能会出现分叉链。回想一下,只有区块 `k` 和更多 slot 被认为是稳定的。这样一来,如果接收一个区块,它既不是区块链的一部分也不是 blockchain 的延续,我们首先检查其复杂程度(复杂性是链的长度)是否比我们的大,TODO - -然后我们开始随后请求来自先前块提供替代链头的节点。如果我们来得深入k插槽前,替代链被拒绝。否则,一旦我们到达我们连锁店中​​存在的区块,替代链就会被添加到存储区。从国家的角度来看,我们存储和维护所有可行的替代链。如果看起来一个替代链比主链更长,那么它们被替换,使替代链成为新的主链。 +通常,一个链(主链)由一个节点维护,但最终可能会出现分叉链。回想一下,只有区块 `k` 和更多 slot 被认为是稳定的。这样一来,如果接收一个区块,它既不是区块链的一部分也不是区块链的延续,我们首先检查其复杂程度(复杂性是链的长度)是否比我们的大,然后我们开始继续请求节点之前的区块提供替代链头。如果我们来到深入 k 插槽前,替代链就会被拒绝。否则,一旦我们到达我们链中​​存在的区块,替代链就会被添加到存储区。从状态接入点角度来看,我们存储和维护所有可行的替代链。如果看起来一个替代链比主链更长,那么它们被替换,使替代链成为新的主链。 ## 补充部分 diff --git a/_docs/cn/cn-cardano/2017-01-04-differences.md b/_docs/cn/cn-cardano/2017-01-04-differences.md index bd41876ef..171b4740f 100755 --- a/_docs/cn/cn-cardano/2017-01-04-differences.md +++ b/_docs/cn/cn-cardano/2017-01-04-differences.md @@ -40,8 +40,7 @@ Public Entities"](https://eprint.iacr.org/2017/216.pdf) PVSS 方案 使用 VSS(可验证的密钥分享,Verifiable Secret Sharing)方案时的一个挑战是将用于签名的公钥与用于 VSS 方案的公钥相关联(`VssPublicKey`)。这是通过引入 `VssCertificate` 来解决的。这个证书是一个由签名密钥给出的签名,它由一个对 `VssPublicKey` 以及这个证书的有效时间组成。最初,所有参与随机生成的权益所有者都拥有证书。当出现一个拥有足够股份的新权益所有人时,或现有证书到期时,应该生成一个新的证书并提交给网络。`VssCertificate` 被存储在区块中。 -PVSS 方案使用共享验证信息,这也包括了对密钥的提交。它也被用做协议中的提交。PVSS 提交已经在 elliptic curve (TODO) -secp256r1 实现,请参考 [PVSS 在卡尔达诺结算层的实现](/technical/pvss/)获取更多细节。 +PVSS 方案使用共享验证信息,这也包括了对密钥的提交。它也被用做协议中的提交。PVSS 提交已经在椭圆方程曲线 secp256r1 实现,请参考 [PVSS 在卡尔达诺结算层的实现](/technical/pvss/)获取更多细节。 ## 区块生成时间 diff --git a/_docs/cn/cn-cardano/2017-01-16-updating.md b/_docs/cn/cn-cardano/2017-01-16-updating.md index e20982588..9df615ead 100755 --- a/_docs/cn/cn-cardano/2017-01-16-updating.md +++ b/_docs/cn/cn-cardano/2017-01-16-updating.md @@ -104,9 +104,9 @@ IOHK 维护的一系列 HTTP 的镜像足够作为开始。 为什么我们想在某个时刻想让某个块版本无效这一点可能不是很清楚。这里关键的一点是,一个新的功能实际上是对我们之前所做的一个限制。例如,目前我们可能有基于公钥或基于脚本的普通旧提交。然后在某个时候,我们决定包含第三种地址类型(不管目的是什么)。我们使用哪种策略来验证具有未知类型地址的提交的区块?显然唯一的选择是不验证这个地址。 -想象有人提出一个交易到这个地址,可能这么做是带着满足一些条件之前保障资金的意图,一旦条件满足,它们在版本1上的区块花费了其他交易,这是关键的一点。如果网络没有假定旧版本被启用了(因为我们只能在启用旧版本时开始拒绝区块),我们就不能使用限制。(TODO) +想象有人提出一个交易到这个地址,可能这么做是带着满足一些条件之前保障资金的意图,一旦条件满足,它们在版本1上的区块花费了其他交易,这是关键的一点。如果网络没有假定旧版本被启用了(因为我们只能在启用旧版本时开始拒绝区块),我们就不能使用限制。 -我们也不能接受所有高于目前所采用的区块的区块,因为在我们的实现中,每个区块都有一个专门用于存储辅助信息的字段。攻击者可以生成她使用了更高版本的协议,并生成一个 `attributes` 被无意义密钥污染的区块。如果我们接受它,它会使我们的区块链变得臃肿。 +我们也不能接受所有高于目前所采用区块的区块,因为在我们的实现中,每个区块都有一个专门用于存储辅助信息的字段。攻击者可以生成她使用了更高版本的协议,并生成一个 `attributes` 被无意义密钥污染的区块。如果我们接受它,它会使我们的区块链变得臃肿。 这是下面要描述的逻辑的动机。 @@ -119,7 +119,7 @@ IOHK 维护的一系列 HTTP 的镜像足够作为开始。 软分叉的工作原理如下: - 非正式的,当一个确定比例的权益以版本 `X` 创建区块,区块版本变成*已采用*。 -- 正式的,我们做以下事情。首先回顾一下,我们的系统在设计上,不允许回滚超过某个固定的全局阈值 `k`,这样可以为每个权益所有者确定稳定的股权。当我们处理创始块 `e` 时,我们从网络的一开始就计算所有 slot 的所有领导者的稳定股权。对于版本 `X` 的区块当前竞争的版本,我们取所有版本 `X` 的稳定版本,收集这些领导者的区块,统计他们的股权。如果其中一个版本大于 75%,则被采纳。如果多于一个版本大于 75%,我们采用其中一个(TODO)。 +- 正式的,我们做以下事情。首先回顾一下,我们的系统在设计上,不允许回滚超过某个固定的全局阈值 `k`,这样可以为每个权益所有者确定稳定的股权。当我们处理创始块 `e` 时,我们从网络的一开始就计算所有 slot 的所有领导者的稳定股权。对于版本 `X` 的区块当前竞争的版本,我们取所有版本 `X` 的稳定版本,收集这些领导者的区块,统计他们的股权。如果其中一个版本大于 75%,则被采纳。如果多于一个版本大于 75%,我们采用其中一个。 请注意,采用的区块版本在 epoch 期间(只在 epoch 之间)是不可变的,因此在一个 epoch 中的所有区块都根据相同的规则进行验证(因为规则是由采用的区块版本定义的)。但假设一个 epoch 中的所有区块都具有相同的区块版本是错误的。在采用区块版本之后,另一个区块版本可以竞争,并且一些节点可以使用这个新版本创建区块。 diff --git a/_docs/cn/cn-cardano/2017-02-01-monetary-policy.md b/_docs/cn/cn-cardano/2017-02-01-monetary-policy.md index 435fa2596..190133245 100755 --- a/_docs/cn/cn-cardano/2017-02-01-monetary-policy.md +++ b/_docs/cn/cn-cardano/2017-02-01-monetary-policy.md @@ -56,6 +56,6 @@ Ada 币以 45,000,000,000 或者说 450 亿封顶。 - 1.000000 = 1 ADA - 0.000001 = 1 Lovelace -在货币单位方面有两点考虑。首先在日本,日元面额要大得多,10000 日元相当于 100美元,相当于250亿 ADA 对应 两亿五千万。第二点,与比特币的8位小数不同,ADA 有6位小数,一个 ADA 有100万个 Lovelaces(最小单位)。Adjusting for this takes you to 2.5 million. (TODO) +在货币单位方面有两点考虑。首先在日本,日元面额要大得多,10000 日元相当于 100美元,相当于250亿 ADA 对应 两亿五千万。第二点,与比特币的8位小数不同,ADA 有6位小数,一个 ADA 有100万个 Lovelaces(最小单位)。为此转换,即对应250万。 diff --git a/_docs/cn/cn-cardano/2017-02-05-explorer.md b/_docs/cn/cn-cardano/2017-02-05-explorer.md index a09ca036b..95ed4cce3 100755 --- a/_docs/cn/cn-cardano/2017-02-05-explorer.md +++ b/_docs/cn/cn-cardano/2017-02-05-explorer.md @@ -61,4 +61,4 @@ Hash 地址的例子: `1fhXcTriF8i8FFSdCTaU9d3yp3oCLFQhon5KBkevT8rQDPP`. 1. slot 的散列 2. 前一个 slot 的散列(如果存在的话) 3. 下一个 slot 的散列(如果存在的话) -4. The Merkle root. (TODO) +4. 默克尔树根。 diff --git a/_docs/cn/cn-technical/2017-02-15-pvss.md b/_docs/cn/cn-technical/2017-02-15-pvss.md index 50ad9172f..d36817a65 100755 --- a/_docs/cn/cn-technical/2017-02-15-pvss.md +++ b/_docs/cn/cn-technical/2017-02-15-pvss.md @@ -16,7 +16,7 @@ language: cn ## 什么是 PVSS -VSS 模式的核心思想是参与者验证自己的份额,成功构建密钥(之前由参与者中的经销商分发(TODO))的能力。而 PVSS 模式的核心思想是,参与者不仅可以验证其股权,而且任何人都可以验证参与者是否收到了正确的股权。因此(参考我们的重建协议),参与者不仅要发行他们的股权,还要为每个发行的股票提供一个正确地证明(`[9]`)。(TODO) +VSS 模式的核心思想是参与者验证自己的份额,成功构建密钥(之前由参与者中的经销商分发)的能力。而 PVSS 模式的核心思想是,参与者不仅可以验证其股权,而且任何人都可以验证参与者是否收到了正确的股权。因此(参考我们的重建协议),参与者不仅要发行他们的股权,还要为每个发行的股票提供一个正确地证明(`[9]`)。 我们使用 `t-out-of-n` 重建方案(`[8]`),其中 `n` 是参与者的数量,`t` 是一个阈值。所以任何 `t+1` 份额的子集可以用来成功恢复密钥。 diff --git a/_docs/cn/cn-technical/plutus/2017-01-01-introduction.md b/_docs/cn/cn-technical/plutus/2017-01-01-introduction.md index 3db0e34fc..05a29033d 100755 --- a/_docs/cn/cn-technical/plutus/2017-01-01-introduction.md +++ b/_docs/cn/cn-technical/plutus/2017-01-01-introduction.md @@ -9,7 +9,7 @@ language: cn # Plutus 介绍 -Plutus 是用于在 Cardano 中定义智能合约的严格类型的纯函数式编程语言。语法相当像 Haskell,但与 Haskell 不同的是, (TODO) +Plutus 是用于在 Cardano 中定义智能合约的严格类型的纯函数式编程语言。语法相当像 Haskell,但与 Haskell 不同的是,这个语言更注重推导。 ## 声明数据类型 @@ -64,5 +64,5 @@ Plutus 在智能合约计算专用语言中有一个重要类型:类型构造 ## 更详细的概述 -Plutus 部分的其他章节提供了对 Plutus 的语法,类型和程序的更详细的概述,包括内置的类型和功能,在深入编写程序前应该阅读。还有一个演示文件,展示了一些常用函数的实现,一遍可以更好地理解该语言的使用。 +Plutus 部分的其他章节提供了对 Plutus 的语法,类型和程序的更详细的概述,包括内置的类型和功能,在深入编写程序前应该阅读。还有一个演示文件,展示了一些常用函数的实现,以便可以更好地理解该语言的使用。 diff --git a/_docs/cn/cn-technical/plutus/2017-01-02-types.md b/_docs/cn/cn-technical/plutus/2017-01-02-types.md index 75510acd7..a6d7bcdf2 100755 --- a/_docs/cn/cn-technical/plutus/2017-01-02-types.md +++ b/_docs/cn/cn-technical/plutus/2017-01-02-types.md @@ -110,7 +110,7 @@ Plutus 有一些内置类型(int, float, bytestrings) 和一个内置的类型 ## 函数类型 -给定任意 `A` 和 `B` 类型,有一种函数类型 `A -> B`。要获得这种类型,我们可以使用 lambada 的形式,如下所述:如果 `M` 有类型 `B`,有一个变量类型为 `A` 的变量 `x`,那么 `\x -> M` 有类型 `A -> B`。我们可以使用一个具有函数类型的术语:如果 `M` 有类型 `A -> B`,`N` 有类型 `A`,`M N` 有类型 `B`。函数的计算是标准的 beta 递减:`(\x -> M) N` 到 `[N/x]M`,即 `M` 用 `N` 取代 `x`。在 Plutus 中,计算是立即执行的,因此 `N` 在替换之前获得结果。(TODO) +给定任意 `A` 和 `B` 类型,有一种函数类型 `A -> B`。要获得这种类型,我们可以使用 lambada 的形式,如下所述:如果 `M` 有类型 `B`,有一个变量类型为 `A` 的变量 `x`,那么 `\x -> M` 有类型 `A -> B`。我们可以使用一个具有函数类型的术语:如果 `M` 有类型 `A -> B`,`N` 有类型 `A`,`M N` 有类型 `B`。函数的计算是标准的 beta 递减:`(\x -> M) N` 到 `[N/x]M`,即 `M` 用 `N` 取代 `x`。在 Plutus 中,计算是立即执行的,因此 `N` 在替换之前获得结果。 ## 用户声明的类型 diff --git a/_docs/cn/cn-technical/plutus/2017-01-03-examples.md b/_docs/cn/cn-technical/plutus/2017-01-03-examples.md index d5f25f155..1426ae01f 100755 --- a/_docs/cn/cn-technical/plutus/2017-01-03-examples.md +++ b/_docs/cn/cn-technical/plutus/2017-01-03-examples.md @@ -7,7 +7,7 @@ language: cn --- -# Plutus 例子(TODO) +# Plutus 例子 这里,我们看看一些常见的程序示例,让您更好地了解 Plutus 语言的工作原理。我们将实现 Peano 数字类型,cons 列表,二叉树,以及一些相关的常见功能。 diff --git a/_docs/cn/cn-technical/protocols/2017-01-01-application-level.md b/_docs/cn/cn-technical/protocols/2017-01-01-application-level.md index 16f7c999e..935eb51fe 100755 --- a/_docs/cn/cn-technical/protocols/2017-01-01-application-level.md +++ b/_docs/cn/cn-technical/protocols/2017-01-01-application-level.md @@ -199,8 +199,7 @@ class MessagePart a where 这是另一个例子 - [`requestHeaders`](https://github.com/input-output-hk/cardano-sl/blob/83fbebb3eec16c30a96c499301250c5a3756c0c1/src/Pos/Block/Network/Logic.hs#L261) 功能。这个函数处理预期的区块头,并在本地跟踪它们。在[这个地方](https://github.com/input-output-hk/cardano-sl/blob/83fbebb3eec16c30a96c499301250c5a3756c0c1/src/Pos/Block/Network/Logic.hs#L271),它向 listener 发送一种类型为 `MsgGetHeaders` 的信息,而[在这](https://github.com/input-output-hk/cardano-sl/blob/83fbebb3eec16c30a96c499301250c5a3756c0c1/src/Pos/Block/Network/Logic.hs#L275),它从这个 listener 接收一个类型为 `MsgHeaders` 的回答。 -[`Pos.Block.Worker`](https://github.com/input-output-hk/cardano-sl/blob/d564b3f5a7e03e086b62c88212870b5ea89f5e8b/src/Pos/Block/Worker.hs) 模块中定义了用于区块处理的其他 worker。我们重用了上述的 `retrievalWorker`(TODO:and define a -[well-documented](https://github.com/input-output-hk/cardano-sl/blob/a5f7991ff03a1e45114b901bfbbbb1ee3cd4d194/src/Pos/Block/Worker.hs#L82)),并记载了一个记录良好的 `blkOnNewSlot` worker。它代表了一个新 slot 开始时应该完成的操作,这个操作包括以下步骤: +[`Pos.Block.Worker`](https://github.com/input-output-hk/cardano-sl/blob/d564b3f5a7e03e086b62c88212870b5ea89f5e8b/src/Pos/Block/Worker.hs) 模块中定义了用于区块处理的其他 worker。我们重用了上述的 `retrievalWorker`,并为 `blkOnNewSlot` worker 写了一个[内容丰富的文档](https://github.com/input-output-hk/cardano-sl/blob/a5f7991ff03a1e45114b901bfbbbb1ee3cd4d194/src/Pos/Block/Worker.hs#L82) 。它代表了一个新 slot 开始时应该完成的操作,这个操作包括以下步骤: 1. 如有必要,生成一个[创始区块](https://github.com/input-output-hk/cardano-sl/blob/a5f7991ff03a1e45114b901bfbbbb1ee3cd4d194/src/Pos/Block/Worker.hs#L100)。 2. 获取当前 epoch 的 leader。 diff --git a/_docs/cn/cn-technical/protocols/2017-01-10-network-transport.md b/_docs/cn/cn-technical/protocols/2017-01-10-network-transport.md index 2852c9105..e6679d265 100755 --- a/_docs/cn/cn-technical/protocols/2017-01-10-network-transport.md +++ b/_docs/cn/cn-technical/protocols/2017-01-10-network-transport.md @@ -132,7 +132,7 @@ B 的传输实例在对应的接入点 IDs 上相应的 host 和 port 有监听 每个端点初始化重量级连接的过程都记录在本地状态中。每个端点都将照常发送连接请求消息。当每个端点接受传入的 TCP 连接时,它会从连接请求消息获取端点 ID。 -额外的规则是,它必须在其本地状态查到,对等点的连接1. 已经建立(TODO)2. 已经完全确立。在第一种情况下,我们处于交叉连接的情况。第二种情况是当一个对等房发现现有的 TCP 连接失败(即它的端点被关闭),并且正尝试建立一个新的 TCP 连接,而其他的对等点没有发现已有的 TCP 连接已经失效了。 +额外的规则是,它必须在其本地状态查到,对等点的连接1. 已经建立,或2. 已经完全确立。在第一种情况下,我们处于交叉连接的情况。第二种情况是当一个对等房发现现有的 TCP 连接失败(即它的端点被关闭),并且正尝试建立一个新的 TCP 连接,而其他的对等点没有发现已有的 TCP 连接已经失效了。 ### 交叉连接情况 @@ -225,7 +225,7 @@ B 的传输实例在对应的接入点 IDs 上相应的 host 和 port 有监听 - `CloseSocket` - 关闭连接控制消息,值为 `2`; - `LWCId` - 迄今使用的最大轻量级连接 ID。 -## 流量控制和背压(TODO) +## 流量控制和背压 轻量级连接不提供任何超出 TCP 提供的流量控制。该协议不提供任何设施来拒绝传入的轻量级连接。任何这样的设施都必须在顶层,在应用层或另一个中间层。 diff --git a/_docs/cn/cn-technical/protocols/2017-01-13-binary.md b/_docs/cn/cn-technical/protocols/2017-01-13-binary.md index a7c846892..23e5c8b4e 100755 --- a/_docs/cn/cn-technical/protocols/2017-01-13-binary.md +++ b/_docs/cn/cn-technical/protocols/2017-01-13-binary.md @@ -113,7 +113,7 @@ newtype UnsignedVarInt a = UnsignedVarInt {getUnsignedVarInt :: a} 值一次编码为7位,最重要的是是个连续位。因此,从0到127的数字只需要一个字节来编码,从128到16383的数字需要两个字节等等。 -这种[格式](https://developers.google.com/protocol-buffers/docs/encoding#varints)取自 Google 的 Protocol Buffers,但它提供了更多的编码语言(TODO) +这种[格式](https://developers.google.com/protocol-buffers/docs/encoding#varints)取自 Google 的 Protocol Buffers,但它提供了更多的编码方式。 例子: