基于联盟区块链和IPFS的音乐共享模型
2020-04-27高文涛张桂芸
高文涛,张桂芸
(天津师范大学计算机与信息工程学院,天津300387)
近年来,区块链技术由于其去中心化和不可篡改等特性[1],在金融、互联网等领域得到广泛应用,并逐渐渗透到音乐产业领域.随着移动互联网的快速发展,音乐产业已经逐步进入互联网音乐时代,这给音乐产业带来了新的挑战,即海量音乐数据的存储和共享问题.
区块链作为分布式记账技术,可以完整地保存每一份在链上注册过的新的数字内容和版权等相关信息,然而,现有的区块链直接链上大文本、 音频和视频等文件成本昂贵,并且系统计算能力和存储能力有限.针对以上问题,相关研究做了许多尝试.文献[2]设计了基于以太坊的物品共享交易服务系统,利用智能合约实现共享物品的租借与归还服务,但没有考虑到区块链上直接存储物品详情信息等大文本数据的局限性.文献[3]通过改进拜占庭容错机制并定制个性化访问控制,设计了电子医疗记录共享模型,但该模型仍存在数据存储方面的缺陷.文献[4]提出一种基于区块链和星际文件系统(inter planetary file system,IPFS)的框架来解决当前在线出版的原创性和真实性问题,虽然该模型结合了IPFS, 但只验证了智能合约的功能,用户的访问权限部分没有实现,在数据共享方面还存在不足.音乐产业结合区块链技术的研究还在初步阶段,在音乐版权保护方面,文献[5]通过分析中国音乐版权保护存在的所有权不明确以及版权分配不均等问题,提出了一个基于区块链技术的音乐版权保护途径,为中国音乐版权保护提供了一个创新的商业模式,然而,海量音乐数据存储在链上会产生大量的区块数据,影响区块链的性能和存储容量,这对于区块链技术无疑是一个很大的挑战,此文献中并没有给出合理的解决措施.
国内外一些音乐服务商采用“区块链+音乐”的模式, 如 BitTunes、Ujo Music、Peertracks 和 Voise 等基于区块链的音乐媒体平台[6],但大多数平台只结合区块链实现了版权管理和文件分享,而没有考虑到音乐文件本身的存储缺陷, 同时还存在用户体验性差等问题,因而难以实现海量音乐数据的分布式存储和广泛共享.
区块链的公有链架构需要大量公众节点共同参与来保证系统运行,然而在音乐数字版权的应用环境中,不需要大规模的节点参与,容易造成系统资源浪费.对此,本文提出一种基于以太坊联盟链的去中心化音乐共享模型.采用IPFS 为区块链提供数据存储,创作者将音乐数据存储在IPFS 上,而在区块链上只存储该数据的hash 值,在保证数据安全可靠的前提下,减少区块链的数据存储空间,从而实现海量音乐数据的分布式可靠存储;通过设计用户个性化访问控制策略设置创作者和普通用户之间的访问权限,利用智能合约保证交易的可靠性和透明度,交易信息经过全网节点共识验证后写入区块链;通过数据测试实验验证了模型和智能合约的有效性,实验结果表明,所设计模型提高了运行效率,实现了高可靠性的音乐数据存储.
1 区块链技术和IPFS
区块链源于比特币的底层技术.为了保证数据的不可篡改性,区块链引入了一种以区块为单位并按时间顺序相连的方式组合而成的链式数据结构[7],如图1 所示.
图1 区块链结构Fig.1 Structure of blockchain
以太坊是一个基于公有链的去中心化区块链平台,它通过共识机制和各个节点共同参与来保证系统运行,同时以太坊支持智能合约,并可以执行图灵完备的脚本语言[8].共识机制致力于解决在去中心化的分布式互连网络中所有节点如何达成一致的问题[9].以太坊中的共识机制分为PoW(proof of work,工作量证明)和 PoA(proof of authority, 权利证明[10]).
智能合约是运行在区块链上的一段计算机程序,它扩展了区块链的功能,但是合约不能直接运行在区块链节点上[11].以太坊自定义了Solidity 等图灵完备的脚本语言以开发智能合约, 外部去中心化应用(decentralized application,DApp)需要调用智能合约,并依照合约执行交易和访问状态数据.
IPFS 是一个点对点的分布式文件系统,提供了数据的永久性分布式存储[12],可以与区块链的不可篡改和时间戳证明等特性相结合.IPFS 网络是不固定的、细粒度的、 分布式的网络,可以很好地共享图像、音乐、视频流等各类数据.
2 基于联盟区块链和IPFS的音乐共享模型设计
2.1 模型架构
本文基于联盟区块链和IPFS 设计的去中心化音乐共享模型系统架构如图2 所示,分为2 层,上层为用户交互层,下层为数据访问层.
图2 模型系统架构Fig.2 System architecture of the model
模型采用Web3 和智能合约实现上层应用与以太坊区块链和IPFS 的连接,利用以太坊PoA 共识机制的Clique 算法实现全网节点之间的分布式共识,通过可信任的签名者产生新区块,避免了算力挖矿.虽然PoA 的去中心化程度较弱,但是其可靠的权威节点认证机制和高效的共识效率更适用于音乐联盟链的应用场景.
用户交互层为用户提供可视化的操作接口,是用户与系统交互的桥梁,包括系统基础功能模块,能够将用户的操作请求转化为虚拟资产和交易发送给底层的以太坊区块链,并永久保存在链上.
数据访问层由分布式的以太坊P2P 网络和IPFS网络共同实现存储操作.以太坊网络中各个节点组成联盟体,利用共识算法达成一致,为系统提供去中心化的数据存储服务.区块链存储的数据由联盟链中的所有节点共同管理,保证数据不可被篡改.IPFS 具有去中心化和可基于内容寻址的特性, 用于存储大文本、音频等数据文件,文件内容的hash 值则保存在以太坊区块链上.
2.2 模型工作流程设计
模型工作流程如图3 所示.
图3 模型工作流程Fig.3 Work flow of the model
(1)创作者是音乐数字内容的版权所有者(即数据拥有者),创作者创建智能合约,并且制定用户访问控制策略acpi,通过身份验证后将音乐文件Fi进行加密,形成密文Ci上传到IPFS;
(2)IPFS 根据音乐文件Fi计算出唯一的hash 值hashi并返回给创作者,然后创作者调用智能合约将该hashi和其他音乐属性信息以交易的形式存储在以太坊区块链上;
(3)创作者可以根据该hashi验证版权, 查看音乐内容是否发生篡改,同时允许其他普通用户访问音乐数据;
(4)普通用户要获取Fi,首先要通过请求区块ID来获取链上存储的hashi, 当满足用户访问策略后才能根据该唯一的hashi在IPFS 中查询到所需内容,通过密钥keyi解密文件获取数据.
音乐文件加密后存入IPFS,实现文件的分布式共享存储.创作者和普通用户之间利用智能合约产生交易,从而实现交易过程的透明化和自动化.同时,交易信息在全网节点广播验证后写入区块链,保证交易信息不可篡改.
2.3 访问控制策略设计
针对数据存储访问权限,设计用户访问控制策略为 acpi=(〈Ui,seqi〉,R,P), 其中: Ui为数据拥有者用户集合,seqi为允许请求访问的数据序列号,R 为一组角色集合(即用户在系统中的身份属性集合),P 为数据拥有者允许访问seqi的用户属性权限.acpi通过控制访问者的角色实现用户自定义的个性化访问控制.访问控制策略acpi以交易的形式存储在区块链中,每个交易中可能存在一条或多条访问控制策略.对于用户发送的访问请求seqi,若该请求属性信息满足acpi中的用户属性权限P,则根据策略描述来允许或拒绝该请求.策略信息对任何用户都是可验证、可追溯且不可篡改的, 这保证了系统的鲁棒性和可信性.访问控制策略的判决过程通过智能合约实现,避免了第三方机构参与.用户访问控制流程如图4 所示.
图4 访问控制流程Fig.4 Flow of access control
用户要访问音乐数据,首先需要进行身份验证,如果满足访问控制策略则拥有访问请求.普通用户和创作者拥有不同的访问控制,创作者可以直接查看或上传音乐数据,而普通用户则需要验证其权限是否符合制定的acpi,若符合则可以直接访问音乐数据,否则拒绝访问.
2.4 智能合约结构体设计
智能合约是音乐共享模型的核心组件,用于实现平台的业务逻辑[13],为数据存储服务提供支持,完成数据的上传、 存储等操作.本文模型中用户有2 种身份:音乐创作者和普通用户.智能合约可以将用户操作转换成区块链中的交易, 完整记录在以太坊网络中.智能合约中需要结构体(Struct)来记录音乐共享等信息.本文模型的智能合约结构体包括音乐数据结构体和普通用户数据结构体.
2.4.1 音乐数据结构
创作者注册新的音乐作品,将音乐的音频、 歌词等数据上传至IPFS,并将唯一的hash 值记录到区块链中,形成智能合约交易.以太坊的挖矿节点将交易写入区块,则表明合约交易创建成功.音乐数据结构体设计见表1.
表1 音乐数据结构体Tab.1 Struct of music data
2.4.2 普通用户数据结构
创作者和普通用户之间的音乐交易,是智能合约处理的主体业务.普通用户需要提供账户地址,发起付费购买请求后需要对用户账户的资金余额情况进行验证,以保证音乐购买流程的安全性.普通用户结构体设计见表2.
表2 普通用户结构体Tab.2 Struct of users
2.5 智能合约详细设计
本文的智能合约基于Truffle 框架[14]开发, 采用Solidity 语言设计实现了创作者和普通用户之间的去中心化音乐共享.
2.5.1 音乐作品创建模块
创作者拥有唯一的hash 地址,通过调用智能合约方法addMusicToBlockchain()创建音乐作品(包括作品名称、歌词、价格等),创建过程中消耗一定数量的Gas.因此,创作者账户需要有足够的以太币,否则音乐作品会创建失败, 无法上传到以太坊区块链和IPFS.
2.5.2 音乐查询模块
普通用户和创作者都可以根据音乐编号ID 或音乐名称查询相应的音乐作品,音乐编号ID 是唯一的,可以精确定位到某一音乐作品.查询过程中只调用合约方法getMusic(),不需要修改数据,因此没有产生交易,不消耗Gas.
2.5.3 音乐溯源模块
创作者将原创音乐作品上传到IPFS 后,返回的hash 值及音乐信息等元数据同时间戳一起被存储到链上,这些数据都具有唯一性和不可篡改性.用户可以根据音乐作品的hash 值追溯版权,查看该作品拥有者及其他相关信息.溯源过程没有交易数据,因此不消耗交易费用.溯源过程的合约算法如下:
2.5.4 普通用户购买模块
普通用户购买音乐的前提条件是:(1)msg.value >music.price,其中:msg 为当前账户,value 为该账户所持有的以太币余额,price 为music 的价格;(2)用户不是创作者本身.
普通用户查询到自己需要的音乐作品后,若满足购买条件且选择付费购买,则完成一笔交易,区块链相应增加一条记录.若当前账户余额不足以支付音乐价格,则购买失败.购买过程的合约算法如下:
3 实验与分析
3.1 实验环境
搭建包含6 个节点的以太坊联盟链和IPFS 私有集群,对设计的去中心化音乐共享模型进行测试和验证实验.实验测试环境见表3.
表3 实验环境配置Tab.3 Configuration of experimental environment
以太坊采用go-ethereum 客户端进行挖矿和同步区块数据,采用puppeth 程序生成创世区块的相关信息 Creation.json, 利用 Truffle 框架部署智能合约, 部署之前需要启动6 个节点的Geth 客户端并设定RPC端口.本地IPFS 私有集群的搭建采用go-ipfs 客户端实现数据存储,所有节点共享同一个密钥swarm.key.Geth 节点之间相互同步和验证区块信息,共同组成一个以太坊网络.
3.2 实验测试和验证
智能合约运行在以太坊虚拟机(EVM)中,经过编译验证智能合约的正确性,合约部署成功后会返回合约地址以及合约账户,用户交互时会发送消息给该合约账户.通过调用智能合约测试音乐共享模型的有效性和可行性,同时对IPFS 数据存储和查询进行验证.IPFS 根据创作者上传的加密音乐数据计算出唯一的hash 值,然后将其和其他音乐信息以JSON 文件格式存储到链上并打上时间戳.当普通用户查询获取音乐数据时,首先通过请求区块ID 获得区块链上的hash值,然后IPFS 通过该hash 值访问一个分布式hash 表快速找到拥有数据的节点进行检索,并使用hash 值验证该数据是否正确,最后将音频数据返回给用户.
3.3 实验分析
3.3.1 安全性分析
区块链所面临的主要安全风险来源于攻击者通过攻击共识机制来修改区块数据,本文模型采用P2P网络结构, 避免了单点攻击, 利用所有节点共同维护,可以很好地保证系统运行的稳定性.以太坊联盟链采用PoA 共识算法,通过可信任的签名者产生区块,其本身具有较强的防篡改能力.音乐文件以加密的形式存储在IPFS 上,用户只有通过记账节点对于访问控制策略的验证, 才能获取到密钥解密文件.IPFS 基于内容寻址,利用音乐文件内容生成唯一的hash 值,重复的音乐内容只存储一次,保证了音乐内容的真实性和不可篡改性.普通用户购买到解密的音乐文件后,交易记录被永久存储在区块链上.
3.3.2 共识算法分析
PoW 是目前公有区块链系统采用最多的共识算法,但其性能较PoA 低,而PoA 的去中心化程度较弱.本文通过实验对这2 种共识算法的CPU 占用率进行对比,结果如图5 所示.由图5 可见,PoA 的CPU 消耗率较低.PoA 通过一组授权节点来负责新区块的产生和区块验证,需要更少的算力,避免了PoW 因算力竞争而造成的资源浪费,从而能节约计算资源,更快地响应数据请求.因此本文模型采用PoA 共识算法.
图5 PoA 和 PoW 的 CPU 占用率Fig.5 CPU utility of PoA and PoW
3.3.3 吞吐量性能分析
吞吐量是衡量系统性能的重要指标之一[15].本文采用每秒交易数量(transaction per second, TPS)来定义吞吐量, TPS=Transactions/Δt, 其中: Δt 为共识间隔,即出块时间,Transactions 为间隔Δt 内区块包含的交易数据量.对模型中PoA 算法的吞吐量进行测试, 取 Δt=10、20、40 和 100 s, 对算法进行连续 10 次无差异实验, 实验结果如图6 所示.由图6 可见,PoA算法吞吐量相对较稳定,可以满足系统需要.当Δt=10 s 时, TPS 最高可以达到 630, 当 Δt=100 s 时, TPS最高达到335.Δt=40 s 和100 s 的TPS 折线有部分交叉,这是由于区块链节点间的网络通信延迟造成的.
图6 TPS 折线图Fig.6 Line chart of TPS
对不同的Δt,分别进行10 次实验统计TPS 的平均值, 得到 TPS 随出块时间 Δt 的变化曲线, 如图7所示.由图7 可见,随着出块时间增长,因为系统中处理的交易数量逐渐增多,节点间的网络通信逐渐频繁,算法的共识效率有所下降,TPS 也随之降低,Δt=100 s 时, TPS 的平均值为 311.
图7 TPS 随出块时间的变化Fig.7 Change of TPS with out-of-block time
以TPS 作为性能评价指标,将本文模型与其他4个区块链平台进行比较,结果见表4.由表4 可见,较其他区块链平台,本文模型的TPS 明显提升,在性能上具有一定优势.
表4 不同区块链平台的TPS 对比Tab.4 Comparison of TPS under different blockchain platforms
为检验本文模型的交易处理效率,统计了不同交易量的系统处理时间,并与文献[2]模型进行对比,结果如图8 所示.由图8 可见,随着交易量的增加,系统处理时间也随之增加,文献[2]模型处理1 000 条交易的时间约为2.3 s,本文模型的处理时间约为1.25 s,说明本文模型的交易处理效率较高.
图8 不同交易量的系统处理时间Fig.8 Processing time of different transactions
4 结语
目前,音乐领域是区块链技术应用研究中的一个重要的发展方向.本文提出的联盟式音乐区块链系统结合IPFS 实现了音乐数据的分布式存储和共享.搭建以太坊联盟链和IPFS 私有集群对模型进行了实现,采用以太坊PoA 共识机制使全网各节点达成共识,验证了智能合约的有效性.实验结果表明,本文模型的TPS 比较稳定,在满足基本功能的前提下,保证了数据的不可篡改性、完整性和安全性.在未来的工作中,还需要对共识算法进行改进,以进一步提高全网节点的共识效率.