1. 程式人生 > >第58篇:區塊鏈技術是什麼?未來可能用於哪些方面?

第58篇:區塊鏈技術是什麼?未來可能用於哪些方面?

哈哈,大家好,我又來了,我他媽就是打不死的小強,公眾號被封了,前面的57篇日記普及了很多區塊鏈知識,太多的讀者從中受益,有小白,也有老韭菜,還有技術牛人都已經從技術的角度解釋了區塊鏈技術的原理和一些技術細節。

其實對與你來說不重要,就像現在用網際網路技術刷知乎,並不需要懂TCP/IP協議一樣。如果要弄個微信公眾號賣毒面膜,或者網路直播賣笑,對於底層技術一無所知也不影響使用的。

所以吧,這個怎麼說呢,不一定非要搞明白區塊鏈,你會分析專案就行了,其他的不是你關心的點,這麼說還是一頭霧水啊,非要整明白區塊鏈就舉個栗子,我們賭球。

比如我和A賭NBA總冠軍,我說是勇士,A說是騎士。但是A的賭品我深表懷疑,擔心他輸了賴賬不給錢。沒想到A反咬一口,還懷疑我的賭品不好,簡直豈有此理!那咱倆就需要一個可信第三方來做公證人。我們可以各自出20塊錢給我們都信得過的公證人來保管。如果屆時勇士贏了,40塊錢就歸我。如果騎士贏了,40塊錢就歸A。

總決賽系列終於結束了,公證人捲了鉅款40元跑了……

人和人最基本的信任到哪裡去了?

出於對人性墮落的失望,我和A決定使用區塊鏈技術來解決這個價值40塊錢真金白銀的問題。辦法是寫一個”智慧合約“來實現對賭。方法是這樣的,我們先各自出20塊錢打到一個”智慧合約“的賬戶裡,這個合約不被任何人控制,只被合約的程式碼控制。現在”智慧合約“的賬戶上有了40塊錢,我們開始執行智慧合約。

合約程式碼大概這樣:

比賽結果=NBA官方網站API.get(“總決賽”)

if(騎士贏)
pay 40 to A
else
pay 40 to B

這個賬戶唯一會動賬的可能就是獲取比賽結果後,按照規則支付。我把程式碼給A看後,表示無異議。我們就把程式碼放到一個區塊鏈上去執行。

這個叫做”智慧合約賬號“的賬戶,事實上是一個無人信託,它只會按照程式碼去執行。等比賽結果出來了,程式碼一執行,誰都賴不了賬。A再信不過我,我再信不過A,我們都能實現對賭。

別的行業先不說,金融行業裡實在太多這樣的需求要這樣做。

比如私募基金協會出了個新八條,股票配資不讓超過1:1了,賭場老油條們怎麼辦?吃慣優先利息的銀行怎麼辦?

於是所有人想了一個利用信託的辦法。劣後資金比如5000萬,要搞個1:3的槓桿,然後銀行出優先資金1.5個億,雙方都把錢打入信託賬戶。這時候信託賬戶上就有2個億了,然後再拿信託的名義去券商開戶做交易。

信託負責稽核,如果產品的淨值小於0.8了,那麼平倉,銀行本金和利息拿走,剩下的錢歸劣後拿回去。如果淨值很高,並且到期了,銀行拿走本金和利息,剩下歸劣後。信託是銀行和劣後都認可的可信第三方,問題是這活不是白乾的,信託要收管理費用的。

如今一塊信託牌照大概能賣好幾十億,這錢太好掙了。

整個流程耗時耗財不說,千三的通道費管理費省了,最關鍵的問題,如果信託公司出問題了呢?信託公司可不是都做無風險業務的,天天嚷嚷著要打破剛兌啥的,如果哪一天真出問題了咋辦。託管賬戶在銀行這裡,銀行也不是沒倒閉的風險。

要解決信任問題的辦法恰恰是誰都不信。

咱們再寫個智慧合約

淨值=券商報告.get(產品名稱)

執行天數=DateTime.Now-起始日期

應計利息=優先資金量×日利息×執行天數

銀行應收=優先資金量+應計利息

劣後應得=淨值×總額-銀行應收

if(淨值<=0.8 or 執行天數>=到期天數)
{
pay 銀行應收 to 銀行
pay 劣後應得 to 劣後
}

往區塊鏈上那麼一放,一樣實現這個效果,但你不用擔心任何一個第三方違約或者倒閉,因為這裡並沒有第三方。或者說全世界都是你的第三方。具體的底層技術細節不是碼農兄弟就別管了,就跟你不需要知道鏈路層通訊協議照樣能打王者榮耀一樣。

好了,民間配資公司都可以洗洗睡了。標準優先劣後協議開源後,資金方自己可以打錢進智慧合約,等劣後方打錢進去,填寫個產品名稱後就可以跑起來了。配資公司吃掉的利息差有多大,舊模式其實浪費的資源就有多大。比信託的通道費和管理費大多了。

撇開費用不談,想想債券代持的蘿蔔章事件吧,不信任任何第三方是何等的重要。

如果債券代持這筆業務是放在區塊鏈上的話,那根本不可能有公章是偽造這種奇葩藉口。因為區塊鏈上的身份確認,是用高階加密演算法的數字簽名來實現的,不是地攤上私刻公章能做出來的。人類科技都發展到這水平了,還在用印章和筆跡來驗證核實身份,這是何等奇怪之事。

說到中間人的浪費,莫過於保險公司了。保費裡只有一小部分是真正發揮作用的,你的錢都付給brokers和巨集觀的核心CBD地段大樓去了。更別說各種模糊摳字眼的不理賠條款了。

我們再寫個智慧合約

航班抵達時間=航空公司官網.get(航班號)

pay 30 to I

if(航班抵達時間-預期時間>3小時)

pay 1000 to C

這裡I是保險公司,C是客戶。I要先充1000到智慧合約裡,B要充30到智慧合約。這是個標準合同,任何人充個1000都能當保險公司,試圖去賺個30塊錢。當然啦,保險公司靠大數定律賺錢,最好別隻搞一次。智慧合約在區塊鏈上跑不是沒有成本的,是要付費的,但遠比傳統大型金融中介機構要便宜得多得多。

成本還不是主要考量,最最關鍵的是,沒有模糊條款。比起自然語言,程式碼沒有歧義性。

如果保險公司和信託公司的違約風險大家沒體會的話,想想場外期權的違約風險,行業是有血的教訓的。比如現在大熱的螺紋鋼,沒有期權不給力啊,搞個場外的話,但交易對手違約風險怎麼辦。

螺紋鋼報價=上期所報價.get(“rb1801”)

Pay 期權費 to Seller

if(DateTime.Now()>=到期日 and 螺紋鋼報價>4000)

內在價格=螺紋鋼報價-4000

pay 內在價值 to Buyer

這和槓桿的保險有點像,這是一張執行價4000的螺紋鋼的歐式看漲期權,期權的買方只需要充值期權費用進去就可以了。關鍵是期權的賣方,保證金充多少進去。到期了,如果期權的賣方保證金不足以支付了怎麼辦?

有兩種解決方案,一個是在智慧合約裡規定,一旦賣方的保證金不足以支付,直接強制平倉將保證金全部給多頭。另外,智慧合約是可以傳送訊息的,讓賣方追加保證金進去,否則觸發強平。這裡的保證金不是給交易所的,而是打到智慧合約的賬戶上的。

雖然是場外,但你也不用擔心對手盤風險了。事實上,合約你可以自己定義規則,不一定要是標準的期權期貨合約,衍生品人人可以設計,不用等交易所上市產品。

A股股票融券難,不易做空?

股價=上交所報價.get(“600516”)

價差=股價-對賭價

if(價差>0)
pay 價差 to Long
else
pay Math.Abs(價差) to Short //Math.Abs 的意思是取絕對值
多頭(Long)和空頭(Short)都充值保證金進去,然後開始對賭。

保證金比例大家商量在合約裡體現,也設計保證金Margin Call功能,這就是個股期貨了。看好600516的可以獲得沒有配資利息的槓桿,空頭可以不用融券做空。

所謂“現金交割”的金融期貨,無非就是拿個指數對賭。滬深300啦,VIX期貨啦,莫不如此。

其實只要是有公允資料的東西,都可以拿來對賭,NBA比賽和飛機航班是否延誤之外,還能有各種各樣的公開資料,對衝掉你不想要的任何風險,只要你有交易對手。

其實在區塊鏈智慧合約出現之前,金融行業裡已經有個東西有點像智慧 合約。這東西叫信用證,是銀行開具的。什麼意思呢?

大家都用過支付寶。在淘寶上賣家擔心發貨了買家不付款,買家擔心付款了,賣家不發貨。那怎麼辦?買家先打錢給支付寶,然後支付寶收到錢後告訴賣家買家已經付款,發貨收貨完成後買家確認收貨,支付寶放款給賣家。支付寶是淘寶交易的可信第三方。

信用證是貿易過程中,銀行充當可信第三方的角色。比如A公司要買B公司的貨,是筆跨國貿易。A公司擔心付錢給B公司貨過不來,B公司擔心發貨了A遲遲不打款。於是,A公司給自己的銀行打保證金讓銀行開具一張信用證給B的開戶銀行,信用證裡寫了只要海關資料顯示貨到了,我就會支付給你錢。如果條件遲遲不觸發,那麼銀行會把保證金退還給客戶。這裡銀行就是支付寶的角色。

問題是如果跨國貿易對手是一家名不見經傳的小銀行怎麼辦?信用不足怎麼辦?

誰都別信誰的,大家用區塊鏈技術做。根本不信任任何機構比任何機構要可信。如今,已經有大量的國際信用證開始使用區塊鏈技術來做了。

智慧合約怎麼寫?相信大家已經有數了。

供應鏈金融也是區塊鏈技術應用得比較多的一個領域。

放貸方要知道有沒有真實上下游的交易,應收確權等等。誰都別信誰,上區塊鏈,上下游把自己有沒有發貨有沒有應付寫上去。誰都別想賴賬,明明白白的公開賬本。放貸方就能做風險控制了。

上面說的主要是金融方面的應用,區塊鏈技術能做的其他領域的應用還很多。

比如房地產的確權工作,這比一紙地契要可靠,在一些法制程度比較差的地方在應用。還節約了房地產交易的費用,當然這不如打保證金去智慧合約裡那麼牢靠。畢竟公開賬本里明明白白就是你的地,地方軍閥完全可以不認賬。

投票系統也是大的應用場景,不用擔心“被代表”了。因為區塊鏈上所有的資訊都是靠數字簽名來驗證你的身份的,並且資訊的一致性有保證,所以利用區塊鏈技術可以做到非常可信的投票體系。NasdQ交易所的區塊鏈交易系統Linq就是個好例子,股票的股東在做投票的時候,誰有多少股誰就有多少個投票權,股東決議變得可信而高效。

區塊鏈技術因為是跑在一個完全P2P的網路裡的,完全不知道執行在網路裡的哪裡,擁有絕佳的保密性和安全性。所以有一個比較有意思的專案,利用這個做的保密通訊工具。每個人的身份通過數字簽名技術驗證,不需要根證書啥的。

一個不需要中心化網路的加密通訊通道,簡直可以再造一個升級版暗網。
版權也是個大的應用領域,版權的交易可以去中心。這樣的場景在各行各業還有很多,區塊鏈技術的價值還等待大家去挖掘。

值得一提的是,智慧合約的設計是區塊鏈這個技術本身就自帶的。第一個版本的bitcoin就是跑一個指令碼來解鎖一個加密數字貨幣的。

大意是說:我希望比特幣在0.1版就能擁有穩定的架構,未來不需要再做底層改變。在過去幾年設計比特幣的過程中,我發現只有使用腳本系統才能完成我希望支援的各種複雜交易型別——擔保交易、連帶合同、第三方仲裁、多方簽名等等。

再回到區塊鏈這個概念,通俗一點地說,區塊鏈是一個收錄所有歷史交易的總帳,每個區塊中包含若干筆交易記錄。如果說區塊鏈是賬本,那麼區塊就是賬本的每一頁。交易的細節都被記錄在一個網路裡任何人都可以看得到的公開賬簿上。

區塊就是很多交易資料的集合,它被標記上時間戳和之前一個區塊的獨特標記。有效的區塊獲得全網路的共識認可以後會被追加到主區塊鏈中。區塊鏈是有包含交易資訊的區塊從後向前有序連結起來的資料結構。

在這裡,我用比特幣相關知識舉個栗子解釋一下。

在比特幣領域中,存在“礦工”這樣一個概念。礦工是指通過不斷重複雜湊運算來產生工作量的各個網路節點。(每個節點都是路由,區塊鏈資料庫,挖礦,錢包服務的功能集合)

礦工們需要競爭完成一種基於加密雜湊演算法的數學難題,答案存在於新的區塊中,誰優先解出這個答案,誰就能在p2p網路中廣播宣告自己已經獲得這個區塊,其他的曠工就會意識到在這局裡已經輸了,就會立馬開始下一個區塊的挖掘工作。

每個礦工在他的區塊中都有一筆特殊的交易,他們會將新生成的比特幣(當前每塊25個比特幣,2016年也就是今年減半)作為報酬,然後支付到自己的比特幣地址中。一旦這個區塊被認可被驗證,也就是被新增到區塊鏈中,他的這筆報酬就可以變為可用可消費的狀態。

在比特幣體系中,平均每十分鐘就可以發現一個新的區塊, 在完全去中心化的比特幣網路中(即不受任何第三方控制),每個完整節點中獨立自動發生難度調整,讓新區塊的產出速率維持在平均每十分鐘一個。

一個block產生的產生時間=難度值x2的32次方/hashrate
(hashrate是每秒運算的hash數量)

難度值difficulty=最大目標值/當前目標值

我來擬人化地解釋一下。

單身狗們要找物件,國民岳母說我有好多女兒,這樣吧我給你們出點題目,解出一個就給其中一個姑娘的微訊號。

單身狗們瘋狂競爭,想破腦袋去解題。只要其中一隻狗解出一道題,就立馬得意洋洋地昭告天下,示威全部單身狗,這個姑娘是我的啦,你們放棄吧。其他單身狗們即使不服也沒有辦法,惆悵懊惱也不是個事兒啊,還是麻溜地立馬去解下一道題目吧。這隻喜贏姑娘的幸運小狗被岳母認可後還能得到25個貨幣單位的彩禮,簡直人生贏家。

岳母會通過解題的速率去調整題目的難度,有時候吧,出的太難了,好久沒小夥子有能力來上門提親,她一尋思,這可不行,這女兒不能砸手裡啊,得把題目難度降一點。有時候難度太簡單,不到10個時間單位就嫁出去一個,這更不行,趕緊使用難度提升技能。對了今年就是2016年,岳母的禮金還會減半。。。

回到正題

上面所描述的其實就是“挖礦”的概念

所謂挖到礦就是要猜到一個nonce值讓該區塊的摘要值小於一個會根據難度而線性調整的目標值,這也是所謂的工作量證明。簡單一點說,就是重複計算去塊頭額雜湊值,不斷地改變引數,直到與雜湊值匹配的一個過程。

當節點建立一個候選區塊的時候,那曠工就準備開始進行挖礦。礦機開始超高速執行SHA256演算法,這些硬體會通過USB連結到存在於電腦上的挖礦節點上,然後挖礦節點會將區塊頭資訊傳給這些硬體,讓他們進行非常高頻的nonce測試。

當一項交易被區塊收錄的時候,可以被認為是一次確認。在此區塊之後每產生一個區塊,此項的交易數就再加一。當確認數目到達六次以上的時候,通常就能認為此項交易比較安全並且不可逆轉。那麼現在,這筆交易已經在比特幣網路上傳播開,但只有通過驗證且加到一個區塊中的時候,這筆交易才能成為區塊鏈的一部分。

新的交易不斷地湧入比特幣網路,當節點們看這些交易的時候,會將這些交易臨時放到自己各自維護的一個臨時的交易池中,當曠工創建出一個區塊以後,便可以把這些交易從交易池中拿出放到這個新區塊中,然後通過解決一個難度很大的問題去證明這個區塊的合法性。

下圖是我在http://blockchain.info網站上隨機擷取的一個區塊。

一般來說,個體礦工自己一個人獨立進行挖礦在這樣一個競爭的大環境中是幾乎沒有可以盈利的可能的。因為他們的算力讓他們很難靠一己之力可以挖到區塊去平衡他所付出的硬體裝置費用及相關的電力費用。所以在這樣的時候,他們會選擇加入礦池。眾多礦工組合成礦池,匯聚大家的算力,然後一起分享獎勵。所以不出意外的話最後一行中間那個大的綠箭頭後面的一串字元就是一個礦池的地址而非個人礦工的,該礦池獲得了25個比特幣的獎勵,多的後面的零頭是參與挖礦所得的礦工費。

現在我們點開那個收幣地址,看一下里面的資訊。

1CK6KHY6MHgYvmRQ4PAafKYDrg1ejbH1cE (二維碼自動識別)

藍色框的31confirmation就是說明這條交易已經被驗證31次,當數目達到120次時,就證明這條交易成立。

你也可以開啟終端,執行
$curlhttps://blockchain.info/unspent?active=1CK6KHY6MHgYvmRQ4PAafKYDrg1ejbH1cE
也可以進行查詢
像這樣:

我們可以認識一下比特幣領域的創世區塊

右邊是比特幣創始人中本聰留下的一句話。

“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks” 這句話正是泰晤士報當天的頭版文章標題。

我們回到區塊鏈,上面我提到過,每個區塊頭都會進行SHA256雜湊加密,生成一個雜湊值,通過這個值,我們可以在區塊鏈中識別出特定區塊,並且每個區塊頭都還包含它的父區塊的雜湊值。

(圖片來自《精通比特幣》)

每一個子區塊都只有一個父區塊,但一個父區塊可以暫時擁有很多子區塊,這種情況被稱為區塊鏈分叉。這種只有當不同的礦工在同一時刻發現不同的區塊時才會發生。這時解決的方法就是,每一個節點總是選擇並嘗試延長擁有最大工作量證明(最長或者最大難度)的區塊鏈。

舉個例子:

(圖片來自《精通比特幣》)

位於X地區的曠工與位於Y地區的曠工同時發現了兩個區塊。

我們假設:

曠工熊貓君A發現區塊-紅,礦工兔子君B發現區塊-綠。

當熊貓君A,兔子君B節點分別在比特幣網路廣播的時候,部分節點會先收到熊貓君A的廣播,部分會先收到兔子君B的廣播,然後分為兩派陣營的節點會分別開始以他們接收到的區塊作為父區塊,進行深一步的挖礦活動。(這裡節點的地理意義指的是網路拓撲上的位置,而非真實的地理位置。)

就在大家如火如荼地緊張解題的關鍵時刻,一個接收到兔子君B所廣播的節點的兔子君C,優先發現了下一個區塊-粉,也就是說綠色陣營的小兔子們的區塊鏈可以進行下一步延伸,就會比紅色陣營的小熊貓們的長度長,紅色陣營小熊貓遺憾出局。這樣的話分叉問題就得到了解決。

這裡我們需要提到一個名詞,“共識攻擊”。一個很著名的場景就是“51%攻擊”。如果一群礦工擁有了全網51%的算力,那麼只要他們聯合起來就可以打擊整個比特幣網路。

他們可以認為地去製造一個分叉的區塊鏈實現雙重支付,拿我們上文的例子舉例,攻擊者在區塊-紅中進行過了交易,結果他強行製造出區塊-綠,並且區塊-綠中將原本的交易替換成另一筆交易(把原本應該給賣家的錢打入自己同夥的錢包中),然後在區塊綠的基礎上再計算一個區塊-粉,這樣包含偽造的區塊的區塊鏈就比包含真實交易的區塊紅高出一個高度,此時,包含雙重支付的惡意區塊鏈將取代真實區塊鏈,從而實現詐騙。

51%的概念並不是說攻擊者需要全網51%的算力才能進行攻擊,理論上來說不到51%也是可以實現攻擊的,我們只是說擁有超過51%的算力的攻擊幾乎我們就可以判定它一定會成功。

上面都是在比特幣場景下進行的論述,那麼在哪些領域裡也會用到區塊鏈技術呢?

1、銀行業

作為一種數字化,安全防干擾的帳戶,區塊鏈實現了銀行業的核心功能:即價值的安全儲存和轉移中心。也就是說,在將來的幾年內,一波基於區塊鏈技術的公司或將影響到銀行業。

2、支付和轉賬

區塊鏈技術能夠避開繁雜的系統,在付款人和收款人之間創造更直接的付款流程,不管是境內轉賬還是跨境轉賬,這種方式都有著低價、迅速的特點,而且無需中間手續費。

3、網路安全

雖然區塊鏈的系統是公開的,但其核驗、傳送等資料交流過程卻採用了先進的加密技術。這種技術不僅確保了資料的正確來源,也確保了資料在中間過程不被人攔截。如果區塊鏈技術的應用更為廣泛,那麼其遭受黑客襲擊的概率也可能會下降,因此人們認為區塊鏈系統要比傳統系統更為穩妥。區塊鏈系統之所以能降低傳統網路安全風險,一大原因就是它解除了對中間人的需求。

4、選舉

大家的投票“絕不可能被我們——即程式設計師,學校管理員或學生修改、刪除。”

5、智慧合同

智慧合同實際上是在另一個物體的行動上發揮功能的電腦程式。和普通電腦程式一樣,智慧合同也是一種“如果-然後”功能,但區塊鏈技術實現了這些“合同”的自動填寫,無需人工介入。這種合同最終可能會取代法律行業的核心業務,即在商業和民事領域起草和管理合同的業務。

6、股票交易

許多年來,各個公司都在想方設法簡化股票的購買、銷售和交易過程,新興的區塊鏈技術創企認為他們能夠超越以往,實現整個流程的自動化,提高安全性和效率。(參考來自區塊鏈技術源於比特幣 現在卻要改變這12個行業)

區塊鏈目前的情況類似於TCP/IP(1969年出現的技術,30年後應用才全面盛開)或者HTML剛出來的時候找不到落地的應用,除了比特幣外,缺乏殺手級應用,比特幣只是區塊鏈1.0,而智慧合約是2.0,區塊鏈的較高應用是對應到物聯網,做到實時信用確權。

區塊鏈被真正廣泛運用還有一段很長的路要走,大家要做的,懂技術的深挖技術,不懂技術的大量囤幣等待成熟時機的出現。

我是君叔,我TM又回來了,今天整理一篇比較長,你堅持看完,後面的日記可能更偏向於區塊鏈方面,整天寫日記教你們炒幣,不封才怪。