您的当前位置:首页正文

基于以太坊的众筹系统的设计与实现

2023-11-07 来源:年旅网
基于以太坊的众筹系统的设计与实现

作者: 张小雪 陆萍

来源:《甘肃科技纵横》2020年第03期

摘要:众筹是一种面向大众筹集资金的方式。众筹能够帮助有创意、有潜力的项目解决资金的短缺,从而获得项目的成功。而传统的众筹过程缺乏透明度,信度无法保证。区块链技术具有去中心化、公开透明、数据可溯源等特点,现已被逐步用于公信度要求较高的相关行业。本论述基于区块链技术,设计并实现了众筹系统。系统采用Solidity语言编写了众筹智能合约,搭建了以太坊私有链,并将智能合约部署到了以太坊私链上。众筹系统主要采用基于MVC的软件技术架构,为了加强系统间的交互性,软件开发过程中还采用了Ajax技术。本项目实现了众筹平台中众筹标的发布与集资等众筹环节的主要功能,保障了众筹的透明、公正。 关键词:众筹系统;智能合约;以太坊;私有链 中图分类号:F233文献标志码:A 0引言

众筹(crowd funding)是一种由发起者面向大众筹集资金的方式。由于众筹平台能够有效地帮助投资人和项目发起人实现对接,加速双方的合作,近年来涌现了大量的第三方眾筹平台。利用互联网的传播特性,2017年在众筹平台上成功实现众筹的项目数达到了69637项,融资总额累计260亿元,成为“互联网+金融”的典型代表。但是从《中国众筹行业发展报告2018》的数据来看,国内众筹平台数量正在急剧下降,只有少数平台不仅经营良好,而且开始

快速扩张,市场占有率也在急速上升。这背后的原因主要在于各平台在实施中心化融资的过程中,难以保证每个参与者的行为诚信度,资金在使用过程中会存在不透明和信息不对称的现象,也就是说传统的众筹无法做到整个众筹流程的透明化。另一方面,当前众筹平台中所有用户的资金以及数据都由第三方在中心化的系统中统一管理。由于所有用户数据都直接向第三方开放,可能存在有不良第三方盗用甚至篡改用户数据的行为。

区块链技术是解决众筹平台中信息不透明与数据溯源问题的一个有效途径。它具有去中心化、公开透明和可追溯等优点,现已在金融、房产、医疗和智慧城市等多个领域中得到广泛应用。区块链技术的分布式记账模型以及数据公开透明能够有效地弥补传统众筹遇到的困境。在众筹平台中引入区块链技术不仅可以保证各个环节的信息透明度,还可以在众筹失败或者项目违约时,投资者的资金可以第一时间内退回。 1技术基础

1.1区块链技术和以太坊

区块链技术是作为比特币的底层技术出现的一个分布式的架构。区块链架构中的每个分布式节点都可以执行并记录每一笔交易,交易每隔一段时间会被打包进一个区块。每一个区块都按照数学公式来保证自己插入区块链账本的唯一陛。

以太坊是可编程的区块链,它也具有一个点对点网络协议,以太坊区块链数据库是由连接到网络的节点一起来维护和更新的。但是和其他区块链不同的是,以太坊允许用户在图灵完备的以太坊虚拟机上灵活地、按照自己的意愿来创建并执行相关操作。 1.2智能合约

智能合约自带了区块链上所有节点一起执行的逻辑代码,智能合约的执行通常局限于一个确定性的上下文中(如:基于相同的输人、账本状态、运行时环境等)。当前最为流行的区块链智能合约就是以太坊。以太坊智能合约发送并接收加密货币即以太币,合约被包含在交易中执行,由以太坊客户或其他合约签署。

在本论述基于以太坊的众筹系统中,智能合约采用了Solidity语言编写,并在智能合约在线编译网站Remix上完成编译。编译完成后,进一步将编译好的二进制形式的合约通过web3.is进行部署。调用智能合约通过JavaScfipt来完成,其过程为首先将请求发送到web3.is,通过远程过程调用(Remote Procedure Call,RPC)的方式将数据或请求传递给区块链上的智能合约,实现对区块链上数据的读取或写入。 1.3web框架

系统后台使用流行的Java语言作为编程语言,采用MVC(Model View Controller)框架作为后台框架,使得系统具有高度解耦和易扩展的特点。其中模型对象(Model)分为众筹和众筹记录两个对象。控制器(con-troller)负责读取、调用部署在区块链上智能合约的数据和函数。视图(view)对应于应用程序中数据的展示,并基于Aiax进行web开发。 2以太坊底层搭建

以太坊私有链的创建以及智能合约的部署是众筹系统的底层基础,主要包含有以下的步骤。

Stepl:通过执行geth-datadir chaindata init gene-sis.json来初始化创世区块。 Step2:启动geth,进入控制台。由于在初始化创世区块中指定了geth的数据目录为chaindata,若要进一步开启“admin,web3,eth,personal,miner,net”这些api,指定本地为rpc服务器地址,服务端口(如8545),需要执行如下的命令。

geth-datadir chaindata-rpc-rpcapi”admin.web3,eth,personal,miner,net”-rpcaddr 127.0.0.1-rpc-port 8545consde

Step3:通过执行:personal.newAccount()来创建账户1,运行之后提示输入Passphase,即输入账户密码。

以上步骤执行至少两次,保证至少生成两个挖矿账户。

Step4:通过执行eth.accounts来查看上一步骤是否正确生成了账户。

Step5:通过执行eth.getBalance(账户名)或者eth.getBalance(eth.accounts[n])来查看参数账户的余额(n为账户序号)。

Step6:通过执行eth.coinbase()来查看挖矿进账用户,默认情况下coinbase是本地账户中的第一个账户。通过miner.setEtherbase(eth.accounts[n])设置挖矿用户。

Step7:运行miner.start()开始挖矿,若需要停止挖矿,可以执行miner.stop()。 Step8:转账。如在单机上运行需要开启新的窗口链接到当前窗口,如在Windows中,需要输入命令:gethattach ipc:\\./pip&geth.ipc。然后在attach窗口执行账户解锁命令:personal.unlockAccount(eth.accounts[0])。最后进行转账,输人命令:eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(10)})。 Step9:通过运行txpool.status来查看转账状态。

在完成上述步骤后,即创建了一条以太坊的私有链,而且生成了多个账户并实现相互间的转账,进一步即可在该私有链上部署智能合约。 3系统设计 3.1

智能合约的solidity实现

在智能合约campaign中设计了两个结构体:众筹项目CrowdFund和捐贈记录CrowdRecord,结构体中属性定义以及合约的成员函数简介见表1所列。 3.2众筹平台的设计

本项目在区块链上创建众筹智能合约,寻求在以太坊上投资方的资金支持实现众筹。在完成众筹智能合约的solidity编码后,进一步设计如图1所示的基于MVC的众筹平台web架构。

(1)Model层。系统的模型层主要包含有两个对象:众筹项目CrowdFund、众筹记录CrowdRecord,分别对应智能合约的两个结构体struct CrowdFund和structCrowdRecord。类CrowdFund主要包含的数据属性有项目编号、众筹发起者地址、众筹目标值、众筹信息、目前已众筹到的数额、众筹结束标志。类CrowdFund中的数据属性则主要包含了投资人信息、投资数额、投资时间。

(2)View层。视图层主要负责向用户展示界面。本系统采用Ajax技术来加强系统的交互能力,并提高了系统页面与用户之间的响应速度。

(3)Controller层。根据众筹的实际过程,Controller层中的CrowdController类主要包含4个方法。这些方法的参数为类HttpServletRequest和类HttpServletRe-sponse的类对象。Controller层中的方法又分别调用众筹系统Service层中具体实现类CrowdImpl的各个对应方法。

3.3智能合约部署

在部署智能合约时,可以在合约在线编译网站(http://remix.ethereum.org)上传本地的众筹合约代码,选择合适的编译器的版本进行编译。若代码正确,可以在编译成功后获得二进制的合约代码进行部署,即选择Remix提供的WEB3DEPLOY内容用于本地部署。在保证本地私有链的帐户处于挖矿状态的前提下,执行personal.unlockAccount(eth.accounts[0])并输入账户对应密码以解锁账户。将合约的二进制代码粘贴到命令行窗口,回车后等待挖矿将这个交易打包到区块中。当终端生成合约的地址后,即实现了合约在区块链中的部署。

4结语和展望

区块链技术的出现,为众筹行业的发展提供了一个透明公开的技术平台。本论述实现了一个基于以太坊区块链的众筹平台,实现了众筹标的的发布和集资。在系统架构上,项目的设计采用了MVC架构,实现了众筹系统的分层开发,提高了代码的复用性。下一步我们将扩展系统的功能,例如,加入众筹成功后对各投资者的分成功能。

因篇幅问题不能全部显示,请点此查看更多更全内容