网站设置
首页 >百科 >比特币细节答疑

比特币细节答疑

2020-04-17 15:16 标签: 比特币细节答疑

比特币的每个节点是否知道全网发生的每一笔交易?

是的,全网知道。有人需要支付,就会把这条信息广播给与自己相连的节点,然后再扩散到全网的每一台全节点,每一个都在对外广播,传递速度就以指数方式在扩散,扩散到全网的时间只需要几秒钟。这些交易在每次扩散前都会被验证,确保没有一币多花的情况、公钥正确对应于地址,且公钥能解密私钥签名,这些条件都要满足。验证通过的交易会存在每台节点的内存中,等待被添加到区块中。

为什么要设置一道数学难题?

如果确认一个区块太容易,那么每台电脑都可以独立完成交易确认,相互之间也就不存在共同的目标,账本就不会统一。基于求解数学难题的方法,可以构建一个最长的链条,即使出现局部分叉也会最终统一。另外,设置数学难题可以防止系统中的一些人制造假账。这基于对全网计算机中大多数的信任,只要大多人是可信的,只要他们更快求解出答案来,假账所在链条则不能成为最长的链条,最终会被误采纳了假账区块的节点抛弃。

比特币在花费时,为什么要全部花掉?

这是中本聪的一种设计。比特币在接收转账时,可以接收任意金额,但是如果要花掉一个地址上的比特币,则需要悉数转出,除了交易对方收到的之外,其余的会转给自己的旧地址或者新地址。其意图是为了让比特币在消费时,销毁旧币,产生新币。这样的好处是减少了一币多花的可能,坏处是可能有更好的方法可以避免这样的复杂操作。在白皮书中他曾写到:

A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent.

他提示了在现实社会中的一种设想,造币厂对每一笔支付,可以通过销毁旧币,创造新币的方式来避免同一笔资金分别支付给两人。首先进来的交易,因为钱币已经被销毁了,后进来的如果是同样的钱币,那一定是伪造的。他通过这个类比来设计了比特币中的安全机制。

他也提到分开来支付可能更繁琐。白皮书中有写到

Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer.

交易的对方什么时间知道我已经付款了?

最晚几秒内就可以知道。如上所述,一笔有效的交易会在几秒内传递至全网。

另外,还有一种更快的方式。中本聪在设计比特币的初期,有一套直接付款给对方的方式。这在白皮书的论文摘要中有提出,在邮件回复中也有过解释。具体的是如果知道对方的IP地址,那么就通过IP直连的方式,给交易对方发送交易信息即可。这条信息在正常网速下会立即到达。交易信息会被支付方的私钥签名,然后再用接收方的公钥加密,同时附上支付方的公钥。这样就在密码学上保证了双方明确知道这笔交易是关于对方的,实际上完全收到了支付的信息。不过这笔支付仍然需要全网的确认,所以还需要再等一小时,你才能认为这笔交易到账。

交易能否取消?

一笔发出去的交易不会不被取消,但是如果这笔交易的手续费非常低,而网络上的交易量很大的情况下,这笔交易可能会被遗忘。也就是说没有任何一个节点愿意把它打包进区块。这种情况下,这笔交易最终相当于没有发生。

如果真的发错了交易,有一种折中的办法取消交易,那就是支付一笔大的多的手续费,这笔新的支付更可能被快速收入区块,而一旦新的支付进入区块,旧的交易也就作废了。

什么是分叉?

分叉可能出现在几种情况下。一种是人为的,某个节点修改规则,主动与旧的系统不兼容,比如说设定一个更大的区块大小的上限,这时愿意追随这个新节点规则的节点们,就自然组成了一个新的网络。

还有一种分叉是来自于两个节点打包成功的时间非常靠近,然后各自把新区块的信息广播了出去,各自又有了新的节点认可其工作,不同的节点于是依照不同的上家继续延伸,这也形成了分叉。但是用不了多久,所有的区块都会收到不同来源的新区块,然后各自默契地判断哪条链条最长,从而丢掉短的分叉。