劉霆 李博 何櫟
(河南工程學院 河南省鄭州市 451191)
傳統電商平臺通常采用的是中心化記賬節點,雖然便于管理,但平臺對交易有著最高的操作權限,這會衍生出一系列的信任問題。最為直觀的便是近日京東的“顯卡穿倉”事件,客戶的顯卡在不經意間就不知所蹤[1]。這一事件充分揭示了中心化節點存在的信用問題,中心節點可以對客戶的數據隨意更改,這將導致極為嚴重的信任危機。
區塊鏈是近年來研究的熱點,區塊鏈技術具有不可篡改、開放透明、機器自治等重要特征,以此解決交易過程中的信任和安全問題。從定義來看,區塊鏈是一種按時間順序將不斷產生的信息區塊以順序方式組合而成的一種可追溯的鏈式數據結構,是一種以密碼學方式保證數據不可篡改、不可偽造的分布式賬本[2]。區塊鏈是非對稱加密算法、共識機制、分布式存儲、點對點傳輸等相關技術通過新方式組合形成的創新應用。為了提升交易數據的可靠性,區塊鏈將交易數據全部存儲在鏈式數據結構上,這保證了交易數據的唯一性與可靠性,從最大限度上避免交易被篡改[3]。從長遠角度來看,區塊鏈技術有著廣闊的發展前景,不只是作為賬本,任何需要公正、防偽的場合都可以使用區塊鏈技術。
雖然從長遠來看,區塊鏈在很多產業都有應用潛力,但是目前區塊鏈與金融行業明顯最為契合。區塊鏈技術可以應用在票據流轉、供應鏈金融,再到證券發行與交易等領域[4]?,F在存在的大量繁瑣的手工操作也可以被智能合約所取代,減少交易延遲、欺詐、操作風險以及系統錯誤導致的損失。區塊鏈技術不僅作為賬本具有其不可篡改、分布式的特性,還可以為商品溯源提供技術支持,為商品的質量把關,并在出現問題時提供完整的證據鏈條[5-7]。從下單到貨物的流轉再到資金的流動,區塊鏈技術可以打造一個完整的基于鏈的商業平臺,從技術上保證平臺交易的真實性與安全性。
網上購物已成為商業的重要形式,但由于產品質量不能保證和售后服務困難,消費者對電商平臺的信心不足。出現這一現象的主要原因是消費者的購物交易的數據由電商平臺存儲和維護,易出現篡改和否認等情況。另外,電商平臺公布的交易數據,比如銷量等,是消費者購物活動的主要參考指標,而電商平臺公布的交易數據存在可信性不高的問題。本文通過將交易數據保存在區塊鏈中,實現了交易數據的無法篡改,從而獲得了高可信性,有助于購物者參考交易數據進行購買活動,以及售后的維權。這種技術解決了電子商務的消費者信任的痛點問題,將會促進電子商務的持續高速健康發展。本文將區塊鏈技術引入網上購物,能夠讓普通消費者對沒有信任基礎的電子商務網站建立信任,低成本、高效率地解決網上購物的信任問題。區塊鏈的不可篡改的特征,可保證存儲在系統中的交易數據完整可靠,避免數據在存儲、傳輸和展示環節被內部管理人員和外部攻擊者篡改。因為主要采用了成熟的網站開發技術,本文區塊鏈網站的解決方案能夠成功地應用于各種不同的行業領域。
本文采用JSP開發電子商務網站,使用Tomcat提供Web服務。將基于Hyperledger Fabric的區塊鏈安裝部署在服務器上,同時安裝MySQL數據庫,服務器使用Ubuntu16.04操作系統。用戶通過JSP網頁訪問MySQL數據庫和Hyperledger Fabric區塊鏈。
區塊鏈是重要的新興技術,擁有廣闊的應用前景,受到了各方面的高度重視,現在主要有公有鏈、私有鏈和聯盟鏈等三種形式。公有鏈是所有人都可以訪問的區塊鏈,私有鏈是只有區塊鏈所有者可以訪問,聯盟鏈則是只有符合條件的授權用戶才可以訪問[8]。在本文中只有在電子商務網站合法注冊的用戶才可以訪問區塊鏈,所以采用的是聯盟區塊鏈,目前開發聯盟鏈最常用的平臺是Hyperledger Fabric。
Hyperledger Fabric為完成高可靠性與網絡的一致性,系統結構比較復雜,所使用的節點數量比較多,主要采用Docker作為節點的安裝部署方式。Docker提供了一種虛擬化的環境,應用軟件運行在此環境中。本文采用本地(Native)模式安裝Hyperledger Fabric,使用的節點直接安裝在硬件上,所以軟件直接運行在計算機實際的硬件上而不需要通過仿真或其他程序的干預,這種方式方便可保證系統的運行效率,并方便應用軟件的開發。為了開發JSP網站程序進行Hyperledger Fabric區塊鏈的操作,還在服務器上安裝了Fabric Java SKD,JSP程序實現了對區塊鏈的數據新增、查詢等。
安裝Hyperledger Fabric前要先安裝Go語言并設置環境變量GOROOT、GOPATH、GOBIN、PATH等。Hyperledger Fabric安裝在/opt/hyperledger下,主要的文件結構如圖1所示。

圖1:Hyperledger Fabric主要的文件結構
在fabricconfig文件夾下配置crypto-config.yaml文件,在order文件夾下配置configtx.yaml和orderer.yaml文件,在peer文件夾下配置core.yaml文件。然后運行相關命令生成通道、組織、創始區塊、排序節點等。本文網站在服務器上運行Orderer節點和Peer節點,Peer節點即作為背書節點,又作為執行節點。
Hyperledger Fabric對于區塊鏈的操作都通過鏈碼執行,鏈碼程序被寫入GO語言的文件里,并放在指定的文件夾里。鏈碼文件放置的位置是~/go/src/MyChainCode,鏈碼程序使用GO語言編寫,鏈碼程序名稱是mycc6。
交易信息的數據結構如下所示。

鏈碼中保存交易記錄的程序如下:


在終端的/opt/hyperledger/fabricconfig目錄下執行安裝與初始化命令:
peer chaincode install -n mycc6 -v v1 -p MyChainCode
peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n mycc -v v1 -c '{"Args":["init"]}' -P "OR ('Org1MSP.member', 'Org2MSP.member')"
在編寫完鏈碼的程序后執行鏈碼更新命令:
peer chaincode upgrade -o orderer.example.com:7050 -C mychannel -n mycc6 -v v5 -c '{"Args":["init"]}'
JSP(Java Server Page)是廣泛采用的動態網頁開發技術,JSP部署于網絡服務器上,可以響應客戶端發送的請求,并根據請求內容動態地生成HTML、XML或其他格式文檔的Web網頁,然后返回給請求者。JSP使用Tomcat作為Web容器,在服務器端口提供相應的服務處理從客戶端發出的請求。Tomcat運行時占用的系統資源小,擴展性好,支持負載平衡與郵件服務等開發應用系統常用的功能。Tomcat是一個小型的輕量級應用服務器,普遍用于中小型系統和并發訪問量較低的場合,是開發和調試JSP程序的首選。MySQL是最流行的關系型數據庫,具有開源、跨平臺的特點,在國內外被廣泛地應用。本文網站的用戶信息和商品的基本信息保存在數據庫中,需要在服務器上安裝MySQL數據庫。用戶在使用網站時,JSP程序讀寫數據庫完成所需要的操作。
3.1.1 系統方案
本文的區塊鏈電子商務網站采用JSP與關系數據庫相結合的方式,實現基礎的B2C電子商務網站的功能。用戶通過網頁進行登錄、查詢商品信息等操作。常規的數據如用戶名、密碼、商品信息等都保存在MySQL中,但將銷售數據的存儲從數據庫轉移到了區塊鏈。通過Web服務,用戶能夠購買商品,系統可以自動顯示購買量最大的商品。用戶的商品購買記錄都保存在區塊鏈中,用于系統自動統計銷量并顯示熱銷商品,也用于用戶查詢自己的購買記錄。
3.1.2 軟件流程
本系統前端使用JSP網頁作為客戶的操作頁面,后端采用MySQL存儲用戶個人信息以及商品等信息,而最重要的交易信息則被存儲在區塊上。用戶登錄系統通過驗證后查看商品信息和購買商品,此時商品交易信息會傳至后臺區塊鏈上,由鏈進行記錄,之后會將該交易的編號返回給用戶,此編號將是該交易的標識信息。交易完成后,程序在區塊鏈上查詢同一商品的歷史交易記錄,計算出商品交易的總數,并將其保存到MySQL數據庫,以供熱銷推薦。用戶可以查詢自己的交易記錄,返回所有訂單編號、交易時間、商品以及交易編號等信息。
本系統實現了用戶注冊和登錄等基礎功能,還可進行查詢商品信息、購買以及顯示用戶歷史訂單等操作,另外還實現了自動將商品按采購數量排序顯示。主頁界面如圖2所示。

圖2:網站主頁界面
3.2.1 注冊、登錄和修改密碼
新用戶用自己的身份證號注冊,并設置密碼。用戶的身份證號是用戶采購商品記錄的憑證。用戶用自己的身份證號和密碼登錄系統,并可以重新設置自己的登錄密碼。
3.2.2 查詢商品的詳細信息、購買商品
用戶能夠從主頁直接選擇商品查看詳細信息,還可以查詢某品牌的所有商品,并查看其中某個商品的詳細信息。在商品詳細信息頁面,用戶可以購買該商品。購買成功后,網站顯示此項交易在Hyperledger Fabric中的交易編號。
3.2.3 查詢歷史訂單記錄
用戶登錄后可以查詢自己的歷史購買記錄,系統將顯示交易的商品名稱、交易時間、交易編號等信息。
本文網站可實現用戶正常采購商品,且所有的銷售數據均保存在區塊鏈中。用戶可以在區塊鏈中保存和查詢自己的銷售數據,系統將銷售數據從區塊鏈中查詢并匯總統計。系統的區塊鏈保存與查詢速度可滿足一般電子商務網站的業務需要,響應迅速、結果準確。本文采用實際部署測試的方法,首先將本作品部署在服務器上,然后對各個功能進行實際測試,檢查結果的正確性和響應所需的時間。
進入/opt/hyperledger/order目錄下啟動orderer節點,輸入命令:orderer start。
進入/opt/hyperledger/peer目錄下啟動peer節點,輸入命令:
export set FABRIC_CFG_PATH=/opt/hyperledger/peer
peer node start >> log_peer.log 2>&1 &
執行購買動作后交易信息被保存到區塊鏈mychannel中,并返回該交易編號。購買結束后,程序查詢區塊鏈中此商品的歷史購買數量,然后在數據庫中保存新的歷史購買總數,用于熱銷推薦。經過多次購買商品進行測試,得到購買商品所需時間為85ms,基本可以滿足電子商務網站的操作需要。購買商品的返回結果如圖3所示。

圖3:購買商品后的返回結果
用戶可從區塊鏈mychannel中查找到用戶的歷史交易信息,通過多次查詢不同的用戶歷史訂單,得到用戶查詢歷史訂單的時間約為125ms,基本可以滿足電子商務網站的操作需要。查詢購買商品歷史記錄的返回結果如圖4所示。

圖4:查詢購買商品歷史記錄的返回結果
本文將區塊鏈技術應用于電子商務網站,以區塊鏈存儲交易信息,依靠其透明和不可篡改的特性滿足了供求雙方對交易數據高真實性的需要,切中行業痛點。本文采用了常用的JSP技術開發網站,并用Fabric Java SDK訪問區塊鏈,所用技術易于學習和掌握,且效率較高。本文提供的方案適用于不同行業領域,特別是需要信息高度真實可信的應用,例如股票證券的交易、產品的溯源、銀行貸款以及信用審查等方面。
未來的研究將增加Orderer節點的數量,減少對單節點的依賴;應用Kafka的多節點模式,實現網站的高并發吞吐;另外還將在區塊鏈中存儲和維護更多的信息,比如用戶信息、商品信息等,實現功能更加優化的區塊鏈系統。