
在第一期智能合約庫有獎征碼活動中,我基于共享經濟場景開發了通用化功能合約模板,并貢獻到區塊鏈應用開發組件WeBankBlockchain-SmartDev中,
根據這次開發,我總結了一些個人心得,與社區開發者分享,希望對行業從業者,以及剛剛接觸區塊鏈技術并迫切想要了解如何將區塊鏈跟實際生產環境對接,設計一些場景化互動的小伙伴帶來啟發與借鑒,
本次分享我將從三個維度來進行:第一,共享經濟場景跟區塊鏈結合的需求決議;第二,重點介紹通用化智能合約的規劃與設計;第三,通用化合約的要點歸納與總結,
共享經濟場景與區塊鏈結合的需求決議
共享經濟場景隨處可見,共享單車、共享充電寶、共享列印機,這些產品早已融入人們生活之中,從不同的應用場景中,我們可以看出共享經濟的共性:資料多方流轉、身份鑒權、存證、溯源以及自主化操作,
這些場景也折射出共享經濟目前所存在的痛點:
-
由于缺少人為的監管把控,場景容易出現業務上的漏洞;
-
在一些商業化應用場景中可能會有資料偽造、身份造假的風險;
-
存在事后追溯效果差的弊端,
基于以上痛點,共享經濟產品非常需要信任背書,而區塊鏈自身具有不可篡改、分布式記賬的特性,剛好滿足信任背書的需求,
區塊鏈也可以通過用戶簽名、設備自動化上鏈、區塊鏈鑒權存證,從而達到存證的不可篡改、分布式存盤、全流程可追溯的目的,
相比原來的產品,區塊鏈技術作為一種技術加持,修補了許多漏洞,加強資料安全,
以共享充電為例,假設我是廠商,與平臺運營方、合作方組成合作的業務團體,共同做共享充電的商業化運作,通過引入區塊鏈,實作多方協作程序中資料的透明化,乃至后續資料可追溯化,

用戶端、物聯網設備、業務平臺這三大主體是常見的物聯網跟人進行互動中的三角點,用戶使用手機APP對共享充電的物聯網設備進行掃碼后,設備端與平臺進行資料互動,設備端會得到當前掃碼用戶的相關資訊,并進入后續的業務流程,
業務平臺是高度集權的,在多方參與的程序中,平臺方是有權對資料進行修改調整的,這就意味著業務資料存在篡改的風險,
我們對資料的基礎訴求是:業務資料從開始到結束的整個生命周期,都應該是不可篡改,保證資料的真實完整性是構建業態信任的基石;所以我們引入了區塊鏈來實作訴求,
比如:用戶掃碼使用物聯網設備,物聯網設備不經過業務平臺直接自動化打包資料構建交易進行上鏈,在區塊鏈網路中針對上鏈操作的交易并非全盤接收,而是要對上鏈資料進行多方確權,
目前,區塊鏈的一些技術瓶頸和定位,不適合做復雜計算和大量存盤,比較適合賬本型別的記賬作業,記錄結果摘要等資料,
隨著未來使用場景增加,區塊鏈延伸的功能也會越來越多樣,但回歸到本質,最初我們想要結合區塊鏈是出于加強信任的意愿,
首先,像這一型別的需求通常伴隨各方用戶參與、權限管控、身份鑒權等;
其次,業務資料的存證也是不可缺少的環節;
最后,配套衍生功能,如積分產生、交易、核銷以及各個場景額外的需求功能,
智能合約的規劃與設計
在共享經濟場景中,我們對場景中的共性功能進行提煉,寫出通用化合約,設計通用合約的目的好比開發開源框架,將共性功能提煉并實作,減少開發作業量、提高復用率,以便我們根據具體業務進行靈活拓展,
從不同維度對通用合約進行規劃與設計,我們可以先從業務體系角度做規劃,將用戶體系拆分成不同主體:
-
超級管理員是最初區塊鏈部署時的用戶,
-
授權管理者在業務中主要進行運營管控,如:對部分業務體系中的物聯網設備進行授權、對積分核銷、禁用用戶等,
-
注冊用戶是經過業務平臺注冊認證通過的用戶在區塊鏈體系中的映射,

上圖是最為核心的存證設計,我可以根據5W法則來參考,構思存證體系中的要素,將它們映射到我們實際的區塊鏈業務產品中,
比如:who是業務主體;when是時間戳,第三方憑證機構所頒發的時間憑證;what是業務體系的資料摘要;where是設備資訊;why 為何可以上鏈,我們需要身份鑒權,
在共享經濟場景中,明確要求必須是物聯網設備或者經過授權物件才可以上鏈交易操作,另外,在共享經濟產品中有部分衍生化的功能,比如簽名驗證、沿用官方合約+業務改造、預留拓展功能以及工具類,
再從技術維度去考量,其中考量可以分為不同層次,
第一是規范化,我們通常不會把所有的業務代碼都納入到一個合約中,而是會做拆分,即分層設計,使得代碼解耦和結構更清晰,
第二是業務功能,從業務復雜度、性能和安全風控這三個角度來選擇對應的編程模式,如果業務不是特別復雜,可以采用單合約+庫進行組合;如果業務復雜度比較高,則可以拆成多個合約,每個合約在實際環境中進行部署,然后對合約進行管控,
這種復雜模式的運營成本會比較高,需要我們把控好每個合約的控制權限,
第三是前瞻性的考量,更多的是未來合約拓展,比如我寫了1.0的版本,之后又寫了2.0版本,這便是合約的迭代,
如果我想對業務代碼進行改造,一開始部署并沒有預留多余引數,那么就需重新修改代碼,重新部署,中間可能存在原有資料與新資料不共容的問題,

在這種情況下,我們有多種處理方式:
第一種是將業務邏輯和資料分層;
第二種是用原生合約的方式去修改合約地址,從而使得資料和新改造的合約進行無縫銜接,同時,可以采用FISCO BCOS本身提供的預編譯合約--table,解決資料的可持續性問題,
經過業務到技術的維度考量后,我們可以對合約進行設計,首先,采用分層倉儲化的模式進行拆分;其次,使用原生合約,采用單合約部署加多個合約類別庫的模型,目前,并沒有將邏輯層和資料層拆分,因為在實際程序中可以預留給實際場景選擇性地進行拆分,
在這一套合約的構成中,主合約主要有存證、身份鑒權、積分生成、流轉等功能,輔助合約類別庫:包括了兩個倉儲合約庫和三個工具合約庫,
業務操作完整流程如下:
流程一
當完成合約撰寫后,我們會編譯主合約并由區塊鏈管理員將其部署到鏈上,授權多位管理者,再由這些管理者來授權對應的物聯網設備,
流程二
在業務平臺端,假設張三這個用戶使用APP或者小程式在平臺進行注冊,完后業務平臺端的實名認證,平臺會生成對應區塊鏈上的身份地址和公私鑰給到張三,
流程三
-
張三首先使用APP對共享充電的機器設備進行掃碼使用;
-
設備端在接收到掃碼資訊后與業務平臺進行互動,從而得到用戶資訊,
-
用戶進行充電服務,待服務完成后進行訂單付款,此時APP會在用戶付款時,提示用戶授權APP對本次訂單進行授權簽名,
-
用戶訂單簽名可以是由手機藍牙直接發送給物聯網設備,也可以是用戶APP跟業務平臺互動后,再推送給物聯網設備端,
設備端對資料進行有效性校驗,通過校驗后,設備端把對應的用戶訂單簽名、以及自身產生的充電記錄、訂單資訊一起打包構建交易發送到區塊鏈,
-
區塊鏈針對交易上發的操作者進行身份鑒權,業務資料中的用戶也需要進行身份鑒權,保證其為平臺注冊認證的許可用戶,最后進行其他業務相關性驗證,無誤后,進行資料存證,
在實際業務場景中,我們還可以通過預言機等中間件將區塊鏈資訊有效地反饋到業務平臺中,

通用化合約的要點歸納與總結
從業務體系來說,用戶角色、權限管控、存證功能是基礎,是必須要滿足的,其次,通用合約的定制功能是根據實際需求和未來預留,一般會采用模塊化合約庫的形式去做不同業務體系拆分,其他內容可以根據業務需求,在實際中去考量,
目前,面向廣大開源貢獻者開展的智能合約庫有獎征集代碼活動仍在繼續,希望大家群策群力,為后續的開發者提供安全又可靠的合約,
在開發程序中,使用開源軟體能夠減少開發投入,將注意力聚焦在我們更需要投入時間研究的內容上,
具體操作演示,歡迎點擊觀看演示操作:
共享經濟場景下的通用合約設計
《超話區塊鏈》是由FISCO BCOS 開源社區推出的直播活動,每周四晚8點,社區邀請一位技術極客或應用先鋒,做客直播間分享開發實踐或應用心得,作為社區固定欄目,《超話區塊鏈》已舉辦近百場,從技術研討到產業應用均有觸達,歡迎大家自薦或推薦朋友到直播間分享,加【小助手】入群觀看直播,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/291259.html
標籤:區塊鏈
上一篇:MEXC Global科普:第一批獲得Kusama插槽的明星專案
下一篇:2021-07-30
