|
今天的文章來(lái)自Wen Aviva, 坐Jerry面對(duì)面的程序媛。 Jerry在之前的公眾號(hào)文章《在SAP UI中使用純JavaScript顯示產(chǎn)品主數(shù)據(jù)的3D模型視圖》已經(jīng)介紹過(guò)Aviva了,SAP成都C4C開(kāi)發(fā)團(tuán)隊(duì)中其他同事評(píng)價(jià)她為:“美膩與智慧的化身”,“云時(shí)代女王”,“是大家前沿技術(shù)的引路人”。因?yàn)镴erry和Aviva就在一個(gè)組,所以我的看法是,這些評(píng)價(jià)都實(shí)至名歸。 比如Jerry了解到的Javascript 3D渲染,增強(qiáng)現(xiàn)實(shí)(Argument Reality)和這篇文章談到的Hyperledger Fabric, 全部都是從Aviva那里學(xué)到的。 SAP成都研究院的每位同事,只要是參加了2017年歲末年會(huì)掃福字領(lǐng)紅包的活動(dòng),則理論上都使用了Aviva和成都另一位程序媛Zhao Rina開(kāi)發(fā)的基于AR的小應(yīng)用。 2017年7月初成都C4C開(kāi)發(fā)團(tuán)隊(duì)剛剛創(chuàng)建,除了老大Max之外,只有5位組員:哈公子,大衛(wèi)哥,象老師,勇哥和阿爽。當(dāng)時(shí)這支新的開(kāi)發(fā)團(tuán)隊(duì)面臨的最緊迫問(wèn)題,就是贏得C4C美國(guó)開(kāi)發(fā)總部的信任,從而從總部攬活到成都本地來(lái)做。用什么獲得信任呢?對(duì)程序猿來(lái)說(shuō),當(dāng)然是talk is cheap, show me the code。當(dāng)時(shí)這支剛剛組建起來(lái)的五人小團(tuán)隊(duì)對(duì)C4C毫不了解,但是卻選擇了一個(gè)中國(guó)客戶呼聲非常高,非常希望能夠添加到C4C標(biāo)準(zhǔn)產(chǎn)品去的backlog。短短一個(gè)月時(shí)間,這個(gè)五人小團(tuán)隊(duì)完成了從現(xiàn)學(xué)C4C產(chǎn)品知識(shí)和前后臺(tái)開(kāi)發(fā)知識(shí),到將backlog實(shí)現(xiàn)成一個(gè)原型的全過(guò)程。當(dāng)原型錄成的視頻給美國(guó)開(kāi)發(fā)老大過(guò)目之后,得到了極高的評(píng)價(jià),驚嘆這只團(tuán)隊(duì)從創(chuàng)建到productive只花了短短一個(gè)月的時(shí)間。這個(gè)原型的順利完成,為成都C4C團(tuán)隊(duì)后續(xù)的發(fā)展壯大打下了一個(gè)堅(jiān)實(shí)的基礎(chǔ)。 這個(gè)原型最后的交付形式是iOS應(yīng)用。當(dāng)時(shí)五位同事都沒(méi)有做過(guò)iOS平臺(tái)上的開(kāi)發(fā),不過(guò)幸好我們有Aviva。Max從SAP成都數(shù)字創(chuàng)新空間租借了Aviva。在她的幫助下,原型發(fā)布順利完成。更令人敬佩的是,Aviva將她的iOS開(kāi)發(fā)經(jīng)驗(yàn)無(wú)私地分享給了團(tuán)隊(duì)其他同事,現(xiàn)在C4C團(tuán)隊(duì)已經(jīng)有多位同事能夠在iOS平臺(tái)上進(jìn)行工作。我想,今年三月成都C4C團(tuán)隊(duì)參加編程馬拉松時(shí),在組隊(duì)階段給隊(duì)伍取名為“Hi Aviva!”, 或許是想通過(guò)這種方式感謝Aviva對(duì)C4C團(tuán)隊(duì)做出的貢獻(xiàn)。 Jerry很慶幸每天可以和這樣的同事一起工作。 下面是Aviva的正文。 什么是區(qū)塊鏈?簡(jiǎn)單來(lái)說(shuō)區(qū)塊鏈就是一個(gè)分布式的記賬本,或者分布式的數(shù)據(jù)庫(kù)。區(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu)是一個(gè)鏈表,交易數(shù)據(jù)被存儲(chǔ)到鏈表的區(qū)塊中,區(qū)塊鏈的第一個(gè)區(qū)塊叫創(chuàng)世區(qū)塊,除了創(chuàng)世塊以外,每個(gè)區(qū)塊還包含前一個(gè)區(qū)塊的哈希指針,這個(gè)哈希指針的值是根據(jù)前一個(gè)區(qū)塊的實(shí)際數(shù)據(jù)計(jì)算出來(lái)的。哈希指針指向前一個(gè)區(qū)塊,后面的區(qū)塊可以查找前面所有區(qū)塊的信息。 賬本的數(shù)據(jù)結(jié)構(gòu)就是這樣的一個(gè)鏈表,那么分布式的含義是什么呢? 區(qū)塊鏈的眾多參與者組成了一個(gè)松散自治的P2P網(wǎng)絡(luò),我們把區(qū)塊鏈網(wǎng)絡(luò)的參與者叫做節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都擁有一個(gè)賬本拷貝,所有賬本的信息都是一致的,在區(qū)塊鏈里沒(méi)有中心節(jié)點(diǎn)。每當(dāng)有新的交易進(jìn)來(lái),所有節(jié)點(diǎn)的賬本都會(huì)更新,并且最終保持一致。更新的方式不是去修改某個(gè)區(qū)塊的值,而是保存交易記錄。比如在比特幣系統(tǒng)中,它沒(méi)有用戶資產(chǎn)記錄這樣的概念,不像普通數(shù)據(jù)庫(kù)那樣用一條數(shù)據(jù)存儲(chǔ)資產(chǎn),比特幣用戶資產(chǎn)的值是通過(guò)把所有的交易記錄串聯(lián)聚合后得到的,賬戶里資產(chǎn)的來(lái)源可以一直向上追溯,直到創(chuàng)世塊為止。區(qū)塊鏈里的交易數(shù)據(jù)根據(jù)具體場(chǎng)景,可以是任何需要記錄的信息。 智能合約為了支持信息的持續(xù)更新,以及對(duì)賬本進(jìn)行管理(寫(xiě)入交易,進(jìn)行查詢等),區(qū)塊鏈網(wǎng)絡(luò)引入了智能合約來(lái)實(shí)現(xiàn)對(duì)賬本的訪問(wèn)和控制。智能合約不僅僅可用于在區(qū)塊鏈網(wǎng)絡(luò)中打包信息,它們也可以被用于自動(dòng)的執(zhí)行由參與者定義的特定交易操作。 比如智能合約可以規(guī)定物流中的運(yùn)輸費(fèi)用,根據(jù)物流的快慢收取不同的費(fèi)用,根據(jù)貨物的到達(dá)時(shí)間進(jìn)行自動(dòng)轉(zhuǎn)賬等。上傳到區(qū)塊鏈網(wǎng)絡(luò)中的的智能合約會(huì)被打包到某一個(gè)區(qū)塊中,因此智能合約一旦寫(xiě)入?yún)^(qū)塊鏈,也是不可更改的。 共識(shí)機(jī)制區(qū)塊鏈網(wǎng)絡(luò)中交易信息同步的過(guò)程,確保交易只有獲得適當(dāng)參與者批準(zhǔn)后才更新,所有的參與者都會(huì)將同樣的信息按照同樣的順序更新,這樣的過(guò)程叫做共識(shí)。共識(shí)機(jī)制是區(qū)塊鏈的核心之一。 區(qū)塊鏈的第一個(gè)應(yīng)用比特幣,采用的是Proof of Work(工作量證明)的共識(shí)機(jī)制。簡(jiǎn)單介紹一下比特幣的共識(shí)機(jī)制,算法的具體細(xì)節(jié)大家可以去查白皮書(shū)。節(jié)點(diǎn)收到一個(gè)交易后,會(huì)根據(jù)判斷標(biāo)準(zhǔn)對(duì)該交易進(jìn)行有效性校驗(yàn),無(wú)效的交易會(huì)被廢棄。通過(guò)有效性驗(yàn)證之后的交易將會(huì)被廣播給其他節(jié)點(diǎn)。其他節(jié)點(diǎn)會(huì)做同樣的獨(dú)立校驗(yàn),當(dāng)有效的交易達(dá)到整個(gè)網(wǎng)絡(luò)所有節(jié)點(diǎn)時(shí),即全網(wǎng)達(dá)成了“該交易有效”的共識(shí)。每個(gè)節(jié)點(diǎn)都會(huì)收到很多有效但是還未被打包到區(qū)塊中的交易,這些交易被組裝成Merkle Tree,Merkle Tree的第一個(gè)交易比較特殊,叫做coinbase,由節(jié)點(diǎn)自己創(chuàng)建,將挖礦獎(jiǎng)勵(lì)支付到礦工自己的地址。挖礦獎(jiǎng)勵(lì)包括新創(chuàng)建的比特幣和打包進(jìn)該區(qū)塊所有交易的手續(xù)費(fèi)總額。然后節(jié)點(diǎn)計(jì)算一個(gè)符合難度的哈希值,挖礦就是通過(guò)修改參數(shù)不斷計(jì)算區(qū)塊哈希值,直至達(dá)到難度要求,也就間接證明了該節(jié)點(diǎn)付出了對(duì)應(yīng)的工作量,這就是工作量證明。Jerry的公眾號(hào)文章《300行ABAP代碼實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的區(qū)塊鏈原型》里用了一個(gè)ABAP方法CL_ABAP_MESSAGE_DIGEST=>CALCULATE_HASH_FOR_CHAR來(lái)計(jì)算區(qū)塊的哈希值。 當(dāng)節(jié)點(diǎn)計(jì)算出一個(gè)符合難度的區(qū)塊哈希時(shí),即說(shuō)明該礦工挖礦成功了,該節(jié)點(diǎn)將該區(qū)塊組裝到本地的區(qū)塊鏈,同時(shí)也將此區(qū)塊廣播給其他節(jié)點(diǎn)。其他節(jié)點(diǎn)接收到該區(qū)塊后會(huì)驗(yàn)證該區(qū)塊是否有效,有可能有兩個(gè)節(jié)點(diǎn)同時(shí)挖出了新的區(qū)塊B1和B2,它們的上一個(gè)區(qū)塊都是同一個(gè)區(qū)塊P。有的節(jié)點(diǎn)可能會(huì)先收到B1,有的會(huì)先收到B2,這時(shí)區(qū)塊鏈出現(xiàn)了暫時(shí)性的兩個(gè)分叉。要打破這種局面,要看下一個(gè)區(qū)塊是基于B1生成還是基于B2生成。如果基于B1,B1這條鏈就變成了最長(zhǎng)鏈,其他包含B2的節(jié)點(diǎn)會(huì)重新選擇最長(zhǎng)鏈,而B(niǎo)2作為孤塊被丟棄掉。 到目前為止,我們可以將區(qū)塊鏈看做是一個(gè)共享的,去中心化的多備份系統(tǒng),通過(guò)智能合約更新交易數(shù)據(jù),同時(shí)借助共識(shí)的協(xié)作流程使網(wǎng)絡(luò)中所有的節(jié)點(diǎn)保持一致。 這里的交易可以指代任何數(shù)據(jù),例如:數(shù)字貨幣,合同,記錄或者其它任何信息。 區(qū)塊鏈的類型
什么是Hyperledger Fabric?Hyperledger Fabric 是Linux基金會(huì)發(fā)起的Hyperledger項(xiàng)目之一。Hyperledger Fabric 專為在企業(yè)環(huán)境中使用而設(shè)計(jì)的開(kāi)源的基于區(qū)塊鏈的分布式賬本。Hyperledger Fabric可用于全球供應(yīng)鏈管理、金融交易、資產(chǎn)記賬、人力資源、保險(xiǎn)、健康和數(shù)字音樂(lè)等領(lǐng)域。 Hyperledger Fabric中的賬本子系統(tǒng)(ledger)包括兩個(gè)組件:世界觀(world state)和事務(wù)日志(transaction log)。世界觀記錄了賬本在特定時(shí)間點(diǎn)的現(xiàn)狀,是一個(gè)鍵值數(shù)據(jù)庫(kù)。交易日志記錄產(chǎn)生世界狀態(tài)當(dāng)前值的所有交易,是世界觀的更新歷史。賬本的世界觀的底層數(shù)據(jù)庫(kù)可以更換,可以選擇使用levelDB或couchDB。 Hyperledger Fabric是第一個(gè)支持以通用語(yǔ)言編寫(xiě)智能合約的區(qū)塊鏈平臺(tái),可以使用java,nodejs和go語(yǔ)言來(lái)編寫(xiě)智能合約。Hyperledger Fabric中的智能合約也叫鏈碼(chain code)。 和其他公有區(qū)塊鏈平臺(tái)最大的不同,Hyperledger Fabric 是私有的并且需要授權(quán)才能接入,它擁有一個(gè)MSP(Membership Service Provider)模塊專門(mén)提供成員管理服務(wù)。 CA(Certificate Authority)負(fù)責(zé)權(quán)限管理,成員身份相關(guān)證書(shū)管理(Enrollment CertificateAuthority)和維護(hù)交易相關(guān)證書(shū)管理(Transaction Certificate Authority)等等。 Hyperledger Fabric提供了建立channel的功能,這允許參與者為交易新建一個(gè)單獨(dú)的賬本。當(dāng)網(wǎng)絡(luò)中的一些參與者是競(jìng)爭(zhēng)對(duì)手時(shí),這個(gè)功能變得尤為重要。因?yàn)檫@些參與者并不希望所有的交易信息——比如提供給部分客戶的特定價(jià)格信息——都對(duì)網(wǎng)絡(luò)中所有參與者公開(kāi)。只有在同一個(gè)channel中的參與者,才會(huì)擁有該channel中的賬本,而其他不在此channel中的參與者則看不到這個(gè)賬本。 Hyperledger Fabric使用獨(dú)立的排序節(jié)點(diǎn)(order)來(lái)提供共識(shí)服務(wù),負(fù)責(zé)排序交易,提供全局確認(rèn)的交易順序。 應(yīng)用程序通過(guò)SDK訪問(wèn)Hyperledger Fabric。 最新版Hyperledger Fabric的設(shè)計(jì)中,根據(jù)功能將節(jié)點(diǎn)角色解耦開(kāi),讓不同節(jié)點(diǎn)處理不同類型的工作負(fù)載。從業(yè)務(wù)邏輯上又將節(jié)點(diǎn)分為背書(shū)節(jié)點(diǎn)(Endorser)和提交節(jié)點(diǎn)(Committer)。
Hyperledger Fabric 交易流程:共識(shí)共識(shí)流程主要分Proposal,Packaging和Validation三個(gè)階段。 Proposal應(yīng)用提交一個(gè)交易proposal,然后將其提交給所有的背書(shū)節(jié)點(diǎn),后者接到后,將其作為輸入執(zhí)行鏈碼生成相應(yīng)的交易proposal響應(yīng)。此時(shí)并不會(huì)更新Ledger,而是對(duì)交易proposal 響應(yīng)簽名,并將其返回給應(yīng)用。應(yīng)用收到簽名后的響應(yīng),共識(shí)流程的第一階段就完成了。 Packaging這個(gè)階段是order節(jié)點(diǎn)對(duì)交易進(jìn)行排序打包。Order節(jié)點(diǎn)從各個(gè)應(yīng)用接收交易proposal響應(yīng),然后對(duì)這些交易進(jìn)行排序,排序之后打包成區(qū)塊。 Validation共識(shí)流程的最后一個(gè)階段,由order節(jié)點(diǎn)將區(qū)塊分發(fā)給所有和它連接的節(jié)點(diǎn),這些節(jié)點(diǎn)將確認(rèn)區(qū)塊中的交易都經(jīng)過(guò)背書(shū)節(jié)點(diǎn)簽名,然后將確認(rèn)后的區(qū)塊更新到ledger中。 整個(gè)流程稱為共識(shí),所有節(jié)點(diǎn)都已對(duì)交易內(nèi)容和順序達(dá)成一致,這一過(guò)程由order節(jié)點(diǎn)控制。 共識(shí)是一個(gè)多步驟的過(guò)程,只有在整個(gè)流程完成時(shí)才會(huì)更新賬本 ,可能每個(gè)節(jié)點(diǎn)的更新時(shí)間稍有不同。 Hyperledger Fabric Service on SAP Cloud Platform(一)構(gòu)建一個(gè)Hyperledger Fabric平臺(tái)絕非易事,既需要硬件基礎(chǔ)設(shè)施的投入,也需要全方位的開(kāi)發(fā)和運(yùn)營(yíng)管理(DevOps)。除了平臺(tái)本身,一套完整的解決方案,還包括設(shè)備接入,訪問(wèn)控制,服務(wù)監(jiān)控等管理功能。 SAP Cloud Platform(下文簡(jiǎn)稱SCP)提供了開(kāi)箱即用的Hyperledger Fabric Service,為開(kāi)發(fā)者提供了強(qiáng)大的服務(wù)支持:
以上是我對(duì)Hyperledger Fabric的一些理解,接觸和了解區(qū)塊鏈的時(shí)間有限,難免存在一些錯(cuò)誤,歡迎大家指正。后續(xù)會(huì)給大家?guī)?lái)SAP云平臺(tái)上Hyperledger Fabric開(kāi)發(fā)的一些細(xì)節(jié)介紹。 主要參考文獻(xiàn)
要獲取更多Jerry的原創(chuàng)文章,請(qǐng)關(guān)注公眾號(hào)"汪子熙" |
|
|