王華,戴建成,許力
(1.閩江師范高等專科學(xué)校 數(shù)字信息工程學(xué)院,福建 福州 350117;2.福建師范大學(xué) 計(jì)算機(jī)與網(wǎng)絡(luò)空間安全學(xué)院,福建 福州 350117;3.物聯(lián)網(wǎng)福建省高校應(yīng)用技術(shù)工程中心,福建 福州 350117)
隨著互聯(lián)網(wǎng)的蓬勃發(fā)展,社交網(wǎng)絡(luò)成為新時(shí)代信息傳遞的重要媒介[1]。人們?cè)谏缃痪W(wǎng)絡(luò)中可以共享、獲取各種信息。目前,社交網(wǎng)絡(luò)已經(jīng)成為人們?nèi)粘I畹闹匾M成部分。據(jù)統(tǒng)計(jì)2019 年我國(guó)社交網(wǎng)絡(luò)用戶規(guī)模已達(dá)到8.62 億人,預(yù)計(jì)2022 年中國(guó)社交網(wǎng)絡(luò)用戶整體突破10 億人[1]。當(dāng)前社交網(wǎng)絡(luò)的發(fā)展依賴于中心化的社交網(wǎng)絡(luò)平臺(tái),受到單點(diǎn)瓶頸限制,中心化管理者無(wú)法實(shí)時(shí)管理用戶發(fā)布的不良信息。更為嚴(yán)重的是,出于自身利益最大化的考慮,管理者常常會(huì)利用用戶流量來(lái)控制和影響輿論導(dǎo)向,達(dá)到不可告人的目的,這無(wú)疑損害了相關(guān)用戶的權(quán)益。甚至,管理者憑借控制權(quán)集中、信息修改不透明等優(yōu)勢(shì),對(duì)相關(guān)用戶的數(shù)據(jù)進(jìn)行篡改,使得相關(guān)用戶的切身權(quán)益更加得不到保障。因此,設(shè)計(jì)一個(gè)新的社交網(wǎng)絡(luò)平臺(tái)成為重要的研究課題。
2008 年,中本聰發(fā)布比特幣,區(qū)塊鏈的概念由此產(chǎn)生[2]。區(qū)塊鏈具有去中心化、不可篡改、全程留痕、可以追溯、集體維護(hù)、公開透明等特點(diǎn)[2]。經(jīng)過(guò)十多年的研究與發(fā)展,區(qū)塊鏈已從數(shù)字貨幣1.0 階段,到結(jié)合智能合約的2.0 階段[3],再到現(xiàn)在的全面接觸社會(huì)生活的3.0 階段[4]。近些年來(lái),區(qū)塊鏈技術(shù)廣泛應(yīng)用到人們生活和社會(huì)發(fā)展的方方面面,在金融[5]、農(nóng)業(yè)[6]、政務(wù)[7]等領(lǐng)域提供了分布式安全服務(wù)。以太坊利用區(qū)塊鏈技術(shù)建立了一個(gè)開源的有智能合約功能的公共區(qū)塊鏈平臺(tái)[8],更進(jìn)一步推進(jìn)了去中心化應(yīng)用的快速發(fā)展。
本文提出一個(gè)去中心化社交網(wǎng)絡(luò)方案,并基于以太坊、智能合約與現(xiàn)有虛擬貨幣交易所實(shí)現(xiàn)了分布式的社交網(wǎng)絡(luò)平臺(tái)。該方案不再依賴中心化管理者,避免了中心化管理者控制輿論和篡改用戶信息。
考慮到不良信息監(jiān)管問(wèn)題,本文設(shè)計(jì)身份認(rèn)證方案實(shí)現(xiàn)對(duì)濫發(fā)不良信息用戶的管理。設(shè)計(jì)基于投票的監(jiān)管機(jī)制,解決了中心化管理單點(diǎn)瓶頸限制的問(wèn)題。設(shè)計(jì)基于熱榜函數(shù)的“評(píng)價(jià)-流量?jī)冬F(xiàn)”雙模式激勵(lì)機(jī)制,確保用戶發(fā)布良好信息的收益高于發(fā)布惡意信息。
通過(guò)hash 算法降低區(qū)塊鏈的存儲(chǔ)開銷。Solidity在線集成開發(fā)環(huán)境Remix 對(duì)平臺(tái)性能進(jìn)行測(cè)試,實(shí)驗(yàn)結(jié)果表明,所提方案實(shí)現(xiàn)了預(yù)期功能,降低了存儲(chǔ)開銷,減少了gas 消耗,在使用少量存儲(chǔ)空間與算力的情況下,保證了分布式信任安全。
區(qū)塊鏈?zhǔn)且环N運(yùn)用密碼學(xué)解決分布式信任問(wèn)題的數(shù)據(jù)結(jié)構(gòu)[9]。如圖1 所示,區(qū)塊鏈通過(guò)將前一區(qū)塊Hash 值與當(dāng)前區(qū)塊數(shù)據(jù)進(jìn)行哈希處理,得到一個(gè)可快速驗(yàn)證的Hash 值。根據(jù)使用場(chǎng)景不同,區(qū)塊記錄的數(shù)據(jù)類型也不同,比特幣則記錄了交易信息[10]。區(qū)塊鏈利用密碼學(xué)形成一種前后關(guān)聯(lián)、可快速驗(yàn)證、且難以偽造的數(shù)據(jù)記錄結(jié)構(gòu)體,從而保證了數(shù)據(jù)的真實(shí)性。

圖1 區(qū)塊鏈結(jié)構(gòu)Fig.1 Block chain structure
以太坊是一個(gè)開源的有智能合約功能的公共區(qū)塊鏈平臺(tái)[8],通過(guò)其專用加密貨幣——以太幣提供去中心化的以太虛擬機(jī)(EVM)來(lái)處理點(diǎn)對(duì)點(diǎn)合約[11]。以太坊設(shè)計(jì)框架如圖2 所示。

圖2 以太坊框架Fig.2 Ethereum framework
系統(tǒng)模型如圖3 所示,其擁有系統(tǒng)開發(fā)者、系統(tǒng)維護(hù)者、內(nèi)容生產(chǎn)者、流量購(gòu)買者以及內(nèi)容閱讀者等五類主要角色。系統(tǒng)的更新與管理,由全體參與者投票決定,每個(gè)人的投票權(quán)重將依據(jù)獲得利潤(rùn)與活躍度動(dòng)態(tài)調(diào)整。具體而言,每類角色如下:

圖3 系統(tǒng)模型Fig.3 System model
(1)系統(tǒng)開發(fā)者:持續(xù)為系統(tǒng)更新。更新內(nèi)容將由投票確認(rèn);用戶調(diào)用新功能時(shí)會(huì)向開發(fā)者轉(zhuǎn)取一定的虛擬貨幣,開發(fā)者以此來(lái)獲得收益。
(2)系統(tǒng)維護(hù)者:為系統(tǒng)提供算力,讓系統(tǒng)持續(xù)的運(yùn)行,每出一個(gè)區(qū)塊,系統(tǒng)會(huì)鑄造新的虛擬貨幣給維護(hù)者。
(3)內(nèi)容生產(chǎn)者:為社交網(wǎng)絡(luò)提供作品,吸引流量的群體。他們可以通過(guò)出售自己區(qū)域的廣告位來(lái)獲取虛擬貨幣,以此獲取收益。
(4)流量購(gòu)買者:使用從開發(fā)者、維護(hù)者、內(nèi)容生產(chǎn)者或閱讀者手中購(gòu)買的虛擬貨幣兌換流量服務(wù)。
(5)內(nèi)容閱讀者:從平臺(tái)獲取信息的用戶。平臺(tái)為閱讀者提供一個(gè)以關(guān)鍵詞為主題的交流社區(qū),準(zhǔn)確把握用戶需求,為興趣而生。讓那些對(duì)同一個(gè)話題感興趣的人們聚集在一起,更加方便地展開交流和互相幫助。
(6)參與者:對(duì)系統(tǒng)更新是否生效而進(jìn)行投票的所有群體。
設(shè)計(jì)一個(gè)基于以太坊的社交網(wǎng)絡(luò)平臺(tái),為社交網(wǎng)絡(luò)上的參與者提供一個(gè)團(tuán)體自治的社交網(wǎng)絡(luò)環(huán)境,具體主要目標(biāo)如下:
去中心化。搭建一個(gè)去中心化的社交網(wǎng)絡(luò)平臺(tái),解決傳統(tǒng)中心化社交網(wǎng)絡(luò)封閉、單點(diǎn)瓶頸、權(quán)限集中等實(shí)際問(wèn)題。
可身份認(rèn)證。采用以太坊公有鏈技術(shù),其去中心化技術(shù)導(dǎo)致用戶匿名性,不便管理。為此,需要對(duì)用戶的身份進(jìn)行認(rèn)證,以此杜絕有不良企圖的用戶,隨意創(chuàng)建并發(fā)布不良信息。
節(jié)約gas。gas 是指調(diào)用合約運(yùn)行時(shí)需要支付的以太幣,支付的gas 將會(huì)直接銷毀。如果一個(gè)合約運(yùn)行需要的gas 值太高,系統(tǒng)可能會(huì)無(wú)法部署,因?yàn)橐蕴痪W(wǎng)有最高gas 的限制,gas 值太大會(huì)影響系統(tǒng)的性能。以太坊中的gas 控制機(jī)制既是為了平臺(tái)的資源考慮,也是對(duì)用戶成本的一種保護(hù)。在本文方案設(shè)計(jì)中,為了優(yōu)化代碼,減少系統(tǒng)運(yùn)行花費(fèi)以及提高運(yùn)行效率,有必要盡可能的減少程序gas 的消耗。
針對(duì)系統(tǒng)整體框架和系統(tǒng)主要功能模塊展開描述,給出具體的設(shè)計(jì)方案。
3.1.1 系統(tǒng)物理架構(gòu)
系統(tǒng)物理架構(gòu)如圖4 所示[12],使用基于區(qū)塊鏈技術(shù)的分布式架構(gòu),不限制加入群體,任何人都可以使用設(shè)備自建屬于自己的社交網(wǎng)絡(luò),或是加入他人的社交網(wǎng)絡(luò)。每個(gè)維護(hù)者負(fù)責(zé)運(yùn)行一個(gè)以太坊區(qū)塊鏈的共識(shí)節(jié)點(diǎn),各維護(hù)者可以利用初始化信息以特定的配置加入到區(qū)塊鏈公有鏈網(wǎng)絡(luò),以區(qū)塊鏈地址作為各個(gè)用戶的唯一標(biāo)識(shí)。之后維護(hù)者又將在自己的設(shè)備上配置web 服務(wù),為閱讀者提供前端服務(wù)用以連接區(qū)塊鏈網(wǎng)絡(luò)。若需要控制用戶注冊(cè),合約發(fā)布可將監(jiān)管機(jī)構(gòu)納入為注冊(cè)系統(tǒng)的管理員。

圖4 系統(tǒng)物理架構(gòu)Fig.4 System physical architecture
3.1.2 系統(tǒng)邏輯架構(gòu)
通常去中心化應(yīng)用(DAPP)由HTML 頁(yè)面、前端JavaScript、web3.js 庫(kù)以及以太坊區(qū)塊鏈組成,這種最簡(jiǎn)單的DAPP 架構(gòu)雖然能滿足區(qū)塊鏈應(yīng)用的基本需求,但是需要前端做很多的邏輯處理,也不能讓閱讀者在不需要連接區(qū)塊鏈網(wǎng)絡(luò)的前提下訪問(wèn)區(qū)塊鏈網(wǎng)絡(luò)的數(shù)據(jù)。所以本文對(duì)其進(jìn)行優(yōu)化,提出了一種四層架構(gòu)的程序框架,如圖5 所示:

圖5 系統(tǒng)邏輯架構(gòu)Fig.5 System logical architecture
網(wǎng)絡(luò)層是實(shí)現(xiàn)分布式網(wǎng)絡(luò)的以太坊底層技術(shù),運(yùn)用區(qū)塊鏈技術(shù)來(lái)保證分布式應(yīng)用的信任問(wèn)題。
合約層使用Solidity 編寫智能合約,完成各項(xiàng)功能控制,實(shí)現(xiàn)區(qū)塊鏈數(shù)據(jù)的存取。
服務(wù)層為用戶提供web 交互和區(qū)塊鏈信息交換服務(wù)。為了讓內(nèi)容閱讀者無(wú)需在客戶端直接連接區(qū)塊鏈網(wǎng)絡(luò),本文方案在服務(wù)端通過(guò)Node.js 調(diào)用web3.js與區(qū)塊鏈進(jìn)行交互,而服務(wù)端直接連接著區(qū)塊鏈網(wǎng)絡(luò),也將大大提升訪問(wèn)速度。在服務(wù)層中,Node.js 是提供服務(wù)的核心,支撐著整個(gè)平臺(tái)的運(yùn)行。
應(yīng)用層提供用戶接口,用以實(shí)現(xiàn)對(duì)數(shù)據(jù)的存儲(chǔ)與修改。通過(guò)web 界面直接與用戶進(jìn)行交互。
經(jīng)過(guò)需求分析,系統(tǒng)功能模塊總體結(jié)構(gòu)如圖6 所示,包含了類貼吧社交模塊,廣告模塊,系統(tǒng)更新模塊和虛擬貨幣交易模塊等。社交模塊為用戶提供社交服務(wù);廣告模塊為內(nèi)容創(chuàng)作者與流量購(gòu)買者提供流量交易服務(wù);投票模塊為系統(tǒng)提供一個(gè)投票更新的功能;交易模塊可以讓用戶出售虛擬貨幣提現(xiàn)。

圖6 系統(tǒng)功能模塊結(jié)構(gòu)Fig.6 System function module structure
3.2.1 社交網(wǎng)絡(luò)模塊
社交網(wǎng)絡(luò)模塊是整個(gè)系統(tǒng)正常運(yùn)行的重要基礎(chǔ),使用前用戶必須先注冊(cè)。他包含了身份認(rèn)證、用戶注冊(cè)、信息發(fā)布和熱榜等功能。整個(gè)模塊內(nèi)部交互設(shè)計(jì)如圖7 所示。

圖7 社交網(wǎng)絡(luò)模塊Fig.7 Social network module
(1)認(rèn)證注冊(cè)(可選)。監(jiān)管部門審核用戶信息后,更新鏈上驗(yàn)證碼并發(fā)送給用戶。用戶注冊(cè)限制是防范社交網(wǎng)絡(luò)被濫用的重要功能。
(2)用戶注冊(cè)。為用戶創(chuàng)建初始存儲(chǔ)數(shù)據(jù)庫(kù),保存用戶認(rèn)證數(shù)據(jù)(加密形式),僅監(jiān)管部門能夠查閱。
(3)創(chuàng)建吧。創(chuàng)建一個(gè)新的、以某個(gè)關(guān)鍵詞為話題的社區(qū),并初始化信息。
(4)創(chuàng)建帖子。發(fā)布帶有言論的帖子,尋求幫助或者分享信息。其真實(shí)存儲(chǔ)在用戶存儲(chǔ)數(shù)據(jù)庫(kù)中,其他地方只記錄其所在地,這樣便于維護(hù)。
(5)評(píng)論(同創(chuàng)建帖子)。在創(chuàng)建帖子的基礎(chǔ)上,將自己的存儲(chǔ)地址緊跟在母貼評(píng)論區(qū)后,并將母貼地址存儲(chǔ)到自己的數(shù)據(jù)庫(kù)中。評(píng)論的存儲(chǔ)地位等同于帖子,相對(duì)于一個(gè)新帖子,多了母貼信息。
(6)點(diǎn)贊、踩等計(jì)數(shù)操作。帖子中帶有一個(gè)記錄某些操作次數(shù)的存儲(chǔ),用于統(tǒng)計(jì)上熱榜。
(7)熱榜計(jì)算。依據(jù)帖子中單位時(shí)間的操作次數(shù)衡量熱度。
3.2.2 廣告模塊
為了吸引更多的內(nèi)容生產(chǎn)者與資金,廣告模塊可讓內(nèi)容生產(chǎn)者兌現(xiàn)自己的流量。廣告模塊如圖8 所示。

圖8 廣告模塊Fig.8 Advertisement module
內(nèi)容生產(chǎn)者根據(jù)自己的流量,對(duì)帖子設(shè)置可購(gòu)買的區(qū)域與價(jià)格。流量購(gòu)買者使用虛擬貨幣購(gòu)買即可獲得該區(qū)域編輯權(quán)限。
3.2.3 系統(tǒng)更新模塊
為讓系統(tǒng)可以去中心化的形式迭代更新,如圖9所示,使用投票形式通過(guò)更新方案。開發(fā)者以決策形式提交優(yōu)化或新功能代碼,被更新并入系統(tǒng)后,系統(tǒng)會(huì)以虛擬貨幣作為獎(jiǎng)勵(lì)發(fā)送給開發(fā)者。參與者/代理人也可以提出決策,并且對(duì)決策進(jìn)行投票,投票通過(guò)后更新并入系統(tǒng)。

圖9 系統(tǒng)更新模塊Fig.9 System update module
3.2.4 交易模塊
每個(gè)吧都將發(fā)布一個(gè)代幣,代幣與維護(hù)系統(tǒng)的貨幣關(guān)聯(lián)交易。為實(shí)現(xiàn)去中心化的交易,本文借鑒Uniswap 運(yùn)行機(jī)制[13],設(shè)計(jì)一款為社交媒體平臺(tái)代幣交換的交易所。
Uniswap 是一個(gè)解決eth 以及衍生代幣快速交易的去中心化交易所。方案與uniswap 不同的是,新代幣上架,會(huì)有一段時(shí)間的鎖定,該期間會(huì)以eth 的權(quán)益為主,初始化eth 與代幣間的流動(dòng)性代幣總量;鎖定結(jié)束時(shí),會(huì)以代幣價(jià)值最低比例為初始價(jià)值,隨后將其存儲(chǔ)為初始流動(dòng)性資金,并且以這個(gè)參考值,開啟代幣間交易配對(duì)。若有人交易,則向流動(dòng)性提供者交手續(xù)費(fèi)。因?yàn)橐詄th 的權(quán)益為主,所以杜絕新代幣產(chǎn)生出現(xiàn)的虛假價(jià)值比例。
依據(jù)以下算法結(jié)算交換eth/代幣數(shù)量:
其中:x 和y 是兩種代幣的存儲(chǔ)量,交易時(shí),z 是一個(gè)固定值。進(jìn)行交易時(shí),當(dāng)用戶使用x 換取y 代幣,則z 值固定,其可交換數(shù)量算式如下:
交易完成后,x 與y 的比值會(huì)變化,當(dāng)這個(gè)比值變化較大并出現(xiàn)利差時(shí),就會(huì)有人為掙這個(gè)利差,反向交易以平衡這個(gè)交換比例。以此就能實(shí)現(xiàn)一個(gè)去中心化代幣交易所,并解決過(guò)去交易所存在的快速交易問(wèn)題。
本節(jié)將對(duì)社交網(wǎng)絡(luò)平臺(tái)設(shè)計(jì)過(guò)程中遇到的關(guān)鍵問(wèn)題的解決方案進(jìn)行說(shuō)明,主要包括區(qū)塊鏈上的身份認(rèn)證注冊(cè)、熱榜函數(shù)設(shè)計(jì)、合約數(shù)據(jù)存儲(chǔ)設(shè)計(jì)等。
為了防止濫用社交網(wǎng)絡(luò),本文設(shè)置了注冊(cè)限制功能。當(dāng)用戶提交身份信息給監(jiān)管部門時(shí),監(jiān)管部門只有審核通過(guò)后,才同步鏈上的驗(yàn)證碼,并將驗(yàn)證碼發(fā)送給用戶。
對(duì)于鏈上驗(yàn)證碼的驗(yàn)證方式,因?yàn)橐蕴坏乃懔π枰膅as,而逐字對(duì)比將會(huì)消耗大量的gas,為此,根據(jù)參考文獻(xiàn)[14],如圖10 所示采用驗(yàn)證碼哈希值對(duì)比的方式來(lái)進(jìn)行驗(yàn)證。

圖10 身份認(rèn)證功能設(shè)計(jì)Fig.10 Design of identity authentication function
由于一個(gè)帖子包含多種信息,而且可能在吧、用戶、母貼以及熱榜中都有副本,此外智能合約語(yǔ)言Solidity 和C 語(yǔ)言不同,不能使用指針?lè)绞街苯诱{(diào)取,因此這導(dǎo)致帖子存儲(chǔ)資源的消耗會(huì)花上好幾倍。以太坊上的存儲(chǔ)資源和算力一樣都是珍貴的,權(quán)衡利弊,本文設(shè)計(jì)了一種存儲(chǔ)方法用算力來(lái)?yè)Q取存儲(chǔ)資源,如圖11 所示。
帖子的原本存儲(chǔ)在用戶中,其他副本中都只存儲(chǔ)帖子的地址信息,當(dāng)用戶訪問(wèn)副本時(shí),需要跳轉(zhuǎn)訪問(wèn)到帖子的原本,這樣每次訪問(wèn)原本,只需要多一次訪問(wèn)算力,就能節(jié)省所有副本的存儲(chǔ)資源。
為了讓用戶擁有更好的社交體驗(yàn),本文增加了熱榜功能。任何對(duì)帖子的操作都會(huì)觸發(fā)熱榜函數(shù),為帖子添加熱度。為了節(jié)省算力資源,只有達(dá)到一定的間隔時(shí)間,才會(huì)與熱榜中的帖子進(jìn)行對(duì)比,進(jìn)行替代操作。熱榜函數(shù)設(shè)計(jì)如圖12 所示。

圖12 熱榜函數(shù)設(shè)計(jì)Fig.12 Hot list function design
熱榜函數(shù)設(shè)計(jì)中,最重要的問(wèn)題就是熱度值的計(jì)算,改進(jìn)基于用戶投票的排名算法hacker news[15]。設(shè)P表示總投票數(shù),T 表示發(fā)布至今的時(shí)間間隔,G 表示重力加速度,它的數(shù)值大小決定了排名隨時(shí)間下降的速度快慢。根據(jù)hacker news 得到熱度值:
設(shè)△t 表示單位時(shí)間,Ci表示各種操作參數(shù)(例如點(diǎn)贊,評(píng)論等),Q 表示權(quán)重比,越小權(quán)重越大。單位時(shí)間內(nèi)操作的熱度值為:
其中:k 為調(diào)節(jié)Score1與Score2的權(quán)重比。Hacker news算法可以防止熱度較高的文章一直處于前列,而埋沒(méi)新內(nèi)容。但也可能會(huì)導(dǎo)致部分熱點(diǎn)文章在某一個(gè)時(shí)間點(diǎn)才備受關(guān)注,所以添加以平衡這種情況。
將全部數(shù)據(jù)都上鏈,完全實(shí)現(xiàn)去中心化,需要使用智能合約將數(shù)據(jù)寫入?yún)^(qū)塊鏈中,本節(jié)對(duì)智能合約數(shù)據(jù)和相關(guān)操作函數(shù)進(jìn)行設(shè)計(jì)。
4.4.1 智能合約數(shù)據(jù)設(shè)計(jì)
為實(shí)現(xiàn)去中心化,程序中使用的所有數(shù)據(jù)都將以storage 狀態(tài)存儲(chǔ)在區(qū)塊鏈當(dāng)中。智能合約相關(guān)主要數(shù)據(jù)設(shè)計(jì)如表1 所示。

表1 智能合約數(shù)據(jù)設(shè)計(jì)表Tab.1 Smart contract data structure
表1 中列出設(shè)計(jì)的帖子、吧、用戶等5 個(gè)結(jié)構(gòu)體,以及與其中部分結(jié)構(gòu)體相關(guān)聯(lián)的2 個(gè)映射。在智能合約中結(jié)構(gòu)體和映射都以storage 類型存儲(chǔ),并直接存儲(chǔ)在區(qū)塊鏈中。
4.4.2 智能合約函數(shù)設(shè)計(jì)
智能合約函數(shù)可實(shí)現(xiàn)對(duì)數(shù)據(jù)的訪問(wèn)與修改,本文方案的主要智能合約函數(shù)如表2 所示。通過(guò)這些智能合約函數(shù),方案可以實(shí)現(xiàn)所需的各項(xiàng)功能。

表2 智能合約函數(shù)設(shè)計(jì)表Tab.2 Smart contract functions
對(duì)提出的方案進(jìn)行實(shí)驗(yàn)測(cè)試,包括功能測(cè)試和性能測(cè)試,以及相關(guān)分析。
系統(tǒng)原型開發(fā)全部在Linux 上進(jìn)行,具體環(huán)境配置如表3 所示。以太坊以公有鏈方式發(fā)布,也可以搭建私有鏈和聯(lián)盟鏈,本文采用的是搭建公有鏈的方式[16-17]。

表3 開發(fā)環(huán)境配置Tab.3 Development environment configuration
測(cè)試環(huán)境如表4 所示:

表4 測(cè)試環(huán)境配置Tab.4 Test environment configuration
5.2.1 功能測(cè)試
對(duì)于智能合約的測(cè)試,使用以太坊官方開源的Solidity 在線集成開發(fā)環(huán)境Remix 完成。以注冊(cè)功能為例,圖13 展示在Remix 中對(duì)智能合約的測(cè)試結(jié)果。在圖13 中,在功能測(cè)試區(qū)輸入所需的參數(shù),點(diǎn)擊函數(shù)名稱或 transact 按鈕即可執(zhí)行函數(shù)。對(duì)于user_check_change()驗(yàn)證碼更新功能,只有監(jiān)管部門賬號(hào)才能調(diào)用,用戶再使用更新的驗(yàn)證碼并調(diào)用register()函數(shù)才能完成注冊(cè),如果驗(yàn)證碼錯(cuò)誤會(huì)報(bào)錯(cuò)并重置,以此杜絕暴力破解攻擊。如果注冊(cè)成功,則返回注冊(cè)信息(用戶賬號(hào)與id),如圖14 所示。可見(jiàn),合約已經(jīng)按照我們?cè)诤霞s定義的“event”輸出注冊(cè)時(shí)提交的一些信息,便于我們確認(rèn)區(qū)塊鏈中進(jìn)行寫操作的執(zhí)行情況。該event 將會(huì)被web3 發(fā)起交易執(zhí)行時(shí)提取到Node 對(duì)象中,進(jìn)而再通過(guò)頁(yè)面展現(xiàn)給用戶,使操作可視化。

圖13 測(cè)試智能合約里的函數(shù)Fig.13 Testing smart contract functions

圖14 智能合約執(zhí)行時(shí)控制臺(tái)輸出Fig.14 Console output
對(duì)于成員注冊(cè)、創(chuàng)建吧、發(fā)布帖子、帖子點(diǎn)贊等功能,測(cè)試用例及測(cè)試結(jié)果如表5 至表8 所示。

表5 成員注冊(cè)功能測(cè)試Tab.5 Member registration function test

表6 創(chuàng)建吧功能測(cè)試Tab.6 Creating bar function test

表7 發(fā)布帖子功能測(cè)試Tab.7 Posting function test

表8 帖子點(diǎn)贊等計(jì)數(shù)操作功能測(cè)試Tab.8 Count function test
5.2.2 性能測(cè)試與分析
為了減少gas 消耗,對(duì)不同的字符串驗(yàn)證方式所消耗的gas 值進(jìn)行對(duì)比。這里提供四種不同的字符串驗(yàn)證方式:方式1:逐字對(duì)比;方式2:先對(duì)比字符串長(zhǎng)度再用方式1;方式3:哈希值對(duì)比;方式4:先對(duì)比字符串長(zhǎng)度再用方式3。表9 給出了不同字符串驗(yàn)證方式gas 消耗對(duì)比,使用remix 可直接測(cè)試查看運(yùn)算消耗gas 的差異。從表9 可以看出,直接使用方式1 進(jìn)行哈希值對(duì)比在大部分情況下表現(xiàn)最優(yōu),但如果在實(shí)際驗(yàn)證情況中,長(zhǎng)度不等情況占大多數(shù),則使用方式2更優(yōu)。但方式2 存在一定的安全問(wèn)題,攻擊者可能通過(guò)多次測(cè)試與對(duì)比gas 消耗來(lái)猜出驗(yàn)證字符的長(zhǎng)度。所以權(quán)衡各方面利弊下,本文選擇方式1。

表9 不同字符串驗(yàn)證方式gas 消耗對(duì)比Tab.9 Comparison of gas consumption of different string authentication methods
現(xiàn)階段社交網(wǎng)絡(luò)平臺(tái)依賴中心化管理,容易受到單點(diǎn)瓶頸限制,并存在中心化管理者篡改用戶數(shù)據(jù)、控制輿論導(dǎo)向,侵害用戶權(quán)益的問(wèn)題。針對(duì)這些問(wèn)題。本文將具有去中心化、可追溯等特性的區(qū)塊鏈技術(shù)引入社交網(wǎng)絡(luò)平臺(tái),提出了一種基于以太坊的社交網(wǎng)絡(luò)平臺(tái)設(shè)計(jì)方案。我們利用以太坊、智能合約與現(xiàn)有虛擬貨幣交易所實(shí)現(xiàn)了分布式的社交網(wǎng)絡(luò)平臺(tái)。設(shè)計(jì)身份認(rèn)證方案實(shí)現(xiàn)對(duì)濫發(fā)不良信息用戶的管理。設(shè)計(jì)基于投票的監(jiān)管機(jī)制,解決中心化管理單點(diǎn)瓶頸限制的問(wèn)題。設(shè)計(jì)基于熱榜函數(shù)的“評(píng)價(jià)-流量?jī)冬F(xiàn)”雙模式激勵(lì)機(jī)制,確保用戶發(fā)布良好信息的收益高于發(fā)布惡意信息。方案的安全管理不再依賴于中心化管理者。系統(tǒng)原型測(cè)試與分析表明方案的可行性和有效性。