白皮书非常清楚地说明了什么是节点:
5. 网络
运行该网络的步骤如下:
节点始终都将最长的链条视为正确的链条,并持续工作和延长它。如果有两个节点同时广播不同版本的新区块,那么其他节点在接收到该区块的时间上将存在先后差别。当此情形,他们将在率先收到的区块基础上进行工作,但也会保留另外一个链条,以防后者变成最长的链条。该僵局(tie)的打破要等到下一个工作量证明被发现,而其中的一条链条被证实为是较长的一条,那么在另一条分支链条上工作的节点将转换阵营,开始在较长的链条上工作。
比特币当中的节点无一例外都是是矿工。任何不挖矿的人运行的都只是一个钱包而已。
人们难以明白的地方是在比特币当中重要的是来自于区块的共识。有种说法是你需要检视自己的节点以便知晓交易正在进行,这是毫无意义的无稽之谈,交易成功是因为它已被合并到一个区块中。你要将一笔交易打包进区块的唯一办法是要让节点接受它。这就是系统在“挖”你的交易。
傻坐着看着你自己的系统毫无意义。如果你没有创建新的区块,你对网络产生不了任何影响,你既不协助广播区块,你也不协助验证区块。
比特币历史上除了矿工能够拒绝一个区块之外,从来没有过任何交易或任何区块因为其他的情况被拒绝。
关键是,如果你不创建区块,你只能是一个跟随节点。在这一点上,我将再次强调一个节点是由挖矿服务器控制的系统。它创建新区块。如果你看看早期的代码,它写得非常清楚。 [1]
这在代码注释中有详细说明 [2]:
个人认为,评论所说的“节点将交易打包成区块”等信息是相当清楚的。如果你不挖矿,你就不是一个节点。
这应该是很直观的。将你的交易从你的设备传递到采矿节点之间将会经过数跳,而在比特币网络中几乎没有多于两跳的情况,除非要经过那些与挖矿无关的系统。
让我们做一些思考练习。
试想你有一台不挖矿的计算机,它正在运行一个钱包。你收到一个你认为无效的交易,会发生什么情况?基本上,你不会将其转发到任何其他系统。
事实上,你啥也没做。
如果你收到一个无效的区块呢?同样,你根本不广播它,你并不告诉其他节点说这是一个无效区块,你所做的只是忽略它。这似乎是现在人们难以理解的一点,你什么都不做你就什么也没有改变。如果你正在挖矿,并且你拒绝了一个区块,这意味着你不会在这个区块之上继续挖矿并选择一个备用区块。如果你不挖矿,你不用选择一个备用区块。你不创建区块,所以除了你被告知的信息之外,你不会广播任何东西。
“人们必须要运行树莓派全节点”这种半吊子推理存在的明显谬误就是,它们(树莓派节点)什么都不做。
除非你是矿工,否则你接不接受这笔交易并不重要。非矿工在区块链的架构中没有任何发言权。所谓的验证者这种想法只有在你是矿工的条件下才有意义。如果你愿意,你可以审计区块链,但没有理由为此永远保留副本。一旦你确认了你已经记录的最新一个区块的哈希值,你就可以从那一刻剪枝前序区块。因为即使你保留了所有陈旧交易并反复验证它们,你也根本没有获得任何安全性的提升。
重要的是那些矿工。
现在,我们需要了解的第一件事是所有加密系统都是概率性的。密码系统和任何现代信息安全系统都基于概率信息工作。那些讨论比特币概率系统的所谓的专家并不理解强加密是概率性的。
我认为现在很清楚的是,你只要下载区块头而无需成为一名矿工就知道哪些交易是无效的了。 Blockstream一直试图告诉我们的“如何运行一个全节点”的当中的“节点”的意思与中本聪在白皮书中所说的内容是直接相冲突的。
我认为现在是时候开始考虑所有这些变化以及人们在试图劫持网络时寻求的是什么。
[1] 见以下链接:
https://github.com/trottier/original-bitcoin/blob/92ee8d9a994391d148733da77e2bbc2f4acc43cd/readme.txt#L34
并注意关于区块验证的“Miner”函数中的评论:
https://github.com/trottier/original-bitcoin/blob/92ee8d9a994391d148733da77e2bbc2f4acc43cd/src/main.cpp#L2133
https://github.com/trottier/original-bitcoin/blob/92ee8d9a994391d148733da77e2bbc2f4acc43cd/src/main.cpp#L2333
[2] https://github.com/trottier/original-bitcoin/blob/92ee8d9a994391d148733da77e2bbc2f4acc43cd/src/main.h#L795
所以说只有矿工才是节点。
作者: