SAP雲平臺,區塊鏈,超級賬本和智慧合約
前一篇文章《 Hyperledger Fabric on SAP Cloud Platform 》,我的同事Aviva已經給大家介紹了基於區塊鏈技術的超級賬本(Hyperledger)的一些概要知識。Fabric是超級賬本5個並行專案中的其中之一,因為發展較為成熟,SAP雲平臺對Fabric也提供了較好的支援。
學完了前一篇文章的理論知識後,今天我們來動手實踐一下。
我們做的這個練習的範圍很窄,就是學會如何使用go語言開發一組微服務,這組微服務包含讀和寫兩個API,能夠將資料寫入架設於SAP雲平臺上的超級賬本服務。
大家還記得之前Aviva介紹的智慧合約(Smart Contract)麼?
簡單地說,應用程式透過智慧合約介面同超級賬本進行讀寫操作。我們將開發一個Hello World的智慧合約,部署到SAP雲平臺上。出於簡單起見,我們沒有開發應用,而是簡單地在SAP雲平臺的API控制檯上直接消費這個Hello World的智慧合約,對雲平臺上的超級賬本進行讀和寫。
開啟超級賬本專案Fabric的github倉庫地址:
發現Fabric專案是Google的程式語言GoLang開發的,因此我們們這個練習也使用Go語言來進行智慧合約的開發。
1. 從Google上將Go語言1.11版的二進位制包下載到本地,解壓到/usr/local目錄下:
sudo tar -C /usr/local -xzf /home/vagrant/Downloads/go1.11.linux-amd64.tar.gz
將該目錄配置到環境變數PATH中去:
2. Fabric專案已經將智慧合約同超級賬本的通訊封裝到一個名叫shim的介面中,我們只需要在我們編寫的智慧合約程式碼中直接呼叫該shim介面即可。
我們使用import將這個shim介面的依賴引入進來,在第14行定義一個結構體,包含ID和Value兩個欄位。這個結構體即是待寫入超級賬本的資料結構,ABAP顧問可以將其視為ABAP資料字典裡定義的結構體。
第46行定義的方法Invoke是這個最簡單的智慧合約的核心程式碼,cc MessageStore這個語法和C語言很像,定義了一個型別為MessageStore的指標變數cc。這個指標變數同C++的 this指標 和ABAP的 me引用 *作用類似,在方法被呼叫時,指向了方法的呼叫者。
Invoke後面括號裡的stub shim.ChaincodeStubInterface定義了該方法的輸入引數(形參)stub, 型別為shim.ChaincodeStubInterface。
這個Invoke方法不會透過應用程式顯式呼叫,而是透過超級賬本程式回撥:當方法被呼叫時,指標cc和輸入引數stub已經自動被Fabric框架賦上了對應值。在Invoke方法執行的上下文裡,透過輸入引數stub判斷出當前回撥的場景是讀還是寫,然後進入對應的分支。分支內部呼叫我們自己開發的write和read方法同超級賬本進行互動。具體原始碼在我的github上:
這種透過同一個回撥函式內部的switch case來處理多個場景的做法,ABAP和Java開發者應該都不陌生。比如下圖是透過InvocationHandler實現Java動態代理的例子,其中invoke方法的邏輯結構和本文智慧合約程式碼的結構非常相似。
關於ABAP和Java裡各種靜態代理和動態代理的寫法,請參考我的部落格:
Various Proxy Design Pattern implementation variants in Java, ABAP and JavaScript
3. 將開發好的智慧合約原始檔構建成可執行檔案。這一步確保在部署智慧合約到SAP雲平臺之前,先在本地開發環境將所有潛在錯誤全部檢測出並修復。
4. 登入SAP雲平臺,在Service Marketplace裡點選Hyperledger Fabric的超連結:
建立一個新的Service例項:
建立過程中需要填寫channel的ID和密匙。
還記得上一篇文章Aviva提到區塊鏈分為 公有鏈 , 私有鏈 和 聯盟鏈 ,而超級賬本屬於聯盟鏈麼?在聯盟鏈裡,有一個專門的稱為MSP(Membership Service Provider)的模組,提供成員管理服務,只有授權使用者才能接入區塊鏈網路。這裡我事先在SAP雲平臺上建立了一個渠道並進行認證,因此此處直接輸入一個合法的渠道ID和密匙。關於SAP雲平臺上超級賬本渠道的建立和成員授權接入的步驟,請參考SAP幫助文件:
Service例項建立完畢後,點選Create Service Key按鈕建立key,目的是生成用於OAuth認證的clientId和clientSecret,方便接下來的API呼叫。
點選Service例項的Referencing Apps皮膚,點選按鈕Open Dashboard:
點選Deploy Chaincode,選擇本地構建好的zip包,進行上傳並部署。這個按鈕同SAP雲平臺Neo和CloudFoundry環境部署本地應用的邏輯相同。
部署成功後,點選Test Chaincode超連結進入API控制檯。
該控制檯整合了Swagger框架,在呼叫post請求進行超級賬本的寫操作和get請求進行讀操作之前,先要點選Authorize按鈕進行身份認證:
輸入第四步建立Service Key後生成的clientID和clientSecret進行認證:
認證成功後,可以在Swagger的控制檯裡呼叫post和get請求了。
首先傳送post請求,請求負載就是一個簡單的json物件,id為i042416,value為Hello World:
post請求在SAP雲平臺上的超級賬本執行成功,返回200響應碼:
緊接著執行get請求,輸入剛才寫入的資料id: i042416:
get請求能夠將之前透過post請求寫入賬本的資料成功讀出來:
登入SAP雲平臺超級賬本控制檯,能看到之前透過post寫入的資料已經加入到區塊鏈尾部的區塊了。點選區塊可以檢視資料明細:
在超級賬本控制檯的API Calls和Logs皮膚裡也能看到每次超級賬本讀寫的詳細資訊。
總結一下,SAP雲平臺的超級賬本服務,成功地幫助了希望使用這項區塊鏈技術的企業避免了硬體基礎設施的投入,同時遮蔽了大部分超級賬本平臺管理的底層細節。透過SAP雲平臺提供的控制檯,即可實現對超級賬本進行裝置接入,訪問控制,服務監控等管理功能。同時,透過Go語言編寫的智慧合約一旦部署到SAP雲平臺,生成的Restful API能夠被其他程式語言方便地消費。呼叫這些API寫入超級賬本區塊鏈中的資料將無法再被篡改。使用SAP雲平臺的超級賬本服務,應用開發人員可以無需將過多精力花費在超級賬本體系架構本身,從而能夠專注於應用邏輯的編寫上去。
本文寫作過程中,得到了同事Aviva的大力幫助,在此感謝。
更多閱讀
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2215110/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 第7章 區塊鏈開發平臺:超級賬本區塊鏈
- 華為推出基於超級賬本的區塊鏈服務平臺區塊鏈
- AWS推出以太坊和超級賬本區塊鏈模板區塊鏈
- 區塊鏈平臺EOSIO開發智慧合約和dapp(一)區塊鏈APP
- 區塊鏈Hyperledger超級賬本的前世與今生區塊鏈
- 區塊鏈組織-超級賬本(Hyperledger)的簡介區塊鏈
- 區塊鏈2.0:智慧合約區塊鏈
- 區塊鏈技術精華:四十種智慧合約支援平臺(三)區塊鏈
- 區塊鏈技術精華:四十種智慧合約支援平臺(四)區塊鏈
- 區塊鏈智慧合約開發區塊鏈
- Hyperledger Fabric 超級賬本 java開發區塊鏈環境搭建Java區塊鏈
- 區塊鏈聯盟鏈系統平臺 資料上鍊智慧合約撰寫區塊鏈
- 區塊鏈智慧合約解決方案區塊鏈
- 區塊鏈智慧合約是什麼?區塊鏈
- ATourofEthereum——區塊鏈與智慧合約之旅區塊鏈
- nft交易平臺開發公司|智慧合約|數字藝術品|區塊鏈區塊鏈
- 區塊鏈baas平臺搭建,區塊鏈技術應用開發,合約系統搭建區塊鏈
- 區塊鏈——以太坊、智慧合約簡介區塊鏈
- 區塊鏈技術:智慧合約入門區塊鏈
- 在業務過程中使用區塊鏈和智慧合約區塊鏈
- 區塊鏈合同智慧合約上鍊聯盟鏈區塊鏈
- 瑞波加入超級賬本區塊鏈聯盟區塊鏈
- 智慧合約-區塊鏈核心技術之一區塊鏈
- 區塊鏈BSC智慧合約DAPP開發區塊鏈APP
- 白話智慧合約與區塊鏈技術區塊鏈
- 區塊鏈數字貨幣交易所開發,baas平臺智慧合約撰寫區塊鏈
- 數字資產幣幣交易平臺開發區塊鏈合約交易平臺開發區塊鏈
- NFT鏈上鑄造智慧合約平臺系統開發詳情丨區塊鏈技術上區塊鏈
- 基於區塊鏈技術的超級賬本(Hyperledger) - 從理論到實戰區塊鏈
- 區塊鏈技術|智慧合約證券委託交易平臺開發技術應用區塊鏈
- 區塊鏈智慧合約技術系統開發區塊鏈
- 區塊鏈構建和履行智慧合約的步驟區塊鏈
- 使用truffle部署以太坊智慧合約到區塊鏈區塊鏈
- SAP HANA和區塊鏈區塊鏈
- 區塊鏈100講:Hyperledger Fabric 中的鏈碼(智慧合約)區塊鏈
- 區塊鏈Hyperledger Fabric 2.x 自定義智慧合約區塊鏈
- JAva智慧合約DAPP系統開發(區塊鏈)JavaAPP區塊鏈
- 南京區塊鏈智慧合約交易系統開發方案區塊鏈