肖大龙 张敬伟 杨青 周娅
摘要:社区贡献货币化是促进社区发展的一个途径.在互联网上已实现的方式是平台的掌控者来操控社区代币(私人或机构发行的货币)的分配和使用,这种方式阻碍了社区的发展.本文针对这一问题提出了一种激励社区人员做出贡献的方法.主要分为代币分配、投票、代币交易、以代币为押金基础和以投票为标准的社区仲裁.它使社区贡献和加密货币相互转化,在社区中持有的代币和做出的贡献呈正相关,能够很好地表达社区中贡献的情况.社区中的投票结果体现了社区的意愿.押金模式为代币提供了供应需求.最后,对智能合约中方法的gas使用的情况做了统计,结果表明gas的平均花费在70000左右,该方法花费较低.
关键词:区块链;智能合约;社区;投票
中图分类号:TP399
文献标志码:A
文章编号:1000-5641(2020)06-0082-08
0引言
具有相同目标的人在一起组成了社区.互联网的出现解决了远距离信息交流的问题,又让社区有了新的表达方式,如百度贴吧、CSDN等.但是这种解决方案并不是完美的,它有一些不可忽视的缺陷.现有社区设计了级别、权限、积分和代币来激励社区人员做出贡献.这种设计由系统的掌控者来分配和操控.他们可以根据自己的意愿来修改数据从而窃取大家在此社区上做出的贡献,例如,百度贴吧被当作商品卖给商人,CSDN中的积分对于某些人来说是无限的.这种方式会减弱社区中的人对社区的贡献意愿,限制了社区的进一步发展.
随着比特币的成功,人们认识到区块链是一种可以在互联网实现去中心化的技术.这项技术首先应用于金融领域,被当作一般等价物——货币.随着以太坊区块链的出现,在区块链上部署图灵完备的程序成为可能.此外,以太坊社区还提供了一套能开发去中心化应用的工具,提出了Dapp的概念,可以使用Web瀏览器和插件对以太坊区块链进行交互.本文选择以太坊区块链,它有以下优点:①它本身利用POW算法来为平台提供去中心化保障.②在其平台上运行了数百万份的智能合约,说明它的技术已经获得认可.③它提供各种代币标准,其中ERC20代币标准符合我们的要求.
Steemit(社交媒体平台)主要解决以社交媒体为基础的经济体中信息采用和货币化的主要障碍(https://steem.com/).它把得到的利益分配给了做出贡献的人,做出贡献的方式有:保障数字货币价格平稳、写文章、写评论、提供注意力等.本文的设计就借鉴了Steemit的相关思想——应该把社区获得的利益重新分配回社区。
本文的主要贡献如下:
(1)找到一种社区中贡献一代币一需求相互转换的方法,用来激励社区人员做出贡献.
(2)对该方法在以太坊区块链平台利用智能合约进行了实现.
(3)对智能合约在以太坊区块链的运行成本进行了分析并给出了结论,对区块链和智能合约的安全性进行了检查.
1相关工作
1.1区块链技术与其应用
区块链技术自从被提出后,一直是研究热点.区块链一个重要的部分是存储交易数据,所以区块链技术可以被认为是一种特殊的分布式数据库,它的特别之处在于所存储的数据具有防篡改的能力.根据进入时是否需要许可,区块链分为公有区块链和联盟区块链.比较著名的公有区块链是比特币、以太坊和EOS(https://whitepaperdatabase.com/eos-whitepaper/).他们一般被用于数字资产和智能合约平台.联盟链主要应用于企业之间,主要解决不同机构间由于数据的差异引起争议时,需要人工对账或由中介机构来解决数据不一致的问题.联盟链降低了结算时间和减少了交易费用.
近年来,大量的专家和学者对区块链进行了应用研究.钱卫宁等人在区块链技术的架构方面做出了研究,并提出在区块链上进行可信的数据管理问题和方法.蔡维德等人针对区块链技术和应用层面,提出了账户区块链和交易区块链双链模型.Hawk针对智能合约中的交易隐私问题,提出了一种分布式的智能合约系统,实现了交易隐私.谭海波利用智能合约和星际文件提出了一种基于区块链的档案数据保护与共享方法.
1.2智能合约与其应用
智能合约是由尼克萨博提出的,并将其定义为“一组以数字形式规定的承诺,包括在其承诺中履行的协议”.比特币提供的脚本语言可以编写无法更改的程序,但是由于停机问题的限制,它削弱了程序的表达能力.以太坊提供了一种图灵完备的编程语言解决了这个问题,正是因为这些原因,使基于区块链的复杂应用成为可能,使其在数字支付、金融资产处置、云计算、物联网、共享经济等方面拥有广阔的应用前景.
近年来,很多领域都使用智能合约进行了进一步的研究.范吉利针对在共享经济下对分布式交易管理的需求,利用以太坊智能合约构建了物品共享服务交易平台.徐建针对在医疗中记录授权烦琐、记录分享效率低下和身份验证困难的问题,将非对称加密技术和多方协作应用到区块链构成的点对点网络中,实现了医疗记录跨域分享的可追踪、数据的不可篡改和身份验证的简化.
1.3互联网社区经济和去中心化应用
互联网上的社区经济狭义上讲是平台的贡献者促进了平台的发展,平台用报酬回馈给贡献者.目前,越来越多的互联网平台把利润回报给它的贡献者.例如:今日头条就采用了优秀作者奖励、流量广告分成等手段.直播平台更是用高价格来拉拢各大平台上的大咖.微信、快手、抖音等应用也采取了相应的措施.
现在拥有代币的去中心化应用,都有自己的使用需求,并且根据使用需求设计自己的规则和代币.并用代币作为激励或者凭证,形成了一个贡献-代币-需求的闭环.例如,Augur宣称可以用群体智慧作为预言机,贡献是群体预测一件事情发生的状况,代币是如果你预测正确会奖励代币,需求是发起一件事情预测或者预测某件事情要使用代币.
本文所提出的方法就是抽取出互联网社区的激励部分并找到一个需求,使它形成一个贡献-代币-需求的闭环,最后在区块链上进行实现.本文提出的方法和其余两种方法的对比如表1所示.
2问题分析
本文的问题是让社区人员相信他们为社区做出的贡献所转化的价值会被他们所得到.要想解决上面这个问题就有怎样获得信任、什么是贡献和怎样让社区人员得到价值这三个挑战必须解决.面对第一个挑战,本文把关键代码用智能合约的方式进行编写并且部署在以太坊区块链上,使用区块链的不可更改性来达到可信的目的.面对的第二个挑战,贡献怎么体现?本文分两个方面来看待贡献,主观方面和客观方面.主观方面认为社区人员如果认可你做的事情会对你投票,用票数来衡量你做出贡献的大小;客观方面认为只要有特定的使用记录就代表你对社区做出了贡献.本文使用了代币来体现贡献.第三个挑战需要为代币找到供应需求.除了第一个挑战是使用区块链平台的特性来实现的,接下来的两个挑战需要在技术上进行进一步的分析.本文设计了4个部分,分别为代币、分配模式、投票和链下交易.在代币部分中,代币被认为是一个独立相等个体并且可以进行转账、挖掘和销毁.在分配模式上分为4种方式,分别是签到分配、分批分配、TopN分配和随机分配.在投票模块上对3种方式进行投票,分别是代币分配方式、代币获得候选人和链下交易的争端.在链下交易模块会对代币进行锁定、记录交易、卖家取回锁定代币和买家取走卖家代币.代币、投票的前两个部分和分配方式对应的是第2个挑战.贡献的主观方面用分批分配和TopN分配两个方法来体现,客观方面是用签到分配和随机分配来体现.第3个挑战用链下交易解决.更进一步的细节将在第4章进行论述.
3整体架构
3.1系统架构
如图1所示,本文提出的社区贡献激励方法的具体实现由应用层、服务层和中间件组成.应用层分为4个模块,划分了不同的角色和职能,具体会在3.2节详述.服务层为区块链上的智能合约,Web3是浏览器和区块链交互的中间件,代码逻辑会写在智能合约上,经过编译后部署到区块链上.系统的事务在以太坊网络中传输,最后由网络中的节点达成共识,写到相连的区块中.其中应用层使用前端来为用户提供接口调用.
3.2合约类图
合约主要利用以太坊区块链上部署的智能合约有不可篡改、图灵完备、永不停机的特性.设计的智能合约体系由社区货币合约、挖矿(在设计上本文用“分配”这个术语代替挖矿)合约、投票合约、链下交易记录合约组成.代币合约拥有一个地址向一个地址转账、销毁一定数量代币、挖掘出一定数量代币的方法.挖矿合约实现了向社区人员分配代币和选择当前分配策略的逻辑,一共有4种分配策略,分别是签到、分批、按比例、随机.投票合约有向地址投票、向分配策略投票和清除投票数据的方法.链下交易合约有锁定社区代币、记录交易、产生争端、对争端进行投票、取回代币和取回赔偿代币的方法.智能合约和普通类图有所区别,本文对类图有所更改,智能合约的类图如图2所示.
4方法设计
4.1社区代币
代币是以太坊上的一个重要应用.这里使用代币的两个功能:一种是它的实用功能,链下交易的前提是使用代幣作为押金;另一种是效益功能,它代表为社区做出的贡献多少,可以作为投票候选人的参考.本文系统中的代币遵循了ERC20标准,符合它标准的代币拥有名称(name)、别名(symbol)、代币数值精确程度(decimals)、发行代币总量(totalSupply)、根据地址返回余额、转账、批准转账、向自己转账等属性及操作.由于这部分涉及代币,需要经过严格的检查和测试,系统采用了OpenZeppelin给出经过反复检查安全的代码,进行了上述工作.
4.2社区代币分配
每一个拥有以太坊账户的用户都可以参与代币的分配过程.接下来详细介绍这4种代币分配策略.第1种策略为签到分配,该策略认为认可社区的人不多,那么只要签到就可以拿到代币,第2种策略为分批分配,该策略认为有一部分人会对社区的发展做出贡献,并且前N名获得的贡献是相等的,社区人员会向这些人员投票,每个投票的人拥有的票数根据拥有的代币决定,得票最多的前N个都会得到等量的代币.第3种策略为TopN分配,得到的代币等于得到的投票乘以系统本身比例,其余部分等同第2种策略.第4种策略为随机分配,该策略认为现阶段的主要任务是带来人气,所有地址会在特定时间段内得到随机数量的代币.分配策略是由签到分配开始,社区人员可以利用投票来自由切换分配策略.分批分配具体如协议1所示,区块链会存储系统变量和当前状态变量,存储在系统内的变量如投票阈值、地址挖矿刷新时间等,区块链状态变量包括调用合约地址、当前时间等.本方法会根据得票数值和挖矿时间进行判断,目的是选择出票数的前N名,而且他们只能在一定时间段得到一次代币.如果条件满足就得到代币,之后更新挖矿的刷新时间.其他3种分配方式除在约束条件上不同,其他方面均类似.
4.3社区投票
本文选择投票来解决社区的方向性问题.社区会对3件事进行投票,第1是分配策略的切换;第2是对做出贡献的地址进行投票;第3是对链下交易争端进行投票.其中对候选人投票的协议2如后文所示.区块链会存储变量,并会在部署时确定,如投票的刷新时间.本算法首先对合约调用者的投票刷新时间进行判断,在一定时间内每个地址只能投票一次,然后会将候选人的票数进行累加,累加的票数是根据合约调用者在社区的代币决定的,接下来会记录候选人地址,以便可以在进行下一阶段时清除票数,最后将合约调用者的投票时间进行更新.其他两种方式只改变了进行投票的对象,剩余部分都没有改变.这里不再赘述.
4.4交易数据的记录和社区仲裁
社区产生的代币一个实用的功能是将它作为链下交易的押金.当有人向社区出售产品时,会在合约上锁定确定数目的代币,当产生交易时,合约会记录产生交易双方的地址.如果买方对交易过程产生不满,拥有产生交易争执的权利,这时社区人员就会投票.合约具有投票阈值.如果票数大于阈值,就会允许买家得到卖家的押金,如果没有超过阈值,则认为此争端卖方错误可以接受,这时买家得不到卖家的押金.当卖家不想再产生交易和交易都已经完成时,可以取回自己之前向合约锁定的代币.链下交易的流程如图3所示.
5方法实现
方法的具体实现分为公有区块链智能合约的开发和前端应用的开发.合约开发部分对于以太坊来说应该是一个整体(一个合约),这样就可以通过一个以太坊地址来访问所有可访问的变量和方法,简化了调用外部合约的复杂关系.前端开发部分虽然是对一个合约进行访问,但是做了模块化的处理,这样外部进行访问时可以分模块进行.智能合约部分使用Solidity语言开发,并使用truffle框架进行编译测试.前端应用部分,本文使用Vue进行开发,并通过web3.js和abi对智能合约进行调用.系统中的代码详见https://gitee.com/xiaodalong1130/community.
6分析和评估
6.1运行成本分析
根据EthGasStation的数据统计,在本文撰写时(2019年5月)以太坊调用智能合约的平均费用为20 Gwei,折合人民币约0.7元。在实际情况中,调用合约的费用(Cost=Gas uesd×Gas price)按使用的操作码和存储的字节数计算.在合约调用中Gas price的价格是动态变化的,而Gas used是不变的.为了了解合约中方法具体使用的gas值,本文测试了主要方法的gas消耗值.具体如图4所示.其中voteToCandidate、lockToken和recordTranscation在合约中由于涉及多个变量的写入操作,所以gas消耗值要大于平均水平.其中,voteToCandidate是系统的主要功能.但是却消耗了大量的gas值.针对这一情况设置了代币奖励.对每个投票的人给予代币作为投票的回报,希望能够增加社区人员投票的动力.对于lockToken和recordTranscation等方法,这些操作的收益者是个人,本文不设置激励措施.运行成本会受一些应用场景的限制,所以具体应用场景适用于社区产生的价值大于运行成本.
6.2性能和安全性分析
智能合约调用时间的实际情况是根据块的确认时间决定的.但是为了测试智能合约的运行性能,本文使用truffle编写了测试代码,并记录了方法的执行时间.具体如图5所示,方法大都在0.2s内做出回应.其中voteCandidate、bashMint、assginMint涉及的读写操作多一些,可能花费时间比其他方法久一点.总体来说,方法的调用花费时间较低.
如果有人想要攻击以太坊区块链,需要拥有51%的算力才能成功.根据etherscan的数据统计(2019年5月)显示,大概不到10s出一个块,一个块平均2个以太币,大约3000元人民币.如果拥用51%算力,每秒大概获得人民币150元(https://etherscan.io/).除非攻击收益大于150 RMB/s,否则以太坊区块链就是安全的.但是以太坊上的智能合约出现了多次漏洞.例如,The DAO攻击者利用合约地址的递归调用窃取了大量的代币,原因是在代码中先转账给地址,后减去合约中地址的代币.美链因为没有使用安全的计算方法,导致整数溢出.FOM03D由于没有考虑到网络堵塞问题被窃取了大量代币.本文针对这些问题做出了针对性的检查.
7结语
本文针对社区贡献货币化的中心化问题,提出了一个基于以太坊的社区贡献激励方法.首先对该方法的整体架构和合约实現进行介绍,之后对主要的算法和流程进行了详细说明,最后对运行成本进行分析并对安全性进行了检查.在未来的工作可以分为两点:第一,针对社区贡献货币化是否能够促进社区发展找到理论基础;第二,在不降低去中心的前提下,找到合适的区块链平台进行实现,进一步降低费用.总之,本文以社区贡献货币化为基础,主要从3个方面来设计系统:货币、群体力量和需求关系.把区块链技术应用到社区中,增强了社区系统的表达能力,为现有的社区发展提供了一些有益的启示.