楊艷梅,劉心如,鄧朝軍,薛榮
(上海理工大學光電信息與計算機工程學院,上海 200093)
公益是社會成員基于社會責任感、使命感,主動為了公眾利益,通過做好事、行善舉等方式解決或改善社會問題。與慈善不同,公益除了捐款,更重要的是人人參與。公益活動的形式多種多樣,如社區服務、環境保護、義務植樹、捐款捐物等等。
隨著我國公益慈善事業的快速發展,社會公眾對善款去向的合理性、公益項目的透明度尤為關注。任何不透明事件都可能激發民眾的不滿、挑戰社會公眾信心,成為阻礙公益慈善發展的瓶頸。如去年疫情期間,某機構因物資分配的合理性、透明性而受到民眾廣泛質疑;再如有人在水滴籌平臺偽造虛假病例及住院證明,惡意騙取善款等,都嚴重影響了人們投身公益的熱情。
區塊鏈技術具有去中心化、公開透明、信息可追溯、通過智能合約自動執行等天然優勢,正好對應地解決公益慈善中被詬病的種種問題。區塊鏈技術帶來的信任互聯網機制將推動公益慈善進入公益4.0階段,以技術重塑信任機制來提高慈善組織公信力。因此,將區塊鏈技術應用于公益慈善項目研究及應用日益受到關注。
李琪等提出一種基于區塊鏈技術的慈善應用模式,通過時間戳機制實現善款追蹤與實時更新,并通過優勢分析和性能分析證明該平臺能安全、有效地跟蹤善款流向,防止善款濫用;Jayasinghe等搭建基于區塊鏈技術的慈善籌款平臺,利用比特幣、智能合約和多重簽名等技術,為慈善組織籌集善款,技術上保證信息的公開、透明;譚文安等提出一種基于以太坊智能合約的捐助方案,并通過基于智能合約的可信籌款捐助平臺驗證了該方案的可行性;張朝新利用以太坊智能合約設計資助平臺,增加了資金使用的透明度;陳志東等提出了眾籌業務的私有區塊鏈架構以滿足眾籌業務需要,加強金融數據的安全和公信力;《2018區塊鏈公益事業研究報告》總結了區塊鏈公益事業的應用模式,盤點國內外的區塊鏈公益項目,指出聯盟鏈可解信任難題;阿里巴巴2019年正式對外發布了“鏈上公益計劃”,2020年9月提出并聯合起草了《公益鏈技術和應用規范》團體標準,促進公益事業更加公開透明;2020年Fraternity作為全球首個基于TRON波場主流公鏈開發的去中心化公益互動項目,充分利用和發揮了區塊鏈技術的去中心化、不可篡改及公平公正的特性與優勢。
當前研究多是將區塊鏈技術應用于捐贈類慈善事業,本文基于Con flux,將區塊鏈技術應用于專業服務類公益活動,搭建一個志愿者活動發布與參與、公益時長積分記錄、查詢與認證的平臺,做到整個公益活動過程中的信息可追溯、不可篡改。
區塊鏈是一種融合多種現有技術的新型分布式計算和存儲范式,涉及的領域較多,包括分布式系統、存儲、密碼學、心理學、經濟學、博弈論、控制論、網絡協議等。從網絡層次模型角度劃分區塊鏈技術,自上而下分為網絡層、數據層、共識層、控制層和應用層,各層對涉及到的關鍵技術進行封裝實現。
區塊鏈技術具有去中心化、不開篡改和公開透明等特點。
(1)去中心化。區塊鏈將信息存儲在網絡鏈上的所有節點中,鏈上的各節點都是平等的,不存在中心化集中管理節點。
(2)不可篡改。區塊鏈是一個分布式賬本,網絡中的節點都各自保存著一份完整的數據;根據共識機制,單個網絡節點對數據的修改不會被其他節點認可,進而修改無效;除非在一定時間內能控制網絡中超過51%的節點才能修改成功,而這不太現實。
(3)公開透明。區塊鏈上的所有信息包括智能合約代碼都對全網絡公開,各節點都可以對每次操作進行查詢和溯源。
區塊鏈的發展經歷了以比特幣為代表的貨幣區塊鏈1.0,以太坊為智能合約代表的區塊鏈2.0,智能合約的出現使區塊鏈得以廣泛應用。目前區塊鏈技術快速發展、百花齊放,出現了眾多區塊鏈平臺和項目,如Hyperledger、FISCO BCOS、Filecoin和Con flux等。這些平臺封裝了區塊鏈的底層技術,使開發基于區塊鏈的應用變的更加容易,正引領區塊鏈朝著3.0時代發展。
Con flux是由清華大學姚班創立的一個可擴展、去中心化的區塊鏈底層平臺。Con flux采用了獨創的GHAST共識協議,可以處理并發區塊,不丟棄任何分叉,并運用基于有向無環圖(DAG)概念的排序算法來避免分叉問題,具有高吞吐量和快速確認等特性。Con flux立足于使中國區塊鏈技術走向全球,得到了機構和社區的高度認可。Con flux交易代付機制大幅提高了用戶體驗感,為創新金融應用提供了堅實基礎,本文基于Con flux進行研究探討。
根據應用類型,公益項目分為資金類、物資類和專業服務類;專業服務類指由志愿者或專業機構提供的服務,不涉及物資和善款。本平臺只引入活動發布者和活動參與者兩種角色,分別接受服務和提供服務。不需要注冊,人人都可以通過Con flux賬戶在本平臺發布公益活動,人人也都可以選擇活動進行參與。沒有公益組織機構這一角色對發布的活動進行審核,使活動的發布更加靈活高效。
公益活動平臺如圖1所示,主要功能包括“發布公益活動”、“查看活動”、“參與活動”和“我的信息”4個部分。①活動發布者填寫公益活動的關鍵信息(包括活動時長)并發布公益活動;②將所有的活動顯示在列表中;③活動參與者選擇公益活動并參與;④活動結束之后參與者獲得相應的時長積分。根據區塊鏈上信息可追溯的特點,該公益時長可以作為個人參與公益活動的有效憑證,較傳統平臺可信度更高,可在“我的信息”中查看。

Fig.1 Business model圖1 業務模型
本文基于Con flux Studio智能合約的集成化開發環境開發。Con flux Studio是一個快速開發Con flux智能合約的集成開發環境,集成了Docker、Con flux Node以及Con flux Truffle,該集成開發環境可以很方便地實現DAPP(Decentralization Application,DAPP)開發。平臺系統架構如圖2所示。

Fig.2 System architecture圖2 系統架構
與傳統的Web UI開發類似,該平臺分為前端、后端和JavaScript接口3個部分。
(1)前端負責與用戶交互,如公益活動的發布、查詢、參與等操作界面。
(2)后端負責提供服務、存儲數據。和傳統Web服務后端不同的是,區塊鏈的后端數據分布式存儲在區塊鏈各節點上,而不是存儲在某個服務器上。單獨修改一個節點中數據不會被其他節點認可,保證了數據不可篡改。后端的業務邏輯(智能合約代碼)也和數據一樣存儲在鏈上,由事件(前端界面)觸發執行。本文主要利用Solidity語言編寫智能合約,實現公益活動時長的記賬、留痕,做到公益活動憑證的可靠、可信。
區塊鏈上存儲的信息分為兩類:志愿者列表和活動列表。志愿者列表用于保存活動發布者和活動參與者的個人信息,包括報名的活動、發布的活動、參加的活動、活動時長等信息。活動列表用于保存公益活動的具體信息,包括時間、地點、內容、時長等信息。在發布或參與活動時,獲取的志愿者信息和活動信息分別保存到兩個列表中。志愿者信息結構如表1所示,活動信息結構如表2所示。

Table1 Volunteer structure表1 志愿者結構體

Table2 Activity information structure表2 活動信息結構體

續表
(3)前后端的交互需要通過JavaScript調用Web3.js觸發后端的智能合約執行。Web3.js是一個庫集合,封裝了一套和區塊鏈節點進行通信的API。通過該API操作,首先會關聯到操作者的錢包賬戶,然后將該賬戶地址一起傳遞給后端的合約代碼,在合約代碼中可以通過隱含參數“msg.sender”獲取到本次請求者的賬戶地址,保證了每個操作都可以追溯、無法抵賴。
3.1.1 前端界面
活動的發布者和參與者不需要在本平臺注冊賬號就可直接發布公益活動,活動發布界面如圖3所示,主要實現活動內容填寫,填寫之后點擊“發布”即可通過JavaScript封裝的接口將前端界面的內容傳遞給后端合約代碼。

Fig.3 Posting activity圖3 發布活動
3.1.2 后端智能合約
后端合約接口收到“發布活動”事件后,會執行post Activity合約算法,該算法主要用于保存活動信息和志愿者信息,其內容如下:
輸入公益活動信息
輸出將信息保存在志愿者列表和活動列表后,返回成功或失敗
將活動狀態初始化為“報名中”,生成活動ID(簡化處理、根據活動列表下標)
將活動信息保存到活動列表中
從msg.sender獲取活動發布者賬戶地址
在志愿者列表中查找發布者賬戶地址,如未找到則添加一條記錄
在該志愿者已發布列表中加入該活動ID
返回發布成功
查看公益活動包括“活動列表”和“活動詳情”兩個頁面,如圖4和圖5所示。“活動列表”展示了所有的公益活動,點擊列表中的“活動名稱”即可進入“活動詳情”頁面。
在“活動詳情”頁面可以報名參與活動。點擊“已報名詳情”,后端合約算法會根據賬戶地址判斷是否是活動創建者發起的請求,如果是則返回“活動參與者”信息列表,包括姓名和聯系電話;如果不是則返回空列表。

Fig.4 Activity list圖4 活動列表

Fig.5 Activity detail圖5 活動詳情
點擊“活動詳情”頁面的“立即報名”,按鈕會彈出報名界面,在該界面輸入“姓名”和“電話”,然后“確認報名”即可。后端收到后會執行joinActivity合約算法,主要邏輯描述如下:
輸入參與者信息及活動ID
輸出返回參與成功或失敗
根據前端請求中攜帶的活動ID,在活動列表中查找活動并確認活動狀態,如果狀態不是“報名中”則返回失敗
在活動信息的“申請參加者列表”中加入該志愿者賬戶
在志愿者列表中查找該參與者賬戶地址,如未找到則添加一條記錄
在“報名中的活動列表”中加入該活動ID
本頁面主要用于展示個人信息。后端收到請求后會根據賬戶地址在志愿者列表中查找,如找到則返回表1定義的結構體內容。
已發布活動完成后,發布者需要手動修改活動狀態為“已結束”,后端收到請求后觸發finishActivity合約算法,邏輯如下:
輸入活動ID
輸出返回成功或失敗
根據活動ID,在活動列表中查找活動,并將活動狀態改為“已結束”
遍歷該活動的“申請參加者列表”所有志愿者,進行下面兩個步驟動作
累計時長積分加上本活動時長;將本活動從“已報名的活動列表”移至“已參加的活動列表”
在志愿者列表該用戶的“報名中的活動列表”中加入該活動ID
該平臺與傳統的公益活動小程序相比,最大的不同之處是將后端信息存儲在區塊鏈上而不是存儲在某個服務器中,因而具有區塊鏈的優勢:透明、可信、可追溯等。但區塊鏈技術目前尚未大規模應用,用戶群較小,因此該平臺很難像傳統的公益小程序一樣廣泛應用。
公益慈善事業中偶爾出現的弄虛作假事件,對公益慈善組織的透明度、公信力會產生較大的負面影響。區塊鏈技術具有去中心化、分布式記賬等天然優勢,為公益慈善事業的發展提供了新的方向。本文將區塊鏈技術應用于服務類公益活動,搭建了一個公益活動服務平臺,將活動信息記錄在區塊鏈上,保證了公益活動信息可追溯、不可篡改。區塊鏈公益慈善的發展不僅依賴區塊鏈技術本身,還需要各慈善組織、大型平臺積極參與,以及政府進行信息監管,發展過程還需時日。后續將對公益慈善的組織及運作模式作進一步研究。