2018年12月31日 星期一

東區-區塊鏈從零開始 開格宣言




各位夥伴大家好,本部落格預計定期發佈區塊鏈的學習心得與參考文章,給初入區塊鏈的學習者一個參考,目前預計邊寫邊尋找方向,還請各位多多捧場與交流,謝謝大家!

我不知道這部落格可以維持多久,但我會push自己堅持下去,希望最少最少兩個禮拜PO一篇自己的學習心得,給大家參考與交流。

這裡會包含所有相關資料和連結,不定期更新,做為一個導引,讓首次進來的朋友可以找到任何想了解的部分。
https://docs.google.com/document/d/1GegLD1xP8o_4nyzLanJ8Z5dAnDIXr1Vc231NmMmAHYg/edit?usp=sharing

先推薦一個入門必讀書籍-「精通比特幣」(簡體中文線上版)
http://zhibimo.com/read/wang-miao/mastering-bitcoin/

2017年9月6日 星期三

比特幣分岔事件簿



當你把比特幣發給別人之後,它就會產生一筆交易,這筆交易會有礦工記錄下來,記錄到區塊當中,區塊相當於一個帳本,這個帳本記錄了這十分鐘之內發生的交易,目前的容量是1MB 依照地區會每秒可以記錄3筆交易,也就是比特幣最快的交易速度就是每秒3筆,大家能看到這樣的交易效率是很低的。


VISA每秒可以處理1667筆交易喔,最高則是56000筆!

這個區塊的大小是怎麼來的?

http://i.imgur.com/aq4T0aF.gif
中本聰最早在設計的時候,其實是沒有區塊大小限制,由於資料結構的限制區塊可以達到33MB,而不是現在的1MB,因為早期比特幣很便宜,不需要花到像現在這麼多的錢,例如幾美元就可以發出非常多的垃圾交易,區塊的資料量變大,把硬碟撐到爆炸,所以才有這個1MB的限制。

中本聰加入這個限制其實是臨時性的,並且他在設計的時候也為了未來的擴充容量預先做的方案跟建議。

各位看剛開始的時候確實是33MB,但是後來調整之後變成1MB。後來區塊的大小不斷的上升,並且在最近這兩年已經逼近了容量的上限,所以大家都開始考慮到容量的問題,所以就產生了爭議。按照他原來的規劃,在這個時候提高到8MB大小,雖然區塊快要滿了,但是並沒有按照中本聰的計畫走下去,擴充到容量更大的區塊。
為什麼會這樣子呢?就必須要回去了解比特幣的開發團隊

中本聰開發完比特幣之後就把它傳給Gavin,他覺得獨裁不好就把權限分給了另外4名開發者,後來就形成了現在所謂的核心(Core)開發團隊。

Gavin

但是這個開發團隊,對於要不要依照中本聰的計劃進行擴充容量 ,發生了分歧,有人認為應該移除容量限制,有人認為不應該移除容量限制,之後這個矛盾就激化了。

後來主要是BU和Core兩個團隊在爭吵,就好像一個國家裡面有不同的黨派,他們爭取大部分的用戶,來取得執政的權利,那雙方的觀點有哪一些差別呢 ?

為什麼BU團隊希望可以移除1MB的限制?

1.金融業注重穩定性
中本聰提出來的架構已經在市場上穩定運行的8年,在金融系統裡面是很注重穩定性的,如果沒有必要就不應該修改現在既有的架構,銀行總是傾向不修改現有的系統,就算用了幾10年也沒關係,如果缺乏相關人才,提供穩定的薪水,去請一個工程師來專門維護他,他們寧可花錢請工程師去學習這麼舊的語言,也不想要改動這個系統,他們認為擴大區塊並沒有改變整體系統的架構,他們可以接受這樣的方式。從金融系統的角度來看建立第二層網路是可行的,但是要把第一層網路確保它可以用,而不是把它限制在1MB的大小,否則會產生災難性的後果  

例如當年摩托羅拉的電子交易系統,他們認為原本的基地台技術太落,後想要找一個非常先進的通訊方式,結果這個系統開發了好幾年燒掉了50億美金,1997年,三個月之後就倒閉了,並且直接把摩托羅拉拖垮,所以技術上看起來很先進的架構,並不見得比又傻又笨的架構好。
例如中國移動和中國聯通之間的關係,中國移動的人不去做基地台,去搞一個衛星通訊,只要讓系統還可以運作下去就沒問題,但最後會造成中國移動的用戶被中國聯通搶走,就像現在有許多其他的數字貨幣被比特幣的用戶搶走。

2.存在另一個中心化的隱憂
擴充容量的那一方,他們認為存在另一個中心化的隱憂,因為閃電網路的關鍵節點,有點類似現在的支付寶,運作閃電網路的公司可能會受到政府的監管,如果這些公司不能再運作的話,那這些用戶怎麼辦?可能會連比特幣都無法交易。

3.目前技術還能撐10年
通過擴充容量,大區塊不會導致節點容量的提高,而且隨著技術的發展應該會超過交易量的累積(硬碟夠大),所以現在的網路是可以承受20MB的區塊 並且足夠使用10年 (應該是傳輸速度還算快)

他們基於這三個觀點可以擴充容量
1.現有架構不應大幅修改
2.閃電網路存在中心化的隱憂
3.隨著技術發展可以支撐區塊容量到20MB,而且可以用10年

為什麼Core團隊不希望移除1MB的限制?

1.移除1MB的限制,就是硬分叉
這樣的硬分岔有可能會分裂比特幣,他的風險其實是很高的,萬一分岔的話比特幣的未來就沒有辦法預期。

如果比特幣的升級,使用者的錢包不用跟著升級,而是可以向前相容的話他就是軟分叉,反過來說如果需要升級錢包才能繼續使用那就是硬分叉。

如果今天使用者沒有升級自己的錢包,他就會留在舊版的比特幣之中,他會發現自己的比特幣,跟其他人錢包裡面的比特幣不一樣,是不相容的,如果有用戶堅持不升級,比特幣的錢包就會是舊版的,系統就會產生混亂,這是Core核心團隊考量的第一個風險。

當年以太坊也出現過類似的問題,以太坊有一個機構被駭客攻擊,被偷走了幾千萬個以太坊,他們當時就決定硬分岔,硬分叉之後就出現了兩條鏈,包含駭客偷走的一條鏈子,跟新產生的另一條鏈子,一條叫ETC,一條叫做ETH(主流)。

2.區塊越來越大,趨向中心化
如果移除了限制,那未來區塊會越來越大2MB, 4MB, 8MB, 16MB, 越來越大會有什麼問題呢?他會造成用戶的電腦沒有辦法儲存完整版的錢包,完整版的錢包就稱之為全節點,就是記錄「由始以來」所有交易的帳本。

如果今天個人使用者不能運作全節點(因為沒錢買更大的硬碟),最後讓公司和機構來運作全節點的話,那就會讓比特幣變成中心化,這就是第二個風險。

3.提出
隔離見證和閃電網路解決方案
他們認為他們有一套比中本聰更好的方案,例如通過第二層網路也就是閃電網路,對比特幣的交易進行分層,例如第一層是比特幣的運行網路,第二層是閃電網路,大部分低價值的交易都走第二層網路,高價值的交易走第一層網路,因為這些金額太小的交易,每次交易就要在整個網路上廣播,挖礦機還要確認並且打包到區塊裡面,這樣子是不划算的,所以要把低價值的交易分流到第二層裡面。

隔離見證和閃電網路的說明

閃電網路的比喻
有點類似於牌局裡面的記帳員,他們並不會每打一圈就要結算,例如我給你5塊你給我10塊,他們會先記帳,等打了很多圈之後再一起來結帳,閃電網路就是這樣的思路,例如有人從交易所儲值或是提出現金,就可以用閃電網路,他和交易所之間產生一個結帳通道,他並不是直接把錢充值到交易所裡面,而是充到結帳通道裡面,最後他如果想要提現,並不是提到自己身上的比特幣的地址,而是把交易所裡面的錢重新劃分一下,本來10個比特幣在交易所,現在有一個比特幣是屬於用戶本身,九個還是屬於交易所,這樣他跟交易所就可以產生很多筆儲值或是提現,就不用打到比特幣的地址,就例如打了很多圈牌,實際上都沒有給錢,先記帳,一直到打完牌要回家,才會一口氣把錢充值到地址,就是把帳給算清楚。

如果有兩個用戶跟交易所都建立了結帳通道,他們可以以交易所 為中間能進行轉帳,交易所會為他們結算交易的金額,這個就是閃電網路,他就是在的第一層的基礎上,再建第二層網路,有點類似高架橋和平面道路的關係。

總結一下,為什麼Core團隊不希望移除1兆的限制?
1.分裂風險(硬分叉)
2.區塊越來越大,收不住(變成中心化)
3.閃電網路可以改善



總結比較一下



BU就是硬分叉,讓他分成兩條鏈,舊的鏈自生自滅,讓新的鏈子不斷壯大。軟分岔就是維持一條鏈子,一個比特幣,只做一些微小的修改讓既有的比特幣用戶不會受到影響。
比特幣以前是進行過軟分岔的,他在升級一段程式碼的時候,曾經做過軟分岔。
這兩個團隊在香港曾經有過一個共識,就是採用隔離見證,加上硬分岔2MB, 對於支持擴充容量的那一方,他們認為2MB可以緩解目前壅塞的交易,對核心團隊來說2MB不算太大,他們也不反對隔離見證還有閃電網路,他們的第一步是軟分岔加隔離見證,但是他們回去之後,遭到其他團隊成員的反對,因為這是一個妥協的方案,所以最後連程式碼都沒有開發出來。
礦工反過來支持 BU,也就是一直支持擴充容量的這一方, 他們認為這樣子可以一勞永逸的解決區塊大小的問題 ,但是有一個前提就是讓51%的礦池來投票決定區塊的大小, 雖然區塊鏈還是一條,但是他們從從政治的角度或是思想或是具體的行動方案,都徹底的分裂了,我們也可以在社交媒體上面看到這兩派鬧得非常兇,所以比特幣的投資者也非常擔心不知道該怎麼做。
核心團隊指責擴充容量的那一方,這樣會影響礦業的分權,第二,礦業為了要收取手續費,阻止隔離見證跟閃電網路,礦業認為他們收錢收得理直氣壯,擴充的那一方也指責核心團隊,他們認為閃電網路,是有一家公司Block Stream專門開發的,這家公司僱用了核心開發團隊多名成員,10個裡面有8個是這家公司的人 所以有一點陰謀論,他們認為把區塊的大小鎖定在一照是故意的 這樣一來這間公司就可以發展他們的閃電網路。
為什麼要硬分岔呢 有4個耽憂
1.因為比特幣交易的壅塞已經持續了一年,而且交易的手續費已經高達每筆10元,他就非常影響了比特幣作為貨幣的使用方式  
2.比特幣需要更大的區塊容納更多的用戶,如果不能容納更多的用戶就會被其他的比別超過
3.只要區塊鍊還是一條,那雙方成員就會持續互相指責下去
4.硬分叉的風險,他是一個簡單粗暴又激進的措施,會導致比特幣分成兩種,它的社區也會分成兩個。
5.他很像外科手術,風險非常高沒有辦法保證沒有問題

https://i0.wp.com/factordaily.com/wp-content/uploads/2017/07/Bitcoin_Cash_split-lead.jpg?fit=1920%2C960&ssl=1


比特幣擴充容量的核心是什麼
剛剛提到的分成兩派其中一方是把比特幣當作結算系統,另外一派爸比特幣當作電子現金系統 。
第一派Core他認為比特幣是一個網路是一個全球的結算系統 ,他在功能上跟黃金一樣, 他是用來付款結算商業交易的 ,這些交易由網站來經營, 結算數量可能會很高, 他們代表了用戶成千上萬的交易, 這個系統就像是金融機構, 用網路來解決支付的問題 所以他們拒絕把比特幣當作零售的用途。 例如把比特幣拿去買一杯咖啡,他們是不贊成這個用途的, 有點大材小用的感覺, 這樣子不划算, 所以他們就把網路分成2級網路, 第一集是核心的區塊鏈網路,第二層是閃電網路, 用第二層網路來支撐金額很小的交易, 這樣的方案會更加靈活,成本會更低 。
第二派BU的觀點,就是把他當作電子現金系統, 這個概念跟中本聰當初發展的想法是一致的, 中本聰當初有寫一篇論文點對點的電子現金系統, 他們認為比特幣的支付是中性的, 他們認為不管是零售商業交易,各式各樣的用途,都應該支持 ,他們反對出現以下的場景, 由於比特幣網路交易的約束, 導致交易費用升高, 這樣的話只有企業和金融機構才有能力支付交易費, 這樣的話一般的用戶就會被逼出區塊鏈, 因為比特幣原本是無政府主義的 ,結果到最後個人用戶還是沒辦法使用,就違背了中本聰當初發展比特幣的初衷, 所以他們認為比特幣是電子現金系統,對任何人來講都是平等的。
他們兩方爭論的核心,就是從安全和管理的角度來權衡的, 所以是針對對於比特幣價值觀的爭論, 但是隨著比特幣 越來越廣泛的接受,從長期的觀點來看,升級的壓力是永遠存在的, 雖然假如採用第一派的觀點,從全球交易結算系統的角度來看 ,它的容量始終不夠, 中心化的風險取決於比特幣被接受的程度, 接受的程度高,問題比較好解決



當然,各位知道,2017/8/1確定分岔了,新幣Bitcoin Cash比特現金誕生,但是支持的交易所不多。分岔當天價格還上沖下洗,也讓我們見識到虛擬貨幣的波動,遠遠超過股票投資。

無論如何,「投資一定有風險,比特幣投資有賺有賠,申購前應詳閱白皮書」,重點是,最近的ICO只要在網路發布,不用向政府申請,就可以撈走大家錢,甚至不用「白皮書」。中國已經出手干預,到底ICO是什麼?各位可以先Google,或是等我下回分解!




用白話文解釋什麼是區塊鏈?

https://steemit-production-imageproxy-upload.s3.amazonaws.com

最近比特幣的投資熱潮簡直到了頂點,讓我不得不想辦法跟一下流行,想辦法了解一下。不過許多介紹區塊鏈的文章真的還是太艱深、太難理解了,所以我試著看能不能用最簡單的方式來介紹。

什麼是比特幣?

在講區塊鏈之前,先講「什麼是比特幣」,一方面對大家比較容易了解,一方面直接從實際的應用面來切入。
比特幣是一種P2P形式的數位貨幣,P2P就是Peer to Peer,就像以前有一個軟體,叫ezPeer,大家用那個軟體下載mp3,不是從網站下載的,而是從同樣有裝ezPeear的使用者那邊下載的,所以叫做點對點,而點對點的傳輸意味著一個「去中心化」的支付系統。

什麼叫去中心化?

就是沒有人管,簡單來說我們的中央銀行(簡稱央行,13A總裁彭淮南上班的地方),它負責印鈔票,嚴格來說是發行新台幣,管控新台幣在巿場上的流通數量,例如巿場上的錢太多,它就發行債券,把債券賣給投資者,把新台幣收回來,不給流通;或是巿場上的錢太少,為了鼓勵投資,就印新的鈔票出來,把債券買回來,讓投資者手上有錢,把錢拿來做其他的投資。但是印鈔票會讓東西變費,因為巿場上的東西就是那麼多,一個便當假如是100塊,如果今天央行多印一倍的鈔票,並不會讓大家的錢變多,而是讓一個便當變成200塊,就是所謂的通貨膨帳。所以100塊和200塊只是一個數字,能買到多少東西比較重要(購買力)。
上面扯到經濟學太遠了,簡單說,新台幣就是受央行控管,而且由央行和各家銀行來記帳,但是比特幣是不受控管的,應該說不是用印鈔票或是回收鈔票來控管,而且記帳是存在網路上的每一台電腦(節點)裡。它依據特定的計算方法,通過大量的計算產生,比特幣使用整個P2P網絡中眾多節點構成的分散式資料庫來確認並記錄所有的交易行為。
下圖說明了,記帳從原本的集中式帳本,改變成分散式帳本的示意圖。
http://banknxt.com/wp-content/uploads/2015/07/Santander-image.png

比特幣的安全性-基於密碼學的設計

比特幣使用密碼學的設計來確保貨幣流通各個環節安全性,沒人可以大量製造比特幣來人為操控幣值(也就是不會重複支付)。就是所有的交易都被加密,而且是匿名的,交易記錄都能夠確保真實性,無法造假,例如A付比特幣給B,可以確認「A真的有比特幣」、A的比特幣「真的轉帳給B」、「B的比特幣變多」,而且交易記錄都被加密,所以查不出來A和B是誰(所以可以洗錢)。

通貨緊縮的貨幣-數量不會改變

比特幣與其他虛擬貨幣最大的不同,是其總數量非常有限,雖然可以通過挖礦來產出,但它的總量將被永久限制在2100萬個,每經過四年,10分鐘內挖出的比特幣會減半,預計在2140年挖完,挖完就再也挖不出來了。

什麼是挖礦?

所謂“挖礦”實際上就是用電腦解決一項複雜的數學問題,來保證網路上分佈式記帳系統的一致性。比特幣網絡會自動調整數學問題的難度,讓整個網路約每10分鐘得到一個答案,就是數據塊。隨後比特幣網絡會新生成一定量的比特幣作為獎勵。所以挖礦就是一直在計算加解密的資料,然後記錄交易,需要計算能力很強的電腦,尤其是專門拿來挖礦的,叫做挖礦機。
https://bluenotes.anz.com/content/dam/bluenotes/images/articles/2016/April/venterblockchainchart5.png/_jcr_content/renditions/original

比特幣的數量限制

2009年比特幣誕生的時候,每一筆挖礦的賞金是50個比特幣。誕生10分鐘後,第一批50個比特幣生成了(代表第一個區塊產生-創世區塊),而此時的貨幣總量就是50。隨後比特幣就以約每10分鐘50個的速度增長。當總量達到1050萬時(2100萬的50%),賞金減半為25個。當總量達到1575萬(新產出525萬,即1050的50%)時,賞金再減半為12.5個,到最後全部賞完,就是挖完了。
所以比特幣貨幣總量增長的速度會越來越慢。事實上,87.5%的比特幣都將在頭12年內被“挖”出來。而且使用比特幣的人越來越多,代表人們拿錢買比特幣,讓比特幣的總巿值越來越大,所以錢就越來越大,一塊比特幣能買的東西越來越多,當然目前的趨勢是這樣,未來是否會膨脹下去?我也不敢保證,只能說巿場上看好的人蠻多的。
這就是為什麼大家都要買比特幣的原因,因為比特幣的數量不會改變,不受某個單為控管,亂印鈔票,而且它太方便使用了,很多在海外工作的勞工,為了把錢匯回國內,先換成比特幣,再回國把比特幣賣掉,中間不用透過銀行收取高額的換匯,以及轉帳手續費,而且轉帳速度快,很快就確認完畢,所以大家都花錢買比特幣,讓比特幣的價格越漲越高。有名的WannaCry也是勒索比特幣,因為轉帳太方便了,而且又有匿名性。
在P2P網絡裡,每個節點運行著相同的核心算法,從而保證所有節點都有相同的“認知”:誰與誰發生了交易、比特幣是否真實的、“同一個”比特幣是否被重複支付等等。

為什麼無法造假?

如果要造假,那麼就需要與整個網絡的1/2的節點(挖礦的電腦)進行競爭,有點類似“舉手錶決過半數”的意思,反之,如果自己沒有話語權,也就無法得到其他節點的認可,也就不能造假了。並且,比特幣系統已運行了近8年的時間,“時間就是力量”,想要與整個系統對抗,靠某個人的力量是不可能的。也正是如此,比特幣才非常安全。

不是很安全,那為什麼有駭客攻擊?
因為駭客攻擊的不是比特幣的計算,是用傳統攻擊方式,攻擊「管理比特幣的網站」、或是偷取某些人的比特幣帳戶、或是使用勒索病毒,例如有名的WannyCry攻擊,並不是用什麼更高超的技術,除非有人可以直接破解比特幣的加密,而且可以駭入全球半數以上的電腦,這似乎沒有人可以做到啊。所以網路上有幾台電腦的帳本被摧毀,相同的帳本還是在網路上的其他電腦中。
用一個簡單的例子:
不會因為網路上有幾台放A片的PC掛掉,你就不能下載波多野結衣最新的A片。你還是可以用BT (比特慧星) 下載到最新的A片。
終於有一段話容易了解了吧?
呃......這是別人教我的例子。
挖礦本身就是加密和解密,都已經非常累人,用盡大量電力和電腦運算能力,破解更是難如登天。

到底區塊是什麼?

在比特幣系統裡,只有轉賬一種交易,即使是挖礦產生的比特幣,也可以看成是從某個核心賬戶轉出的交易。系統為了對交易進行“快速”確認,如果採用所有節點(電腦)對每個交易進行驗證,會使整個系統空前複雜,因為比特幣的交易不斷在世個各個角落發生,為了避免這種“爆炸”問題,中本聰(比特幣發明者)將多個交易打包成一個塊,在部分節點對交易驗證後,其他節點只需驗證這一個塊的信息即可,從而大大提高效率。這個塊正是大家耳熟能詳的【區塊】。


上面這段話寫得很精簡,接下來用一系列的圖來表示:

一群節點(電腦)驗證一些交易,一些交易被打包成一個區塊,驗證完後,告訴其他節點(就是把資料散播到網路上的所有帳本)。
https://image.slidesharecdn.com/understandingblockchains-150715160546-lva1-app6892/95/understanding-blockchains-19-638.jpg?cb=1437142392

挖礦本身,就是在驗證並記錄交易,解數學問題,驗證完會得到獎賞,以及交易手續費。
https://image.slidesharecdn.com/bitcoin-sfmw-150408050025-conversion-gate01/95/bitcoin-banking-and-the-blockchain-7-638.jpg?cb=1428469581
一群節點驗證完一個區塊,通知其他節點,就是把帳本複製過去。
https://bluenotes.anz.com/content/dam/bluenotes/images/articles/2016/April/venterblockchainchart5.png/_jcr_content/renditions/original
讓每個節點都有一模一樣的帳本,所以駭客如果只攻破一個帳本,無法造假,因為其他節點不相信,除非攻破網路上所有的帳本。
因為交易記錄太多筆,所以把固定數量的交易,打包成一個區塊,方便管理,用後用一些節點(電腦)來驗證區塊裡的交易記錄,用鏈條把區塊串在一起,形成可追溯的交易記錄。
https://bitcoin.org/img/dev/en-blockchain-overview.svg
每個區塊的標頭,都會記錄上一個區塊的加密資料(Hash Value),這就是鏈,之所以能讓區塊串起來的東西,最後變成區塊鏈
最後總結一下:
1.比特幣是去中心化,就是沒有發行單位的貨幣。
2.比特幣的交易資料(帳本)存在網路上個節點(電腦)上。
3.交易資料太多,所以把交易資料包成一個一個區塊,讓部分節點(電腦)來驗證一個區塊中,每一筆交易真實性。
4.這些節點驗證完,會把交易資料(帳目)複製到網路上所有節點(帳本)。
5.每一個區塊的標頭,會記錄上一個區塊的加密資料,稱為鏈。
一句白話講完區塊鏈:「把打包交易資料的區塊,在標頭用Hash值串連起來」,天啊還是很難表達清楚。
我主要參考以下這三篇文章,各位有興趣可以深入了解。
對了我再提醒一下,不懂就不要投資比特幣(大起大落已讓人失去理智),但區塊鏈的技術最好是了解一下,它可能是改變世界的關鍵技術之一。
以上是我的介紹,希望可以講得足夠簡單明瞭(不要只懂紅字那一段),讓非資訊專業的人也能懂,謝謝各位。