摘要:在她的幫助下,原型發(fā)布順利完成。節(jié)點(diǎn)收到一個(gè)交易后,會(huì)根據(jù)判斷標(biāo)準(zhǔn)對(duì)該交易進(jìn)行有效性校驗(yàn),無(wú)效的交易會(huì)被廢棄。負(fù)責(zé)權(quán)限管理,成員身份相關(guān)證書(shū)管理和維護(hù)交易相關(guān)證書(shū)管理等等。
今天的文章來(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ū)塊鏈的類(lèi)型公有鏈:網(wǎng)絡(luò)中的節(jié)點(diǎn)可以任意接入,網(wǎng)絡(luò)中數(shù)據(jù)讀寫(xiě)權(quán)限不受限制,所有節(jié)點(diǎn)都參與共識(shí)過(guò)程。比特幣,以太坊等數(shù)字貨幣都屬于公有鏈。
私有鏈:網(wǎng)絡(luò)中的節(jié)點(diǎn)被一個(gè)組織控制,由其獨(dú)享該區(qū)塊鏈的寫(xiě)入權(quán)限,私有鏈和其他的分布式存儲(chǔ)沒(méi)有太大區(qū)別。
聯(lián)盟鏈:多個(gè)公司或組織通過(guò)授權(quán)接入,由某些節(jié)點(diǎn)參與共識(shí)過(guò)程。Hyperledger Fabric屬于聯(lián)盟鏈。
什么是Hyperledger Fabric?Hyperledger Fabric 是Linux基金會(huì)發(fā)起的Hyperledger項(xiàng)目之一。Hyperledger Fabric 專(zhuān)為在企業(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)模塊專(zhuān)門(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ā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)處理不同類(lèi)型的工作負(fù)載。從業(yè)務(wù)邏輯上又將節(jié)點(diǎn)分為背書(shū)節(jié)點(diǎn)(Endorser)和提交節(jié)點(diǎn)(Committer)。
Endorser peer:負(fù)責(zé)對(duì)來(lái)自客戶端的交易進(jìn)行合法性和權(quán)限檢查(模擬交易),通 過(guò)檢查則簽名并返回結(jié)果給客戶端。
Committer peer:負(fù)責(zé)維護(hù)賬本,將達(dá)成一致順序的批量交易結(jié)果進(jìn)行狀態(tài)檢查,生成區(qū)塊,執(zhí)行合法的交易,并寫(xiě)入賬本,同一個(gè)物理節(jié)點(diǎn)可以同時(shí)擔(dān)任endorser和committer兩個(gè)角色。
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è)流程稱(chēng)為共識(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)稱(chēng)SCP)提供了開(kāi)箱即用的Hyperledger Fabric Service,為開(kāi)發(fā)者提供了強(qiáng)大的服務(wù)支持:
直觀友好的可視化監(jiān)控與操作界面,幫助開(kāi)發(fā)者按需申請(qǐng)區(qū)塊鏈網(wǎng)絡(luò),創(chuàng)建管理節(jié)點(diǎn)、渠道,而無(wú)需考慮底層硬件資源。
簡(jiǎn)單易用的智能合約開(kāi)發(fā)與測(cè)試環(huán)境,方便開(kāi)發(fā)者對(duì)應(yīng)用代碼進(jìn)行管理。
安全,隱私性方面的保障,并對(duì)相關(guān)資源進(jìn)行了性能優(yōu)化。
以上是我對(duì)Hyperledger Fabric的一些理解,接觸和了解區(qū)塊鏈的時(shí)間有限,難免存在一些錯(cuò)誤,歡迎大家指正。后續(xù)會(huì)給大家?guī)?lái)SAP云平臺(tái)上Hyperledger Fabric開(kāi)發(fā)的一些細(xì)節(jié)介紹。
主要參考文獻(xiàn)
Hyperledger Fabric官網(wǎng)
https://hyperledger-fabric.re...
Hyperledger Fabric Service on SCP
https://help.sap.com/viewer/p...
要獲取更多Jerry的原創(chuàng)文章,請(qǐng)關(guān)注公眾號(hào)"汪子熙":
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/24359.html
摘要:是基于區(qū)塊鏈技術(shù)的一個(gè)開(kāi)源項(xiàng)目,由基金會(huì)于年發(fā)起,目的是推進(jìn)區(qū)塊鏈數(shù)字技術(shù)和交易驗(yàn)證的發(fā)展和落地。在學(xué)習(xí)賬本的數(shù)據(jù)結(jié)構(gòu)時(shí),發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象上圖中世界狀態(tài)的設(shè)計(jì)目的,是為了提升性能。扮演的角色同里的相同。 Hyperledger fabric是基于區(qū)塊鏈技術(shù)的一個(gè)開(kāi)源項(xiàng)目,由Linux基金會(huì)于2015年發(fā)起,目的是推進(jìn)區(qū)塊鏈數(shù)字技術(shù)和交易驗(yàn)證的發(fā)展和落地。showImg(https:/...
摘要:創(chuàng)建網(wǎng)絡(luò),,,執(zhí)行中。。。通道上,向發(fā)送的交易,成功在上安裝鏈碼上鏈碼安裝成功請(qǐng)求上鏈碼。。。請(qǐng)求上鏈碼請(qǐng)求結(jié)果通道上,請(qǐng)求成功通道上,,請(qǐng)求成功拜占庭執(zhí)行完成 sudo ./byfn.sh up a@ubuntu:~/hyfa/fabric-samples/first-network$ sudo ./byfn.sh up > 創(chuàng)建網(wǎng)絡(luò),peer,orderer,cli Star...
摘要:協(xié)議的細(xì)節(jié)由一個(gè)名為的處理。運(yùn)行下面的腳本來(lái)讓所有的事情都發(fā)生一兩分鐘后,命令提示符將返回運(yùn)行結(jié)果如下圖所示現(xiàn)在運(yùn)行該命令查看當(dāng)前正在運(yùn)行的容器。 showImg(https://segmentfault.com/img/bVbazHF?w=709&h=159); 前言 本教程基本上是對(duì)Marbles項(xiàng)目的翻譯過(guò)程. 如果英文比較好的話,建議根據(jù)官方操作說(shuō)明,一步步進(jìn)行環(huán)境部署。當(dāng)然你...
摘要:目的因最熟悉故最后還是拿做突破口學(xué)習(xí)本文只運(yùn)行功能以后具體在分析運(yùn)行環(huán)境網(wǎng)絡(luò)遠(yuǎn)程本地遠(yuǎn)程下載運(yùn)行網(wǎng)絡(luò)核查網(wǎng)絡(luò)是否啟動(dòng)成功這一步我遇到的問(wèn)題是未啟動(dòng)成功原因在于中這 目的 因最熟悉java,故最后還是拿java做突破口學(xué)習(xí)sdk,本文只運(yùn)行demo,sdk功能以后具體在分析. 運(yùn)行環(huán)境 Fabric網(wǎng)絡(luò) 遠(yuǎn)程Centos Fabric-sdk-java 本地MacOs Intellij...
閱讀 1337·2019-08-30 15:44
閱讀 1388·2019-08-29 18:42
閱讀 442·2019-08-29 13:59
閱讀 779·2019-08-28 17:58
閱讀 2822·2019-08-26 12:02
閱讀 2423·2019-08-23 18:40
閱讀 2411·2019-08-23 18:13
閱讀 3114·2019-08-23 16:27