再度留名
底褲超人啲文要消化下
你係邊個

再度留名
底褲超人啲文要消化下
----第二節:mining
bitcoin network入面有好多礦工
礦工其實係一部server
做既野就係收集唔同人提交既transaction, 然後砌成一個block, 再attach上去而家條chain既尾
例如你發起一個bitcoin transaction, 想捐錢比我
咁你個bitcoin wallet software就會就街同人講:呢個連登仔想比1 bitcoin underpants呀
wallet係知道呢個世界有咩礦工起度,礦工收到一個交易之後又會話比佢既礦工朋友知
所以好快呢個交易就會傳播到去所有礦工,等待加入下一個block
但係網絡世界係有latency, 即係話呢個transaction可能會先去到香港礦工手上
然後香港礦工話比日本礦工知,再行多幾步先去到美國礦工度
呢個世界一秒鐘有咁多單交易,每一個礦工收到交易個時間都唔一樣
礦工做野通常都係first come first serve
(通常,not always, 遲D會講到咩情況下唔係first come first serve)
美國礦工可能隔左十幾秒先收到你個transaction
如果起佢收到呢個交易之前,佢已經儲夠一個block可以裝既交易數量
咁佢會暫時儲起呢個交易,等佢mine完而家呢個block,有機會先擺你既交易入下一個block
我想帶出既重點係:個個礦工掘緊既block,所裝住既交易可能係唔一樣
咁你就會問喇:點定邊個礦工有權建議下一個block儲住咩交易?
就係鬥快計數既時候喇
條數就係
SHA256(x,交易1,交易2,...,交易n) < target
形象化一D就係
SHA256("x,Alice pay Bob 1BTC,Bob pay Carol 2BTC") < 00F0000000000000000000000000000000000000000000000000000000000000
礦工試下x = 0000001
就符合唔到上面條不等式
SHA256("0000001,Alice pay Bob 1BTC,Bob pay Carol 2BTC") = D2CEEE02829CE041B3D1F2D836F863086D50C8CE97E3A8BA2C5549681AFFCB57
大過target,所以唔得
於是礦工繼續試,試下x=0000002
SHA256("0000002,Alice pay Bob 1BTC,Bob pay Carol 2BTC") =
9DCBDB0052C041078B3B92C14EE8C869BA70FA22D642511496E3D079BBC9528E
都係唔得
於是礦工繼續試,試下x=0000003
唔得...再試x=0000004
唔得...再試
直到
x=00000016
SHA256A("00000016,Alice pay Bob 1BTC,Bob pay Carol 2BTC") = 005ADB8E16B8A4BAC6D69601A091E70A3A7C4A823B62C12C2E9099F0AA939133 真係細過
00F0000000000000000000000000000000000000000000000000000000000000
bingo!!!!!
礦工卒之搵到一個x,砌埋落去其他transaction度,hash出黎個結果係細過target
佢立即會同全世既礦工講:我搵到啦!!!!
其他礦工就會檢查下佢計條數有無問題
同埋檢查一下呢個block包含既交易有無問題
都無問題既話,其他礦工就會接受左呢個block, 儲落自己database度
又會檢查一下自己既transaction pool, 睇下有無D交易係已經比人地mine左,咁自己就可以拎走果D交易
起上面個例子入面,個target其實好大,係兩個0字頭
現實上既target係好細好細
例如00000000000000000F0000000000000000000000000000000000000000000000
17個0字頭
target前面既0越多就即係越高難度
呢個target係所有礦工一齊傾出黎既
目標係要維持係大約10分鐘之內就要搵一個新block
如果忽然之間好多人加入做礦工,令到創造新block時間跌到落8分鐘
咁大家就會同意提升難度,例如將target由17個0字頭變成20個0字頭
如果好多礦工做到無癮,唔玩既話,令到創造新block既時間延長至12分鐘
咁大家會同意降低難度到ley say 10個0字頭
常見問題:
如果同時有兩個礦工搵到兩個唔同block既hash value細過target
又同時同其他礦工講,咁點算?
四個字:先到先得
好似上面幅圖咁
創世block出現之後
有兩個礦工一齊搵到下一個block, 一個係block A一個係block B
B同A一樣都係level 1既block
因為佢地都係直接指住創世block
所有先接收到block A既礦工,會基於block A既結果繼續mine下一個block
所有先接收到block B既礦工,會基於block B既結果繼續mine下一個block
例如呢個世界有70%礦工收到block A, 30%收到block B
斷估70%既礦工,會比30%既礦工做野快
所以好可能70%既礦工好快就搵到block C (which is based on block A)
呢個時候base on block B做野既礦工就可以收皮
因為blockchain既世界係淨係睇最長果條chain
你可以質疑,咁可能block A同block B既coverage係50/50呢
的確係有咁既可能
會唔會兩邊既server次次都一齊mine到
咁咪會變左兩條chain
A-C-E-G-I...
B-D-F-H-J...
實際上呢個可能性係非常非常之低
大多數既孤兒chain最多都係去到兩三個block
幾乎無一條孤兒chain可以去到六個block
所以bitcoin界有個defacto既標準:
longest blockchain 6個level之前既transaction可視為confirmed
----第二節:mining
bitcoin network入面有好多礦工
礦工其實係一部server
做既野就係收集唔同人提交既transaction, 然後砌成一個block, 再attach上去而家條chain既尾
例如你發起一個bitcoin transaction, 想捐錢比我
咁你個bitcoin wallet software就會就街同人講:呢個連登仔想比1 bitcoin underpants呀
wallet係知道呢個世界有咩礦工起度,礦工收到一個交易之後又會話比佢既礦工朋友知
所以好快呢個交易就會傳播到去所有礦工,等待加入下一個block
但係網絡世界係有latency, 即係話呢個transaction可能會先去到香港礦工手上
然後香港礦工話比日本礦工知,再行多幾步先去到美國礦工度
呢個世界一秒鐘有咁多單交易,每一個礦工收到交易個時間都唔一樣
礦工做野通常都係first come first serve
(通常,not always, 遲D會講到咩情況下唔係first come first serve)
美國礦工可能隔左十幾秒先收到你個transaction
如果起佢收到呢個交易之前,佢已經儲夠一個block可以裝既交易數量
咁佢會暫時儲起呢個交易,等佢mine完而家呢個block,有機會先擺你既交易入下一個block
我想帶出既重點係:個個礦工掘緊既block,所裝住既交易可能係唔一樣
咁你就會問喇:點定邊個礦工有權建議下一個block儲住咩交易?
就係鬥快計數既時候喇
條數就係
SHA256(x,交易1,交易2,...,交易n) < target
形象化一D就係
SHA256("x,Alice pay Bob 1BTC,Bob pay Carol 2BTC") < 00F0000000000000000000000000000000000000000000000000000000000000
礦工試下x = 0000001
就符合唔到上面條不等式
SHA256("0000001,Alice pay Bob 1BTC,Bob pay Carol 2BTC") = D2CEEE02829CE041B3D1F2D836F863086D50C8CE97E3A8BA2C5549681AFFCB57
大過target,所以唔得
於是礦工繼續試,試下x=0000002
SHA256("0000002,Alice pay Bob 1BTC,Bob pay Carol 2BTC") =
9DCBDB0052C041078B3B92C14EE8C869BA70FA22D642511496E3D079BBC9528E
都係唔得
於是礦工繼續試,試下x=0000003
唔得...再試x=0000004
唔得...再試
直到
x=00000016
SHA256A("00000016,Alice pay Bob 1BTC,Bob pay Carol 2BTC") = 005ADB8E16B8A4BAC6D69601A091E70A3A7C4A823B62C12C2E9099F0AA939133 真係細過
00F0000000000000000000000000000000000000000000000000000000000000
bingo!!!!!
礦工卒之搵到一個x,砌埋落去其他transaction度,hash出黎個結果係細過target
佢立即會同全世既礦工講:我搵到啦!!!!
其他礦工就會檢查下佢計條數有無問題
同埋檢查一下呢個block包含既交易有無問題
都無問題既話,其他礦工就會接受左呢個block, 儲落自己database度
又會檢查一下自己既transaction pool, 睇下有無D交易係已經比人地mine左,咁自己就可以拎走果D交易
起上面個例子入面,個target其實好大,係兩個0字頭
現實上既target係好細好細
例如00000000000000000F0000000000000000000000000000000000000000000000
17個0字頭
target前面既0越多就即係越高難度
呢個target係所有礦工一齊傾出黎既
目標係要維持係大約10分鐘之內就要搵一個新block
如果忽然之間好多人加入做礦工,令到創造新block時間跌到落8分鐘
咁大家就會同意提升難度,例如將target由17個0字頭變成20個0字頭
如果好多礦工做到無癮,唔玩既話,令到創造新block既時間延長至12分鐘
咁大家會同意降低難度到ley say 10個0字頭
常見問題:
如果同時有兩個礦工搵到兩個唔同block既hash value細過target
又同時同其他礦工講,咁點算?
四個字:先到先得
好似上面幅圖咁
創世block出現之後
有兩個礦工一齊搵到下一個block, 一個係block A一個係block B
B同A一樣都係level 1既block
因為佢地都係直接指住創世block
所有先接收到block A既礦工,會基於block A既結果繼續mine下一個block
所有先接收到block B既礦工,會基於block B既結果繼續mine下一個block
例如呢個世界有70%礦工收到block A, 30%收到block B
斷估70%既礦工,會比30%既礦工做野快
所以好可能70%既礦工好快就搵到block C (which is based on block A)
呢個時候base on block B做野既礦工就可以收皮
因為blockchain既世界係淨係睇最長果條chain
你可以質疑,咁可能block A同block B既coverage係50/50呢
的確係有咁既可能
會唔會兩邊既server次次都一齊mine到
咁咪會變左兩條chain
A-C-E-G-I...
B-D-F-H-J...
實際上呢個可能性係非常非常之低
大多數既孤兒chain最多都係去到兩三個block
幾乎無一條孤兒chain可以去到六個block
所以bitcoin界有個defacto既標準:
longest blockchain 6個level之前既transaction可視為confirmed
30%唔夠人快 條chain 唔夠人長,之後會點?
變孤兒仔
唔會有人理佢
入面儲左既交易都唔算數
要起longest blockchain上面搵到既交易先算數
咁咪有交易冇咗?
變孤兒仔
唔會有人理佢
入面儲左既交易都唔算數
要起longest blockchain上面搵到既交易先算數
咁咪有交易冇咗?
我都諗緊
而家兩條linked list
A list 有10 個block
B list 有9 個block
咁b list 就廢左, 但應該有一個block 比人廢左
而每個block 有n 條transaction
咁比人廢左個n條transcaction會點呢
變孤兒仔
唔會有人理佢
入面儲左既交易都唔算數
要起longest blockchain上面搵到既交易先算數
咁咪有交易冇咗?
我都諗緊
而家兩條linked list
A list 有10 個block
B list 有9 個block
咁b list 就廢左, 但應該有一個block 比人廢左
而每個block 有n 條transaction
咁比人廢左個n條transcaction會點呢
有10個礦工起長緊果條chain做緊野
淨低3個礦工起短D果條做緊
就算有交易擺左入短D果條chain,而未入長D果條chain
對於果10個礦工黎講,果D交易仍然係未confirm既交易
照樣會起長chain下一個block擺果D交易入去
一個交易可以同時起條孤兒chain出現,又起longest blockchain出現
變孤兒仔
唔會有人理佢
入面儲左既交易都唔算數
要起longest blockchain上面搵到既交易先算數
咁咪有交易冇咗?
我都諗緊
而家兩條linked list
A list 有10 個block
B list 有9 個block
咁b list 就廢左, 但應該有一個block 比人廢左
而每個block 有n 條transaction
咁比人廢左個n條transcaction會點呢
有10個礦工起長緊果條chain做緊野
淨低3個礦工起短D果條做緊
就算有交易擺左入短D果條chain,而未入長D果條chain
對於果10個礦工黎講,果D交易仍然係未confirm既交易
照樣會起長chain下一個block擺果D交易入去
一個交易可以同時起條孤兒chain出現,又起longest blockchain出現
咁對於用家而言
姐係我起碼要等多6條BLOCK係尾先叫CONFIRM左個交易
咁收錢個個係呢段時間咪有RISK?
變孤兒仔
唔會有人理佢
入面儲左既交易都唔算數
要起longest blockchain上面搵到既交易先算數
咁咪有交易冇咗?
我都諗緊
而家兩條linked list
A list 有10 個block
B list 有9 個block
咁b list 就廢左, 但應該有一個block 比人廢左
而每個block 有n 條transaction
咁比人廢左個n條transcaction會點呢
有10個礦工起長緊果條chain做緊野
淨低3個礦工起短D果條做緊
就算有交易擺左入短D果條chain,而未入長D果條chain
對於果10個礦工黎講,果D交易仍然係未confirm既交易
照樣會起長chain下一個block擺果D交易入去
一個交易可以同時起條孤兒chain出現,又起longest blockchain出現
咁對於用家而言
姐係我起碼要等多6條BLOCK係尾先叫CONFIRM左個交易
咁收錢個個係呢段時間咪有RISK?
咁即係可以用個time lag 黎搵錢 食差價
變孤兒仔
唔會有人理佢
入面儲左既交易都唔算數
要起longest blockchain上面搵到既交易先算數
咁咪有交易冇咗?
我都諗緊
而家兩條linked list
A list 有10 個block
B list 有9 個block
咁b list 就廢左, 但應該有一個block 比人廢左
而每個block 有n 條transaction
咁比人廢左個n條transcaction會點呢
有10個礦工起長緊果條chain做緊野
淨低3個礦工起短D果條做緊
就算有交易擺左入短D果條chain,而未入長D果條chain
對於果10個礦工黎講,果D交易仍然係未confirm既交易
照樣會起長chain下一個block擺果D交易入去
一個交易可以同時起條孤兒chain出現,又起longest blockchain出現
咁對於用家而言
姐係我起碼要等多6條BLOCK係尾先叫CONFIRM左個交易
咁收錢個個係呢段時間咪有RISK?
咁即係可以用個time lag 黎搵錢 食差價
一般交易例如買咖啡既話
就梗係唔會等6個confirmation
小小錢就講個信字啦,就好似你比左10蚊紙人地
收錢果個都唔會下下檢查你果張係咪真銀紙
而且一旦你send左個交易出去
要出cheat reverse個交易都唔係咁易
如果你識寫programme,又有足夠hash power既話 可以試下發動double spend attack
我諗緊...可能下個chapter就講下各種出cheat既手法
但係如果係同exchange交易
例如兌換bitcoin做法定貨幣
就會跟足D真係等足6個conformations, 有時甚至更長既時間
先肯換錢比你
變孤兒仔
唔會有人理佢
入面儲左既交易都唔算數
要起longest blockchain上面搵到既交易先算數
咁咪有交易冇咗?
我都諗緊
而家兩條linked list
A list 有10 個block
B list 有9 個block
咁b list 就廢左, 但應該有一個block 比人廢左
而每個block 有n 條transaction
咁比人廢左個n條transcaction會點呢
有10個礦工起長緊果條chain做緊野
淨低3個礦工起短D果條做緊
就算有交易擺左入短D果條chain,而未入長D果條chain
對於果10個礦工黎講,果D交易仍然係未confirm既交易
照樣會起長chain下一個block擺果D交易入去
一個交易可以同時起條孤兒chain出現,又起longest blockchain出現
咁對於用家而言
姐係我起碼要等多6條BLOCK係尾先叫CONFIRM左個交易
咁收錢個個係呢段時間咪有RISK?
咁即係可以用個time lag 黎搵錢 食差價
一般交易例如買咖啡既話
就梗係唔會等6個confirmation
小小錢就講個信字啦,就好似你比左10蚊紙人地
收錢果個都唔會下下檢查你果張係咪真銀紙
而且一旦你send左個交易出去
要出cheat reverse個交易都唔係咁易
如果你識寫programme,又有足夠hash power既話 可以試下發動double spend attack
我諗緊...可能下個chapter就講下各種出cheat既手法
但係如果係同exchange交易
例如兌換bitcoin做法定貨幣
就會跟足D真係等足6個conformations, 有時甚至更長既時間
先肯換錢比你
呢樣野真係會LIMIT左呢種電子貨幣
改善到既話 潛力真係可以大好多