当前位置:首页 期刊杂志

基于Solidity的低代码以太坊微博系统的设计与实现

时间:2024-05-04

胡娟,汤海林

(广东白云学院大数据与计算机学院,广东 广州 510400)

0 引言

区块链技术本质上是一种基于时间戳的防篡改数据库,可以允许个人、公司、公共机构以及其他实体以同步、透明和去中心化的方式验证交易和更新数据库数据。这种创建和管理数据的新机制由于备具透明、安全以及信任增强的优点,能够跨行业、跨组织地产生影响,将原本孤立的系统变成更开放的系统。以比特币为代表的数字货币提供了区块链技术应用的原型,以以太坊为代表的智能合约平台延伸了区块链技术的功能。

1 基本概念

1.1 低代码开发平台[1]

低代码开发平台提供了可视化的界面和预构建的组件,开发者可以通过拖放和配置来构建应用程序。低代码平台通常提供与以太坊区块链的集成,开发者可以通过配置连接到以太坊网络,部署智能合约,并与以太坊的节点进行通信。开发者能够在低代码平台上轻松地开发和部署区块链以太坊微博系统,而无须深入了解底层的区块链技术和编写复杂的代码。

1.2 以太坊[2]

以太坊是一个基于区块链技术的开源平台,允许用户建立和执行智能合约,创建去中心化的应用程序和数字资产。

1.3 账户和智能合约

以太坊中有两种类型的账户:外部账户和合约账户[3]。EOA[4](Externally Owned Account)是以太坊中的外部账户,由私钥控制,可以发送交易和持有以太币或其他代币(Token)。合约账户是以太坊中的智能合约账户,由智能合约代码控制,可以执行预定的逻辑和操作,存储状态并与其他合约或外部账户进行交互。

智能合约[5]是以太坊上的自动执行合约,包含编程逻辑和数据,可以实现自动化的交互和资产管理。

1.4 Truffle[6]

Truffle 是一个流行的以太坊开发框架,用于构建、测试和部署智能合约。它使开发者能够轻松地开发、测试和部署以太坊智能合约。

1.5 钱包

以太坊钱包是一种用于存储、管理和交换以太坊及其相关代币的数字钱包。它允许用户创建和控制一个或多个以太坊账户,并使用安全的方式进行交易、转账和管理加密资产。常见的以太坊钱包包括MetaMask[7]、MyEtherWallet、Trust Wallet和Ledger等。

2 以太坊微博系统的架构设计与业务流程

2.1 系统架构设计

这个系统的前端使用HTML5、CSS3 和JavaScript来实现用户界面。用户可以通过前端界面浏览微博文章并发表评论。系统还需要一个后端服务器来处理用户提交的数据和交互。这个后端服务器应该包括以太坊节点,以便与以太坊网络进行通信。在以太坊网络上,系统需要部署两个智能合约,分别是微博注册合约和微博账号合约。微博注册合约负责验证用户身份并创建新的微博账户,而微博账号合约则负责管理用户的微博文章和评论。当用户在前端界面上发布一篇新的微博文章或发表评论时,这些数据将会被发送到后端服务器。服务器将对用户进行身份验证,并将文章或评论存储在以太坊网络上的微博账号合约中。当其他用户浏览微博或者查看评论时,系统将从以太坊网络中读取数据,并将其显示在前端界面上。整个系统的核心就是以太坊虚拟机(EVM),它允许人们在以太坊网络上部署智能合约并与其进行交互。同时,这个系统也需要一定的安全措施,以保护用户数据和身份信息不受攻击。图1是该系统的整体架构图。

图1 系统架构图

2.2 系统流程

这是一个运行在以太坊上的去中心化的微博系统,去中心化意味着没有一个中心化机构能够控制用户发送的微博。下面介绍微博系统的注册流程,如图2所示。

图2 微博注册流程图

第一步,需要先在Truffle中编写微博注册智能合约,使用Truffle 工具将其部署到以太坊网络中,获得合约地址。第二步,用户注册微博账号。用户在界面上填写个人信息,包括昵称和以太坊钱包地址,通过界面将这些信息发送给后端。第三步,后端收到用户提交的注册请求后,调用智能合约的注册函数,创建一个微博账号地址。将微博账号地址与用户的以太坊钱包地址进行关联,并将用户昵称等信息存储到数据库中。第四步,返回微博账号地址给用户,后端将生成的微博账号地址返回到前端界面。

3 以太坊微博系统的设计与实现

3.1 智能合约

3.1.1 微博账号合约

1)发表微博:在发微博页面,用户可以输入文字、图片或者视频等内容,发布到微博上。微博账号合约会将微博的内容保存到以太坊上,以便其他用户进行查看。

这是一个Content 结构体。该结构体包含了以下字段:text表示微博中的文本内容。imageHash表示上传到IPFS 网络上的图片的哈希值。videoHash表示上传到IPFS 网络的视频的哈希值。emoji表示微博中使用的表情。timestamp表示微博发布的时间戳。

该函数现在接收四个参数,分别表示微博的文本内容、上传到IPFS 网络的图片和视频的哈希值以及微博中使用的表情。函数使用require 函数来检查微博的文本内容是否符合要求,以确保不会发布过长的微博。

2)发表评论:用户输入评论的内容、表情或图片,微博账号合约会将评论的内容保存到以太坊上,以便其他用户可以看到评论。

这段代码使用require 来确保传入的微博ID 是有效的。第二个require确保传入的评论内容不能为空,即评论的内容长度大于0。在存储所有微博的映射中,找到目标微博并将评论添加到这个微博的评论数组中。添加评论时,使用结构体Comment 来表示评论,这个结构体包括两个属性,分别是评论者地址和评论内容。当函数执行完毕后,这条新评论会被添加到目标微博的评论数组中,以便其他用户能看到这条新的评论。

3)发起打赏:在看微博时,用户可以通过打赏的方式向对方表达赞赏或支持。用户输入打赏的金额,微博账号合约会将打赏的以太币转入到被打赏者的账户中。

当用户想要打赏给某个微博作者时,reward 函数会将打赏的金额从用户的账户上转账到受打赏的微博账户地址上,用于打赏某条微博的作者。这段代码中的address payable weiboAuthor 是一个可支付的地址变量。ownerOfWeibo(weiboId)函数的返回值是一个地址,表示微博作者的地址。payable 关键字用于将该地址转换为可支付的地址,以便使用transfer 函数将用户打赏的金额转移到该地址,也就是转给受打赏的微博作者。

4)提现打赏:将接收到的以太币从智能合约的地址中转移到一个外部的以太坊钱包地址中的过程。

这段代码根据选择的weiboId 获取对应的微博信息,并存储在weibo 变量中。使用require 函数判断该用户在该微博上的打赏金额是否大于0,如果不是则抛出异常,表示没有打赏金额可以提现。如果存在打赏金额,将该用户在该微博上的打赏金额存储到amount 变量中,将其在_donations 映射中的值清零,表示已经提现过了。根据amount 计算手续费(Gas),并将手续费金额存储在fee 变量中。计算扣除手续费之后的净金额netAmount,如果小于等于0,则抛出异常,表示手续费过高,不可以提现。使用payable 关键字将净金额netAmount 转账到该微博用户的地址。使用payable 关键字将手续费fee 转账到微博管理员地址。

3.1.2 微博注册合约

1)注册微博账号:用户向微博注册合约发送一个注册请求,包含了用户名和密码等信息。微博注册合约会根据传入的参数,创建一个新的微博账号合约,并将账号合约的地址返回给用户。

WeiboRegistration 是一个智能合约,用于注册微博账号。User 结构体定义了每个用户的属性。每个用户有一个用户名(username)、密码(password)、微博以太坊地址(weiboAddress)、注册状态(isRegistered)和注册时间(registrationTime)。

mapping(address=>User) public users 是一个映射(mapping),将用户的以太坊地址映射到对应的User结构体,实现了以太坊地址到用户信息的查找功能。

register 函数用于注册微博账号。它接受三个参数:用户名(_username)、密码(_password)和微博以太坊地址(_weiboAddress)。在函数体内,通过require语句对输入进行验证。确保用户名和密码非空,微博以太坊地址有效且不为零地址,并且调用者的地址还未注册过微博账号。如果验证通过,将用户信息存储在users映射中,使用调用者的以太坊地址作为键。用户信息包括用户名、密码、微博以太坊地址、注册状态和注册时间。效果如图3所示。

图3 注册微博账号页面效果图

3.1.3 部署微博注册智能合约

在Truffle中只要部署微博注册合约就可以了,微博账号合约可以通过前端页面进行部署。在部署微博注册合约之前,需要编写迁移脚本,内容如下:

首先,引入需要使用的智能合约WeiboRegistration 和ExternalAPI。

之后,定义了一个异步函数,该函数将用来部署合约。

这些信息由用户在界面上提供。通过deployer.deploy(),将WeiboRegistration 合约部署到区块链上,并使用externalAPI.address 作为参数传递给合约的构造函数。然后,使用WeiboRegistration.deployed()获取已部署的合约实例。

部署成功之后,就可以在低代码平台编写前端应用了。由于前端应用的编程并不复杂,这里不再详述。

4 结束语

基于Solidity 的低代码以太坊微博系统是为了解决传统微博系统中存在的中心化管理[8]、数据安全性和透明性不足等问题而设计的。在设计这样的架构时,需要考虑一些重要的因素。首先是安全性问题,因为区块链技术的去中心化和不可篡改特性[9],智能合约一旦部署就无法更改,因此必须保证智能合约代码的安全性。其次是性能问题,因为以太坊网络的交易速度和吞吐量受限,可能会影响系统的响应速度和并发能力。因此,在设计和实现时需要考虑这些问题,从而保证系统的可靠性和稳定性。

免责声明

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