当前位置:首页 期刊杂志

一种基于区块链的群智网络框架*

时间:2024-07-28

张明瑞, 王 涛, 杨 波

陕西师范大学 计算机科学学院, 西安710119

1 引言

人工智能已经进入2.0 时代,群体智能作为其中一个重要领域得到了学术界和工业界的广泛关注[1,2].群体智能(crowd intelligence) 提供了一种新型分布式问题解决范式, 群体智能是由大量自主个体在特定网络组织结构下共同努力, 为了完成具有挑战性的计算任务而产生的[3,4]. 群体智能中的一个基础问题,就是构建群体智能网络. 据我们所知, 如何构建去中心化的群体智能网络还是一个开放的问题.

众包作为群体智能的初级阶段, 主要以解决人智密集型任务为主[3]. 自从2006 年, 文献[5] 提出众包概念以来, 学术界对其进行了深入研究, 并将其应用在信息共享、投票系统、城市管理、公共安全等领域[6,7]. 部分商业众包平台已经得到部署与应用, 例如Upwork[8]、Uber[9]等. 但是, 这些众包平台均为传统的中心化组织结构, 容易遭受各类网络攻击, 存在业务失败的风险. 例如DDoS 攻击、节点失效故障以及平台数据泄露等, 这些安全风险已经造成了大量的经济损失[10].

为了避免中心化组织结构带来的安全风险. 2013 年, 文献[11] 提出了一种分布式众包系统, 目的是以协同的方式完成任务, 提高任务完成效率. 2015 年, 文献[12] 提出了一种应用于移动众包网络的分布式任务选择协议. 但是, 这类分布式的众包平台, 只能保证分布式的分发任务, 任务收集与供应仍然是由中心系统提供服务, 仍然面临安全风险.

为了提高众包平台组织结构去中心化水平. 2016 年, 随着以太坊的蓬勃发展, 区块链进入2.0 时代,基于区块链的众包系统与应用被相继提出. 2016 年, 文献[13] 提出了一种基于区块链的专门众筹平台(bounty-based crowdfunding), 这是一个专门的众筹平台, 并不具备通用性. 2017 年, 文献[14] 提出了一种改进的协议解决众包系统中的小值交易问题, 该协议主要的关注点是小值交易问题, 系统不具备通用性.2018 年, 文献[15] 提出了构建于区块链上的私有匿名众包系统(zebraLancer), 设计了具体的协议与方法,有效防止数据泄露与身份泄露, 但是所有参与者需要通过专门的身份认证机构获取证书, 专门的身份认证机构可能带来额外的安全风险. 同年, 文献[10] 提出了基于区块链的众包平台(crowdbc), 不依赖任何第三方平台完成众包工作. 并提出了一个具体的方案, 使用智能合约控制业务流程, 但是crowdbc 系统主要面向人智密集型任务, 缺少应对机器智能密集型任务能力, 使用一种全局智能合约管理所有参与者, 不利于系统扩展与维护. 2019 年, 文献[16] 提出了一种混合式区块链众包系统(zkcrowd), 主要关注的是任务的隐私保护问题. zkcrowd 将任务分为私有任务与公开任务两种类型, 用一条公链管理公开类型的任务,对于私有任务则使用从公链上展开的侧链管理, 对任务做了多样化隐私保护, 但是缺乏对任务数据流向的跟踪管理. 并且上述几种基于区块链的众包平台将数据处理委托给第三方平台, 随着各类终端智能设备的加入, 终端节点感知类数据激增, 如果将数据全部上传云平台或其他分布式数据系统, 可能反而会降低数据处理效率[17].

综上所述, 基于区块链的群体智能网络当前主要面临的问题有:

(1) 当前基于区块链的群体智能系统主要是面向特定具体的应用, 缺少通用性与扩展性. 面对新的群智应用结合区块链场景, 往往需要重新设计应用结构, 现有的相关方案设计难以移植与扩展.crowdbc[10]作为当前最好的基于区块链的众包框架方案, 也存在全局控制合约、不利于扩展维护、存在扩展性受限的问题.

(2) 当前基于区块链的群体智能系统主要依靠责任任务工人独立集中处理数据, 或者由云服务器集中处理数据. 这要求任务工人具有较高的数据处理能力, 导致工人准入门槛较高, 不利于扩大参与者群体. 在处理感知类群智任务时, 往往任务数据量庞大, 如果不能及时处理, 可能会产生数据处理效率降低、任务延时增大的问题.

1.1 本文贡献

本文主要贡献如下.

(1) 针对当前基于区块链的群智系统缺乏扩展性与通用性的问题, 提出了一种基于区块链的通用群智网络框架, 不同于最近被提出的各类基于区块链面向特定应用的众包方案, 是一种为了提高基于区块链的群体智能应用构造效率, 所设计的通用群体智能框架. 针对不同功能层分别设计了对应的智能合约. 不设置全局控制合约, 各层控制合约地位相对独立. 降低了模块之间的耦合性, 从而提高系统的可扩展性, 并且提供了一个具体的设计实现方案.

(2) 针对当前基于区块链的群智系统集中处理数据可能导致延时的问题, 借助边缘计算的概念, 允许各类闲置智能设备作为边缘处理节点, 分担云服务器的数据处理压力. 扩大了参与者范围, 提高了任务的实时响应能力. 将数据处理流程独立管理, 设计了数据流控制合约对边缘数据处理任务进行跟踪管理, 允许群智任务主动请求边缘节点提供数据处理服务, 最终达到降低任务延迟、降低任务成本的目的.

(3) 对所提基于区块链的群体智能框架可能遭遇的安全风险进行了分析, 对任务数据的传输过程使用密码工具符号进行了描述. 最后, 使用以太坊智能合约编程语言Solidity 对所提三种智能合约进行了实现验证, 在以太坊Ropsten 网络上进行了测试, 实验结果表明了本系统的可行性与可用性.

2 系统结构

2.1 系统模型

在本节中, 我们将描述基于区块链的群智网络系统模型. 如图1 所示, 在线上模型中有三个参与实体,分别是任务请求者、任务工人和矿工. 所有参与实体均为对等节点, 三种实体之间的交互均通过链上交易实现. 宏观模型描述的是各参与实体与区块链之间的数据传输流向, 各参与者实体也可作为数据的处理与传输节点. 表1 为本文中主要使用符号解释.

图1 系统模型图Figure 1 System model of crowd intelligence

任务请求者: 任务请求者, 即为群智网络中群智任务的发起者, 群智任务可以由人类或者机器请求者发起. 首先, 任务请求者部署参与者控制智能合约(user control smart contract, UCSC), 完善身份信息.参与者的身份与身份控制智能合约是一一对应的关系, 参与者信息被写入区块链不可更改, 允许所有人查询验证. 然后, 任务请求者部署任务控制智能合约(task control smart contract, TCSC), 完善任务信息并发布群智任务. TCSC 与群智任务也是唯一对应关系. 等待任务工人向TCSC 发起交易, 承包符合条件的群智任务. 任务完成后, TCSC 向参与各方结算任务报酬.

任务工人: 任务工人, 即为执行具体任务的角色, 群智网络中的任务工人类型多样, 包括职业人类工人、商业集群服务器、终端感知节点以及其他专门智能系统. 任务工人部署UCSC 后进入群智网络, 根据其技能、信誉、历史信息等指标, 向匹配的TCSC 发起交易承包任务. 如果群智任务需要边缘数据处理支持, 任务工人还需要根据TCSC 任务信息, 部署数据流控制合约(data stream control smart contract,DSCSC), 完善边缘节点信息以及数据处理任务信息, 监管数据处理流程. 其他具备数据处理条件的工人,承包数据处理任务, 任务完成后由承包任务的责任工人支付报酬.

表1 主要符号对照表Table 1 Symbol description

矿工: 矿工是系统中的参与实体, 矿工有两个主要任务. 第一, 矿工通过挖矿为区块链生成区块, 将各类交易写入区块. 第二, 矿工根据TCSC 提供的数据验证方法对各类任务数据进行验证. 矿工也需要完善身份信息并部署UCSC.

本系统共有三个参与实体, 分别为任务请求者、任务工人和矿工. 所有参与者都需要部署唯一身份合约UCSC. 每个群智任务对应部署一个任务合约TCSC, 如果任务需要边缘数据处理支持, 则还需要部署数据控制合约DSCSC. 所有参与者之间的交互全部通过智能合约交易完成.

2.2 系统分层

本节主要描述系统框架分层. 如图2 所示, 本系统共分为三层, 参与者管理层、任务管理层以及数据流管理层. 在每个分层中通过UCSC 身份控制合约、TCSC 任务控制合约和DSCSC 数据流控制合约实现业务功能.

图2 系统分层图Figure 2 System architecture

参与者管理层: 本层主要包括参与者基本信息管理、技能与信誉评价机制, 参与者隐私保护等功能.本系统将区块链作为身份管理的载体, 将身份控制智能合约(UCSC) 作为身份凭证. 与传统基于证书的PKI 身份认证方法相比, 具有查询效率高、安全可靠、兼容性广泛的优点. 当前, 信用机制种类多样(例如积累信誉值、提交押金等方式), 本系统将信誉值作为信誉评价的唯一标准, 信誉值积累越高意味着参与者可靠程度越高. 参与者可以选择实名或匿名进入网络, 实名注册可以获得更多信誉值奖励.

任务管理层: 本层主要功能包括任务信息管理、任务流程管控、任务奖惩机制以及任务隐私保护. 任务请求者部署TCSC 合约, 信息管理与流程管控均通过向该智能合约发起交易的形式来执行. TCSC 被部署上链后, 意味着该任务被公开发布, 任务工人可以向该合约发起交易承包任务. 任务奖励-惩罚机制发挥着维护工人与任务发布者之间公平交换的重要作用, 本文仅使用信誉值T 来作为奖励与惩罚的唯一标准. 参与者信誉值越高即可靠性越高, 参与者信誉值初始为0, 不同任务信誉值奖励值不同, 工人成功完成任务积累信誉值. 反之, 任务失败扣除相应的信誉值, 工人信誉值越高就可以接取更高报酬的任务. 如果任务发布者无故取消任务, 则扣除其相应信誉值, 以上执行逻辑均由智能合约实现. 本系统所有交易均有时间限制, 以区块链中区块诞生数量为时间计量标准, 每个任务均设定最终完成时间与最终支付时间. 如果超时未完成任务或结果不合格, 工人则无法获得报酬. 如果任务发起者违约超时或未支付结算报酬, 则扣除任务发起者信誉值补偿工人. 工人获得所有收益Profit 包含货币收益与信誉值收益. 总收益Profit 计算方式如公式(1), 任务数据评估阈值α, 任务数据评估结果β, 货币报酬M, 信誉值奖励值T, 惩罚系数n, 任务实际完成时间Timetask, 任务约定完成时间Timetask-ddl, 实际支付时间Timepay, 任务约定支付报酬时限Timepay-ddl. 如果任务完成超时或者任务完成质量不合格, 任务工人不会得到任何货币奖励并且会被扣除奖励信誉值. 如果任务工人完成了任务. 但是任务发起者未及时支付任务工人报酬(例如, 取消任务或余额不足). 则任务工人可能无法获得货币报酬. 但是至少会得到n 倍信誉值奖励作为补偿. 信誉值奖励来自任务请求者扣除数量. 以上结算过程均通过智能合约自动按照预设条件执行.

所有工人处理任务数据时, 均使用任务请求者公钥对任务数据进行加密, 并使用自己的私钥对数据承诺值签名以保证数据的可靠性.

数据流管理层: 本层主要功能包括节点信息管理、数据流向监管、数据隐私保护. 随着大量物联网设备加入网络, 终端数据量急剧增加, 可能会降低云服务的数据处理效率. 本文借助边缘计算概念, 允许边缘智能设备参与任务数据的处理, 将部分云任务下放到网络边缘, 这将为感知类群智任务提供更好的支持.任务工人部署数据流控制智能合约DSCSC, 确定任务工人、边缘节点、任务发布者之间的关系. 监管终端数据产生、边缘数据处理、解决方案上传过程. 任务报酬结算时, 首先由任务发布者支付任务工人报酬,任务工人收到报酬后, 支付数据处理节点报酬并更新DSCSC 合约状态. 边缘节点最终将处理完成的任务数据发送到指定地址, 并在对应TCSC 合约中设定完成标志. 所有节点处理任务数据时, 均使用任务请求者公钥对任务数据进行加密, 并使用自己的私钥对数据承诺值签名. 任务工人在群智任务结束后, 及时向边缘节点支付报酬与信誉值奖励. 数据处理节点的收益计算方法与TCSC 中任务工人收益计算方法相同.

3 方案构造

3.1 智能合约方案

本节主要描述系统中智能合约用例及关系, 如图3 所示. 每种合约在被部署后即为在线状态, 业务未完成则该状态保持不变, 业务完成时最终转移为结束状态, 每种合约具有不同的结束状态. 身份如果被注销则UCSC 被修改为撤销状态, 群智任务结束时, TCSC 可能进入成功结束状态或失败结束状态, 边缘数据处理失败时则DSCSC 可能进入成功结束状态或失败结束状态. 以上成功结束意味着任务完成, 失败结束则表明任务失败. 失败原因有多种, 例如任务被取消, 请求者无法支付, 系统故障等. 任何系统与合约状态的改变均由交易触发. UCSC、TCSC、DSCSC 合约用例描述如下.

UCSC (Address,State,Skill,pre_work,Um,T) 中主要状态变量描述如下. Address 参与者外部账户地址. State 参与者当前状态, 指示工作状态. Skill 参与者技能指标, 描述参与者技能信息. pre_work参与者上一次参与任务的地址, 记录上一次参与完成的任务地址, 可形成工人的历史任务链接. Um 参与者模式, 包括主动参与模式(用户可以自主选择符合条件的任务)、被动参与模式(用户只接受系统自动分配的任务). T 信誉值, 初始为0, 需要不断完成任务积累, 也是承包任务资格重要条件. 参与者信息管理由上述变量实现, 技能与信誉评价机制是模块化可替换的, 可以根据系统的具体要求变更. UCSC 合约与参与者是一一对应关系, 任何时刻只允许参与者有唯一有效UCSC 合约存在于网络中.

图3 智能合约用例图Figure 3 Structure of smart contracts

TCSC (UCSC, State, Skill, Set_[], Set_prework[], Dm, T, M, Eva_fun(), Timetask-ddl, Addrdata,Timepay-ddl)中主要状态变量描述如下. UCSC 任务发布者身份合约地址. State 指示当前任务状态. Skill任务技能要求. T 参与工人信誉值要求. M 任务报酬. Dm 任务数据处理模式, 即是否需要边缘数据处理支持. Set_worker[] 参与者UCSC 地址集合. Set_prework[] 参与者上一次任务地址. 任务评估函数Eva_fun(), 文献[10] 提出了一种任务评估函数设置方法, 即由任务发起者提供任务数据验证函数, 当工人提交任务数据后, 矿工可以在不知道数据细节的条件下, 使用由请求者提供的验证方法进行评估, 请求者最终根据评估结果向工人支付报酬. Timetask-ddl任务数据提交截止时间, Timepay-ddl任务清算截止时间. Addrdata任务数据存储地址. 每个任务存在唯一与之对应的TCSC 合约, 任务状态变更只能通过向合约发起交易来改变.

DSCSC(AddressData-in,AddressData-out,UCSC,TCSC,State,Skill,T,M,Timetask-ddl,Timepay-ddl)中主要状态变量描述如下. TCSC 任务合约地址, UCSC 发布者身份合约地址. State 当前节点状态,Skill 节点数据处理能力. T 参与节点信誉值要求, M 任务报酬. AddressData-in待处理数据来源地址,AddressData-out处理结果传出地址. Timetask-ddl任务数据提交截止时间. Timepay-ddl任务清算截止时间. 合约状态变更智能通过向合约发起交易改变.

3.2 业务流程

本节主要描述整个系统的业务流程. 第一部分描述业务的执行流程, 第二部分描述群智任务数据的传输流程. 如图4 所示, 本系统主流程共分为三个阶段. 参与者事务管理阶段, 所有参与者分别部署自己的身份合约UCSC. 任务请求者可以通过部署TCSC 发布群智任务, 任务工人向匹配的TCSC 发起交易承包任务, 如果任务需要边缘数据处理, 进入数据流控制阶段, 任务工人选择符合要求的边缘节点, 并部署DSCSC 监管边缘数据处理过程.

本系统的一次完整的详细时序流程如图5 所示. 从任务流程执行的角度看, 步骤1–6 属于参与者事务管理阶段. 步骤7–10、20–26、29–32 属于任务控制阶段, 步骤11–19、27–28 属于数据流控制阶段.

(1) 步骤1–6, 请求者、任务工人(边缘节点)、矿工调用信息注册脚本算法Register_Info() 部署自己的身份合约UCSC, 身份合约即为群智网络中唯一有效的身份标识.

(2) 步骤7–8, 请求者发起群智任务, 完善任务信息并部署TCSC 合约.

(3) 步骤 9–10, 任务工人遍历区块发现在线群智任务, 任务工人调用承包任务算法 Getwork_FromTcsc, 输入自己的技能、信誉等相关信息. 检验是否符合任务要求, 如果符合任务要求,则增加自己的UCSC 地址到TCSC 合约工人集合中, 任务承包完成.

(4) 如果群智任务需要边缘数据处理支持, 则继续执行步骤11–19, 任务工人部署数据合约DSCSC,完善数据处理节点信息, 任务指派在这里有两种方式, 由任务工人部署DSCSC 时选定符合条件的节点直接指派任务; 或者先由工人部署DSCSC 合约, 等待符合条件的节点调用边缘任务承包算法Getwork_FromDscsc 主动承接任务. 边缘节点将处理完成的任务数据上传至该任务对应TCSC 指定地址, 设置任务完成标志, 等待验证节点验证数据. 当验证节点验证完成后, 上传验证结果, 并设置验证完成标志位.

(5) 步骤20–26, 任务工人上传任务数据, 表示工人工作完成, 等待矿工验证工人成果, 矿工根据合约中的任务数据验证方法对数据进行评估, 评估完成后上传验证结果. 当所有任务均完成或者到达最后截止时间, 则结算工人报酬.

(6) 步骤27–28, 任务工人给参与任务的边缘节点结算报酬.

(7) 步骤29–32, 群智任务流程结束, 任务成功设置TCSC、DSCSC 为关闭状态.

图4 系统业务流程图Figure 4 Flow diagram

图5 系统业务时许图Figure 5 Sequence diagram

线下数据传输流程:

(1) 任务发布者或数据采集者生成原始数据Dataorign.

(2) 数据生产者对原始数据进行签名, 用数据处理者公钥对原始数据加密, 将签名与加密数据作为待处理数据Datawait-p, 发送至云端或者边缘处理节点, 描述如下:

(3) 云端或者数据处理节点处理完成数据后得到最终结果Datafin, 对最终结果哈希值进行签名, 用任务发起者公钥进行加密, 得到待验证数据Datawait-v, 发送至任务请求者指定位置, 描述如下:

(4) 任务发布者收到任务数据后, 矿工即可请求验证, 此处将上式两个签名简写为Sign1、Sign2. 矿工验证两个签名, 使用任务发布者提供的验证函数进行验证, 得到验证结果Datafin-r, 描述如下:

3.3 主要方法

信息发布: 本系统中身份注册、群智任务注册、数据任务注册全部通过部署相应合约实现. 参与者通过客户端发起部署合约交易. 参与者明确所注册数据信息, 将这些数据作为智能合约初始化参数, 生成并部署对应的智能合约. 信息注册算法流程描述如脚本算法1 Register_Info 所示. 输入为参与者需要部署相应合约的初始化信息Ucsc_info、Tcsc_info、Dscsc_info. 参与者可分别部署三种合约, 并调用相应合约的初始化方法, 输出为参与者需要部署的合约UCSC, TCSC, DSCSC 地址.

任务评估与结算: 任务评估与结算流程, 如脚本算法2 Evl_Pay_Task 所示, 输入为Tcsc、Dscsc、Ucsc 合约地址. 当工人完成任务时,将任务数据上传至指定地址, 并将当前任务完成的时间(区块编号)写入Tcsc 合约. 当数据处理节点完成任务时, 将任务数据上传至指定地址, 并将当前任务完成的区块编号写入Tcsc 合约. 任务数据由矿工或其他参与者请求验证, 验证者将验证结果写入Tcsc 合约. 当任务时间截止或所有任务均完成, 调用支付算法结算各任务参与者报酬, 完成任务评估与结算. 更新任务合约内容, 返回任务合约地址Tcsc.

算法1 Register_Info()Input: Ucsc_info, Tcsc_info, Dscsc_info Output: Ucsc,Tcsc,Dscsc 1 User Call:2 Deployed Ucsc;3 Ucsc →setinfo(Ucsc_info);4 User Call:5 Deployed Tcsc 6 Tcsc →setinfo(Tcsc_info);7 Tcsc →init(Tcsc_info);8 User Call:9 Deployed Dscsc;10 Dscsc →setinfo(Ucsc_info,Tcsc_info);11 Return Ucsc,Tcsc,Dscsc;

Output: Tcsc 1 Worker Call:2 Tcsc →upload_by_ucsc(Ucsc);3 Tcsc →upload_by_dscsc(Dscsc);4 Verifier Call:5 Tcsc →require_verify(Ucsc);6 Tcsc →upload_result(Ucsc,res);7 TaskOwner or Auto Call:8 Tcsc →check_task_complete();9 Tcsc →payment();10 final;11 Return Tcsc;算法2 Evl_Pay_Task()Input: Tcsc, Dscsc, Ucsc

工人承包任务: 任务发现合适任务则向对应任务TCSC 发起承包任务交易. 工人承包任务流程如算法3 Getwork_FromTcsc 所示, 输入为工人身份Ucsc 地址、目标任务Tcsc 地址, 依次检查当前任务状态、工人技能是否符合任务要求, 工人信誉值是否达到任务要求. 如果以上基本条件工人均满足, 则将工人地址写入任务合约中工人地址集合, 更新当前任务参与人数, 更新合约中工人任务记录表, 更新Tcsc 合约状态, 返回更新任务合约地址Tcsc, 完成任务承包流程.

节点数据处理任务承包: 空闲节点发现合适的数据处理任务, 向对应Dscsc 合约发起承包数据处理任务交易, 如算法4 Getwork_FromDscsc 所示, 输入为请求任务工人Ucsc 地址、目标数据处理合约Dscsc地址以及对应任务Tcsc 地址. 依次检查当前任务状态、节点是否具备要求数据处理能力、节点信誉值是否符合要求等准入条件. 如果均符合上述条件, 则更新Dscsc 数据输出地址为目标任务Tcsc 数据上传地址, 更新Dscsc 数据来源地址为任务工人地址, 设置该Dscsc 合约拥有者的支付标志位, 方便该任务完成后, 向边缘数据处理任务承包者结算报酬, 返回dscsc 地址.

算法3 Getwork_FromTcsc Input: Tcsc, Ucsc Output: Tcsc 1 if !Check_Status() then 2 goto final;3 end 4 if !Check_Id(Ucsc.addr) then 5 goto final;6 end 7 if !Check_Skill(Ucsc.Skill) then 8 goto final;9 end 10 if !Check_Trust(Ucsc.T) then 11 goto final;12 end 13 Tcsc.Set[index] = Ucsc.addr;14 Tcsc.Set_count += 1;15 Tcsc.Set_prework[index] = Ucsc.prework;16 final;17 Return Tcsc;

Input: Tcsc, Ucsc, Dscsc Output: Dscsc 1 if !Check_Id(Ucsc.addr) then 2 goto final;3 end 4 if !Check_TaskStatus() then 5 goto final;6 end 7 if !Check_Skill_edge(Ucsc.Skill) then 8 goto final;9 end 10 if !Check_Trust_edge(Ucsc.T) then 11 goto final;12 end 13 Dscsc.addrData−in = Ucsc.Dataaddr ;14 Dscsc.addrData−out = Tcsc.Dataaddr ;15 UcscDscscOwner.dscsc = Thisdscsc;16 UcscDscscOwner.dscscflag = 1;17 final;算法4 Getwork_FromDscsc 18 Return Dscsc;

4 安全分析

本节主要对可能出现的安全风险进行分析, 基于区块链的在线工作平台主要面临两类安全风险, 区块链安全、系统业务安全. 第一种为对区块链系统本身的攻击, 例如51% 攻击、Sybil 攻击、Eclipse 攻击等, 本质是破坏区块链系统本身, 文献[18] 对这类攻击有详细介绍与安全分析. 第二种为系统业务面临的安全风险, 例如节点失效故障、DDoS 攻击、恶意评判攻击等.

恶意参与者欺诈攻击: 恶意的参与者在获得记账权后拒绝广播, 企图使当前的区块链分叉破坏区块链安全. 本系统假设多数参与者都是诚实的, 使用POW 工作量证明机制的区块链模型如下, 定义p 为参与者在一轮挖矿中获得记账权的概率, q 为一轮挖矿计算中调用哈希算法Hash() 的总次数, u 为参与者总数, v 为诚实参与者比率, α=pquv 为诚实参与者的计算能力, β =pq(1 −v)u 为恶意参与者计算能力, γ为诚实参与者合法获得一个区块的下界.

其中, 诚实参与者在一轮挖矿中至少获得一个区块的概率为: 1 −(1 −p)quv⩾1 −e−α⩾γ. 诚实参与者在一轮挖矿中只获得一个区块的概率为: uvpq(1 −p)quv−1⩾α(1 −α+p)⩾γ.

定理1 假设f =(α+β)<1,γ ⩾(1+δ)λβ, 存在δ ∈(0,1) 和λ ⩾1 (例如, λ2−fλ −1 ⩾0). 定义S 为在一个给定区块链协议执行轮数时当前链上诚实参与者的集合. 那么S 在参数k 下不满足公共前缀属性的概率至多为e−Ω(δ3k).

文献[19] 证明了定理1, 使用POW 工作量证明机制的区块链系统在多数参与者诚实条件下, 遭遇恶意参与者欺诈攻击的概率至多为e−Ω(δ3k). 因此, 本方案选择使用POW 工作量证明的区块链系统也是可以抵抗恶意参与者欺诈攻击的.

节点失效故障: 基于区块链的群智网络是一种无中心的群智工作平台, 整个系统可以在不依赖任意第三方的条件下工作, 并且不设置数据中心. 根据区块链基本原理, 所有参与者均为平等的实体节点. 每个节点都保存了网络中全部的订单信息, 即使部分节点遭遇故障无法提供服务, 也不会影响整个系统的运行,完全可以避免节点失效故障.

DDoS 攻击: 本系统中所有的业务流程全部由智能合约实现, 采用累加信誉值的方式对参与者能力进行评估, 任何参与者只能通过不断完成任务, 积累信誉的方式提升网络中被认可度. 认可度越高则承包高报酬任务的机会越大. 恶意参与者如果想要发动DDoS 攻击, 首先需要注册大量账号, 不断完成任务积累信誉值, 才可能获取承包更高报酬任务的参与机会, 并且一次违约会受到较大的信誉值惩罚. 一个账号信誉值积累速度是比较缓慢的, 但是一次违约则可能被扣除大量的信誉值, 并且大量账号交易产生的交易费也是较大的, 以此大幅增加恶意参与者发起攻击的成本.

参与者匿名: 本系统允许用户匿名注册参与和实名注册参与两种方式. 本系统采用信誉值为唯一的信任评级方法, 匿名与实名用户初始智能获得默认等级, 需要不断完成任务提高自己的信誉值, 但是实名用户在完成任务时可额外获取信誉值. 信誉值是系统对参与者评价的唯一标准. 本系统中, 参与者信誉值只能由任务控制智能合约或数据流控制智能合约更新, 即完成任务才会被更新信誉值, 不能由用户自己更新.

恶意评判: 任务发布者可能会恶意评判结果, 恶意减少支付报酬. 由任务发布者公开的提供验证函数,矿工或其他验证者可以在不知道数据细节的情况下验证结果. 当任务完成时, 由矿工或其他验证者评价工人的解决方案, 避免任务发布者单方面评判工人成果, 造成不公平结果. 如果任务发布者恶意评判工人的成果, 则扣除相应的信誉值执行惩罚措施.

超时或拒绝支付: 本系统中共有两种支付情景. 第一种, 任务发布者支付任务工人报酬, 任务发布者必须按时向完成了任务的工人支付报酬, 否则将补偿信誉值给工人. 第二种, 任务工人向边缘节点支付任务报酬, 由于边缘数据处理任务是由任务工人发布的, 所以边缘节点的报酬最终由任务工人支付. DSCSC 合约确定任务工人与边缘节点关系, 任务工人需要在任务结束后的一定时间内支付边缘节点报酬. 如果超时未支付, 则对任务工人进行惩罚. 计时机制由统计区块诞生数量来实现.

本文提出的方案基于区块链公有链技术实现, 整个系统公开向所有的参与者开放. 对于当前广泛应用的联盟链架构而言, 上述方案的安全性依然能够得到保证. 原因在于, 联盟链主要面向特定组织群体, 例如, 有些项目参与组织为政府、银行等权威机构, 这将为系统业务安全提供了更多的保障. 例如, 当接入政府的身份认证系统, 能更好的过滤恶意参与者等. 在由权威组织背书的联盟链上构建这样的系统, 安全性应该是更有保障的, 但是整个系统去中心化程度会降低.

5 实验分析

我们对本文的三个智能合约进行了仿真实验1https://github.com/zmr961006/Blockchain-CI. 采用以太坊集成开发环境Remix-Ethereum IDE 作为开发平台, 使用智能合约语言Solidity(0.5.16) 开发, MetaMask 作为钱包客户端, Ropsten 以太坊公开测试网络作为测试环境, Ropsten 网络为以太坊官方提供的公开测试网络, 采用POW 共识机制. 表2 为实验平台信息, 实验运行于虚拟机环境. 虚拟机使用Ubuntu 18.04 操作系统, 1 核心处理器, 2 GB 内存以及25 GB SSD 磁盘.

表2 仿真系统环境表Table 2 Testing environment

我们统计了身份控制合约USCU、任务控制合约TSCS、数据流控制合约DSCSC, 三个智能合约在公共测试网络Ropsten 中部署交易的Gas 消耗. 如图6 所示, UCSC、TCSC、DSCSC 这三种智能合约的Gas 使用分别为998 993、2522 316、1208 976. 如图7 所示, 我们展示了在Ropsten 网络中, 随着参与者的不断增加, TCSC 合约初始化所需要的Gas 数量不断增加, 合约中状态变量的初始化Gas 消耗量与参与人数成正比, 当参与人数为50 人时, 需要消耗Gas 数量达到952 987.

图6 智能合约部署在Ropsten 网络中Gas 消耗Figure 6 Contract deployed transaction cost on Ropsten

图7 TCSC 合约初始化在Ropsten 网络中Gas 消耗Figure 7 TCSC init transaction cost on Ropsten

我们使用Turffle 开发框架与ganache-cli 客户端, 对这三个智能合约的部署时间及其主要方法执行时间消耗进行了测量. 在图8 中, 主要包含UCSC 合约部署方法、TCSC 合约部署方法、DSCSC 合约部署方法、群智任务承包方法、数据任务承包方法的执行时间消耗(运行15 次平均时间). 在图9 中, 我们展示了随着参与者人数的增多, 群智任务结算时间也随着增长, 当一个任务参与者为120 人时, 消耗时间为2174 ms (运行5 次平均时间). 实验结果表明了系统的可行性.

6 总结

本文提出了一种基于区块链的通用群智网络框架, 将整个系统分为三个部分, 身份管理、群智任务管理、数据流管理. 每个部分由一个智能合约管理, 将传统的业务流程全部使用智能合约的交易代替. 在群智网络中设置边缘节点, 进一步降低了任务时延与成本. 当前联盟链发展迅速, 越来越多的联盟链产品落地商业化, 在未来的工作中, 我们将聚焦基于联盟链技术构建群智网络框架, 并且在工程实现方面做更多的探索与研究.

图8 业务各阶段主要方法时间消耗Figure 8 Run time of each stage

图9 群智任务支付阶段时间消耗Figure 9 Run time of payment

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!