微眾銀行權(quán)限治理組件:構(gòu)筑區(qū)塊鏈業(yè)務(wù)權(quán)限的“防火墻”
區(qū)塊鏈歷經(jīng)10余年的發(fā)展,基礎(chǔ)技術(shù)框架逐漸完善,鏈上承載的業(yè)務(wù)越來越豐富,參與方越來越多。多方協(xié)作能否順暢進行、業(yè)務(wù)摩擦能否得到有效解決、既往治理策略和實踐能否滿足日后高速發(fā)展的需求……行業(yè)關(guān)注的重點逐步聚焦到這些更具挑戰(zhàn)性的難題上。
2021年1月,微眾銀行區(qū)塊鏈在多年技術(shù)研究和應(yīng)用實踐的基礎(chǔ)上,重磅發(fā)布了《面向區(qū)塊鏈的多方協(xié)作治理框架》白皮書,即MCGF(Multilateral Collaborative Governance Framework)。作為區(qū)塊鏈治理的參考架構(gòu),MCGF全面覆蓋區(qū)塊鏈治理的設(shè)計規(guī)范、參與角色、核心系統(tǒng)架構(gòu)、功能流程及應(yīng)用場景等領(lǐng)域。
區(qū)塊鏈多方協(xié)作治理組件(WeBankBlockchain-Governance)MCGF框架的實做基礎(chǔ)和原子性構(gòu)件,可復(fù)用、可定制,由私鑰管理組件(Governance-Key)、賬戶治理組件(Governance-Account)、權(quán)限治理組件(Governance-Authority)、證書管理組件(Governance-Cert)等子組件構(gòu)成。它們嵌入和運行在整個MCGF大框架的各部分,宛如高速行駛的汽車上的車輪、齒輪、傳動組、傳感器,協(xié)同助力構(gòu)建治理框架和提升開發(fā)效率。
本篇文章是區(qū)塊鏈多方協(xié)作治理組件系列文章的第二篇,將介紹權(quán)限治理組件(Governance-Authority),歡迎大家積極體驗并將使用訴求或優(yōu)化建議反饋給我們。
智能合約權(quán)限管控的必要性
隨著區(qū)塊鏈應(yīng)用日漸復(fù)雜,智能合約的編寫也越來越復(fù)雜。如果不對智能合約做權(quán)限控制,恐將無法滿足業(yè)務(wù)的安全性要求。例如,存證場景中,除了上傳存證的函數(shù)外,還有許多專供審核人員調(diào)用的函數(shù),這些函數(shù)應(yīng)僅由審核人員來使用,如果這些函數(shù)沒有正確設(shè)置權(quán)限攔截邏輯,整套邏輯就容易被攻擊和操控。聯(lián)盟鏈的應(yīng)用可能會因此陷入安全危機,更有甚者,造成聯(lián)盟生態(tài)的分崩離析。
對智能合約進行權(quán)限控制有一些備選方案:方案一是在上鏈SDK或代理節(jié)點進行訪問控制,即鏈下控制;方案二是直接在智能合約層進行控制。

其中,鏈下控制權(quán)限的方案并不安全。在區(qū)塊鏈網(wǎng)絡(luò)中,存在多個分布式對等的參與節(jié)點。這些聯(lián)盟的參與者之間,彼此并不完全信任。其他參與機構(gòu)的參與者可能會直接通過本機構(gòu)的區(qū)塊鏈節(jié)點訪問智能合約,從而繞開鏈下的權(quán)限控制。因此,在鏈下進行權(quán)限控制存在漏洞,其他參與者完全可能篡改或控制業(yè)務(wù)合約。
在鏈上實現(xiàn)嚴(yán)格的權(quán)限管控,即通過智能合約本身管控合約權(quán)限是更好的方式。多方協(xié)作治理組件中的權(quán)限治理組件(Governance-Authority)就是基于智能合約來實現(xiàn)權(quán)限管控的。
認(rèn)識權(quán)限治理組件(Governance-Authority)

權(quán)限治理組件WeBankBlockchain-Governance-Authority的目的在于為智能合約開發(fā)者提供權(quán)限控制功能。開發(fā)者只要添加少量代碼,即可攔截非法調(diào)用。同時,會產(chǎn)生一個專門的權(quán)限治理合約,用于治理各個業(yè)務(wù)合約的攔截規(guī)則,對規(guī)則的修改只需操作權(quán)限治理合約,不需要調(diào)整業(yè)務(wù)合約,且修改實時生效。
使用權(quán)限治理組件模式,不僅能防范智能合約被越權(quán)訪問,還能提供細(xì)粒度、標(biāo)準(zhǔn)化的管控能力,幫助用戶迅速集成智能合約權(quán)限治理的能力。相關(guān)的運作流程如下:

業(yè)務(wù)治理者將權(quán)限管理的智能合約部署到鏈上,可發(fā)起業(yè)務(wù)權(quán)限管理的提案。 業(yè)務(wù)層的智能合約可在業(yè)務(wù)合約中添加權(quán)限管理的鑒權(quán)接口,根據(jù)鑒權(quán)結(jié)果決定是否允許放行。 參與者可通過鏈上治理合約發(fā)起申請,加入具體權(quán)限分組的提案,并交由治理者批準(zhǔn)。假設(shè)治理合約中設(shè)置采用委員會模式,治理委員會成員通過直接投票的方式進行閾值投票。其中,一種典型的方式是一票通過,即治理委員會任意成員投票通過即可。 業(yè)務(wù)權(quán)限管理合約維護了用戶、業(yè)務(wù)合約及函數(shù)的權(quán)限映射關(guān)系。 如存在監(jiān)管者,監(jiān)管者有權(quán)通過監(jiān)管接口直接發(fā)起監(jiān)管操作,實現(xiàn)實時、可穿透的監(jiān)管。 用戶發(fā)起業(yè)務(wù)請求,自動觸發(fā)智能合約中的業(yè)務(wù)權(quán)限鑒權(quán)接口判斷,該功能自動返回鑒權(quán)結(jié)果,實現(xiàn)業(yè)務(wù)權(quán)限管控的效果。
除了提供合約方式來管理治理合約之外,為了便于集成到區(qū)塊鏈應(yīng)用中,權(quán)限治理組件還提供了Java SDK。對于權(quán)限管理人員,既支持通過手動方式來調(diào)用權(quán)限合約,也支持通過SDK方式進行調(diào)用。
區(qū)塊鏈治理組件實現(xiàn)了與底層解耦、靈活高效、安全可信、不可篡改的權(quán)限管理治理能力,解決了區(qū)塊鏈應(yīng)用分組管理和精細(xì)化控制的痛點。
關(guān)鍵特性
函數(shù)級的權(quán)限粒度
聯(lián)盟鏈底層平臺也支持合約權(quán)限管理,但只能細(xì)化到以合約作為最小單位的粒度。而在權(quán)限體系中,可以進一步為合約中的每個函數(shù)單獨設(shè)置權(quán)限,同一個合約中的不同函數(shù)可被設(shè)置為不同的權(quán)限。
支持分組管理
部分聯(lián)盟鏈支持基于賬戶來管理和分配權(quán)限。而權(quán)限治理組件則進一步支持建立分組,合約函數(shù)的權(quán)限配置基本單位為組,可以設(shè)置整批賬戶的權(quán)限訪問規(guī)則,達到簡化配置、優(yōu)化管理的效果。
支持黑白名單
權(quán)限治理組件支持基于黑名單或白名單的方式來管理函數(shù)訪問。用戶可基于具體的場景,按需選擇是以黑名單還是白名單的方式來管理權(quán)限。
侵入性低
區(qū)別于鏈級別的權(quán)限管理,權(quán)限治理組件在使用的時候更為靈活、輕量。在具體的業(yè)務(wù)場景中,業(yè)務(wù)合約只需要在代碼中引入權(quán)限合約地址,并通過在需要權(quán)限控制的函數(shù)中訪問權(quán)限合約的權(quán)限判斷接口,就可以實現(xiàn)權(quán)限控制。
多種治理方式
允許中心化和多中心化兩種方式進行權(quán)限治理。除了為兼容傳統(tǒng)中心化場景下所提供的管理員模式外;權(quán)限治理組件還提供了多中心化的治理方式。在多中心化方式下,有一個治理委員會,治理委員會成員通過投票來決定如何更改權(quán)限信息。
支持監(jiān)管審計
權(quán)限管理預(yù)留了監(jiān)管者的接口,對監(jiān)管友好,支持嵌入式的監(jiān)管。監(jiān)管者一旦發(fā)現(xiàn)有違法違規(guī)的參與者,可依法依規(guī)發(fā)送監(jiān)管指令,約束和規(guī)范參與者的行為,同時,執(zhí)法的規(guī)則、程序和執(zhí)行都是公開、透明的。在權(quán)限治理組件中,決策信息和操作記錄透明可追溯。
技術(shù)詳解
權(quán)限治理組件包含了合約層和SDK層。
合約層:權(quán)限治理組件基于智能合約來實現(xiàn),定義了管理模式設(shè)置、用戶分組管理、授權(quán)申請、授權(quán)審批、鑒權(quán)、取消授權(quán)等操作的接口。所有參與者可以查看和審核該合約的代碼,并按需來進行調(diào)用。參與者可通過AuthManager合約來部署和調(diào)用合約。

上圖中,粉色部分為一些基礎(chǔ)的工具合約:
SingletonVoter:提供了投票相關(guān)功能的統(tǒng)一封裝。 WeVoteWeight:定義了投票權(quán)重相關(guān)的功能和數(shù)據(jù)結(jié)構(gòu)。 WeVoteRequest:定義了投票提案相關(guān)的功能和數(shù)據(jù)結(jié)構(gòu)。 WEBoardVoteGuard:依托LibBoardVote,抽象并對外提供了多個投票相關(guān)的接口。 LibWeightMap:提供了Map的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)工具庫。 LibAddressSet:提供了地址處理的工具庫。 WEBasicAuth:提供權(quán)限管理的基礎(chǔ)功能,比如合約屬主校驗和屬主轉(zhuǎn)移。
藍色部分為賬戶及相關(guān)的實現(xiàn)合約:
AclManager:管理和存儲了組、賬戶、函數(shù)簽名、權(quán)限等。 WEAdmin:管理和存儲了管理員相關(guān)的賬戶和提供權(quán)限移交等功能。 GovManager:提供了治理者和治理模式設(shè)置等管理。
黃色部分為部署治理相關(guān)合約的接口合約,旨在提供對外統(tǒng)一的接口合約,便于用戶快速部署。
SDK層:封裝了上述權(quán)限治理合約的所有接口,幫助用戶通過Java SDK的方式來通過Java代碼來執(zhí)行這些操作,使得應(yīng)用操作和管理更加順暢、靈活。
應(yīng)用場景
在供應(yīng)鏈金融、農(nóng)牧產(chǎn)品溯源等區(qū)塊鏈業(yè)務(wù)場景中,通常建立的是復(fù)雜的業(yè)務(wù)權(quán)限模型,如:在業(yè)務(wù)隔離方面,支持對業(yè)務(wù)應(yīng)用進行分組管理;在管理粒度方面,支持細(xì)化管控到智能合約函數(shù)的級別;在治理規(guī)則方面,支持各類準(zhǔn)入管理;在治理模式方面,支持管理員和委員會模式;在生效時間方面,支持實時生效。
供應(yīng)鏈金融
在供應(yīng)鏈金融場景中,部分銀行與供應(yīng)鏈上下游企業(yè)組成一個“供應(yīng)鏈金融+區(qū)塊鏈”的聯(lián)盟,以盤活核心企業(yè)與其多級供應(yīng)商之間的應(yīng)收賬款資產(chǎn)的流動性,為供應(yīng)鏈上下游的核心企業(yè)及供應(yīng)商提供靈活、創(chuàng)新的融資渠道,尤其利于規(guī)模較小、金融服務(wù)獲得不充分的小微企業(yè)。
但供應(yīng)鏈金融涉及復(fù)雜的數(shù)據(jù)權(quán)限治理問題。例如,數(shù)據(jù)上傳后,銀行只有可讀權(quán)限;不同的供應(yīng)鏈核心企業(yè)只允許操作本供應(yīng)鏈內(nèi)部的合約數(shù)據(jù);本供應(yīng)鏈內(nèi)的相關(guān)融資信息由交易方寫入,不允許其他企業(yè)上傳……
依托權(quán)限治理組件,供應(yīng)鏈金融場景中的各參與方:如各銀行、核心企業(yè)、大型供應(yīng)商可組成一個業(yè)務(wù)權(quán)限的治理委員會。治理委員會可根據(jù)需求創(chuàng)建不同的成員分組。例如,在同一供應(yīng)鏈鏈條內(nèi),所有參與方被添加到該分組中,可靈活進行相關(guān)的權(quán)限治理。
權(quán)限治理組件有效為供應(yīng)鏈和區(qū)塊鏈的“雙鏈舞動”保駕護航。
農(nóng)牧產(chǎn)品溯源
現(xiàn)有的農(nóng)牧產(chǎn)品溯源過程中,生產(chǎn)、流通、售賣各方呈現(xiàn)信息孤島,且各自的數(shù)據(jù)存在被篡改的風(fēng)險,使用區(qū)塊鏈能有效保證農(nóng)牧產(chǎn)品在生產(chǎn)、運輸、售賣等環(huán)節(jié)的信息真實、有效。
在農(nóng)牧產(chǎn)品溯源場景中,對于同一件商品,其所涉及到的生產(chǎn)方、流通方、銷售方到最終的消費者以及監(jiān)管方,需要將相關(guān)的信息上到同一條鏈中。該場景要求各方獨立操作,將各自環(huán)節(jié)的數(shù)據(jù)予以上傳,例如流通方不能操作生產(chǎn)環(huán)節(jié)所涉及的合約函數(shù)……
因而,農(nóng)牧產(chǎn)品溯源場景對涉及到智能合約權(quán)限的控制提出了較高的要求。
農(nóng)牧產(chǎn)品溯源的各參與方可利用業(yè)務(wù)權(quán)限治理組件,成立一個權(quán)限治理的委員會,來管理各自的權(quán)限。治理者可創(chuàng)建專門的分組,針對相同的商品,對所涉及到的不同環(huán)節(jié),配置不同的控制權(quán)限。
權(quán)限治理組件是諸多應(yīng)用場景的安全“防火墻”。在同一個聯(lián)盟鏈中,可基于業(yè)務(wù)靈活創(chuàng)建不同的分組。通過對治理模式、治理成員、不同分組、黑白名單和合約函數(shù)等信息進行設(shè)置,滿足復(fù)雜業(yè)務(wù)場景下的權(quán)限治理需求。
即刻使用
上述相關(guān)代碼和技術(shù)文檔已更新,歡迎體驗和 star 支持。如需咨詢技術(shù)問題,歡迎關(guān)注本公眾號,對話框回復(fù)【小助手】進技術(shù)交流群。
文檔地址:
https://governance-doc.readthedocs.io/zh_CN/latest/docs/WeBankBlockchain-Governance-Auth/index.html
GitHub代碼庫地址:
https://github.com/WeBankBlockchain/Governance-Authority
gitee代碼庫地址:
如項目對您有幫助,歡迎點亮我們的小星星(點擊項目右上方Star按鈕)。 歡迎提交代碼(Pull requests)。 提問和提交BUG。 如果發(fā)現(xiàn)代碼存在安全漏洞,可通過https://security.webank.com/上報。




