肖大龍 張敬偉 楊青 周婭
摘要:社區(qū)貢獻貨幣化是促進社區(qū)發(fā)展的一個途徑.在互聯(lián)網(wǎng)上已實現(xiàn)的方式是平臺的掌控者來操控社區(qū)代幣(私人或機構(gòu)發(fā)行的貨幣)的分配和使用,這種方式阻礙了社區(qū)的發(fā)展.本文針對這一問題提出了一種激勵社區(qū)人員做出貢獻的方法.主要分為代幣分配、投票、代幣交易、以代幣為押金基礎(chǔ)和以投票為標準的社區(qū)仲裁.它使社區(qū)貢獻和加密貨幣相互轉(zhuǎn)化,在社區(qū)中持有的代幣和做出的貢獻呈正相關(guān),能夠很好地表達社區(qū)中貢獻的情況.社區(qū)中的投票結(jié)果體現(xiàn)了社區(qū)的意愿.押金模式為代幣提供了供應(yīng)需求.最后,對智能合約中方法的gas使用的情況做了統(tǒng)計,結(jié)果表明gas的平均花費在70000左右,該方法花費較低.
關(guān)鍵詞:區(qū)塊鏈;智能合約;社區(qū);投票
中圖分類號:TP399
文獻標志碼:A
文章編號:1000-5641(2020)06-0082-08
0引言
具有相同目標的人在一起組成了社區(qū).互聯(lián)網(wǎng)的出現(xiàn)解決了遠距離信息交流的問題,又讓社區(qū)有了新的表達方式,如百度貼吧、CSDN等.但是這種解決方案并不是完美的,它有一些不可忽視的缺陷.現(xiàn)有社區(qū)設(shè)計了級別、權(quán)限、積分和代幣來激勵社區(qū)人員做出貢獻.這種設(shè)計由系統(tǒng)的掌控者來分配和操控.他們可以根據(jù)自己的意愿來修改數(shù)據(jù)從而竊取大家在此社區(qū)上做出的貢獻,例如,百度貼吧被當作商品賣給商人,CSDN中的積分對于某些人來說是無限的.這種方式會減弱社區(qū)中的人對社區(qū)的貢獻意愿,限制了社區(qū)的進一步發(fā)展.
隨著比特幣的成功,人們認識到區(qū)塊鏈是一種可以在互聯(lián)網(wǎng)實現(xiàn)去中心化的技術(shù).這項技術(shù)首先應(yīng)用于金融領(lǐng)域,被當作一般等價物——貨幣.隨著以太坊區(qū)塊鏈的出現(xiàn),在區(qū)塊鏈上部署圖靈完備的程序成為可能.此外,以太坊社區(qū)還提供了一套能開發(fā)去中心化應(yīng)用的工具,提出了Dapp的概念,可以使用Web瀏覽器和插件對以太坊區(qū)塊鏈進行交互.本文選擇以太坊區(qū)塊鏈,它有以下優(yōu)點:①它本身利用POW算法來為平臺提供去中心化保障.②在其平臺上運行了數(shù)百萬份的智能合約,說明它的技術(shù)已經(jīng)獲得認可.③它提供各種代幣標準,其中ERC20代幣標準符合我們的要求.
Steemit(社交媒體平臺)主要解決以社交媒體為基礎(chǔ)的經(jīng)濟體中信息采用和貨幣化的主要障礙(https://steem.com/).它把得到的利益分配給了做出貢獻的人,做出貢獻的方式有:保障數(shù)字貨幣價格平穩(wěn)、寫文章、寫評論、提供注意力等.本文的設(shè)計就借鑒了Steemit的相關(guān)思想——應(yīng)該把社區(qū)獲得的利益重新分配回社區(qū)。
本文的主要貢獻如下:
(1)找到一種社區(qū)中貢獻一代幣一需求相互轉(zhuǎn)換的方法,用來激勵社區(qū)人員做出貢獻.
(2)對該方法在以太坊區(qū)塊鏈平臺利用智能合約進行了實現(xiàn).
(3)對智能合約在以太坊區(qū)塊鏈的運行成本進行了分析并給出了結(jié)論,對區(qū)塊鏈和智能合約的安全性進行了檢查.
1相關(guān)工作
1.1區(qū)塊鏈技術(shù)與其應(yīng)用
區(qū)塊鏈技術(shù)自從被提出后,一直是研究熱點.區(qū)塊鏈一個重要的部分是存儲交易數(shù)據(jù),所以區(qū)塊鏈技術(shù)可以被認為是一種特殊的分布式數(shù)據(jù)庫,它的特別之處在于所存儲的數(shù)據(jù)具有防篡改的能力.根據(jù)進入時是否需要許可,區(qū)塊鏈分為公有區(qū)塊鏈和聯(lián)盟區(qū)塊鏈.比較著名的公有區(qū)塊鏈是比特幣、以太坊和EOS(https://whitepaperdatabase.com/eos-whitepaper/).他們一般被用于數(shù)字資產(chǎn)和智能合約平臺.聯(lián)盟鏈主要應(yīng)用于企業(yè)之間,主要解決不同機構(gòu)間由于數(shù)據(jù)的差異引起爭議時,需要人工對賬或由中介機構(gòu)來解決數(shù)據(jù)不一致的問題.聯(lián)盟鏈降低了結(jié)算時間和減少了交易費用.
近年來,大量的專家和學(xué)者對區(qū)塊鏈進行了應(yīng)用研究.錢衛(wèi)寧等人在區(qū)塊鏈技術(shù)的架構(gòu)方面做出了研究,并提出在區(qū)塊鏈上進行可信的數(shù)據(jù)管理問題和方法.蔡維德等人針對區(qū)塊鏈技術(shù)和應(yīng)用層面,提出了賬戶區(qū)塊鏈和交易區(qū)塊鏈雙鏈模型.Hawk針對智能合約中的交易隱私問題,提出了一種分布式的智能合約系統(tǒng),實現(xiàn)了交易隱私.譚海波利用智能合約和星際文件提出了一種基于區(qū)塊鏈的檔案數(shù)據(jù)保護與共享方法.
1.2智能合約與其應(yīng)用
智能合約是由尼克薩博提出的,并將其定義為“一組以數(shù)字形式規(guī)定的承諾,包括在其承諾中履行的協(xié)議”.比特幣提供的腳本語言可以編寫無法更改的程序,但是由于停機問題的限制,它削弱了程序的表達能力.以太坊提供了一種圖靈完備的編程語言解決了這個問題,正是因為這些原因,使基于區(qū)塊鏈的復(fù)雜應(yīng)用成為可能,使其在數(shù)字支付、金融資產(chǎn)處置、云計算、物聯(lián)網(wǎng)、共享經(jīng)濟等方面擁有廣闊的應(yīng)用前景.
近年來,很多領(lǐng)域都使用智能合約進行了進一步的研究.范吉利針對在共享經(jīng)濟下對分布式交易管理的需求,利用以太坊智能合約構(gòu)建了物品共享服務(wù)交易平臺.徐建針對在醫(yī)療中記錄授權(quán)煩瑣、記錄分享效率低下和身份驗證困難的問題,將非對稱加密技術(shù)和多方協(xié)作應(yīng)用到區(qū)塊鏈構(gòu)成的點對點網(wǎng)絡(luò)中,實現(xiàn)了醫(yī)療記錄跨域分享的可追蹤、數(shù)據(jù)的不可篡改和身份驗證的簡化.
1.3互聯(lián)網(wǎng)社區(qū)經(jīng)濟和去中心化應(yīng)用
互聯(lián)網(wǎng)上的社區(qū)經(jīng)濟狹義上講是平臺的貢獻者促進了平臺的發(fā)展,平臺用報酬回饋給貢獻者.目前,越來越多的互聯(lián)網(wǎng)平臺把利潤回報給它的貢獻者.例如:今日頭條就采用了優(yōu)秀作者獎勵、流量廣告分成等手段.直播平臺更是用高價格來拉攏各大平臺上的大咖.微信、快手、抖音等應(yīng)用也采取了相應(yīng)的措施.
現(xiàn)在擁有代幣的去中心化應(yīng)用,都有自己的使用需求,并且根據(jù)使用需求設(shè)計自己的規(guī)則和代幣.并用代幣作為激勵或者憑證,形成了一個貢獻-代幣-需求的閉環(huán).例如,Augur宣稱可以用群體智慧作為預(yù)言機,貢獻是群體預(yù)測一件事情發(fā)生的狀況,代幣是如果你預(yù)測正確會獎勵代幣,需求是發(fā)起一件事情預(yù)測或者預(yù)測某件事情要使用代幣.
本文所提出的方法就是抽取出互聯(lián)網(wǎng)社區(qū)的激勵部分并找到一個需求,使它形成一個貢獻-代幣-需求的閉環(huán),最后在區(qū)塊鏈上進行實現(xiàn).本文提出的方法和其余兩種方法的對比如表1所示.
2問題分析
本文的問題是讓社區(qū)人員相信他們?yōu)樯鐓^(qū)做出的貢獻所轉(zhuǎn)化的價值會被他們所得到.要想解決上面這個問題就有怎樣獲得信任、什么是貢獻和怎樣讓社區(qū)人員得到價值這三個挑戰(zhàn)必須解決.面對第一個挑戰(zhàn),本文把關(guān)鍵代碼用智能合約的方式進行編寫并且部署在以太坊區(qū)塊鏈上,使用區(qū)塊鏈的不可更改性來達到可信的目的.面對的第二個挑戰(zhàn),貢獻怎么體現(xiàn)?本文分兩個方面來看待貢獻,主觀方面和客觀方面.主觀方面認為社區(qū)人員如果認可你做的事情會對你投票,用票數(shù)來衡量你做出貢獻的大小;客觀方面認為只要有特定的使用記錄就代表你對社區(qū)做出了貢獻.本文使用了代幣來體現(xiàn)貢獻.第三個挑戰(zhàn)需要為代幣找到供應(yīng)需求.除了第一個挑戰(zhàn)是使用區(qū)塊鏈平臺的特性來實現(xiàn)的,接下來的兩個挑戰(zhàn)需要在技術(shù)上進行進一步的分析.本文設(shè)計了4個部分,分別為代幣、分配模式、投票和鏈下交易.在代幣部分中,代幣被認為是一個獨立相等個體并且可以進行轉(zhuǎn)賬、挖掘和銷毀.在分配模式上分為4種方式,分別是簽到分配、分批分配、TopN分配和隨機分配.在投票模塊上對3種方式進行投票,分別是代幣分配方式、代幣獲得候選人和鏈下交易的爭端.在鏈下交易模塊會對代幣進行鎖定、記錄交易、賣家取回鎖定代幣和買家取走賣家代幣.代幣、投票的前兩個部分和分配方式對應(yīng)的是第2個挑戰(zhàn).貢獻的主觀方面用分批分配和TopN分配兩個方法來體現(xiàn),客觀方面是用簽到分配和隨機分配來體現(xiàn).第3個挑戰(zhàn)用鏈下交易解決.更進一步的細節(jié)將在第4章進行論述.
3整體架構(gòu)
3.1系統(tǒng)架構(gòu)
如圖1所示,本文提出的社區(qū)貢獻激勵方法的具體實現(xiàn)由應(yīng)用層、服務(wù)層和中間件組成.應(yīng)用層分為4個模塊,劃分了不同的角色和職能,具體會在3.2節(jié)詳述.服務(wù)層為區(qū)塊鏈上的智能合約,Web3是瀏覽器和區(qū)塊鏈交互的中間件,代碼邏輯會寫在智能合約上,經(jīng)過編譯后部署到區(qū)塊鏈上.系統(tǒng)的事務(wù)在以太坊網(wǎng)絡(luò)中傳輸,最后由網(wǎng)絡(luò)中的節(jié)點達成共識,寫到相連的區(qū)塊中.其中應(yīng)用層使用前端來為用戶提供接口調(diào)用.
3.2合約類圖
合約主要利用以太坊區(qū)塊鏈上部署的智能合約有不可篡改、圖靈完備、永不停機的特性.設(shè)計的智能合約體系由社區(qū)貨幣合約、挖礦(在設(shè)計上本文用“分配”這個術(shù)語代替挖礦)合約、投票合約、鏈下交易記錄合約組成.代幣合約擁有一個地址向一個地址轉(zhuǎn)賬、銷毀一定數(shù)量代幣、挖掘出一定數(shù)量代幣的方法.挖礦合約實現(xiàn)了向社區(qū)人員分配代幣和選擇當前分配策略的邏輯,一共有4種分配策略,分別是簽到、分批、按比例、隨機.投票合約有向地址投票、向分配策略投票和清除投票數(shù)據(jù)的方法.鏈下交易合約有鎖定社區(qū)代幣、記錄交易、產(chǎn)生爭端、對爭端進行投票、取回代幣和取回賠償代幣的方法.智能合約和普通類圖有所區(qū)別,本文對類圖有所更改,智能合約的類圖如圖2所示.
4方法設(shè)計
4.1社區(qū)代幣
代幣是以太坊上的一個重要應(yīng)用.這里使用代幣的兩個功能:一種是它的實用功能,鏈下交易的前提是使用代幣作為押金;另一種是效益功能,它代表為社區(qū)做出的貢獻多少,可以作為投票候選人的參考.本文系統(tǒng)中的代幣遵循了ERC20標準,符合它標準的代幣擁有名稱(name)、別名(symbol)、代幣數(shù)值精確程度(decimals)、發(fā)行代幣總量(totalSupply)、根據(jù)地址返回余額、轉(zhuǎn)賬、批準轉(zhuǎn)賬、向自己轉(zhuǎn)賬等屬性及操作.由于這部分涉及代幣,需要經(jīng)過嚴格的檢查和測試,系統(tǒng)采用了OpenZeppelin給出經(jīng)過反復(fù)檢查安全的代碼,進行了上述工作.
4.2社區(qū)代幣分配
每一個擁有以太坊賬戶的用戶都可以參與代幣的分配過程.接下來詳細介紹這4種代幣分配策略.第1種策略為簽到分配,該策略認為認可社區(qū)的人不多,那么只要簽到就可以拿到代幣,第2種策略為分批分配,該策略認為有一部分人會對社區(qū)的發(fā)展做出貢獻,并且前N名獲得的貢獻是相等的,社區(qū)人員會向這些人員投票,每個投票的人擁有的票數(shù)根據(jù)擁有的代幣決定,得票最多的前N個都會得到等量的代幣.第3種策略為TopN分配,得到的代幣等于得到的投票乘以系統(tǒng)本身比例,其余部分等同第2種策略.第4種策略為隨機分配,該策略認為現(xiàn)階段的主要任務(wù)是帶來人氣,所有地址會在特定時間段內(nèi)得到隨機數(shù)量的代幣.分配策略是由簽到分配開始,社區(qū)人員可以利用投票來自由切換分配策略.分批分配具體如協(xié)議1所示,區(qū)塊鏈會存儲系統(tǒng)變量和當前狀態(tài)變量,存儲在系統(tǒng)內(nèi)的變量如投票閾值、地址挖礦刷新時間等,區(qū)塊鏈狀態(tài)變量包括調(diào)用合約地址、當前時間等.本方法會根據(jù)得票數(shù)值和挖礦時間進行判斷,目的是選擇出票數(shù)的前N名,而且他們只能在一定時間段得到一次代幣.如果條件滿足就得到代幣,之后更新挖礦的刷新時間.其他3種分配方式除在約束條件上不同,其他方面均類似.
4.3社區(qū)投票
本文選擇投票來解決社區(qū)的方向性問題.社區(qū)會對3件事進行投票,第1是分配策略的切換;第2是對做出貢獻的地址進行投票;第3是對鏈下交易爭端進行投票.其中對候選人投票的協(xié)議2如后文所示.區(qū)塊鏈會存儲變量,并會在部署時確定,如投票的刷新時間.本算法首先對合約調(diào)用者的投票刷新時間進行判斷,在一定時間內(nèi)每個地址只能投票一次,然后會將候選人的票數(shù)進行累加,累加的票數(shù)是根據(jù)合約調(diào)用者在社區(qū)的代幣決定的,接下來會記錄候選人地址,以便可以在進行下一階段時清除票數(shù),最后將合約調(diào)用者的投票時間進行更新.其他兩種方式只改變了進行投票的對象,剩余部分都沒有改變.這里不再贅述.
4.4交易數(shù)據(jù)的記錄和社區(qū)仲裁
社區(qū)產(chǎn)生的代幣一個實用的功能是將它作為鏈下交易的押金.當有人向社區(qū)出售產(chǎn)品時,會在合約上鎖定確定數(shù)目的代幣,當產(chǎn)生交易時,合約會記錄產(chǎn)生交易雙方的地址.如果買方對交易過程產(chǎn)生不滿,擁有產(chǎn)生交易爭執(zhí)的權(quán)利,這時社區(qū)人員就會投票.合約具有投票閾值.如果票數(shù)大于閾值,就會允許買家得到賣家的押金,如果沒有超過閾值,則認為此爭端賣方錯誤可以接受,這時買家得不到賣家的押金.當賣家不想再產(chǎn)生交易和交易都已經(jīng)完成時,可以取回自己之前向合約鎖定的代幣.鏈下交易的流程如圖3所示.
5方法實現(xiàn)
方法的具體實現(xiàn)分為公有區(qū)塊鏈智能合約的開發(fā)和前端應(yīng)用的開發(fā).合約開發(fā)部分對于以太坊來說應(yīng)該是一個整體(一個合約),這樣就可以通過一個以太坊地址來訪問所有可訪問的變量和方法,簡化了調(diào)用外部合約的復(fù)雜關(guān)系.前端開發(fā)部分雖然是對一個合約進行訪問,但是做了模塊化的處理,這樣外部進行訪問時可以分模塊進行.智能合約部分使用Solidity語言開發(fā),并使用truffle框架進行編譯測試.前端應(yīng)用部分,本文使用Vue進行開發(fā),并通過web3.js和abi對智能合約進行調(diào)用.系統(tǒng)中的代碼詳見https://gitee.com/xiaodalong1130/community.
6分析和評估
6.1運行成本分析
根據(jù)EthGasStation的數(shù)據(jù)統(tǒng)計,在本文撰寫時(2019年5月)以太坊調(diào)用智能合約的平均費用為20 Gwei,折合人民幣約0.7元。在實際情況中,調(diào)用合約的費用(Cost=Gas uesd×Gas price)按使用的操作碼和存儲的字節(jié)數(shù)計算.在合約調(diào)用中Gas price的價格是動態(tài)變化的,而Gas used是不變的.為了了解合約中方法具體使用的gas值,本文測試了主要方法的gas消耗值.具體如圖4所示.其中voteToCandidate、lockToken和recordTranscation在合約中由于涉及多個變量的寫入操作,所以gas消耗值要大于平均水平.其中,voteToCandidate是系統(tǒng)的主要功能.但是卻消耗了大量的gas值.針對這一情況設(shè)置了代幣獎勵.對每個投票的人給予代幣作為投票的回報,希望能夠增加社區(qū)人員投票的動力.對于lockToken和recordTranscation等方法,這些操作的收益者是個人,本文不設(shè)置激勵措施.運行成本會受一些應(yīng)用場景的限制,所以具體應(yīng)用場景適用于社區(qū)產(chǎn)生的價值大于運行成本.
6.2性能和安全性分析
智能合約調(diào)用時間的實際情況是根據(jù)塊的確認時間決定的.但是為了測試智能合約的運行性能,本文使用truffle編寫了測試代碼,并記錄了方法的執(zhí)行時間.具體如圖5所示,方法大都在0.2s內(nèi)做出回應(yīng).其中voteCandidate、bashMint、assginMint涉及的讀寫操作多一些,可能花費時間比其他方法久一點.總體來說,方法的調(diào)用花費時間較低.
如果有人想要攻擊以太坊區(qū)塊鏈,需要擁有51%的算力才能成功.根據(jù)etherscan的數(shù)據(jù)統(tǒng)計(2019年5月)顯示,大概不到10s出一個塊,一個塊平均2個以太幣,大約3000元人民幣.如果擁用51%算力,每秒大概獲得人民幣150元(https://etherscan.io/).除非攻擊收益大于150 RMB/s,否則以太坊區(qū)塊鏈就是安全的.但是以太坊上的智能合約出現(xiàn)了多次漏洞.例如,The DAO攻擊者利用合約地址的遞歸調(diào)用竊取了大量的代幣,原因是在代碼中先轉(zhuǎn)賬給地址,后減去合約中地址的代幣.美鏈因為沒有使用安全的計算方法,導(dǎo)致整數(shù)溢出.FOM03D由于沒有考慮到網(wǎng)絡(luò)堵塞問題被竊取了大量代幣.本文針對這些問題做出了針對性的檢查.
7結(jié)語
本文針對社區(qū)貢獻貨幣化的中心化問題,提出了一個基于以太坊的社區(qū)貢獻激勵方法.首先對該方法的整體架構(gòu)和合約實現(xiàn)進行介紹,之后對主要的算法和流程進行了詳細說明,最后對運行成本進行分析并對安全性進行了檢查.在未來的工作可以分為兩點:第一,針對社區(qū)貢獻貨幣化是否能夠促進社區(qū)發(fā)展找到理論基礎(chǔ);第二,在不降低去中心的前提下,找到合適的區(qū)塊鏈平臺進行實現(xiàn),進一步降低費用.總之,本文以社區(qū)貢獻貨幣化為基礎(chǔ),主要從3個方面來設(shè)計系統(tǒng):貨幣、群體力量和需求關(guān)系.把區(qū)塊鏈技術(shù)應(yīng)用到社區(qū)中,增強了社區(qū)系統(tǒng)的表達能力,為現(xiàn)有的社區(qū)發(fā)展提供了一些有益的啟示.