密码学邮件列表

比特币点对点电子现金论文

中本聪 · 2008 年 11 月 15 日

SN-10017 附来源、原文与上下文。

阅读语言

我会尽量加快进度,尽快发布源代码,供大家参考,帮助澄清这些实现方面的问题。

I'll try and hurry up and release the sourcecode as soon as possible to serve as a reference to help clear up all these implementation questions.

Ray Dillinger(Bear)写道:

Ray Dillinger (Bear) wrote:

引用的来信Ray Dillinger来源 ↗

一个币被花出去时,买方和卖方都会为一份(盲化的)交易记录加上数字签名。

When a coin is spent, the buyer and seller digitally sign a (blinded) transaction record.

只有买方签名,而且没有盲化。

Only the buyer signs, and there's no blinding.

引用的来信Ray Dillinger来源 ↗

如果有人双重支付,就可以解除交易记录的盲化,揭露作弊者的身份。

If someone double spends, then the transaction record can be unblinded revealing the identity of the cheater.

这里不使用身份,也不依靠事后追索。一切都靠事前预防。

Identities are not used, and there's no reliance on recourse. It's all prevention.

引用的来信Ray Dillinger来源 ↗

这是通过一种相当标准的切分选择算法实现的,买方用秘密份额回应若干项挑战

This is done via a fairly standard cut-and-choose algorithm where the buyer responds to several challenges with secret shares

没有挑战,也没有秘密份额。基本交易就是第 2 节图中所示的样子:一个符合上一笔交易公钥的签名(买方的),以及一个新的公钥(卖方的),下一次花费时必须满足这个公钥的验证要求。

No challenges or secret shares. A basic transaction is just what you see in the figure in section 2. A signature (of the buyer) satisfying the public key of the previous transaction, and a new public key (of the seller) that must be satisfied to spend it the next time.

引用的来信Ray Dillinger来源 ↗

他们在工作时,也可能收到与自己尝试延长的链一样长的链,其中最后几个“环节”与自己正在处理的链并不相同。他们会忽略这些链。

They may also receive chains as long as the one they're trying to extend while they work, in which the last few "links" are links that are not in common with the chain on which they're working. These they ignore.

对,如果长度相等,就保留最先收到的那条来打破平局。

Right, if it's equal in length, ties are broken by keeping the earliest one received.

引用的来信Ray Dillinger来源 ↗

如果其中包含双重支付,他们就创建一笔证明双重支付的“交易”,将其加入池 A,广播出去,然后继续工作。

If it contains a double spend, then they create a "transaction" which is a proof of double spending, add it to their pool A, broadcast it, and continue work.

不需要这样报告“双重支付证明”。如果同一条链包含了两次支付,那么这个区块就无效,会被拒绝。

There's no need for reporting of "proof of double spending" like that. If the same chain contains both spends, then the block is invalid and rejected.

如果一个区块没有足够的工作量证明,也一样。该区块无效,会被拒绝。没有必要就此传播报告。每个节点都能看出这一点,在转发之前就将它拒绝。

Same if a block didn't have enough proof-of-work. That block is invalid and rejected. There's no need to circulate a report about it. Every node could see that and reject it before relaying it.

如果有两条竞争的链,各自包含同一笔交易的不同版本,一个试图把钱给某人,另一个试图把同一笔钱给别人,那么判断哪次支付有效,就是整个工作量证明链的作用。

If there are two competing chains, each containing a different version of the same transaction, with one trying to give money to one person and the other trying to give the same money to someone else, resolving which of the spends is valid is what the whole proof-of-work chain is about.

我们不是在“留意”双重支付,以便发出警报并抓住作弊者。我们只是裁定哪次支付有效。交易接收方必须等待几个区块,确保这个裁定有时间完成。想作弊的人尽可以尝试同时进行双重支付,最终也只会在几个区块之内,让其中一次支付有效,其他的无效。一旦主链中已经有一次支付,之后任何双重支付都会立即被拒绝。

We're not "on the lookout" for double spends to sound the alarm and catch the cheater. We merely adjudicate which one of the spends is valid. Receivers of transactions must wait a few blocks to make sure that resolution has had time to complete. Would be cheaters can try and simultaneously double-spend all they want, and all they accomplish is that within a few blocks, one of the spends becomes valid and the others become invalid. Any later double-spends are immediately rejected once there's already a spend in the main chain.

即使更早的支付尚未上链,只要它已经在所有节点的池中,那些已有第一次支付的节点就都会拒绝第二次支付。

Even if an earlier spend wasn't in the chain yet, if it was already in all the nodes' pools, then the second spend would be turned away by all those nodes that already have the first spend.

引用的来信Ray Dillinger来源 ↗

如果新链被接受,他们就放弃添加当前环节,将池 L 中的所有交易放回池 A(连同开始工作以来收到或创建的交易),从池 A 中删除那些已经属于新链某个环节的交易记录,然后重新开始工作,尝试延长新链。

If the new chain is accepted, then they give up on adding their current link, dump all the transactions from pool L back into pool A (along with transactions they've received or created since starting work), eliminate from pool A those transaction records which are already part of a link in the new chain, and start work again trying to extend the new chain.

对。每当有新交易到来时,他们也会刷新,所以 L 基本上随时都包含 A 中的所有内容。

Right. They also refresh whenever a new transaction comes in, so L pretty much contains everything in A all the time.

引用的来信Ray Dillinger来源 ↗

使用 CPU 密集型数字签名算法,为包含新区块 L 的链签名。

CPU-intensive digital signature algorithm to sign the chain including the new block L.

这是 Hashcash 式的 SHA-256 工作量证明(零的部分原像),不是签名。

It's a Hashcash style SHA-256 proof-of-work (partial pre-image of zero), not a signature.

引用的来信Ray Dillinger来源 ↗

有没有一种机制,确保这条“链”不会完全由最快的 3 或 4 个节点添加的环节组成?因为广播的交易记录很容易漏掉那 3 或 4 个节点,如果漏掉了,而这些节点继续主导这条链,那笔交易可能永远不会被加入。

Is there a mechanism to make sure that the "chain" does not consist solely of links added by just the 3 or 4 fastest nodes? 'Cause a broadcast transaction record could easily miss those 3 or 4 nodes and if it does, and those nodes continue to dominate the chain, the transaction might never get added.

如果你把它想成 CPU 密集型数字签名,可能就会以为这是一场争先完成耗时操作的竞赛,最快的总会获胜。

If you're thinking of it as a CPU-intensive digital signing, then you may be thinking of a race to finish a long operation first and the fastest always winning.

工作量证明是 Hashcash 式的 SHA-256 碰撞查找。这是一个无记忆过程,每秒进行数百万次哈希,每次都有很小的概率找到一个答案。最快的 3 或 4 个节点的优势,只会与它们占总 CPU 算力的比例相称。任何人在任何时刻找到答案的概率,都与其 CPU 算力成正比。

The proof-of-work is a Hashcash style SHA-256 collision finding. It's a memoryless process where you do millions of hashes a second, with a small chance of finding one each time. The 3 or 4 fastest nodes' dominance would only be proportional to their share of the total CPU power. Anyone's chance of finding a solution at any time is proportional to their CPU power.

系统会有手续费,因此节点有动力尽可能接收并纳入所有交易。当生成的币总量达到预定上限时,节点最终将完全由手续费获得报酬。

There will be transaction fees, so nodes will have an incentive to receive and include all the transactions they can. Nodes will eventually be compensated by transaction fees alone when the total coins created hits the pre-determined ceiling.

引用的来信Ray Dillinger来源 ↗

此外,向链上添加一个环节所需的工作量,应该随着前一周添加到该链的环节数而变化(同样呈指数变化),从而严格控制币的生成速度(以及通货膨胀)。

Also, the work requirement for adding a link to the chain should vary (again exponentially) with the number of links added to that chain in the previous week, causing the rate of coin generation (and therefore inflation) to be strictly controlled.

对。

Right.

引用的来信Ray Dillinger来源 ↗

要让它能够扩展,就需要币的合并机制。需要有一种“可证明”的交易,让某人作废十个单枚的币,再创建一个面额为十的新币,等等。

You need coin aggregation for this to scale. There needs to be a "provable" transaction where someone retires ten single coins and creates a new coin with denomination ten, etc.

每笔交易都是这样的。见第 9 节,金额的合并与拆分。

Every transaction is one of these. Section 9, Combining and Splitting Value.

Satoshi Nakamoto

Satoshi Nakamoto

来源

阅读字号

选择适合你的字号,之后阅读会继续使用。