03.06 比特幣是一段算法,如果兩個人同時算出來了,那一個比特幣就變成兩個了嗎?

元晨木地板


這個問題是可以討論的,首先我先引用比特幣的生成流程:

生成比特幣地址的一般流程:
隨機選取一個32字節的數、大小介於1~0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141之間,作為私鑰
使用橢圓曲線加密算法(ECDSA-secp256k1)計算私鑰所對應的非壓縮公鑰。(共65字節,1字節0x04,32字節為x座標,32字節為y座標);
計算公鑰的SHA-256哈希值;
取上面結果,計算RIPEMD-160哈希值;
取上面結果,前面加入地址版本號(比特幣主網版本號“0x00”);
取上面結果,計算SHA-256哈希值;
取上面結果,再計算一下SHA-256哈希值;
取上面結果的前4個字節(8位十六進制);
把這4個字節加在第五步的結果後面,作為校驗;
用base58表示法變換一下地址(最常見的比特幣地址形態)。
大概會生成類似這種字符串:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

從上面這個流程可以看出第一步選取私鑰時,就有32個字節,如果把這些換到二進制是256位,大家知道二進制中只有0和1兩個數字,如果256位組合,可能的結果是2的256次方,這個數的大小甚至可以與宇宙的大小相提並論,再由後面的計算,最後得到結果。這個結果在現行的時空中可以說是唯一確定的。

如何講是確定的,就好比運動是絕對的,靜止是相對的一樣,相同是相對的,但是這個相同的概率無限的小,根據數學統計學的規律就可以忽略為不可能相同。這是最嚴謹的數學解釋,也就是說比特幣在生成過程中默認為不會被兩個人同時算出來。

但是凡事都有奇蹟,萬一真的有這麼巧的事被趕上了,現如今還沒有對此的共識該如何處理。我對此的看法是如果真的有這種情況出現,最可能的操作就是根據算出的時間來判斷比特幣的歸屬。況且一個比特幣的價值對於整個比特幣行業來講真的是滄海一粟,建立一個比特幣的計算場投資多則上千萬,一個比特幣的價值也不過十萬,面對如此小的概率和如此小的相對成本,假使真的發生也不會對比特幣行業造成地震式的撼動。


鎂客網


首先我們要了解比特幣(BTC)地址是怎麼算出來的。BTC是建立在加密學基礎上,利用橢圓加密算法(ECDSA)來產生BTC的私鑰和公鑰。由私鑰可以計算出公鑰,公鑰的值經過一系列數字簽名運算就會得到BTC地址。簡單來說就是我的門卡經過我的折騰,已經加密了很多層,現在去開很多道被鎖的門,有一定概率開門。

生成比特幣地址的一般流程:

  1. 隨機選取一個32字節的數、大小介於1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之間,作為私鑰;

  2. 使用橢圓曲線加密算法(ECDSA-secp256k1)計算私鑰所對應的非壓縮公鑰。 (共65字節, 1字節 0x04, 32字節為x座標,32字節為y座標);

  3. 計算公鑰的 SHA-256 哈希值;

  4. 取上面結果,計算 RIPEMD-160 哈希值;

  5. 取上面結果,前面加入地址版本號(比特幣主網版本號“0x00”);

  6. 取上面結果,計算 SHA-256 哈希值;

  7. 取上面結果,再計算一下 SHA-256 哈希值;

  8. 取上面結果的前4個字節(8位十六進制);

  9. 把這4個字節加在第五步的結果後面,作為校驗;

  10. 用base58表示法變換一下地址(最常見的比特幣地址形態)。

大概會生成類似這種字符串:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa由於這種算法BTC的總量會超過2的128次方,這個數量據說比宇宙裡所有的分子數都多。所以如果要確切說明是否重複,理論上是可能重複的,但是概率非常非常的小,已經小到可以忽略不計。所以在密碼學安全的角度上說“BTC私鑰是唯一的”這個說法是正確的。


如果你對學習人工智能和科技新聞感興趣,可以訂閱我的頭條號,我會在這裡發佈所有與算法、機器學習以及深度學習有關的有趣文章。偶爾也回答有趣的問題,有問題可隨時在評論區回覆和討論,看到即回。

Hacker


同時挖出來的情況是很常見的,你手中有當前交易的所有區塊數據,如果你挖到了,你自然是把你的區塊數據放在整體賬本的最後,並且把這一賬本向整個網絡廣播。

雖然每個區塊只有一個父區塊,但在某些情況下一個區塊可以暫時擁有兩個子區塊。這種分叉狀態出現時,一般是兩個礦工都在短時間內發現了工作量的解答,然後將所添加的傳播到臨近網絡中去,其他節點便慢慢形成兩種版本(子區塊)的區塊鏈。區塊鏈中規定,這種情況下的判定條件是選擇工作總量最大的那條子區塊。

如圖所示,雖然有暫時產生了兩個子鏈,但是被後面承認較少的那條子鏈將被捨棄,成為孤鏈。所以即使暫時有兩個人同時算出來,那麼最終也只有一個人會被記錄在整個賬本上,從而得到比特幣。


區塊鏈每日解讀


如果是兩個人同時算出來比特幣,那這個遊戲會繼續下去,直到分出勝負,比特幣歸勝利一方。

打個比方說。

拳手A和拳手B在爭奪冠軍獎牌,獎牌(比特幣)只有一個,只能歸勝利的一方。

在戰鬥過程中可能會出現平局,那就再開始下一局比拼,如果還是平局,就再打一局,如果一直平局就一直打下去,直到一方勝利,他就可以獲得獎牌(比特幣)。失敗一方之前所做的所有努力等於都是無用功了。

比特幣的計算過程非常的複雜,所以同時計算到比特幣的可能非常小,但不是沒有,如果出現的話就會產生區塊分叉,保留2個區塊分叉,(沒有產生比特幣)但繼續比拼下一次計算,如果一方先算出區塊,就會捨棄掉短的分叉區塊。長的區塊就會產生比特幣了。


三豐數碼及手遊


我沒被邀請,也來回答一下。

看到有人說這是個哲學問題,不對哦,技術問題,很明確的技術問題。

比特幣全網算力目前是非常強大的,每個礦機都堪比幾十臺普通PC機的算力。進行計算的時候,出現兩臺礦機同時計算出區塊是有可能的。

但有的回答說計算出來的結果值是一樣的,這個幾乎是不可能的,區塊鏈算法是256位的加密,這個數字之大,不可想象,比地球所有的原子還多出好幾個數量級。因此不可能計算出來的值是相同的。

可能有的人還是不太理解比特幣計算怎麼那麼費勁?它的算法不是很難計算出一個值,難在根據全網的算力,要求計算得到的結果必須足夠小(也就是前面若干位是0)。雖然一瞬間就能計算出一個,但大多數幾乎都不被其他曠工認可,就拋棄了重新算。

~~~~~~~ 回到正題 ~~~~~~

如果出現了兩個礦機同時計算出來怎麼辦?

目前的解決辦法是兩個結果的區塊都加到鏈的結尾。

納尼?這樣區塊鏈不就分叉了?

是的,分叉了,然後接著計算下一個區塊,這個時候基本上就不太可能再同時計算出來了吧?

加入同時計算出來了,就繼續加到後面,就出現了2個區塊長度的分叉。

再繼續算第3個,這時候還同時計算出來就太不可能了。

理論上,6個區塊分叉的長度就絕對不可能繼續同時計算出來了。這時候,短的那個分叉就會被拋棄,長的那個分叉被保留。

可以看到,這時候又稱為一根鏈了。

—————————————

有人問了,那豈不是會有交易被拋棄,也就是失敗了?

實話是說,這是比特幣的硬傷,就是會這樣。

因此,國際上的大宗比特幣交易要等到1個小時以後才可確認交易成功。

情景就是:一個沙特的酋長和一個美國的大亨,做買賣。

酋長:交錢,好嘞!

大亨:收錢,好嘞。

大眼瞪小眼,1個小時後,大亨和酋長同時:噓,終於交易成功了。


老崔閒聊


其實,在比特幣最初的機制裡,已經考慮到了這個問題。

比特幣的本質是一個廣播和管理賬單系統。每一本標準客戶都保存著有史以來所有的比特幣交易清單。

每一筆賬單都會把前一份賬單縮小成十分之一的賬單,放在自己的一個角落裡。這樣就形成了一個賬單鏈條。如果兩個人同時算出了一個比特幣,那麼如何算這個比特幣歸誰呢?

歸那個其他所有用戶都公認賬單鏈條最長的那一個。畢竟當新的比特幣被挖出來,那麼所有的比特幣賬號會先停下,把這筆賬記錄並縮小到十分之一,放在自己的角落裡。

也就是說,如果有兩個賬戶同時挖到了比特幣,那麼誰的挖幣信息先被大家承認,誰就贏得了這個比特幣。

而在絕對意義上,是不存在大家同時承認兩個賬號挖到一個比特幣的,這才現實操作中,更多地是看電腦的隨機性。


通靈半藏


感覺很多回答就是百度一下然後就直接放上去了。

BTC本身並不是一段算法,只能叫做一個記錄。BTC依賴的區塊鏈技術才可以稱為一個算法或者一套機制。礦工通過計算一個目標Hash值來獲得產生新的塊獲得獎勵,這個獎勵就是在新的塊頭部寫上我有12.5個BTC(這個獎勵的數量會在每四年左右減半),然後在新的塊中記錄這個塊產生前發生的所有BTC交易。BTC有一個共識機制POW(工作量證明),其中有一條就是所有節點只相信當前最長的鏈,當兩個礦機同時算出一個目標Hash(有很多滿足條件的值)時BTC的鏈就會產生分叉,各子生長。從理論上計算當一個塊後面又產生六個塊時這個塊就幾乎不可能被偽造,所以同時算出的那個塊誰先增長到六個誰就會被完全確認,另一個塊將被大多數節點丟棄,最後被全部節點丟棄!這樣一來BTC的鏈只會相信計算力最大的那部分人的鏈!兩個相同的塊同時增長到六個的概率理論上可以忽略,從BTC出現到現在都沒有過正常分支同時達到六個的情況,以後也不會出現!

BTC所依賴的區塊鏈技術本身是很有意思的,但是BTC本身只是一個記錄而已,完全是一群人自High,終究沒有什麼實際價值。炒幣需謹慎,不要太瘋狂!


小軍93776546


其實本不想回答的,要碼好多字,但是看了一些回答簡直不知所云,有的甚至把地址的生成方式給了出來,我就問你這個跟題主問的有啥關係?

首先比特幣並不是所謂的一段算法,而是UTXO(Unspent Transaction Output),也就是未經花費的輸出。比特幣的交易是由輸入和輸出組成的,輸入就是UTXO,輸出也是UTXO,所謂的交易就是將UTXO的使用權轉給他人,一個區塊包含一段時間內的所有交易。那麼UTXO是從哪裡來的呢?其實就是由礦工挖礦得來的。那麼什麼是挖礦,什麼是礦工呢?挖礦其實就是解決一道數學難題,礦工就是解決這道難題的機器(一般是礦機)。解決這道難題之後,礦工將打包好的區塊廣播到網絡上,其他礦工驗證無誤之後就將這個區塊添加到區塊鏈上,同時區塊鏈的獎勵機制就獎勵給解決問題的礦工一定的比特幣 。

雖然數學難題很難,但是也不排除兩個礦工同時解決這道難題,但是由於網絡延遲或者距離等原因,其他的礦工節點不可能同時收到兩個打包同一時間段的區塊,可能一個節點保存了a區塊,一個節點保存了b區塊。區塊鏈網絡規則定義收到一個時間段的區塊之後,不再接收同一時間段的區塊,直接忽視,比如一個節點保存了a區塊之後就直接忽略b區塊。但是這樣就會造成區塊鏈的分叉,此時要注意,區塊鏈雖然分叉了,但是每個節點保存的仍只是一條單鏈。區塊鏈網絡規則又定義所有節點相信最長的那一條鏈,當一個節點發現自己保存的那條鏈不是最長的鏈,就捨棄自己的那條鏈,選擇保存最長的那條鏈,這樣網絡中所有的節點就保存了相同的一條鏈。

此時又會有人問了,那我們都相信了a區塊,那挖出b區塊的礦工怎麼辦呢?那對不起,他啥也沒有。但是現在共識算法與獎勵機制也做出了很多改變,比如有的區塊鏈就規定付出算力的礦工也會給出適當的獎勵。區塊鏈中涉及的東西太多了,三言兩語很難講清,同時我的水平也有限,可能會有許多問題。如果你真的想懂的話推薦你看一下中本聰的那篇論文:《Bitcoin: A Peer-to-Peer Electronic Cash System》以及一本講比特幣的書:《精通比特幣》,視頻的話可以看一下國內做的《區塊鏈100問》,希望能夠幫助到你。


謝三秋


朋友,不必看複雜的技術解釋,在BT中有兩個關鍵步驟:‘宣稱’、“認證”。簡單說不是你說挖到幣就有幣,必須在網絡中得到一定數量用戶運算認證後你才正真意義擁有BT,在協議中有時間定義,你在宣稱的同時,礦坑會向全球礦工發佈消息,標註哪個區塊在哪個時間被髮掘,如果此時你正在運算這個區塊,系統會自動暫停這個區的運算,直到接到通知是否被確認。其次,這個時間值很長,換而言之很精確,簡而言之從概率論上排除“同時”。懂了吧


莫名40004557



分享到:


相關文章: