基于区块链技术的C2C交易系统
2019-10-08韩港成康晓风刘禹
韩港成 康晓风 刘禹
摘 要: 区块链和智能合约是近几年最热门的技术,区块链技术具有去中心化、匿名化、可溯源等特性,智能合约是存储在区块链上的公开可执行代码,允许在没有第三方参与的情况下进行可信交易,这些交易可追踪且不可逆转,因此,将其应用在最不可信的C2C交易业务中具有较高的研究价值和实用价值。本文利用以太坊区块链平台和智能合约实现了C2C交易系统,利用该系统可以实现匿名且安全的交易,解决了信任问题、降低了信任成本。
关键词: 区块链;智能合约;以太坊;C2C交易
中图分类号: TP311.52 文献标识码: A DOI:10.3969/j.issn.1003-6970.2019.05.034
本文著录格式:韩港成,康晓风,刘禹,等. 基于区块链技术的C2C交易系统[J]. 软件,2019,40(5):175178
【Abstract】: Blockchain and smart contracts are the hottest technologies in recent years. Blockchain technology has the characteristics of decentralization, anonymization, traceability, etc. Smart contracts are public executable code stored on the blockchain, allowing trusted transactions without third party involvement. These transactions are traceable and irreversible. Therefore, applying them to the most untrustworthy C2C transaction business has high research value and practical value. This paper uses the Ethereum blockchain platform and smart contracts to implement the C2C trading system, which can realize anonymous and secure transactions, solve the trust problem and reduce the trust cost.
【Key words】: Blockchain; Smart contract; Ethereum; C2C trading
0 引言
作为一种分布式的数据库,区块链是由密码学生成的一串数据块,每个数据块都包含网络交易信息,这些区块用来验证信息的有效性并生成下一个区块。区块链去中心化、开放性、不可撤销、不可篡改,并且具有很高的加密安全性。利用区块链的这些特点能够解决信任问题、降低信任成本。
本系统以现有的Consumer To Consumer(以下简称C2C)交易业务为背景,将以太坊作为平台,使用智能合约设计并且实现基于的C2C交易系统,用户之间互相交易商品来验证智能合约以及系统的可靠性。本系统使用分布式节点一致性算法来产生和更新数据、使用了块链式的数据结构来验证与保存数据、使用智能合约来编程和操作数据的一种新的分布式基础架构与计算方式。并在数据传输上使用密码学相关技术确保数据和访问的安全性,使用该系统可以实现匿名且安全的交易。
1 以太坊介绍
作为一个提供可以执行图灵完备语言的虚拟机,开发人员能够在以太坊平台上开发分布式应用。位于以太坊的最上层称为Dapp,利用Web3.js提供的接口和智能合约层进行交互;负责在区块链平台上使用智能合约实现各种去中心化应用的称为应用层;以太坊特有的结构是合约层,提供了可以执行图灵完备语言的虚拟机,通过部署到区块链上的智能合约,从而实现去中心化功能;激励层的主要功能是对成功产生区块的节点进行奖励;封装网络节点的各种共识算法主要是共识层,当下主流的共识机制有PBFT、POS、POW等;以太坊使用的共识机制则是基于工作量证明,区块链上的每一个节点都会使用消耗算力的方法来竞争式地产生区块,用来确保安全运行整个以太坊网络;数据层由以太坊交易和区块等数据结构以及数据加密算法组成;网络层由P2P网络组成,实现了数据传播功能以及验证功能等主要机制。所有部署的智能合约都会运行在以太坊虚拟机(EVM)上,并且会调用RPC。位于EVM和RPC下面的四大内容分别是:BlockChain,共识算法,挖矿以及网络层[1-3]。
2 智能合約介绍
学者Nick Szabo在1994年最早提出智能合约概念,此概念诞生时被设计成一个使用数字形式定义的协议,所有合约的参与者都可以执行这些约定好的协议。该设计的初衷是通过将智能合约的构建为物理实体创建各种灵活且可控的数字资产。但是因为计算方法的落后性,并缺乏实际应用场景,智能合约的概念并没有得到研究人员的广泛关注[4]。
然而,智能合约由于区块链的诞生而被重新定义。智能合约是区块链的重要核心构成要素。作为由业务驱动的、具有状态的、公开透明运行在区块链上的计算机代码,能够主动或者被动处理接收数据和管理区块链上的资产。作为嵌入式的合约,可以内置在任何区块链的业务处理上,形成编程控制且可复制的一种实用且创新的解决方案,能够在各类交易管理,合同管理等各类业务中发挥出重要作用[5-6]。
在区块链上运行的智能合约部署流程如图1所示。智能合约在部署完成后会产生相对应的账户,存储着余额、私钥、地址等内容。区块链的每一个节点中执行智能合约,在执行结果上达成共识就会由矿工打包生成区块并更新智能合约的状态。智能合约可以根据合约代码自动完成资产的转移以及发送或接收消息[7]。
在EVM中运行智能合约必须需要消耗Gas,规定了上限,从而避免无限循环。假设整个网络状态为以合约运算剩余的Gas为g,区块链运行环境中的重要信息保存在元组I(当前合约地址,合约发起者地址,本次交易的Gas价格,交易输入数据,执行合约的账户地址,合约账户余额,当前区块头,当前CALL操作和CREATE操作数)内,系统状态转移函数记为ψ,σ为系统运行后状态,g为运行后剩余Gas,s为执行终止操作的合约列表,l为记录序列,r为运行后返还的Gas,ο为合约产生的输出,则整个状态转换可表示为:(σ,g,s,l,r,o)=ψ(σ,g,l)在大多数情况下,ψ被定义为不断迭代系统临时状态和虚拟机临时状态的过程,迭代的终止由以下两个条件决定:(1)系统状态出现异常使得EVM停止工作,例如Gas不足、指令无效、虚拟机堆栈不足等情况;(2)EVM执行完所有指令并返回结果,正常停止。在每一次迭代过程中,智能合约的指令被压入堆栈,EVM按堆栈索引执行指令.每执行一条指令就支付相应的Gas,直到所有指令执行完毕,堆栈被清空;若遇到异常,EVM则停止工作并逐层向上返回[8-9]。
3 智能合约设计
以太坊提供了各种编写智能合约的语言,其中最受开发人员欢迎的是Solidity,Solidity是一种脚本语言,类似JavaScript。本系统使用的智能合约基于Solidity编写。考虑到智能合约本身是一个牺牲时间换取安全性的语言,设计时候应遵循以下原则:(1)避免复杂嵌套,减少出现逻辑漏洞的可能性,使得安全性降低。(2)数据与逻辑相分离,存储与处理合约分离编写,便于后于升级以及减少复杂度。(3)涉及到资产转移时严格检查变量类型,避免出现溢出等漏洞导致难以挽回的损失[10]。
根据以上智能合约的设计原则和思路,结合实际C2C交易业务中的交易流程,设计了本智能合约。C2C交易系统中各个类型合约接口的主要功能如下:
(1)注册接口:该合约接口负责处理用户的注册请求,根据用户的注册信息自动生成一个钱包地址,并返回私钥给用户存储,系统不存储此数据,保障了用户的安全性。
(2)交易接口:该合约接口负责处理用户之间的交易,根据用户需要交易的商品价格进行资产的转移,商品ID作为标签记录在区块链上。
(3)余额接口:该合约接口负责处理用户在个人中心查询自己的钱包余额。
4 C2C交易系统设计与实现
本系统是基于以太坊区块链平台,用智能合约实现C2C交易业务,用MySQL数据库存储非隐私数据。首先介绍了C2C交易系统的总体结构,并设计和实现了其中的关键模块,然后编写C2C交易功能的主要算法,最后部署智能合约代码,实现C2C交易系统。
基于智能合约的应用在以太坊中称为Dapp,即去中心化应用,其不仅要编写后端智能合约的逻辑代码,而且还要编写前端与其交互。以太坊中已经包含了后端智能合约与前端交互的接口,为开发的本系统奠定了基础。C2C交易系统中的层次架构主要包括四层:应用层、合约层、平台层以及节点层[11]。
(1)应用层:该层主要负责用户与区块链进行交互,基于express框架开发,通过Web3接口中提供的方法,实现新建钱包自动化,资产转移自动化。用户自己的钱包由自己保管,不存储在服务器上,相较于传统模式极大地保证了用户密钥地私密性和安全性。
(2)合约层:合约层主要调用已经编写好的合约代码实现C2C交易业务需要的各种逻辑,如资产交易,节点管理等。
(3)平台层:主要基于以太坊平台进行开发,邓庄了各类数据的结构,并保证各个节点之间的信息交流。
(4)节点层:各个物理节点是区块链的底层基础,如OSI中物理层所提供的功能一样。
根据C2C交易系统的实际业务,结合Solidity语言的特性,将交易金额,交易商品ID,目标地址,订单状态等信息定义为结构体,并存储这些数据的Map,便于查看订单时进行遍历。根据定义的结构体类型,实现C2C交易业务。首先,用户通过浏览商品列表,确定需要购买的商品,然后绑定JavaScript事件将购买的ID作为参数传入智能合约,然后调用封装好的orderMake接口,从而实现订单的生成以及商品拥有权的转移。
本系统使用truffle框架开发智能合约,truffle框架作为Solidity语言中最受开发者欢迎的框架,几行命令即可完成智能合约的整个部署流程,并提供了友好的交互。truffle部署后界面如图2所示。使用的客户端是ganache,ganache页面如图3所示。truffle部署成功后会在客户端(ganache)产生合約地址。本系统一切交易基于合约地址完成。部署完成后,用户即可通过前端的登录注册购买等功能与链上数据进行交互。
用户交互选择了基于Node.js平台的web应用开发框架Express,既利用了高并发的优点保证了用户的使用体验,又利用了其与web3良好的兼容性降低了后续开发的难度。在用户注册之后,后端会调用web3的新建钱包接口,返回用户的钱包地址以及私钥,并提醒用户自行保存私钥,服务器不对私钥进行存储,如图4所示。MySQL数据库仅仅会记录账户的基础信息与用户钱包地址绑定,不会记录真正的私钥。用户既可以选择上传商品,也可以选择浏览商品列表进行购买,选择上传商品会提醒用户输入名称,价格以及商品描述,如图5所示。点击确认后自动返回商品列表,可以看到自己上传的商品以及其他用户上传的商品,如图6所示。点击购买按钮出出现模态框向用户进行确认,如图7所示,以及要求用户输入密码,点击确认后,用户在消耗Gas(类似于区块链上交易的手续费)后,等待区块生成,对应商品即可属于该用户,区块的hash对应订单ID供用户查询。该笔交易将会永久的记录在链上,交易信息公开透明且匿名化,任何人无法篡改。
5 结语
作为目前最有潜力的互联网技术之一,区块链技术的应用场景正由加密货币延申至金融领域等各行各业。区块链技术具有去中心化、匿名化、可溯源等特性,是智能合约诞生的前提。作为存储在区块链上的公开可执行代码,智能合约允许在没有第三方参与的情况下进行可信交易,这些交易可追踪且不可逆转,因此,将其应用在最不可信的C2C交易业务中具有较高的研究价值和实用价值。传统的中心化交易不仅需要调用第三方支付,还存在着一定的安全隐患。本文在对以太坊区块链技术研究以及对C2C交易业务逻辑分析的基础上,完成了C2C交易系统的智能合约编写以及完整的交互逻辑,利用该系统可以实现匿名且安全的交易,解决了信任问题、降低了信任成本。
参考文献
[1] Omohundro S.Cryptocurrencie, smart contracts, and artificial intelligence[J]. AI matters, 2014, 1(2): 19-21.
[2] 陈亚飞.基于区块链智能合约的仓单交易平台研究与实现[J].郑州大学硕士论文, 2018, 1: 1.
[3] Karthikeyan Bhargavan, Antoine Delignat—Lavaud, Cedric Foumet, et a1. Shon Paper: Formal Verification of Smart Contracts[J]. Proceedings of the 20 16 ACM Workshop on Programming Languages andAnalysis for Security, 2016: 91-96.
[4] 邵奇峰, 金澈清, 钱卫宁, 等. 区块链技术: 架构及进展[J]. 计算机学报, 2017: 1-20.
[5] Zyskind G, Nathan O, Pentland AS. Decentralizing privacy: using blockchain to protect personal data. 2015 IEEE Security and Privacy Workshops. San Jose, CA, USA. 2015: 180-184.
[6] 邹均, 张海宁, 唐屹等. 区块链技术指南. 北京: 机械工业出版社, 2016: 102-103
[7] 蔡维德, 郁莲, 王荣, 等. 基于区块链的应用系统开发方法研究[J]. 软件学报, 2017, 28 (06): 1474-1487.
[8] 黄洁华, 高灵超, 胡凯, 等. 众筹区块链上的智能合约设计[J]. 信息安全研究, 2017, 3(03): 211-219.
[9] 安庆文. 基于区块链的去中心化交易关键技术研究及应用[D]. 东华大学, 2017: 39-45.
[10] Watanabe H. Fujimura S. Nakadaira A. et a1. Blockchain contract: Securing a blockchain applied to smart contracts. 20l6 IEEE International Conference on Consumer Electron-ics. Las Vegas, NV, USA. 2016: 467-468.
[11] 魯静, 宋斌, 向万红, et al. 基于区块链的电力市场交易结算智能合约[J]. 计算机系统应用, 2017, 26(12): 43-50.