比特幣的每個節點是否知道全網發生的每一筆交易?
是的,全網知道。有人需要支付,就會把這條信息廣播給與自己相連的節點,然后再擴散到全網的每一臺全節點,每一個都在對外廣播,傳遞速度就以指數方式在擴散,擴散到全網的時間只需要幾秒鐘。這些交易在每次擴散前都會被驗證,確保沒有一幣多花的情況、公鑰正確對應于地址,且公鑰能解密私鑰簽名,這些條件都要滿足。驗證通過的交易會存在每臺節點的內存中,等待被添加到區塊中。
為什麼要設置一道數學難題?
如果確認一個區塊太容易,那麼每臺電腦都可以獨立完成交易確認,相互之間也就不存在共同的目標,賬本就不會統一。基于求解數學難題的方法,可以構建一個最長的鏈條,即使出現局部分叉也會最終統一。另外,設置數學難題可以防止系統中的一些人制造假賬。這基于對全網計算機中大多數的信任,只要大多人是可信的,只要他們更快求解出答案來,假賬所在鏈條則不能成為最長的鏈條,最終會被誤采納了假賬區塊的節點拋棄。
比特幣在花費時,為什麼要全部花掉?
這是中本聰的一種設計。比特幣在接收轉賬時,可以接收任意金額,但是如果要花掉一個地址上的比特幣,則需要悉數轉出,除了交易對方收到的之外,其余的會轉給自己的舊地址或者新地址。其意圖是為了讓比特幣在消費時,銷毀舊幣,產生新幣。這樣的好處是減少了一幣多花的可能,壞處是可能有更好的方法可以避免這樣的復雜操作。在白皮書中他曾寫到:
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直連的方式,給交易對方發送交易信息即可。這條信息在正常網速下會立即到達。交易信息會被支付方的私鑰簽名,然后再用接收方的公鑰加密,同時附上支付方的公鑰。這樣就在密碼學上保證了雙方明確知道這筆交易是關于對方的,實際上完全收到了支付的信息。不過這筆支付仍然需要全網的確認,所以還需要再等一小時,你才能認為這筆交易到賬。
交易能否取消?
一筆發出去的交易不會不被取消,但是如果這筆交易的手續費非常低,而網絡上的交易量很大的情況下,這筆交易可能會被遺忘。也就是說沒有任何一個節點愿意把它打包進區塊。這種情況下,這筆交易最終相當于沒有發生。
如果真的發錯了交易,有一種折中的辦法取消交易,那就是支付一筆大的多的手續費,這筆新的支付更可能被快速收入區塊,而一旦新的支付進入區塊,舊的交易也就作廢了。
什麼是分叉?
分叉可能出現在幾種情況下。一種是人為的,某個節點修改規則,主動與舊的系統不兼容,比如說設定一個更大的區塊大小的上限,這時愿意追隨這個新節點規則的節點們,就自然組成了一個新的網絡。
還有一種分叉是來自于兩個節點打包成功的時間非常靠近,然后各自把新區塊的信息廣播了出去,各自又有了新的節點認可其工作,不同的節點于是依照不同的上家繼續延伸,這也形成了分叉。但是用不了多久,所有的區塊都會收到不同來源的新區塊,然后各自默契地判斷哪條鏈條最長,從而丟掉短的分叉。
發文者:鏈站長,轉載請註明出處:https://www.jmb-bio.com/4271.html