以太坊的社交网络平台设计方案

2023-11-08 11:55王华戴建成许力
武夷学院学报 2023年9期
关键词:以太代币帖子

王华,戴建成,许力

(1.闽江师范高等专科学校 数字信息工程学院,福建 福州 350117;2.福建师范大学 计算机与网络空间安全学院,福建 福州 350117;3.物联网福建省高校应用技术工程中心,福建 福州 350117)

随着互联网的蓬勃发展,社交网络成为新时代信息传递的重要媒介[1]。人们在社交网络中可以共享、获取各种信息。目前,社交网络已经成为人们日常生活的重要组成部分。据统计2019 年我国社交网络用户规模已达到8.62 亿人,预计2022 年中国社交网络用户整体突破10 亿人[1]。当前社交网络的发展依赖于中心化的社交网络平台,受到单点瓶颈限制,中心化管理者无法实时管理用户发布的不良信息。更为严重的是,出于自身利益最大化的考虑,管理者常常会利用用户流量来控制和影响舆论导向,达到不可告人的目的,这无疑损害了相关用户的权益。甚至,管理者凭借控制权集中、信息修改不透明等优势,对相关用户的数据进行篡改,使得相关用户的切身权益更加得不到保障。因此,设计一个新的社交网络平台成为重要的研究课题。

2008 年,中本聪发布比特币,区块链的概念由此产生[2]。区块链具有去中心化、不可篡改、全程留痕、可以追溯、集体维护、公开透明等特点[2]。经过十多年的研究与发展,区块链已从数字货币1.0 阶段,到结合智能合约的2.0 阶段[3],再到现在的全面接触社会生活的3.0 阶段[4]。近些年来,区块链技术广泛应用到人们生活和社会发展的方方面面,在金融[5]、农业[6]、政务[7]等领域提供了分布式安全服务。以太坊利用区块链技术建立了一个开源的有智能合约功能的公共区块链平台[8],更进一步推进了去中心化应用的快速发展。

本文提出一个去中心化社交网络方案,并基于以太坊、智能合约与现有虚拟货币交易所实现了分布式的社交网络平台。该方案不再依赖中心化管理者,避免了中心化管理者控制舆论和篡改用户信息。

考虑到不良信息监管问题,本文设计身份认证方案实现对滥发不良信息用户的管理。设计基于投票的监管机制,解决了中心化管理单点瓶颈限制的问题。设计基于热榜函数的“评价-流量兑现”双模式激励机制,确保用户发布良好信息的收益高于发布恶意信息。

通过hash 算法降低区块链的存储开销。Solidity在线集成开发环境Remix 对平台性能进行测试,实验结果表明,所提方案实现了预期功能,降低了存储开销,减少了gas 消耗,在使用少量存储空间与算力的情况下,保证了分布式信任安全。

1 背景知识

1.1 区块链

区块链是一种运用密码学解决分布式信任问题的数据结构[9]。如图1 所示,区块链通过将前一区块Hash 值与当前区块数据进行哈希处理,得到一个可快速验证的Hash 值。根据使用场景不同,区块记录的数据类型也不同,比特币则记录了交易信息[10]。区块链利用密码学形成一种前后关联、可快速验证、且难以伪造的数据记录结构体,从而保证了数据的真实性。

图1 区块链结构Fig.1 Block chain structure

1.2 以太坊

以太坊是一个开源的有智能合约功能的公共区块链平台[8],通过其专用加密货币——以太币提供去中心化的以太虚拟机(EVM)来处理点对点合约[11]。以太坊设计框架如图2 所示。

图2 以太坊框架Fig.2 Ethereum framework

2 系统模型和设计目标

2.1 系统模型

系统模型如图3 所示,其拥有系统开发者、系统维护者、内容生产者、流量购买者以及内容阅读者等五类主要角色。系统的更新与管理,由全体参与者投票决定,每个人的投票权重将依据获得利润与活跃度动态调整。具体而言,每类角色如下:

图3 系统模型Fig.3 System model

(1)系统开发者:持续为系统更新。更新内容将由投票确认;用户调用新功能时会向开发者转取一定的虚拟货币,开发者以此来获得收益。

(2)系统维护者:为系统提供算力,让系统持续的运行,每出一个区块,系统会铸造新的虚拟货币给维护者。

(3)内容生产者:为社交网络提供作品,吸引流量的群体。他们可以通过出售自己区域的广告位来获取虚拟货币,以此获取收益。

(4)流量购买者:使用从开发者、维护者、内容生产者或阅读者手中购买的虚拟货币兑换流量服务。

(5)内容阅读者:从平台获取信息的用户。平台为阅读者提供一个以关键词为主题的交流社区,准确把握用户需求,为兴趣而生。让那些对同一个话题感兴趣的人们聚集在一起,更加方便地展开交流和互相帮助。

(6)参与者:对系统更新是否生效而进行投票的所有群体。

2.2 设计目标

设计一个基于以太坊的社交网络平台,为社交网络上的参与者提供一个团体自治的社交网络环境,具体主要目标如下:

去中心化。搭建一个去中心化的社交网络平台,解决传统中心化社交网络封闭、单点瓶颈、权限集中等实际问题。

可身份认证。采用以太坊公有链技术,其去中心化技术导致用户匿名性,不便管理。为此,需要对用户的身份进行认证,以此杜绝有不良企图的用户,随意创建并发布不良信息。

节约gas。gas 是指调用合约运行时需要支付的以太币,支付的gas 将会直接销毁。如果一个合约运行需要的gas 值太高,系统可能会无法部署,因为以太坊网有最高gas 的限制,gas 值太大会影响系统的性能。以太坊中的gas 控制机制既是为了平台的资源考虑,也是对用户成本的一种保护。在本文方案设计中,为了优化代码,减少系统运行花费以及提高运行效率,有必要尽可能的减少程序gas 的消耗。

3 基于以太坊的社交网络设计方案

针对系统整体框架和系统主要功能模块展开描述,给出具体的设计方案。

3.1 设计目标

3.1.1 系统物理架构

系统物理架构如图4 所示[12],使用基于区块链技术的分布式架构,不限制加入群体,任何人都可以使用设备自建属于自己的社交网络,或是加入他人的社交网络。每个维护者负责运行一个以太坊区块链的共识节点,各维护者可以利用初始化信息以特定的配置加入到区块链公有链网络,以区块链地址作为各个用户的唯一标识。之后维护者又将在自己的设备上配置web 服务,为阅读者提供前端服务用以连接区块链网络。若需要控制用户注册,合约发布可将监管机构纳入为注册系统的管理员。

图4 系统物理架构Fig.4 System physical architecture

3.1.2 系统逻辑架构

通常去中心化应用(DAPP)由HTML 页面、前端JavaScript、web3.js 库以及以太坊区块链组成,这种最简单的DAPP 架构虽然能满足区块链应用的基本需求,但是需要前端做很多的逻辑处理,也不能让阅读者在不需要连接区块链网络的前提下访问区块链网络的数据。所以本文对其进行优化,提出了一种四层架构的程序框架,如图5 所示:

图5 系统逻辑架构Fig.5 System logical architecture

网络层是实现分布式网络的以太坊底层技术,运用区块链技术来保证分布式应用的信任问题。

合约层使用Solidity 编写智能合约,完成各项功能控制,实现区块链数据的存取。

服务层为用户提供web 交互和区块链信息交换服务。为了让内容阅读者无需在客户端直接连接区块链网络,本文方案在服务端通过Node.js 调用web3.js与区块链进行交互,而服务端直接连接着区块链网络,也将大大提升访问速度。在服务层中,Node.js 是提供服务的核心,支撑着整个平台的运行。

应用层提供用户接口,用以实现对数据的存储与修改。通过web 界面直接与用户进行交互。

3.2 系统功能模块设计

经过需求分析,系统功能模块总体结构如图6 所示,包含了类贴吧社交模块,广告模块,系统更新模块和虚拟货币交易模块等。社交模块为用户提供社交服务;广告模块为内容创作者与流量购买者提供流量交易服务;投票模块为系统提供一个投票更新的功能;交易模块可以让用户出售虚拟货币提现。

图6 系统功能模块结构Fig.6 System function module structure

3.2.1 社交网络模块

社交网络模块是整个系统正常运行的重要基础,使用前用户必须先注册。他包含了身份认证、用户注册、信息发布和热榜等功能。整个模块内部交互设计如图7 所示。

图7 社交网络模块Fig.7 Social network module

(1)认证注册(可选)。监管部门审核用户信息后,更新链上验证码并发送给用户。用户注册限制是防范社交网络被滥用的重要功能。

(2)用户注册。为用户创建初始存储数据库,保存用户认证数据(加密形式),仅监管部门能够查阅。

(3)创建吧。创建一个新的、以某个关键词为话题的社区,并初始化信息。

(4)创建帖子。发布带有言论的帖子,寻求帮助或者分享信息。其真实存储在用户存储数据库中,其他地方只记录其所在地,这样便于维护。

(5)评论(同创建帖子)。在创建帖子的基础上,将自己的存储地址紧跟在母贴评论区后,并将母贴地址存储到自己的数据库中。评论的存储地位等同于帖子,相对于一个新帖子,多了母贴信息。

(6)点赞、踩等计数操作。帖子中带有一个记录某些操作次数的存储,用于统计上热榜。

(7)热榜计算。依据帖子中单位时间的操作次数衡量热度。

3.2.2 广告模块

为了吸引更多的内容生产者与资金,广告模块可让内容生产者兑现自己的流量。广告模块如图8 所示。

图8 广告模块Fig.8 Advertisement module

内容生产者根据自己的流量,对帖子设置可购买的区域与价格。流量购买者使用虚拟货币购买即可获得该区域编辑权限。

3.2.3 系统更新模块

为让系统可以去中心化的形式迭代更新,如图9所示,使用投票形式通过更新方案。开发者以决策形式提交优化或新功能代码,被更新并入系统后,系统会以虚拟货币作为奖励发送给开发者。参与者/代理人也可以提出决策,并且对决策进行投票,投票通过后更新并入系统。

图9 系统更新模块Fig.9 System update module

3.2.4 交易模块

每个吧都将发布一个代币,代币与维护系统的货币关联交易。为实现去中心化的交易,本文借鉴Uniswap 运行机制[13],设计一款为社交媒体平台代币交换的交易所。

Uniswap 是一个解决eth 以及衍生代币快速交易的去中心化交易所。方案与uniswap 不同的是,新代币上架,会有一段时间的锁定,该期间会以eth 的权益为主,初始化eth 与代币间的流动性代币总量;锁定结束时,会以代币价值最低比例为初始价值,随后将其存储为初始流动性资金,并且以这个参考值,开启代币间交易配对。若有人交易,则向流动性提供者交手续费。因为以eth 的权益为主,所以杜绝新代币产生出现的虚假价值比例。

依据以下算法结算交换eth/代币数量:

其中:x 和y 是两种代币的存储量,交易时,z 是一个固定值。进行交易时,当用户使用x 换取y 代币,则z 值固定,其可交换数量算式如下:

交易完成后,x 与y 的比值会变化,当这个比值变化较大并出现利差时,就会有人为挣这个利差,反向交易以平衡这个交换比例。以此就能实现一个去中心化代币交易所,并解决过去交易所存在的快速交易问题。

4 关键技术解决方案

本节将对社交网络平台设计过程中遇到的关键问题的解决方案进行说明,主要包括区块链上的身份认证注册、热榜函数设计、合约数据存储设计等。

4.1 身份认证注册

为了防止滥用社交网络,本文设置了注册限制功能。当用户提交身份信息给监管部门时,监管部门只有审核通过后,才同步链上的验证码,并将验证码发送给用户。

对于链上验证码的验证方式,因为以太坊的算力需要消耗gas,而逐字对比将会消耗大量的gas,为此,根据参考文献[14],如图10 所示采用验证码哈希值对比的方式来进行验证。

图10 身份认证功能设计Fig.10 Design of identity authentication function

4.2 帖子存储设计

由于一个帖子包含多种信息,而且可能在吧、用户、母贴以及热榜中都有副本,此外智能合约语言Solidity 和C 语言不同,不能使用指针方式直接调取,因此这导致帖子存储资源的消耗会花上好几倍。以太坊上的存储资源和算力一样都是珍贵的,权衡利弊,本文设计了一种存储方法用算力来换取存储资源,如图11 所示。

帖子的原本存储在用户中,其他副本中都只存储帖子的地址信息,当用户访问副本时,需要跳转访问到帖子的原本,这样每次访问原本,只需要多一次访问算力,就能节省所有副本的存储资源。

4.3 热榜函数设计

为了让用户拥有更好的社交体验,本文增加了热榜功能。任何对帖子的操作都会触发热榜函数,为帖子添加热度。为了节省算力资源,只有达到一定的间隔时间,才会与热榜中的帖子进行对比,进行替代操作。热榜函数设计如图12 所示。

图12 热榜函数设计Fig.12 Hot list function design

热榜函数设计中,最重要的问题就是热度值的计算,改进基于用户投票的排名算法hacker news[15]。设P表示总投票数,T 表示发布至今的时间间隔,G 表示重力加速度,它的数值大小决定了排名随时间下降的速度快慢。根据hacker news 得到热度值:

设△t 表示单位时间,Ci表示各种操作参数(例如点赞,评论等),Q 表示权重比,越小权重越大。单位时间内操作的热度值为:

其中:k 为调节Score1与Score2的权重比。Hacker news算法可以防止热度较高的文章一直处于前列,而埋没新内容。但也可能会导致部分热点文章在某一个时间点才备受关注,所以添加以平衡这种情况。

4.4 智能合约与数据存储设计

将全部数据都上链,完全实现去中心化,需要使用智能合约将数据写入区块链中,本节对智能合约数据和相关操作函数进行设计。

4.4.1 智能合约数据设计

为实现去中心化,程序中使用的所有数据都将以storage 状态存储在区块链当中。智能合约相关主要数据设计如表1 所示。

表1 智能合约数据设计表Tab.1 Smart contract data structure

表1 中列出设计的帖子、吧、用户等5 个结构体,以及与其中部分结构体相关联的2 个映射。在智能合约中结构体和映射都以storage 类型存储,并直接存储在区块链中。

4.4.2 智能合约函数设计

智能合约函数可实现对数据的访问与修改,本文方案的主要智能合约函数如表2 所示。通过这些智能合约函数,方案可以实现所需的各项功能。

表2 智能合约函数设计表Tab.2 Smart contract functions

5 实验测试与分析

对提出的方案进行实验测试,包括功能测试和性能测试,以及相关分析。

5.1 实验环境搭建

系统原型开发全部在Linux 上进行,具体环境配置如表3 所示。以太坊以公有链方式发布,也可以搭建私有链和联盟链,本文采用的是搭建公有链的方式[16-17]。

表3 开发环境配置Tab.3 Development environment configuration

测试环境如表4 所示:

表4 测试环境配置Tab.4 Test environment configuration

5.2 实验测试与分析

5.2.1 功能测试

对于智能合约的测试,使用以太坊官方开源的Solidity 在线集成开发环境Remix 完成。以注册功能为例,图13 展示在Remix 中对智能合约的测试结果。在图13 中,在功能测试区输入所需的参数,点击函数名称或 transact 按钮即可执行函数。对于user_check_change()验证码更新功能,只有监管部门账号才能调用,用户再使用更新的验证码并调用register()函数才能完成注册,如果验证码错误会报错并重置,以此杜绝暴力破解攻击。如果注册成功,则返回注册信息(用户账号与id),如图14 所示。可见,合约已经按照我们在合约定义的“event”输出注册时提交的一些信息,便于我们确认区块链中进行写操作的执行情况。该event 将会被web3 发起交易执行时提取到Node 对象中,进而再通过页面展现给用户,使操作可视化。

图13 测试智能合约里的函数Fig.13 Testing smart contract functions

图14 智能合约执行时控制台输出Fig.14 Console output

对于成员注册、创建吧、发布帖子、帖子点赞等功能,测试用例及测试结果如表5 至表8 所示。

表5 成员注册功能测试Tab.5 Member registration function test

表6 创建吧功能测试Tab.6 Creating bar function test

表7 发布帖子功能测试Tab.7 Posting function test

表8 帖子点赞等计数操作功能测试Tab.8 Count function test

5.2.2 性能测试与分析

为了减少gas 消耗,对不同的字符串验证方式所消耗的gas 值进行对比。这里提供四种不同的字符串验证方式:方式1:逐字对比;方式2:先对比字符串长度再用方式1;方式3:哈希值对比;方式4:先对比字符串长度再用方式3。表9 给出了不同字符串验证方式gas 消耗对比,使用remix 可直接测试查看运算消耗gas 的差异。从表9 可以看出,直接使用方式1 进行哈希值对比在大部分情况下表现最优,但如果在实际验证情况中,长度不等情况占大多数,则使用方式2更优。但方式2 存在一定的安全问题,攻击者可能通过多次测试与对比gas 消耗来猜出验证字符的长度。所以权衡各方面利弊下,本文选择方式1。

表9 不同字符串验证方式gas 消耗对比Tab.9 Comparison of gas consumption of different string authentication methods

6 结束语

现阶段社交网络平台依赖中心化管理,容易受到单点瓶颈限制,并存在中心化管理者篡改用户数据、控制舆论导向,侵害用户权益的问题。针对这些问题。本文将具有去中心化、可追溯等特性的区块链技术引入社交网络平台,提出了一种基于以太坊的社交网络平台设计方案。我们利用以太坊、智能合约与现有虚拟货币交易所实现了分布式的社交网络平台。设计身份认证方案实现对滥发不良信息用户的管理。设计基于投票的监管机制,解决中心化管理单点瓶颈限制的问题。设计基于热榜函数的“评价-流量兑现”双模式激励机制,确保用户发布良好信息的收益高于发布恶意信息。方案的安全管理不再依赖于中心化管理者。系统原型测试与分析表明方案的可行性和有效性。

猜你喜欢
以太代币帖子
以太极为旗,开启新时代“黄河大合唱”
首次代币发行监管的行为经济学路径
车易链:做汽车业的“以太坊”
央行等七部门叫停各类代币发行融资
央行等七部门叫停各类代币发行融资
央行等七部门叫停各类代币发行融资
暴力老妈
百通推出入门级快速工业以太网络交换器系列
以太互联 高效便捷 经济、可靠、易用的小型可编程控制器
高手是这样拍马屁的