解構區塊鏈:這是對區塊鏈及其技術應用最詳盡的解說

買賣虛擬貨幣

隨著某些領域的應用陸續浮出,區塊鏈技術的發展又有了新的進展。但本行業的許多細節並未為社羣外的人有較多的瞭解,包括開發進展和應用情況。這一期公開課,雷鋒網邀請到眾安保險旗下眾安科技cto李雪峰來講解!

李雪峰,眾安科技cto,曾就職於摩根大通、亞馬遜、東南融通、阿里巴巴,英屬哥倫比亞大學計算機軟體、金融學和工商管理碩士。

以下是公開課實錄:

雷鋒網:眾安科技將針對金融這一大領域進行技術輸出,那麼整個金融領域的區塊鏈應用場景來說,主要是應用了區塊鏈的哪些技術?

李雪峰:區塊鏈的技術特點我認為是:資料加密不洩露,分散式記錄不丟失,網路廣播防篡改。這些特點可以理解為這種技術的一種標準。現在這些標準已經有了很多開源的實現,比如大家熟知的比特幣、以太坊和hyperledger。雖然現在還沒有很通用的標準,但這些產品其實原則是上萬變不離其宗,基本遵照以上標準或者技術特點來實現。只是,這些產品又各自表現出差異性,因為他們主要解決的問題不同,比如比特幣要解決的是數字貨幣的轉移,以太坊更側重於提出一種新的賬戶模型,透過智慧合約推進更多應用開發。

眾安現在也有自己的鏈,但為什麼我們還要重複去造輪子,去做自己的實現呢?因為眾安的很多業務場景都是金融場景,其對技術有非常嚴格的要求,比如交易的頻率,資料儲存和訪問的要求,還要接入證監會的審查,以及聯盟之間互聯互信互通的需求,而這些都不是目前已有的一種鏈,或者是幾種鏈組合就能完成得了的。

現在擺在我們面前的現實問題是:區塊鏈的技術特點和我們需要滿足的業務場景無法一一對映,我們沒有辦法把業務場景照搬照套到區塊鏈上去實現,就像軟體科學中的投影檢視關係,大家也許都畫過uml、模型圖等,我們會發現,業務檢視和部署檢視等不同檢視之間永遠無法一一對應。

下面根據眾安自己的經驗,我們結合場景來講一下區塊鏈的技術:

  • 加密

說到區塊鏈時,大家首先想到的是加密,其常見的演算法包括橢圓曲線加密,公私鑰對,雜湊演算法,以及最近提到的零知識證明。那麼加密的使用場景,有資料就需要隱私,有隱私就需要加密,因此所有的資料儲存和查詢中我們都需要加密手段來保護資料的隱私和安全。

那麼資料透過該加密來保護後,接下來要做的是授權。資料被呼叫時首先要考慮的是資料確權的強制性。區塊鏈是一個分散式賬本,所有資料都可以共享,共享的前提是提供資料的人願意給別人看,比如給誰看、看多長時間,看多少次,這個過程是高階的演算法問題。那麼在眾安的實踐場景中,我們會在使用者的敏感資料使用中透過智慧合約和一些授權演算法來進行資料的授權請求。

  • 分散式記錄不丟失

關於分散式賬本和資料不丟失的問題,這是多中心帶來的利好。傳統網際網路架構上我們一般做跨機房的災備,或者異地多活機制。但區塊鏈的網路天生就有這樣的特點,因為節點之間是透過p2p連線的,而且每個節點都有完整的資料,這就導致其天生就符合了異地多活的特性,哪怕部分節點掛了也不影響整個網路可用性。除非所有的節點都失常了才可能影響整個網路,但這幾乎是不可能的事情,因為所有節點是佈置在世界各地的。

在現實生活中,保險、銀行等各個金融機構的系統都是不一樣的,哪怕同一行業的不同機構間都很難保證資料的標準化,日常金融活動互動中都需要第三方標準組織來完成,這個組織有可能是一個協會,有可能是一個企業。

比如對賬問題,對於多個參與方來說,每一方都有自己的賬本,對賬時a方與b方交換賬本,同時把對方的賬本來與自己本地的賬本來校對,如果發現問題需要人工去處理,這會涉及極高的成本。那麼透過區塊鏈對賬時,首先就可以消除多個賬本的情況,所有對賬參與方擁有共同的賬本,所有寫入賬本的資料都是符合雙方或多方的預期,也就是在賬本寫入時就實時備帳,減少成本的浪費和人工的支出。

  • 全網廣播防篡改

接著講一下資料防篡改的特性。這個技術特點最適用的場景是資料公信力的場景。

基於共識機制的確認,區塊鏈上的資料基本不具有被篡改的可能性。但這有個誤區——它不是完全不可篡改,而是理論上的。之前有人統計過,如果你準備4億美金的話,你也可以把比特幣上的交易都改一遍。信用是金融的核心,信任是社交的基礎,基於區塊鏈防篡改的特徵,我們可以解決很多金融、保險領域的防欺詐問題。

  • 時間戳,記錄可追溯

然後就是時間戳,區塊鏈上每條交易都有一個時間戳,它表示的是交易在區塊鏈中被執行的時間,這個時間戳就是可溯源的關係,它可以給我們提供所有操作的歷史變更,天然提供可審計功能。在供應鏈溯源等場景,它都可以發揮很大的作用。

  • 共識自治

接下來講一下共識演算法,本質上說是加上了拜占庭容錯的分散式一致性共識演算法。在使用分散式一致性演算法時,必須有個前提是——其環境都是可信的,都需要預設環境中沒有惡意的節點,對網路進行攻擊或資料篡改。但這在區塊鏈網路中是很難保證的,因為它是p2p網路,主要只要符合標準,它都能接入進來。那麼這個時候我們就要在傳統的分散式一致性演算法之上加入拜占庭容錯機制。

也就是說,共識演算法的區塊鏈的核心之一。

  • 智慧合約

然後是智慧合約。講到智慧合約也許大家第一時間想到的是以太坊,它其實是將參與方的約定和共識轉變成圖靈完備的程式碼,它對合約邏輯的實現和和執行權進行拆分,合約是你寫的,但執行的不一定是你,這就保證了合約一旦實行後任何人都不能干預,它只能按照共同達成的約定去執行一定的業務邏輯。對於任何既定業務規則,包括一些涉及信任危機的業務場景,比如眾籌、交易撮合、彩票開獎過程等都的執行可以放到智慧合約上去執行。但目前智慧合約發展還不是很成熟,大家可以將其理解為是規則的升級版。

  • 聯盟鏈

最後是聯盟鏈,眾安使用的是聯盟鏈的模式,它是最貼近現實的一種模式。很多合作伙伴,有些會直接使用我們的區塊鏈網路,有些會自己部署自己的區塊鏈網路,並且帶著自己的區塊鏈網路加入進來。這個時候就需要解決聯盟鏈之間的信任機制,通訊機制和資料同步機制。

雷鋒網:保險行業目前存在哪些痛點?這項技術對保險經濟的價值和好處體現在哪裡?區塊鏈在保險領域主要有哪些應用?

李雪峰:對應到保險場景,切入點是非常多的。比如健康險的資料儲存,淘寶和理賠過程中資料的可靠性驗證,以及理賠的自動執行等。

下面分三個大方面講一下區塊鏈在保險領域的落地場景:

提升使用者體驗

關鍵在於提升客戶的參與度,主要是改善使用者心理和行為的感受。比如,可以為使用者控制個人資料,解決p2p保險等監管、資料跟蹤的問題,利用智慧合約提供自動化理賠的執行。

  • 個人資料控制

一方面客戶害怕自己的資料提交給保險公司後失去控制。


第二,如果得不到永久儲存,那麼使用者在每一次購買保險產品時,都需要重複填寫各種資訊,這些都是非常讓使用者厭倦的事情。

有了區塊鏈,我們就可以透過區塊鏈開發一種基於區塊鏈的網路身份證,其可以與某個實體關聯起來,並且對於使用者隱私比較敏感的資料,比如購買健康險產品時與健康相關的醫療資料等,我們都可以把它儲存在區塊鏈裡面,透過資料加密和讀取的授權加以對資料進行保護。但事實上很多時候,資料並不一定需要儲存在區塊鏈裡面,比如我們即將推出一個基於區塊鏈網路身份證的app,這樣使用者的資料就是保留在移動終端裡的。只有在被需要的時候才會被登記的區塊鏈裡面,去進行雜湊的比對。透過這樣的方式,使用者把資料放在本地,並且在需要驗證和比對時也可以透過區塊鏈控制資料的隱私性和許可權。

這種方式可以帶來非常大的好處,當資料量達到一定規模而且非常充分的時候,可以減少很多重複的問題。比如,很多行業包括保險會做kyc的工作。但是他們為什麼做不起來呢?一方面,沒有一個統一的標準來對資料進行對接,也沒有一箇中央式中心化的資料庫來承擔這樣的角色,因為誰都不會放心把資料交給這樣一箇中央化的隱私資料庫。那麼根據區塊鏈的加密共享賬本的特性,我們可以快速完成kyc,因為使用者在不同保險公司或者同一保險公司購買不同產品的時候可以減去大量的重複資料提交的工作。

  • 自動化理賠的執行

區塊鏈另一個提升使用者參與度和體驗的手段是——提供較高的透明度以及理賠處理的公平性。這裡我們用航意險來舉個例子。當使用者購買了航意險,其指定的航班取消或者發生延誤時,可以由航空公司觸發一個事件來通知區塊鏈上的智慧合約,而當智慧合約獲取到這些外部資料以後,就可以為購買了這款產品的消費者直接完成理賠支付。這個過程是全自動執行的過程,其主要流程也都在智慧合約裡面。這樣的流程雖然說沒有區塊鏈也可以實現,但基於智慧區塊鏈的智慧合約能夠提供一個獨特的公正機制,這種機制不但能為客戶提供較高的透明度和可信性,它還能帶來廣泛的網路效應。

反欺詐與靈活定價

區塊鏈在保險應用的第二個大方面,就是提高反欺詐的能力和定價的靈活性。

  • 反欺詐

之前有過統計,保險的索賠事件中,有5%到10%是欺詐騙保的行為。透過區塊鏈,我們就可以構造一個跨行業的分散式的客戶資料登記平臺,其可以幫助我們更有效地識別客戶的身份和虛假的人身傷害以及損失報告。比如說,當醫院和保險公司在同一個區塊鏈網路中,客戶就不再需要將一些理賠憑證透過線下的方式提交給保險公司,再由保險公司花費大量的人力財力支出去醫院完成報告的真偽鑑別,而是醫院可以直接在區塊鏈上向保險公司出具他們的醫療報告,那麼當保險公司拿到醫院提供的報告時可以直接判斷這些報告的所屬權,和其文件的真實性。那麼這種情況傷保的直接支付就變成可能,而不是像現在這樣由使用者先墊付再理賠,而且在理賠之前還要提交很多不必要的材料。

此外,如果能完整地在區塊鏈中記錄產品或資產的購買時間,所有權和區域的歷史變更,對於財產證明和財產盜竊的公證中也有很大幫助。如果我們能拿到這些完善的材料,就可以幫助保險行業大大提升其自身的風控和反欺詐能力。

  • 靈活定價

至於靈活定價的特點,我們拿車險來舉例。今年車險進行費改,對於續保的車子如果在之前沒有出現過事故的,其優惠的費用還是很大的,但是其實他的步子還可以邁得更大一點。比如說,如果可以實時地獲取駕駛行為、車輛、道路等資料,並透過智慧合約制定一些規則,實時地計算相關費率,我們就可以對一些駕駛行為良好的司機的保費做出更大讓利,讓他們以更便宜的價格拿到車險。

但是這個過程需要強調的是,敏感資料的控制權還是應該在使用者自身。把資料放在區塊鏈中,但是區塊鏈需要透過提供隱私授權這樣的機制,讓使用者自己來操控自己資料的使用權。

  • 降低運營成本

區塊鏈在保險行業最後一個大的作用方面是降低保險公司的運營成本。透過智慧合約來運作保單的身份、合約的有效性審查,索賠登記核對保方資料,以及透過區塊鏈技術進行賠付支付的功能,可以幫助我們大大降低運營成本,並且幫我們做到真正的無紙化。

另外一個比較典型的例子是再保險。當原保險公司發生某一塊產品風險程度非常大的時候,其可以選擇將一部分保單轉移給一部分再保險公司來進行風險的分攤。在這個過程中,原保險公司和再保險公司會有相當多互動,包括保單和理賠資料共享和索賠之後的對賬。如果可以透過區塊鏈將這些資料共享在區塊鏈上,就可以提升保險公司自動化執行的能力。此外,它還提供了一種可審查的方式,來提高再保險公司的透明度。

雷鋒網:區塊鏈開發技術發展現狀是怎樣的?有哪些區塊鏈的特性和優勢是已經可以實現的,哪些是還不能實現的?為什麼?或者說,有些特性總體效果不是十分好,區塊鏈應用開發難在哪裡?目前還有什麼深層次的關鍵問題有待解決?為什麼?

李雪峰:區塊鏈技術在近年的發展還是蠻快的,像眾所周知的r3聯盟上週就開源了自己的區塊鏈實現平臺corda。但其實際上並不是一個真正意義的區塊鏈,它只是一個——按他們的說法,是一個去中心化賬本。那麼摩根大通的也開源了自己在以太坊上的實現。現在無論是國內還是國外,都有非常多的區塊鏈創業公司。

那麼主要的差別在於,國內的更偏重“鏈”這一層,而國外的企業更偏重於垂直應用的方向,做一些業務的創新或者創業。同時,今年也出現了很多研究聯盟和產業聯盟,這其實對於普及和推動區塊鏈的落地是有很大幫助的。眾安也有自己的產業促進聯盟,同樣是圍繞著生態去打造的。

大概來說,已實現的特性和優勢包括多中心化、不可篡改、資料的安全複製、透明審計和資料全域性化追蹤;暫時還沒有實現的主要集中在——對技術要求更復雜的效能最佳化和隱私保護方面的特性。

在效能最佳化這方面,目前業界普遍的原則方向和做法有些是使用最佳化共識演算法,將比特幣或以太坊的pow演算法改造成為股權證明pos或者pbft。那麼我認為這些都是短期內比較不錯的解決方法,但中長期的研究方向主要還應該在sharding(分片)上。

我為什麼認為應該是在sharding呢?這就好比,好久以前我們在去ioe的時候——在ioe去完之後,就是資料庫的分庫分表。趨勢總是不可逆的,無論是狀態通道,還是去最佳化公式演算法,其對效能或者吞吐量的提升目前來說並不是一個很大量級的提升。要達到一個企業級的水平,上萬的tps或者10萬級的tps,沒有sharding幾乎是不可能的。使用sharding策略的特點主要是讓節點去處理只和自己有關的部分交易,而不是把每個交易都放在所有的節點上去執行。

但是,未來sharding的方向肯定是橫向的,刷得橫向的刷點可以在吞吐量上帶來,質的飛躍。一臺區塊鏈實際上是由很多自戀來組成的,這就使得區塊鏈可以像分庫分表的資料庫一樣,當效能和容量不夠的時候,只需要不停地加建子鏈就可以把容量和效能進行無縫的橫向擴充套件。現在目前不管是開源社羣還是眾安內部,大家都是在積極討論進行嘗試驗證的過程。但是呢,我相信sharding不會讓大家等待太長的時間。

另外一點,從目前階段來講,如果要對接高頻的網際網路交易是有辦法實施的,但是如果要把交易資料直接存放到區塊鏈中,這是目前做不到,而且是沒必要做的。因為在區塊鏈網路中,所有的交易都要進行全網的廣播,如果這個我們區塊鏈從效能、吞吐量上能夠接受得了,頻寬也接受不了;即使頻寬能夠受得了,技術、儲存也受不了。整個實現來說,會在每一個環節都出現一些瓶頸。所以現在的高頻處理方案都是花開兩朵,各表一枝。

最後需要強調的是,區塊鏈的優勢不能只建立在功能方面。很多人認為用區塊鏈練就天然具備了容災、資料防篡改的特性。但其實不是的,這雖然是區塊鏈天生帶來的功能,但其還與網路的體量規模、生態、場景相關,只有把體量、規模、生態、場景結合在一起,它才能真正發揮重大的作用。設想一下,不管區塊鏈能實現到什麼樣的程度,如果只有一臺伺服器去部署一個節點,那麼功能再強大又怎麼樣呢?它照樣什麼都不是。

雷鋒網(公眾號:雷鋒網):區塊鏈行業應用開發和商業落地存在什麼問題?

李雪峰:區塊鏈本身是一個純技術的東西實際上是一種技術標準,所以對大多數人或者企業來講,去開發一個區塊鏈的實現,這是一個不太現實的問題。因為它的難度確實非常大,區塊鏈雖然並不是一個新的學科,但是它是對密碼學、計算數學、資料結構,甚至包括社會學、金融學的柔和。那麼大家最終都會選擇一個實現了的區塊鏈的產品,然後在這些產品上搭建自己的區塊鏈應用。那麼這些產品就像剛才提到過的,相對更成熟一點的是hyperledger、以太坊和corda。這個就好比網際網路架構中大家都會遇到的——資料庫儲存我們應用的資料,但是沒有幾家公司會真正自己去做資料庫,肯定會根據自己的特點選擇一些合適的資料庫。

所以我要講的事實是,基於區塊鏈產品來開發,我們的應用會有一個難度。對於大部分使用者來講,可能永遠都不需要區塊鏈的技術原理是什麼,但是這個並不妨礙大家去使用這個技術。按道理來說,使用產品化的東西是不應該有太大難度的。但因為現在區塊鏈還比較新,市面上完善的產品相對比較少,然後是成熟完善的學習資料比較少,並且這些產品的發展方向還各不一樣,比如說hyperledger是奔著分散式賬本去的,而以太坊是奔著應用中的智慧合約中的執行去的。那麼對於眾人而言,如果應用到金融領域,無論是選用哪一個都需要較大的改造。比如眾安在早期時對以太坊進行研究和落地的嘗試驗證,發現它的共識機制並不是非常適合金融領域,而且很多功能是沒有實現的,比如說完備的隱私保護或者金融的監管特性,效能也是沒法滿足。

基於這樣的現狀,我個人認為開發難度主要體現在五點:

第一個是區塊鏈的准入門檻比較高。如前面所說,區塊鏈是要密碼學、數學演算法等基礎,現有的產品又非常不成熟,又與傳統的分散式應用有著較大的區別。因此開發人員要快速進入該領域之前,可能都會有一個不短的學習週期。

第二個點是吞吐量,也就是說效能差,容量差。因為目前無論是哪一種區塊鏈的實現吞吐量都是影響業務落地的痛點之一。比較明顯的場景是,比如移動支付或者保險理賠。這種金融場景其實對吞吐量和易效能要求是非常高的。可以想象一下,如果要透過手機到便利店進行一次支付,掃二維碼的時候你要原地乾等三十秒,那麼體驗是非常差的。

第三點是隱私與監管。區塊鏈是一種共享的賬本,對於隱私保護需要有更進一步的要求,因為資料在賬本上共享,每個節點都可以拿到完整的資料,如果不能對隱私進行完整的保護,可能會出現非常大的問題。我們多次提到過,區塊鏈的一個核心是去中心化,但是在實際應用業務落地的時候,特別是金融場景,監管又是一個必不可免的要求。我們必須要確保我們的行為是遵守法律的,必須要杜絕一些洗錢行為。監管和隱私其實是存在一定的衝突,這兩個之間需要進行平衡,這也是非常難的一個地方。

第四個是智慧合約。雖然智慧合約在前面冠名了“智慧”兩個字,但事實上現在的智慧合約是一點都不智慧。目前在智慧合約能實現的業務邏輯都是功能相對比較單一的。一些較為複雜的業務,比如保險領域的核賠或者銀行中的信貸放貸,這些資質判定可能沒法透過智慧合約來進行一步到位的實現。那麼對於這樣的問題,我們需要透過鏈上加鏈下的方式來共同執行。

第五點不是一個技術問題,而在於其落地和推廣成本太高。很多技術在結合了區塊鏈之後,能產生的化學反應都是劇烈的,都是帶有顛覆性的。這也就意味著,我們需要大量的人力和成本進行驗證,並去推廣落地這些應用。

講完這五個點,對我個人來講的話,我最為關心的還是隱私的監管問題。這是一個非常關鍵的問題,因為這個並非全是技術問題,還關係到線上線下的法律融合問題——個人資料的確權使用範圍,法律監管辦法,這裡面也會有一定程度上的權利義務的衝突。這會是涉及到計算哲學的問題,應該說是一個系統解析的問題。

雷鋒網:前不久深圳出現了一起鬧得沸沸揚揚的“詐捐”事件:某公號寫手借女兒罹患白血病一事進行募捐,得到大量支援,但事實上此人有三套房產,屬“詐捐”。募捐而得的近三百萬善款,捐獻者也無從知曉其用處去向,加以監管。對於這樣的事情,區塊鏈能夠在哪些方面發揮作用以防範改進呢?

李雪峰:對於這個問題,我們要從多方面考慮。其實眾安也跟自己聯盟成員火堆公益在做一個類似的事情。首先,如果我們透過區塊鏈建立一個完整的使用者體系,甚至是使用者資產體系,那麼可能“詐捐”的行為根本就沒法發生。因為一個人一旦提出眾籌或者募捐,監管單位就可以在區塊鏈上對其資產進行驗證,並且對其需要募捐的費用和其資產進行匹配,如果發現其是詐騙,這樣的捐款本來就不應該發生。

那麼第二個問題就是有了區塊鏈之後更容易解決的問題。之前我們講到過,區塊鏈上的所有資料都是不可篡改,而且帶上時間戳的,那麼我們只要對這300萬善款在區塊鏈上進行追蹤,追蹤每一次轉移每一次消耗,費用到底從誰的手裡到誰的手裡,最後發生在哪裡,讓這些資訊對於所有捐款人來說都是一目瞭然的。

雷鋒網:為什麼以太坊這麼容易被攻擊呢?

李雪峰:有名才會吸引人去攻擊,站在巨人的肩膀上好成名。

對於攻擊的內容,不是以太坊容易出事故,而是以太坊搭建的系統沒有做好安全防護,容易被攻陷。你想啊,區塊鏈首先是面對真正的大型網際網路的,甚至是物聯網的,但是如果不去掌握網際網路架構的精髓去搭建區塊鏈應用,肯定走不遠的。高頻交易,資料一致性,安全防護,監控體系,這些都是現在基於雲端計算的體系精華,少不了。

我是過來人,希望大家引起注意,別走彎路,好好研究網際網路再去搞區塊鏈。

精彩問答:

問:區塊鏈技術入門,涉及哪些程式語言?

李雪峰:前兩天剛在一個區塊鏈的技術交流群裡面的看到一位同學說:“學了區塊鏈一年已經學會了十八種不同的語言!”

目前比較主流的幾種是go語言、c++,包括部分會用java、python。以太坊會有多種不同語言的實現,最主流的還是go語言進行程式設計;對於hyperledger最多也是使用了go語言;像比特幣用的最多就是c++。

用什麼語言取決於你要學習鏈的底層實現還是說在其上層去做一些應用。不管是哪個區塊鏈實現,他們對外都是提供的rpc介面還是比較完備的,所以如果你只是要做上層的應用,其實哪種程式語言都沒有關係。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;