Bitcoin Forum
May 10, 2024, 06:09:55 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1] 2 3 4 5 »  All
  Print  
Author Topic: Bitcoin 高質技術討論專區  (Read 8430 times)
This is a self-moderated topic. If you do not want to be moderated by the person who started this topic, create a new topic.
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
June 15, 2014, 03:55:01 PM
Last edit: June 16, 2014, 07:46:12 AM by jl2012
 #1

由於本區討論質素日益低下, 本人決定設立一系列之高質討論專區, 並由本人直接管理. 本人亦不會再參與中文區內任何其它討論

規則:

1. 本專區由本人管理,  違反規則者可不作警告直接刪貼, 如不喜歡者請不要在此發言
2. 本專區只限討論技術問題. 投資, 政策等題目請勿在此發言
3. 本專區絕不容忍刷貼及一切軟硬廣告, 將直接刪除
4. 任何轉貼文章, 必須附上原出處之連結, 經提醒後不改正者可被刪除
5. 任何翻譯文章, 必須附上原語言文章之連結, 經提醒後不改正者可被刪除
6. 發佈不實信息, 被指出後仍重覆發佈, 視情況可被刪除
7. 有關山寨幣的技術問題, 如非與Bitcoin直接有關, 可被刪除
8. 本專區歡迎任何人發言, 但對於Activity愈低者, 規則會執行得愈嚴格

本人文章如註明CC BY-NC-SA 3.0, 表示轉載者必須引述本人名稱(jl2012@bitcointalk), 不得用於商業用途, 分享時亦必須以相同條款分享. 具體條款見: http://creativecommons.org/licenses/by-nc-sa/3.0/ . 如需用作商業用途, 或以其它條款重新發佈, 請先與本人聯絡

如果你喜歡我的原創技術文章, 請考慮捐款, 謝謝!

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
"With e-currency based on cryptographic proof, without the need to trust a third party middleman, money can be secure and transactions effortless." -- Satoshi
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1715321395
Hero Member
*
Offline Offline

Posts: 1715321395

View Profile Personal Message (Offline)

Ignore
1715321395
Reply with quote  #2

1715321395
Report to moderator
1715321395
Hero Member
*
Offline Offline

Posts: 1715321395

View Profile Personal Message (Offline)

Ignore
1715321395
Reply with quote  #2

1715321395
Report to moderator
1715321395
Hero Member
*
Offline Offline

Posts: 1715321395

View Profile Personal Message (Offline)

Ignore
1715321395
Reply with quote  #2

1715321395
Report to moderator
innocent93
Legendary
*
Offline Offline

Activity: 896
Merit: 1000



View Profile
June 15, 2014, 04:02:08 PM
 #2

 Smiley非常好的解决方案,我一个支持这个独立贴子。
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
June 15, 2014, 04:54:16 PM
Last edit: June 16, 2014, 07:46:59 AM by jl2012
 #3

今天有人問到為什麼有些地址是3開頭, 例如這個 https://blockchain.info/address/3QRhucKtEn5P9i7YPxzXCqBtPJTPbRFycn

這叫做Pay-to-script-hash, P2SH, 是2012年才出現的新功能.

傳統的1開頭地址, 在2009年就有了, 其實叫做Pay-to-pubkey-hash, P2PH

所謂地址, 其實就是一些條件, 說明收款人只要做到某些操作, 就有權把錢送出去. 1開頭的地址, 就是說收款人需要提供一個特定的數碼簽名, 就可以把錢送出去, 而這個簽名只有錢包的持有人才能做到. 這個大家都應該不陌生.

但P2PH只能指定一個簽名, 不能做到更複雜的條件. 我們可能希望有一個賬號, 要求三人之中有兩人簽署才能用錢. 這叫做multi-sig, 多重簽名. 要求N人之中有M人簽署的multi-sig就叫M-of-N multi-sig, M 小於或等於 N.

其實多重簽名在2009年一開始就存在了, 但若要指定一個multi-sig的交易, 地址會變得很長, 因此一直沒有流行起來.

但multi-sig明顥是一個很有用的功能, 因此在2012年引入了P2SH功能. 用了P2SH, 無論用錢的條件有多複雜, 都可以用一個固定長度 (約30多字母) 的地址來指定, 其中包括N為不多於15的M-of-N multi-sig. 更複雜的條件都可以, 例如要動公司的錢包, 可以由老闆的簽名, 或四名經理其中三名的簽名 (1 or 3-of-4); 要動用小孩的錢包, 要由小孩簽名, 加上父母其中一方的簽名 (1 and 1-of-2), 理論上都可以做到

但很可惜, 由於一直以來的應用都是基於最簡單的1地址, 3地址經過兩年仍沒有流行起來. 不過情況會在本年開始轉變, 已經有在線錢包應用P2SH: https://greenaddress.it/en/ . 用了P2SH multi-sig的錢包, 即使有關服務跑路了, 也不能帶著錢走; 就算服務被黑了, 只要客戶沒被黑, 黑客也拿不到一分錢. 本人相信P2SH會在兩年內帶來很多全新應用.

(C) jl2012@bitcointalk 2014. CC BY-NC-SA 3.0  http://creativecommons.org/licenses/by-nc-sa/3.0/

如果你喜歡我的原創技術文章, 請考慮捐款, 謝謝!

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
June 15, 2014, 04:57:24 PM
 #4

本人盡量每一兩天講一個技術題目. 如果有想了解的題目可以提出. 謝絕沒意義的回貼如"長知識了", "謝謝  Grin"等

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
zcxvbs
Hero Member
*****
Offline Offline

Activity: 630
Merit: 500



View Profile
June 15, 2014, 05:04:13 PM
 #5

本人盡量每一兩天講一個技術題目. 如果有想了解的題目可以提出. 謝絕沒意義的回貼如"長知識了", "謝謝  Grin"等
请详细解释下所谓51%攻击,和51%攻击未来对比特币发展的影响 Smiley
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
June 15, 2014, 05:43:13 PM
Last edit: June 15, 2014, 05:57:15 PM by jl2012
 #6

本人盡量每一兩天講一個技術題目. 如果有想了解的題目可以提出. 謝絕沒意義的回貼如"長知識了", "謝謝  Grin"等
请详细解释下所谓51%攻击,和51%攻击未来对比特币发展的影响 Smiley

這問題可以寫成一個系列了. 要正確了解51%攻擊, 首先要正確了解挖礦

挖礦可能是bitcoin最神奇的一環, 讓人可以在家裏印鈔, 以前做夢也想不到. 在Bitcoin最早的幾年, 挖礦是很多人開始參與bitcoin的原因. 但10個人挖礦, 正確了解挖礦的恐怕1個也沒有

挖礦是Satoshi最重要的發明, 是Bitcoin的靈魂, 挖礦的真正目的是解決去中心化電子貨幣雙重花費 ("雙花") 的問題, 其"印鈔"功能只是次要.

把1元當2元花, 就是雙花; 如果任何人都可以隨便雙花, 任何貨幣都不會有價值. 在傳統金融是靠可信的中心機構防止雙花. 例如央行是唯一可以印鈔的機構, 你把鈔票覆印, 就是雙花, 在中國要判死刑. 另一例子是銀行支票, 例如你有100元在銀行賬戶, 其實你是可以無限發出支票, 但當發出支票的總額高於100元, 那就叫空頭支票, 也就是雙花; 銀行不會容許空頭支票兌現, 發出空頭支票也是犯法的.

Bitcoin也面臨相同問題. 由於Bitcoin傳送就只是一些數碼簽名, 錢包的持有人其實可以無限制把同一bitcoin發送給多於一個人, 情況就像是不斷簽空頭支票, 也就是雙花. 但bitcoin沒有中心機構, 防止雙花的工作就落在礦工身上了.

待續

( 在這個網頁, https://blockchain.info/double-spends , 你可以看到人們嘗試雙花的情況. 正如我上面所說, 嘗試雙花就和發空頭支票一樣容易, 任何人都可以做到. 但由於有挖礦保護, 這些雙花都不會成功, 各位不要聽信謠言 )

(C) jl2012@bitcointalk 2014. CC BY-NC-SA 3.0  http://creativecommons.org/licenses/by-nc-sa/3.0/

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
dorismak
Full Member
***
Offline Offline

Activity: 167
Merit: 100



View Profile
June 15, 2014, 08:08:05 PM
 #7

想问一个问题:比特币QT钱包的地址如何删除?删除以后这个地址还可以再分配吗?
innocent93
Legendary
*
Offline Offline

Activity: 896
Merit: 1000



View Profile
June 16, 2014, 12:33:40 AM
 #8

想问一个问题:比特币QT钱包的地址如何删除?删除以后这个地址还可以再分配吗?
地址一旦生成就没法删除吧,就算你删除客户端与否,地址对应的私钥已经存在,删除后可以随时通过私钥来导入。反正地址资源基本是用不尽的。
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
June 16, 2014, 02:40:45 AM
 #9

想问一个问题:比特币QT钱包的地址如何删除?

Bitcoin-QT (現稱Bitcoin Core) 是不容許刪除地址, 因為這十分危險, 可能令你損失金錢

如果你不想用某個錢包了, 最簡單的方法是把所有錢都發到另一個新錢包, 再把舊的離線保存好就可以了. 即使是空錢包也必須備份, 因為可能會有某些原因, 有人把錢再發去那錢包

Quote
删除以后这个地址还可以再分配吗?

我不肯定你"分配"的意思, 不過Bitcoin地址不是分配得來的. Bitcoin地址不像銀行賬號. 銀行的賬號, 是銀行分配給你的; 而Bitcoin地址是你自己在本地隨機產生出來的, 你甚至無需連線, 也可以產生一個Bitcoin地址

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
June 16, 2014, 05:02:26 AM
Last edit: June 16, 2014, 07:46:47 AM by jl2012
 #10

本人盡量每一兩天講一個技術題目. 如果有想了解的題目可以提出. 謝絕沒意義的回貼如"長知識了", "謝謝  Grin"等
请详细解释下所谓51%攻击,和51%攻击未来对比特币发展的影响 Smiley

這問題可以寫成一個系列了. 要正確了解51%攻擊, 首先要正確了解挖礦

挖礦可能是bitcoin最神奇的一環, 讓人可以在家裏印鈔, 以前做夢也想不到. 在Bitcoin最早的幾年, 挖礦是很多人開始參與bitcoin的原因. 但10個人挖礦, 正確了解挖礦的恐怕1個也沒有

挖礦是Satoshi最重要的發明, 是Bitcoin的靈魂, 挖礦的真正目的是解決去中心化電子貨幣雙重花費 ("雙花") 的問題, 其"印鈔"功能只是次要.

把1元當2元花, 就是雙花; 如果任何人都可以隨便雙花, 任何貨幣都不會有價值. 在傳統金融是靠可信的中心機構防止雙花. 例如央行是唯一可以印鈔的機構, 你把鈔票覆印, 就是雙花, 在中國要判死刑. 另一例子是銀行支票, 例如你有100元在銀行賬戶, 其實你是可以無限發出支票, 但當發出支票的總額高於100元, 那就叫空頭支票, 也就是雙花; 銀行不會容許空頭支票兌現, 發出空頭支票也是犯法的.

Bitcoin也面臨相同問題. 由於Bitcoin傳送就只是一些數碼簽名, 錢包的持有人其實可以無限制把同一bitcoin發送給多於一個人, 情況就像是不斷簽空頭支票, 也就是雙花. 但bitcoin沒有中心機構, 防止雙花的工作就落在礦工身上了.

待續

( 在這個網頁, https://blockchain.info/double-spends , 你可以看到人們嘗試雙花的情況. 正如我上面所說, 嘗試雙花就和發空頭支票一樣容易, 任何人都可以做到. 但由於有挖礦保護, 這些雙花都不會成功, 各位不要聽信謠言 )

(C) jl2012@bitcointalk 2014. CC BY-NC-SA 3.0  http://creativecommons.org/licenses/by-nc-sa/3.0/

任何擁有bitcoin的人, 都可以透過數碼簽署轉讓bitcoin. 如果張三想把他的1個Bitcoin轉讓給李四, 張三就要用他的私鑰 (錢包) 簽署以下訊息: “我張三同意把1個Bitcoin轉讓給李四”. 當全世界都看到這個簽署, 大家就會公認李四擁有1個Bitcoin, 而張三就不再擁有Bitcoin了. 然後李四也就可以用他的私鑰作簽署, 把Bitcoin再轉讓給其它人, 如此類推.

但問題是既然張三可以通過數碼簽署把Bitcoin轉讓給李四, 他也可以同時發出另一簽署把Bitcoin轉讓給王五, 那就等於張三可以無限生產Bitcoin, Bitcoin也不會再有價值.

Bitcoin通過一個所謂挖礦的方法來處理雙重花費的問題. 要理解挖礦, 先要理解雜湊函數 (Hashing algorithm)

雜湊函數有很多種, 其中Bitcoin挖礦採用了SHA256. 簡單而言, 雜湊函數可以把任意訊息轉化為一段固定長度的數字 (雜湊). 雜湊函數都有以下特性:
  • 1. 決定性 (Determinism), 輸入相同相同的訊息, 必會給出相同的雜湊;
  • 2. 偽隨機性 (Pseudo-random), 輸出的雜湊, 統計上和隨機雜訊無異;
  • 3. 不可逆性 (Irreversible), 不可能由雜湊算出原輸入訊息;
  • 4. 雪崩效應(Avalanche effect), 只要輸入的資訊有任何微少變動, 產生的雜湊就會出現完全不能預測的劇變.

利用雜湊函數, 人們可以把上述的“我張三同意把1個Bitcoin轉讓給李四”簽署轉化為一個雜湊. 人們也可以在上述的簽署後加上一個數字 (稱為nonce), 再計算雜湊; 基於雪崩效應, 隨著nonce的改變, 產生的雜湊就會完全不同. 挖礦的意思, 就是不停改變這個nonce, 直至算出來的雜湊小於一個大家都認同的數值 (雜湊本身就是一個數字), 這就成為一個有效的雜湊了. 由於偽隨機性, 沒有人可以在計算前知道什麼nonce可以得到有效的雜湊, 所以挖礦的人必須每一個nonce嘗試, 直至成功為止, 這過程沒有捷徑, 而且運算需要消秏能量, 因此這個有效雜湊是一個工作量證明 (Proof-of-work), 意思是能交出有效雜湊的人, 他必定曾經用電腦進行過一定份量的運算工作. 挖礦的意思, 就是挖礦的人 (礦工, miner) 必須以勞動才能找到有價值的東西 (即有效雜湊). 任何人只要有適當的電腦器材和網絡連接就能挖礦, 所以整個系統是去中心化的 (decentralized). 所謂的ASIC礦機, 其唯一作用就是不斷嘗試不同的nonce, 直至找到有效的雜湊

礦工可以同時為多個交易訊息挖礦, 他只需要把多個交易訊息串連起來, 在最後加上一個nonce並不斷嘗試, 也可以得到有效的雜湊, 這些交易訊息和nonce的組合稱為區塊 (Block). 但如果礦工為一些有矛盾的交易挖礦, 例如張三把同一個Bitcoin既給李四, 又給王五, 那其它人看到這個有矛盾的區塊就不會承認, 礦工就白做了. 因此有效的區塊除了要有有效的雜湊, 也要求所有交易的是有效的, 包括簽署正確和沒有雙重花費. 當交易訊息成為了有效的區塊, 就叫做確認了.

其實在組成區塊時, 除了新的交易訊息和nonce, 還要再加上上一個區塊的雜湊, 因此一個區塊不單是確認了新的交易訊息, 它也是確認了上一個區塊內的交易 (因為雜湊的決定性和不可逆性, 區塊的雜湊也就代表了區塊本身內所有的交易資訊); 而由於上一個區塊內有再上一個區塊的雜湊, 如此類推, 一個新的區塊其實是對歷史上所有區塊的確認 (第一個區塊 genesis block 除外, 它沒有上一個區塊的信息), 這稱為區塊鏈 (Blockchain). 因此一個新的區塊內不但不能有矛盾的交易, 而且也不能有和區塊鏈歷史上任何交易有矛盾的交易, 否則這個區塊也是無效的.

但如果有兩個礦工, 一個為”張三->李四”這交易確認, 另一個卻為”張三->王五” 這交易確認, 那究竟是哪個交易有效? 如果真的同時出現兩個有效的區塊, 但內容有所不同, 其它礦工也只能二選其一再繼續挖礦. 由於兩個都是有效的區塊, 礦工可以任意選擇其一; 但當其中一個區塊被新的區塊確認了, 其它礦工就會轉向為這個最新的區塊挖礦. 最終, 有較大工作量 (較長) 的分支 (fork) 就會成為公認的主區塊鏈, 較短的分支會變成孤兒區塊 (orphan block) 而被放棄. 因此最終兩個矛盾的交易只會有一個為世界所公認, 雙重花費變得不可能.

總結來說, 任何人都可以嘗試雙花, 但多個雙花的交易之中, 最終只會有一個能進入最長的分支 (主區塊鏈); 只有在主區塊鏈內的紀錄, 才是全世界公認的交易紀錄; 其餘沒有進入主區塊鏈的, 全都變成不能兌現的空頭支票, 因此雙花就變得不可能了. 也正是這個原因, 接受Bitcoin的一方, 必須等待交易進入最新區塊, 而且該區塊又被後來的新區塊確認; 確認愈多, 交易就愈安全. 任何未經確認的交易, 都存在被雙花的可能, 萬一進入不了主區塊鏈, 就會變成不能兌現的空頭支票

待續

(C) jl2012@bitcointalk 2014. CC BY-NC-SA 3.0  http://creativecommons.org/licenses/by-nc-sa/3.0/

如果你喜歡我的原創技術文章, 請考慮捐款, 謝謝!

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
wang_yan
Sr. Member
****
Offline Offline

Activity: 448
Merit: 250



View Profile
June 16, 2014, 05:12:09 AM
 #11

请问如果要提高单个区块大小上限的话,是否需要Hardfork?

另外,如果进行了Hardfork,那些没有更新客户端的人会面临什么样的结果?

多谢!

jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
June 16, 2014, 07:44:22 AM
Last edit: June 16, 2014, 08:55:28 AM by jl2012
 #12

请问如果要提高单个区块大小上限的话,是否需要Hardfork?

另外,如果进行了Hardfork,那些没有更新客户端的人会面临什么样的结果?

多谢!

Bitcoin的本質, 是對區塊有效性的一套共識.

Hardfork的意思, 是把本來不合法的區塊, 變為合法; Softfork的意思, 是把本來合法的區塊, 變為不合法

Softfork在Bitcoin歷史上出現了很多次, 一些是bug修正, 一些是新功能. 以比較簡單的一次CVE-2010-5139為例. 在2010年, 發現了一個嚴重的bug, 原來bitcoin容許輸出的bitcoin量為負值, 由於規則是要求輸出的總量不得高於輸入的總量, 如果有一個輸出為負值, 那其餘輸出的總值就可以大於輸入總值, 就是說可以無限制刷bitcoin了. 當時實行了一次緊急的softfork, 規定任何個別輸出值不得小於0, 問題就解決了. 這做法令原本合法的交易 (負值輸出) 變為不合法, 所以是一次softfork.

要實行softfork, 只要大部份礦工同意新規則就可以了. 如果有小量礦工拒絕新規則, 繼續容許負值輸出, 他們挖到的區塊就得不到大部份礦工承認, 變為無效區塊, 損失了挖礦的收入. 對於非礦工的普通用戶, 即使他們沒更新, 由於新規則的區塊鏈對於他們來說仍然合法, 他們也會自動跟隨這最長的新規則區塊鏈. 因此只要絕大部份礦工同意, softfork其實不會造成真正的分叉

這裏列舉了bitcoin歷史上所有softfork: https://bitcointalk.org/index.php?topic=641294.msg7166458#msg7166458

至於Hardfork, 情況就複雜得多. 由於是把本來不合法的區塊變為合法, 不更新的用戶, 他們會拒絕接受新的區塊鏈, 而堅持留在舊的區塊鏈. 因此區塊鏈會出現真正的分叉, 兩分叉的bitcoin各不互通. 分叉前就存在的bitcoin, 可以在兩個分叉內各自使用一次; 分叉後才收到的bitcoin, 就只能在該分叉流通. 這明顯會嚴重危害bitcoin的價值. 因此要實行hardfork, 必須要有極充分的共識, 提供長時間的預告, 讓絕大部份的用戶, 包括礦工和非礦工, 都升級到新的規則.

(如果只有極小數如0.1%的用戶拒絕更新, 那問題就不大, 因為他們將沒有足夠算力維持挖礦, 平均一星期才出現一個新區塊, 要6星期才能確認一次交易, 還要等38年才可令難度下調, 那明顯是不可能維持下去的.)

至目前為止, Bitcoin還沒有一次真正的Hardfork. (2013年的BIP0050 bug某種意義上可以算一次, 將來另文再述)

講完了背景, 就正式答問題了. 現在bitcoin區塊有一個規定, 是任何區塊不得大於1MB. 這規定在最初的bitcoin是沒有的, 是Satoshi為防止Bitcoin被攻擊而後來加上 (這其實是一個softfork, 請自己想想為什麼). 但這個1MB的規定, 限制了bitcoin處理的交易總量, 因此很多人希望可以提高. 如果是簡單的由1MB提高至2MB, 那就會是一個hardfork, 因為這是把一個本來不合法的區塊 (2MB大小) 變為合法.

不更新的後果, 就要視乎客戶端的種類. 如果是bitcoin core (前稱bitcoin-qt), 由於會檢查每一區塊的合法性, 因此不更新的後果和上述一樣, 會堅持跟隨原有的分支. 如果是輕便型的錢包, 如multibit, android bitcoin wallet, 由於他們不檢查區塊合法性, 他們是不會知道區塊的大小, 所以兩個分支對他們來說都是合法的, 他們會選擇較長的分支. 如果是在線錢包如blockchain.info, 那服務商選擇哪一個分支, 用戶就用哪一分支

但其實只要動動腦筋, 在理論上是可以用softfork提升區塊大小上限, 去年我就提出了Auxiliary block ( https://bitcointalk.org/index.php?topic=283746.0 ) 來解決這個問題, 我暫時不打算翻譯為中文了. 這做法的明顯好處是softfork, 但缺點是實行起來非常複雜, 而且輕便型錢包也必須更新, 否則是看不到擴大後的交易.

(C) jl2012@bitcointalk 2014. CC BY-NC-SA 3.0  http://creativecommons.org/licenses/by-nc-sa/3.0/

如果你喜歡我的原創技術文章, 請考慮捐款, 謝謝!

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
wang_yan
Sr. Member
****
Offline Offline

Activity: 448
Merit: 250



View Profile
June 16, 2014, 08:43:35 AM
 #13

感谢您的耐心解答,捐款0.01BTC表示感谢 Cheesy https://blockchain.info/tx/ad51f233f5a92425b44f794329892f8e7a522f83be1e6fae6cf95722af7f882d

jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
June 16, 2014, 08:53:24 AM
 #14


謝謝! 如果有什麼想知道的, 我懂的都會回答. 經過一段時間, 相信可結集成一套Bitcoin技術文集

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
June 16, 2014, 09:05:27 AM
 #15

请问如果要提高单个区块大小上限的话,是否需要Hardfork?

另外,如果进行了Hardfork,那些没有更新客户端的人会面临什么样的结果?

多谢!

Bitcoin的本質, 是對區塊有效性的一套共識.

Hardfork的意思, 是把本來不合法的區塊, 變為合法; Softfork的意思, 是把本來合法的區塊, 變為不合法

Softfork在Bitcoin歷史上出現了很多次, 一些是bug修正, 一些是新功能. 以比較簡單的一次CVE-2010-5139為例. 在2010年, 發現了一個嚴重的bug, 原來bitcoin容許輸出的bitcoin量為負值, 由於規則是要求輸出的總量不得高於輸入的總量, 如果有一個輸出為負值, 那其餘輸出的總值就可以大於輸入總值, 就是說可以無限制刷bitcoin了. 當時實行了一次緊急的softfork, 規定任何個別輸出值不得小於0, 問題就解決了. 這做法令原本合法的交易 (負值輸出) 變為不合法, 所以是一次softfork.

要實行softfork, 只要大部份礦工同意新規則就可以了. 如果有小量礦工拒絕新規則, 繼續容許負值輸出, 他們挖到的區塊就得不到大部份礦工承認, 變為無效區塊, 損失了挖礦的收入. 對於非礦工的普通用戶, 即使他們沒更新, 由於新規則的區塊鏈對於他們來說仍然合法, 他們也會自動跟隨這最長的新規則區塊鏈. 因此只要絕大部份礦工同意, softfork其實不會造成真正的分叉

這裏列舉了bitcoin歷史上所有softfork: https://bitcointalk.org/index.php?topic=641294.msg7166458#msg7166458

至於Hardfork, 情況就複雜得多. 由於是把本來不合法的區塊變為合法, 不更新的用戶, 他們會拒絕接受新的區塊鏈, 而堅持留在舊的區塊鏈. 因此區塊鏈會出現真正的分叉, 兩分叉的bitcoin各不互通. 分叉前就存在的bitcoin, 可以在兩個分叉內各自使用一次; 分叉後才收到的bitcoin, 就只能在該分叉流通. 這明顯會嚴重危害bitcoin的價值. 因此要實行hardfork, 必須要有極充分的共識, 提供長時間的預告, 讓絕大部份的用戶, 包括礦工和非礦工, 都升級到新的規則.

(如果只有極小數如0.1%的用戶拒絕更新, 那問題就不大, 因為他們將沒有足夠算力維持挖礦, 平均一星期才出現一個新區塊, 要6星期才能確認一次交易, 還要等38年才可令難度下調, 那明顯是不可能維持下去的.)

至目前為止, Bitcoin還沒有一次真正的Hardfork. (2013年的BIP0050 bug某種意義上可以算一次, 將來另文再述)

講完了背景, 就正式答問題了. 現在bitcoin區塊有一個規定, 是任何區塊不得大於1MB. 這規定在最初的bitcoin是沒有的, 是Satoshi為防止Bitcoin被攻擊而後來加上 (這其實是一個softfork, 請自己想想為什麼). 但這個1MB的規定, 限制了bitcoin處理的交易總量, 因此很多人希望可以提高. 如果是簡單的由1MB提高至2MB, 那就會是一個hardfork, 因為這是把一個本來不合法的區塊 (2MB大小) 變為合法.

不更新的後果, 就要視乎客戶端的種類. 如果是bitcoin core (前稱bitcoin-qt), 由於會檢查每一區塊的合法性, 因此不更新的後果和上述一樣, 會堅持跟隨原有的分支. 如果是輕便型的錢包, 如multibit, android bitcoin wallet, 由於他們不檢查區塊合法性, 他們是不會知道區塊的大小, 所以兩個分支對他們來說都是合法的, 他們會選擇較長的分支. 如果是在線錢包如blockchain.info, 那服務商選擇哪一個分支, 用戶就用哪一分支

但其實只要動動腦筋, 在理論上是可以用softfork提升區塊大小上限, 去年我就提出了Auxiliary block ( https://bitcointalk.org/index.php?topic=283746.0 ) 來解決這個問題, 我暫時不打算翻譯為中文了. 這做法的明顯好處是softfork, 但缺點是實行起來非常複雜, 而且輕便型錢包也必須更新, 否則是看不到擴大後的交易.

(C) jl2012@bitcointalk 2014. CC BY-NC-SA 3.0  http://creativecommons.org/licenses/by-nc-sa/3.0/

如果你喜歡我的原創技術文章, 請考慮捐款, 謝謝!


補充一點, 只要出現一個大於1MB的區塊, 分叉就會出現; 就算之後的區塊都是小於1MB, 分叉都不可能融合. 因為只要一個區塊被認定為無效, 其子孫都會被認定為無效.

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
innocent93
Legendary
*
Offline Offline

Activity: 896
Merit: 1000



View Profile
June 16, 2014, 11:35:14 AM
 #16

签名挂着Donation address终于有了作用了
其实我很好奇很多Dice网站,他们花了不少钱推广,那真的有人去玩吗?
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
June 16, 2014, 01:22:41 PM
 #17


其实我很好奇很多Dice网站,他们花了不少钱推广,那真的有人去玩吗?

這不是技術問題

不過部份服務如Satoshidice, 你可以在blockchain看到他們的營業額, 但也不排除網站刷營業額的可能

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
innocent93
Legendary
*
Offline Offline

Activity: 896
Merit: 1000



View Profile
June 19, 2014, 04:49:42 PM
 #18

OP,这里有一个技术问题。
如何计算实际的51%的攻击概率呢? 全文见http://blockindex.info/blog/51.html

bitcoin创建到现在总计产生30多万个block, 我们可以用这30多万个block的时间来估算51%攻击实际的概率和需要的时间

以下以6个confirm为例,来计算实际可能的概率

正常的 blockchain, 我们称之为C

[]----->[]----->[]----->[]----->[]----->[]----->[] C blockchain
诚实节点计算的 A blockchain

攻击节点计算的 B blockchain

[]----->[]----->[]----->[]----->[]----->[]----->[] A blockchain
        \
         []----->[]----->[]----->[]----->[]----->[]----->[] B  blockchain
分别计算每连续6个block的生成时间间隔:

t1 = blk5.time - blk0.time t2 = blk6.time - blk1.time ..... tx = blkn.time - blk(n-5).time

这样得到100%算力的C的连续生成6个块的时间集合 {t1,t2,t3....tx} TC1

然后用同样的方法计算连续生成7个block的时间间隔, 得到100%算力的C的连续生成7个块的时间集合 {t1,t2,t3....} TC2

对TC1绘图,得到正常的C blockchain 连续生成6个block时间分布曲线

x为连续的6个block

y为生成连续的6个block的时间

时间分布曲线


对时间排下序得到下图,可以得到连续生成6个block需要的最少时间和最多时间

时间分布曲线


然后对T1计算,每间隔10秒内Tx的数目, 得到{len(T1...Tx),len(Tx+1....Tx+n)....},得到密度分布曲线,如下

时间分布曲线

上图可以看出连续生成6个block需要的时间

每隔20000个block分别计算密度分布,难度应该变化10倍左右,算力变化x倍,发现block生成时间密度曲线基本重合


 
把A和B看成一个独立的blockchain,则 A,B生成block概率的密度分布应该和C一致,但是由于A,B的算力下降,所以把时间轴等比缩放,

A 连续生成6个块需要的时间集合{t1,t2,t3....} TA = TC1 * 100/(1-49)

B 连续生成7个块需要的时间集合{t1,t2,t3....} TB = TC2 * 100/(1-51)

时间分布曲线

得到A,B的曲线(左边为A,右边为B),和A可能的连续生成6个block的时间集合TA,和B连续生成7个block的时间集合TB

现在问题转化为在TA中随机选一个时间,大于TB中任意元素的概率

代码如下:

AB为有序集合,从小到大依次排列

AB中任意取元素a,b, 计算a>b的概率

def AB (A,B):
    N = []
    qz = 0.0
    for i,a in enumerate(A):
       n = 0
       for b in B:
          if a<=b: break
          else: n+=1
       N.append(n)
    return  float(sum(N))/(len(B) *len(A))
实际的计算结果

51% 算力攻击, height高度为280000~300000, 20000个block的生成时间密度计算成功的概率为

z=0 P=1.000000
z=1 P=0.25991752883
z=2 P=0.327356211643
z=3 P=0.362791063488
z=4 P=0.38572021231
z=5 P=0.402129295953
z=6 P=0.41492854999
如果觉得20000个样本不够,那么以height高度为200000~300000的, 100000个的生成时间密度计算成功的概率为

z=0 P=1.000000
z=1 P=0.258909623337
z=2 P=0.327897207064
z=3 P=0.363898341947
z=4 P=0.387023480539
z=5 P=0.403786580212
z=6 P=0.416886094841

全文见http://blockindex.info/blog/51.html
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
June 19, 2014, 05:07:26 PM
 #19

其實只要擁有>50%算力, 在統計上可證明51%攻擊是必定成功, 只是遲早問題

OP,这里有一个技术问题。
如何计算实际的51%的攻击概率呢? 全文见http://blockindex.info/blog/51.html

bitcoin创建到现在总计产生30多万个block, 我们可以用这30多万个block的时间来估算51%攻击实际的概率和需要的时间

以下以6个confirm为例,来计算实际可能的概率

正常的 blockchain, 我们称之为C

[]----->[]----->[]----->[]----->[]----->[]----->[] C blockchain
诚实节点计算的 A blockchain

攻击节点计算的 B blockchain

[]----->[]----->[]----->[]----->[]----->[]----->[] A blockchain
        \
         []----->[]----->[]----->[]----->[]----->[]----->[] B  blockchain
分别计算每连续6个block的生成时间间隔:

t1 = blk5.time - blk0.time t2 = blk6.time - blk1.time ..... tx = blkn.time - blk(n-5).time

这样得到100%算力的C的连续生成6个块的时间集合 {t1,t2,t3....tx} TC1

然后用同样的方法计算连续生成7个block的时间间隔, 得到100%算力的C的连续生成7个块的时间集合 {t1,t2,t3....} TC2

对TC1绘图,得到正常的C blockchain 连续生成6个block时间分布曲线

x为连续的6个block

y为生成连续的6个block的时间

时间分布曲线


对时间排下序得到下图,可以得到连续生成6个block需要的最少时间和最多时间

时间分布曲线


然后对T1计算,每间隔10秒内Tx的数目, 得到{len(T1...Tx),len(Tx+1....Tx+n)....},得到密度分布曲线,如下

时间分布曲线

上图可以看出连续生成6个block需要的时间

每隔20000个block分别计算密度分布,难度应该变化10倍左右,算力变化x倍,发现block生成时间密度曲线基本重合


 
把A和B看成一个独立的blockchain,则 A,B生成block概率的密度分布应该和C一致,但是由于A,B的算力下降,所以把时间轴等比缩放,

A 连续生成6个块需要的时间集合{t1,t2,t3....} TA = TC1 * 100/(1-49)

B 连续生成7个块需要的时间集合{t1,t2,t3....} TB = TC2 * 100/(1-51)

时间分布曲线

得到A,B的曲线(左边为A,右边为B),和A可能的连续生成6个block的时间集合TA,和B连续生成7个block的时间集合TB

现在问题转化为在TA中随机选一个时间,大于TB中任意元素的概率

代码如下:

AB为有序集合,从小到大依次排列

AB中任意取元素a,b, 计算a>b的概率

def AB (A,B):
    N = []
    qz = 0.0
    for i,a in enumerate(A):
       n = 0
       for b in B:
          if a<=b: break
          else: n+=1
       N.append(n)
    return  float(sum(N))/(len(B) *len(A))
实际的计算结果

51% 算力攻击, height高度为280000~300000, 20000个block的生成时间密度计算成功的概率为

z=0 P=1.000000
z=1 P=0.25991752883
z=2 P=0.327356211643
z=3 P=0.362791063488
z=4 P=0.38572021231
z=5 P=0.402129295953
z=6 P=0.41492854999
如果觉得20000个样本不够,那么以height高度为200000~300000的, 100000个的生成时间密度计算成功的概率为

z=0 P=1.000000
z=1 P=0.258909623337
z=2 P=0.327897207064
z=3 P=0.363898341947
z=4 P=0.387023480539
z=5 P=0.403786580212
z=6 P=0.416886094841

全文见http://blockindex.info/blog/51.html

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
kaneflysky
Newbie
*
Offline Offline

Activity: 16
Merit: 0


View Profile
June 22, 2014, 01:38:44 PM
 #20

脑钱包的疑问:
对于脑钱包,本质上是通过一串字符,生成1个地址。那么脑钱包的生成规则,是否有统一标准?会不会出现同一串字符,在A网站生成的脑钱包和B网站生成的脑钱包不一致的情况?
Pages: [1] 2 3 4 5 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!